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。笔者大一下学期开始接触电子,大一大二主要玩无线传输比较多,目前大三方向为嵌入式自动化控制,主要研究四旋翼和平衡车。笔者小白,第一次发博客,如有哪里错误,希望大家海涵并指出。



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值