久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> Arduino >> 瀏覽文章

基于ZigBee與Arduino的無線溫度測量裝置

作者:我不是奔跑哥   來源:我不是奔跑哥的空間   點擊數:  更新時間:2014年06月08日   【字體:
奔跑哥大俠的作品就是牛:
溫度是我們生活中接觸的較多的物理量之一,例如氣溫、人體溫度,但很多時候卻不能實地測量,例如在室內想實時知道室外的氣溫,這時候就需要使用無線傳輸來實現了。Arduino控制器外圍實現ZigBee無線傳輸功能的主要有XBee模塊和Zigduino控制器,XBee模塊是串口操作,使用Arduino控制器與XBee模塊即可實現ZigBee無線傳輸,但是XBee模塊價格較高,而且需要轉接板或連接線,不利于集成化;Zigduino是帶有ZigBee無線傳輸功能的Arduino兼容控制器,具有集成化程度高、體積小、性價比高的優點。從性價比的角度出發,本文最終采用Zigduino控制器來實現溫度數據的ZigBee無線傳輸。
本文利用Zigduino內部集成的無線模塊實現數據的無線傳輸,溫度測量部分采用單總線數字式溫度傳感器DS18B20實現溫度測量,時鐘和顯示部分使用DS3231實時時鐘模塊和LCD1602液晶顯示模塊實現時鐘和溫度的顯示功能。
一、Zigduino IDE的設置
Zigduino是一款兼容Arduino的開源硬件控制器,不僅與Arduino控制器保持兼容,而且內部集成了802.15.4協議無線模塊,支持任何基于802.15.4協議的無線模塊,包括ZigBee,MAC/6LoWPAN和 RF4CE。雖然Zigduino的核心單片機Atmega128RFA1的工作電壓為3.3V,但是Zigduino控制器的引腳兼容5V,并且可以與Arduino擴展板保持兼容。除此之外,Zigduino控制器還內置了鋰電管理模塊,并且具有128KB FLASH和16KB SRAM,可以滿足較復雜的應用需求。Zigduino實物圖如圖1所示。
 


1 Zigduino實物圖
Zigduino的開發環境是基于Aduino的開發環境開發而來,可以使用Ziduino完整版或Arduino IDE擴展包來實現Zigduino的開發。IDE完整版下載地址:http://pan.baidu.com/share/link?shareid=387242&uk=3643299IDE擴展包下載地址:http://pan.baidu.com/share/link?shareid=419678&uk=3643299
完整版的使用方法:直接解壓縮后運行arduino.exe,在板卡里選擇OCROBOT HoneyBee即可正常使用。
擴展包的使用方法:將擴展包內2個文件夾復制到原IDE的根目錄下,替換掉提示重復的文件后,再次運行arduino.exe即可正常使用。
二、溫度測量部分
溫度測量部分采用Zigduino控制器和溫度傳感器DS18B20來實現,將DS18B20的VDD和GND分別接至Zigduino 控制器的5V和GND,數據引腳DQ接至Zigduino控制器的數字端口D2,并且在數據引腳DQ與+5V之間連接阻值為4.7kΩ的上拉電阻,以保證溫度傳感器DS18B20能夠正常工作,Zigduino控制器與DS18B20的連接示意圖如圖2所示。
 

2 溫度測量部分硬件連接圖
溫度測量部分采用Zigduino控制器與DS18B20來實現溫度的測量,即可使用第三方函數庫DallasTemperature來實現,只是將帶有兩位小數的溫度數據先放大100倍,以去除小數點,再提取出溫度數據的整數部分和小數部分,具體代碼如下所示。
#include        //加載無線庫
#include            //加載單總線總線庫
#include    //加載單總線溫度傳感器庫
#define ONE_WIRE_BUS 2       //定義單總線所連接的引腳
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char i,j;       //定義變量,用于存放溫度數據的整數和小數部分
int a;         //定義變量,用于存放溫度數據
void setup()
{
  ZigduinoRadio.begin(11);//設置通道為11,可設置為11-26
  sensors.begin();   //初始化傳感器
}
void loop(){
  sensors.requestTemperatures(); // 從DS18B20傳感器獲取溫度數據
  a=sensors.getTempCByIndex(0)*100; //將溫度數據放大100倍,以去除小數點
  i=a/100;    //取出溫度數據的整數部分
  j=a0;   //取出溫度數據的小數部分
  ZigduinoRadio.beginTransmission();//無線開始通信標志
  ZigduinoRadio.write(i);//無線發送溫度數據的整數部分
  ZigduinoRadio.write(j);//無線發送溫度數據的小數部分
  ZigduinoRadio.endTransmission();//無線結束通信標志
  delay(1000);   //更新速率為1次/秒
}

三、時鐘和顯示部分
時鐘和顯示部分采用Zigduino控制器和DS3231實時時鐘模塊、LCD1602液晶顯示屏模塊來實現,將DS3231的5V和GND分別接至Zigduino 控制器的5V和GND,信號引腳SCL、SDA分別接至Zigduino控制器的端口SCL、SDA;將LCD1602液晶顯示屏模塊的VCC、GND、R/W分別接至Zigduino 控制器的5V、GND和GND,對比度調節引腳VEE通過10kΩ的電位器來調節分壓值,從而實現對比度的調節,信號控制引腳RS、E分別直接至Zigduino 控制器數字端口D7和D6,數據輸入引腳D4、D5、D6、D7分別接至Zigduino 控制器數字端口D5、D4、D3、D2。具體的連接示意圖如圖3所示。
 

