奔跑哥大俠的作品就是牛:
溫度是我們生活中接觸的較多的物理量之一,例如氣溫、人體溫度,但很多時(shí)候卻不能實(shí)地測(cè)量,例如在室內(nèi)想實(shí)時(shí)知道室外的氣溫,這時(shí)候就需要使用無(wú)線傳輸來(lái)實(shí)現(xiàn)了。Arduino控制器外圍實(shí)現(xiàn)ZigBee無(wú)線傳輸功能的主要有XBee模塊和Zigduino控制器,XBee模塊是串口操作,使用Arduino控制器與XBee模塊即可實(shí)現(xiàn)ZigBee無(wú)線傳輸,但是XBee模塊價(jià)格較高,而且需要轉(zhuǎn)接板或連接線,不利于集成化;Zigduino是帶有ZigBee無(wú)線傳輸功能的Arduino兼容控制器,具有集成化程度高、體積小、性價(jià)比高的優(yōu)點(diǎn)。從性價(jià)比的角度出發(fā),本文最終采用Zigduino控制器來(lái)實(shí)現(xiàn)溫度數(shù)據(jù)的ZigBee無(wú)線傳輸。
本文利用Zigduino內(nèi)部集成的無(wú)線模塊實(shí)現(xiàn)數(shù)據(jù)的無(wú)線傳輸,溫度測(cè)量部分采用單總線數(shù)字式溫度傳感器DS18B20實(shí)現(xiàn)溫度測(cè)量,時(shí)鐘和顯示部分使用DS3231實(shí)時(shí)時(shí)鐘模塊和LCD1602液晶顯示模塊實(shí)現(xiàn)時(shí)鐘和溫度的顯示功能。
一、Zigduino IDE的設(shè)置
Zigduino是一款兼容Arduino的開源硬件控制器,不僅與Arduino控制器保持兼容,而且內(nèi)部集成了802.15.4協(xié)議無(wú)線模塊,支持任何基于802.15.4協(xié)議的無(wú)線模塊,包括ZigBee,MAC/6LoWPAN和 RF4CE。雖然Zigduino的核心單片機(jī)Atmega128RFA1的工作電壓為3.3V,但是Zigduino控制器的引腳兼容5V,并且可以與Arduino擴(kuò)展板保持兼容。除此之外,Zigduino控制器還內(nèi)置了鋰電管理模塊,并且具有128KB FLASH和16KB SRAM,可以滿足較復(fù)雜的應(yīng)用需求。Zigduino實(shí)物圖如圖1所示。
Zigduino的開發(fā)環(huán)境是基于Aduino的開發(fā)環(huán)境開發(fā)而來(lái),可以使用Ziduino完整版或Arduino IDE擴(kuò)展包來(lái)實(shí)現(xiàn)Zigduino的開發(fā)。IDE完整版下載地址:http://pan.baidu.com/share/link?shareid=387242&uk=3643299,IDE擴(kuò)展包下載地址:http://pan.baidu.com/share/link?shareid=419678&uk=3643299
完整版的使用方法:直接解壓縮后運(yùn)行arduino.exe,在板卡里選擇OCROBOT HoneyBee即可正常使用。
擴(kuò)展包的使用方法:將擴(kuò)展包內(nèi)2個(gè)文件夾復(fù)制到原IDE的根目錄下,替換掉提示重復(fù)的文件后,再次運(yùn)行arduino.exe即可正常使用。
二、溫度測(cè)量部分
溫度測(cè)量部分采用Zigduino控制器和溫度傳感器DS18B20來(lái)實(shí)現(xiàn),將DS18B20的VDD和GND分別接至Zigduino 控制器的5V和GND,數(shù)據(jù)引腳DQ接至Zigduino控制器的數(shù)字端口D2,并且在數(shù)據(jù)引腳DQ與+5V之間連接阻值為4.7kΩ的上拉電阻,以保證溫度傳感器DS18B20能夠正常工作,Zigduino控制器與DS18B20的連接示意圖如圖2所示。
溫度測(cè)量部分采用Zigduino控制器與DS18B20來(lái)實(shí)現(xiàn)溫度的測(cè)量,即可使用第三方函數(shù)庫(kù)DallasTemperature來(lái)實(shí)現(xiàn),只是將帶有兩位小數(shù)的溫度數(shù)據(jù)先放大100倍,以去除小數(shù)點(diǎn),再提取出溫度數(shù)據(jù)的整數(shù)部分和小數(shù)部分,具體代碼如下所示。
#include //加載無(wú)線庫(kù)
#include //加載單總線總線庫(kù)
#include //加載單總線溫度傳感器庫(kù)
#define ONE_WIRE_BUS 2 //定義單總線所連接的引腳
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char i,j; //定義變量,用于存放溫度數(shù)據(jù)的整數(shù)和小數(shù)部分
int a; //定義變量,用于存放溫度數(shù)據(jù)
void setup()
{
}
void loop(){
}
三、時(shí)鐘和顯示部分
時(shí)鐘和顯示部分采用Zigduino控制器和DS3231實(shí)時(shí)時(shí)鐘模塊、LCD1602液晶顯示屏模塊來(lái)實(shí)現(xiàn),將DS3231的5V和GND分別接至Zigduino 控制器的5V和GND,信號(hào)引腳SCL、SDA分別接至Zigduino控制器的端口SCL、SDA;將LCD1602液晶顯示屏模塊的VCC、GND、R/W分別接至Zigduino 控制器的5V、GND和GND,對(duì)比度調(diào)節(jié)引腳VEE通過(guò)10kΩ的電位器來(lái)調(diào)節(jié)分壓值,從而實(shí)現(xiàn)對(duì)比度的調(diào)節(jié),信號(hào)控制引腳RS、E分別直接至Zigduino 控制器數(shù)字端口D7和D6,數(shù)據(jù)輸入引腳D4、D5、D6、D7分別接至Zigduino 控制器數(shù)字端口D5、D4、D3、D2。具體的連接示意圖如圖3所示。
溫度測(cè)量部分采用Zigduino控制器與DS18B20來(lái)實(shí)現(xiàn)溫度的測(cè)量,即可使用第三方函數(shù)庫(kù)DallasTemperature來(lái)實(shí)現(xiàn),只是將帶有兩位小數(shù)的溫度數(shù)據(jù)先放大100倍,以去除小數(shù)點(diǎn),再提取出溫度數(shù)據(jù)的整數(shù)部分和小數(shù)部分,具體代碼如下所示。
#include //加載液晶顯示庫(kù)
#include //加載I2C總線庫(kù)
#include //加載無(wú)線庫(kù)
#include "DS3231.h" //加載DS3231時(shí)鐘庫(kù)
DS3231 RTC; //創(chuàng)建時(shí)鐘類
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //依次為液晶RS、E、D4、D5、D6、D7所連接的引腳
char i,j;
void setup()
{
}
void loop()
{
}
四、時(shí)鐘校準(zhǔn)部分
或許當(dāng)你完成以上的工作之后,卻發(fā)現(xiàn)時(shí)間不正確,這是因?yàn)闀r(shí)鐘芯片或模塊在出廠之后沒(méi)有能夠保證一直供電,或者其他原因的影響,導(dǎo)致時(shí)鐘模塊的時(shí)間與當(dāng)前時(shí)間有所差值,這時(shí)候就需要對(duì)時(shí)鐘模塊進(jìn)行校準(zhǔn)。在時(shí)鐘校準(zhǔn)代碼中將時(shí)間改為當(dāng)前時(shí)間,最好略微超前30秒左右,因?yàn)榫幾g和下載需要浪費(fèi)一會(huì)兒時(shí)間,然后將校準(zhǔn)代碼下載至連接有DS3231實(shí)時(shí)時(shí)鐘模塊的Zigduino或Arduino 控制器,時(shí)鐘校準(zhǔn)代碼如下所示。
#include
#include "DS3231.h"
DS3231 RTC; //Create the DS3231 object
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
//year, month, date, hour, min, sec and week-day(starts from 0 and goes to 6)
//writing any non-existent time-data may interfere with normal operation of the RTC.
//Take care of week-day also.
DateTime dt(2011, 11, 10, 15, 18, 0, 5); //需要校準(zhǔn)的時(shí)間,最好
void setup ()
{
}
void loop ()
{
}
五、實(shí)驗(yàn)演示
實(shí)物演示圖如圖4所示,上方為時(shí)鐘和顯示部分,下方為溫度測(cè)量部分。為了更好的證明兩者是通過(guò)無(wú)線傳輸數(shù)據(jù),溫度測(cè)量部分采用外接電源端口供電,時(shí)鐘和顯示部分采用USB端口供電。
圖4 實(shí)物演示圖