2016年廣東省電子設計大賽健康電子專題——健康養殖遠程監控系統(環境監控系統V1.0版本)

          2016年7月至8月下旬,筆者正逢大一暑假,和兩個大二的師兄一起參加了這個比賽。比賽作品中,筆者主要負責整個系統的硬件部分,軟件部分負責WIFI部分和部分傳感器處理,約佔程序的50%。而我的隊友之一黃師兄負責了SIM800模塊的GSM和GPRS部分,還有傳感器處理的算法部分。另外一個隊友張師兄主要負責答辯和後勤支持。可以說,我們三個缺一不可,各自付出了努力纔有了成績。

        現在筆者讀大三,比較有時間便分享一下這段經歷,下面主要講整個系統的設計和之後完善方向。


        首先是解題思路:我們查看了官網上有關這次比賽健康電子專題的資料,資料上提出希望參賽者結合互聯網+、物聯網技術,設計一個關於健康電子的作品。於是,我們便有了這個想法,通過無線方式上傳數據至雲端,監測、上傳一些危害人體健康的數據,並可以實時看到數據且通過控制減少危害,這完全切合題意。


        系統實現的功能:集雲端監測、自動化控制(閉環)、遠程控制(開環)於一體,運用WIFI和GPRS技術,將水質指標數據上傳至雲端(OneNet物聯網雲服務平臺),當水質指標值超過設定值時,系統向用戶發送手機信息和控制水質處理設備,改善水質的質量。

詳細介紹:該系統通過傳感器檢測水體中的水溫、水濁度、PH值以及外界的光照強度。經過單片機(arduino)的處理,系統將傳感器的數值轉換爲對應的水體指標數值,經過按鍵選擇WIFI和GPRS傳輸模式,將數據上傳至ONENET平臺。用戶可通過電腦網頁或手機APP查看數據和控制水質處理設備。當水質指標超過設定值時,系統向用戶發送手機信息和控制水質處理設備,改善水質的養殖質量。


採用的方案:

該系統採用WIFI和GPRS相互結合進行傳感器數據的傳輸,通過ONENET平臺進行數據的上傳。


功能框圖:



硬件:

單片機:arduino mega2560  

傳感器: DS18b20 、PH計、渾濁度傳感器、光照傳感器

模塊:ESP8266、 SIM800、繼電器



主程序框圖:



部分程序框圖:






部分源代碼:

String ssid = "PUSHPULL";//需要連接的自己路由器的無線名稱
String pass = "888******"; //無線密碼

#define OneNetAPIKEY "pmWLtnkDBSreKfvg7GsClUXdXa4A''  //ONENET的APIkey

#define OneNetDeviceID 79146   //設備ID號
#define OneNetSensorID0 "TEMP"  //數據流名稱
#define OneNetSensorID1 "HUMI"

WIFI wifi;

void setup() {
wifi.begin(ssid,pass);//設置wifi連接 
}

void loop() {
//讀取溫溼度傳感器值,經過這個函數後,myDHT11.TEM_Buffer_Int和myDHT11.HUMI_Buffer_Int被分別填充上了溫度和溼度值
myDHT11.DHT11_Read();
//將數據上傳到ONENET對應的設備和傳感器
wifi.postDataToOneNet(OneNetAPIKEY,OneNetDeviceID,OneNetSensorID0,myDHT11.TEM_Buffer_Int);
delay(1000);
wifi.postDataToOneNet(OneNetAPIKEY,OneNetDeviceID,OneNetSensorID1,myDHT11.HUMI_Buffer_Int);
delay(1000);
}  //該代碼例程是一位arduino開發者寫的,底層函數打包在一個arduino的CPP庫中,WIFI傳輸數據全是基於這個代碼。


//以下是GPRS上傳數據的函數,我們團隊編寫的。

void  postGSMdatatoOneNet(String APIKEY1,unsigned long device_id,String sensor_id,float thisData){
Serial.println("AT+CIPSTART=\"TCP\",\"api.heclouds.com\",80");  //修改爲要發送給的IP和端口
        delay(3000);
        Serial.println("AT+CIPSEND");    //設置發送模式
        delay(100);
        time = millis();      //返回當前CPU時間
        String cmd;  

//以下按照ONENET通信協議,發送字符串
        cmd = "POST http://api.heclouds.com/devices/";  
cmd += String(device_id);
cmd += "/datapoints HTTP/1.1\r\n";
cmd += "Host: ";
cmd += "api.heclouds.com"; 
cmd += "\r\n";
cmd += "api-key: ";
cmd +=  APIKEY1;
cmd += "\r\n";
cmd += "Connection: close";
cmd += "\r\n";
cmd += "Content-Length: ";

String thisData1=String(thisData);
int length = 53 + sensor_id.length() + thisData1.length();  //算出長度
cmd += String(length);
cmd += "\r\n\r\n";
cmd += "{\"datastreams\":[{\"id\":\"";
cmd += sensor_id;
cmd += "\",\"datapoints\":[{\"value\":";
cmd += String(thisData);
cmd += "}]}]}";
cmd += "\r\n\r\n\r\n\r\n";
         Serial.print(cmd);
         delay(200);
         Serial.write(26);
         delay(500);
         Serial.println("AT+CIPCLOSE");   //傳輸關閉
         delay(200);
}


傳感器方面不是我們想體現的主要功能,在有庫函數的情況下,arduino中傳感器程序比較簡單,我們只是將數據做了一些濾波和轉換,在這裏就不貼出來了。


作品圖片:

網頁版



手機APP



比賽作品





附:ONENET網址:https://open.iot.10086.cn/?utm_source=baidu&utm_campaign=%E5%93%81%E7%89%8C&utm_adgroup=onenet-%E6%A0%B8%E5%BF%83&utm_term=onenet&utm_medium=search_cpc

(可以註冊賬號和下載app,用戶免費使用其雲端)



該版本的不足:

由於當時水平不夠,所以用了編程相對比較簡單的arduino,arduino開發週期雖然短,但是侷限性也比較大,如果要做深入的應用開發,還是要用其他單片機,比如STM32等。


完善方向:


該系統可以將單片機換成STM32,芯片爲F103RCT6,比完賽後筆者在ONENET官方羣上申請了這樣的一塊板,可以做後期的應用開發。除了使用WIFI,GPRS這些無線方式,近年來比較火的NB-iot也是一個很好的方向。此外,應用場景很廣泛,各種監測都能使用,如果個人使用,ONENET已經足夠了;企業使用的話,可以開發企業專屬雲端和配套的網站、APP。


下期預告:

下回筆者會將這次比賽相關資料整理下,上傳到百度雲盤,方便大家學習。同時,筆者在寒假開發ONENET申請的麒麟板,嘗試做出V2.0版本,有新的進展再更新博客。如果大家有更多更好的方案解決,或者有好的模塊介紹,可以聯繫本人QQ23154762。筆者大一下學期開始接觸電子,大一大二主要玩無線傳輸比較多,目前大三方向爲嵌入式自動化控制,主要研究四旋翼和平衡車。筆者小白,第一次發博客,如有哪裏錯誤,希望大家海涵並指出。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章