3 時鐘和顯示部分硬件連接圖(點擊查看大圖)
溫度測量部分采用Zigduino控制器與DS18B20來實現溫度的測量,即可使用第三方函數庫DallasTemperature來實現,只是將帶有兩位小數的溫度數據先放大100倍,以去除小數點,再提取出溫度數據的整數部分和小數部分,具體代碼如下所示。
 
#include   //加載液晶顯示庫
#include          //加載I2C總線庫
#include //加載無線庫
#include "DS3231.h"       //加載DS3231時鐘庫
 
DS3231 RTC; //創建時鐘類
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);  //依次為液晶RS、E、D4、D5、D6、D7所連接的引腳
char i,j;
 
void setup()
{
                  ZigduinoRadio.begin(11); //設置通道為11,可設置為11-26
                  lcd.begin(16, 2);        //初始化1602液晶顯示屏
         Wire.begin();           //初始化I2C總線
         RTC.begin();           //啟動DS3231實時時鐘模塊
                  lcd.clear();            //清除液晶顯示屏上的內容
void loop()
{
        lcd.setCursor(0, 0);
        DateTime now = RTC.now();  //獲取當前時間
        lcd.print(now.year(), DEC);   //顯示年份
        lcd.print('/');
        lcd.print(now.month(), DEC);  //顯示月份
        lcd.print('/');
        lcd.print(now.date(), DEC);   //顯示日期
        lcd.setCursor(0, 1);
        lcd.print(now.hour(), DEC);   //顯示小時
        lcd.print(':');
        if(now.minute()>9){       //判斷是否分鐘的十位部分是否為零,若十位部分為零,則在十位處顯示0,,例如為5分鐘,則顯示為05。下同。
          lcd.print(now.minute(), DEC);  //顯示分鐘
        }
        else{
          lcd.print("0");
          lcd.print(now.minute(), DEC);
        }
        lcd.print(':');      
        if(now.second()>9){
           lcd.print(now.second(), DEC);   //顯示秒鐘
        }
        else{
          lcd.print("0");
          lcd.print(now.second(), DEC);
        }
        lcd.print(" ");
        if (ZigduinoRadio.available())//判斷無線是否接受到數據
        {
          i=(char)ZigduinoRadio.read();//將接收到的數據賦給變量i,因為我們在發射端發送的數據為char型變量,故要接收char型可以直接在接收變量前面加(char),這樣既可使接收到的數據變為char型。
          j=(char)ZigduinoRadio.read();
        }
         lcd.print(i,DEC);     //顯示溫度數據的整數部分
         lcd.print(".");
         if(j>9){
            lcd.print(j,DEC);   //顯示溫度數據的小數部分
        }
        else{
          lcd.print("0");
          lcd.print(j,DEC);
        }
         lcd.write(0xdf);   //顯示攝氏溫度單位℃
                   lcd.write('C');  
}

四、時鐘校準部分
或許當你完成以上的工作之后,卻發現時間不正確,這是因為時鐘芯片或模塊在出廠之后沒有能夠保證一直供電,或者其他原因的影響,導致時鐘模塊的時間與當前時間有所差值,這時候就需要對時鐘模塊進行校準。在時鐘校準代碼中將時間改為當前時間,最好略微超前30秒左右,因為編譯和下載需要浪費一會兒時間,然后將校準代碼下載至連接有DS3231實時時鐘模塊的Zigduino或Arduino 控制器,時鐘校準代碼如下所示。
#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);   //需要校準的時間,最好
void setup ()
{
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
    RTC.adjust(dt); //Adjust date-time as defined 'dt' above
}
void loop ()
{
    DateTime now = RTC.now(); //獲取時間
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.date(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    Serial.print(weekDay[now.dayOfWeek()]);
    Serial.println();
    delay(1000);
}

五、實驗演示
實物演示圖如圖4所示,上方為時鐘和顯示部分,下方為溫度測量部分。為了更好的證明兩者是通過無線傳輸數據,溫度測量部分采用外接電源端口供電,時鐘和顯示部分采用USB端口供電。
  

 

圖4 實物演示圖
關閉窗口

相關文章

主站蜘蛛池模板: 日日夜夜91| 国产成人亚洲精品 | 色偷偷噜噜噜亚洲男人 | 亚洲欧美在线观看 | 亚洲激情在线观看 | 日韩精品无码一区二区三区 | 日日夜夜视频 | 玖玖国产 | 91久久精品国产91久久性色tv | 国产三级一区二区 | 九九99久久 | 国产成人免费视频网站高清观看视频 | 国产精品美女久久久av超清 | 91伊人 | 一区二区三区在线免费观看 | 欧美激情 一区 | 日本精品视频一区二区 | av在线一区二区 | 亚洲国产午夜 | 成人精品一区二区三区中文字幕 | 一区二区视频在线 | 免费一级欧美在线观看视频 | 日韩在线免费看 | xxxxx免费视频 | 色婷婷久久久亚洲一区二区三区 | 国产精品一区二区在线 | 精品欧美二区 | 国产网站在线播放 | 免费国产一区二区 | 一区二区在线 | 国产精品久久久久久久免费大片 | 99精品久久久 | 亚洲精品视频一区二区三区 | 亚洲激情综合网 | 欧美一级在线观看 | 久久av资源网 | av黄色在线 | 欧美日韩国产综合在线 | 欧美成人精品一区二区男人看 | 久久精品视频9 | 美日韩免费视频 |