查看: 1347|回复: 2

blinker物联网教程——10、日照时间分析

[复制链接]

该用户从未签到

发表于 2021-3-11 21:09 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2021-6-7 11:05 编辑

简介

物联网的一个主要应用方向是在农业,在农业应用种,有些农业瓜果蔬菜等植物对环境要求高,且有季节性。所以我们也经常会看到大棚种植。而在大棚种植种。检测植物生长环境的光照、温湿度等参数是必不可少的。
光照对于农作物的生长来说是非常重要的。如果没有阳光,植物将无法通过光合作用生成营养物质,会严重影响到植物的生长发育。光照是植物制造有机养料的关键条件之一,通过其光照情况,科研人员就能够大概了解植物生长情况的好坏。
本节,我们将一个模拟光敏传感器接入网络,实时记录光照时长,并生成对应时间轴的光照曲线,用于分析是否适合植物生长,或者是否采取措施给植物进行补光。
Wifiduino接入云服务器后,就可以接收来自传感器的数据,并且可以对其进行分析、显示和存储。使用一个光敏传感器用来检测环境的光照强度。然后将该时间上传至云端存储起来,方便进行数据分析。当一天的数据记录完毕上传云端后,统计时间的变量将会清零。

光敏传感器
光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器。当入射光强,电阻减小,入射光弱,电阻增大。可用来对周围环境光的强度进行检测,结合wifiduino控制器可实现光的测量,可通过3P传感器连接线与wifiduino专用传感器扩展板结合使用,可以制作光感相关的互动作品.
光敏传感器是一个模拟输入传感器,所以我们要采集其模拟数据,需要通过wifiduino的模拟输入接口。而wifiduino模拟输入接口只有A0一个(主芯片esp8266所决定),所以,我们暂时只能将其接在A0接口上。
(如果我们需要接入多个模拟输入传感器,该怎么办? 可以将主板更换成模拟输入接口更多的wifiduino32主板。)

硬件

wifiduino主板*1
wifiduino拓展板*1
光敏传感器*1

软件

blinker app

代码

示例代码中,我们通过模拟光敏传感器采集光照强度的参考值,显示在blinker app中,实现远程采集数据。程序中,我们只需添加一个数据控件,用来收集光线强度的数据。
  1. #define BLINKER_WIFI
  2. #include <Blinker.h>

  3. volatile int light;

  4. char auth[] = "dae8exxxx038";
  5. char ssid[] = "moxxxun";
  6. char pswd[] = "cxxxxxxx51";
  7. BlinkerNumber Number1("num-abc");
  8. void dataStorage(){
  9.    Blinker.dataStorage("num-abc", light);
  10. }

  11. void setup(){
  12.   Blinker.begin(auth,ssid,pswd);
  13.   light = 0;
  14.   Blinker.attachDataStorage(dataStorage);
  15. }

  16. void loop(){
  17.   light = analogRead(A0);
  18.   delay(100);
  19.   Number1.print(light);
  20.   Blinker.run();

  21. }
复制代码
blinker app界面定制

在blinker中添加一个数据控件,修改对应的键名和显示文本,设置最大值是1023,因为读取模拟传感器的数值范围是0-1023.
然后添加“图表”控件,修改和数据控件一样的键名和显示文本。
rzsj.png

硬件连接

将传感器的S信号引脚连接在A0端口中,+ 和-分别接在VCC和GND上。

rzsj3.png


观察现象

打开blinker,等待设备显示在线,然后观察反馈的光照强度与光照曲线

rzsj2.png
进阶

采集并打印出数据后,我们可以将数据进行分析,通过程序来分析具体日照的时间有多长

代码

代码实现的主要功能是,采集光线强度数据,当光线强度高于一定值时,就认为是天亮了,此时光照时间开始计时;而当光线强度小于一定值时,认为是天黑了,此时光照时间停止计时。然后将该时间上传至云端存储起来,方便进行数据分析。当一天的数据记录完毕上传云端后,统计时间的变量将会清零。
  1. #define BLINKER_WIFI
  2. #include <Blinker.h>
  3. volatile int LEDP;
  4. volatile unsigned long runTime;
  5. volatile int LEDPtime;
  6. volatile int nightTime;

  7. #define Thre 30
  8. #define night 5
  9. #define CheckNightTime 3600000000
  10. #define CheckDayTime 3600000000
  11. void heartbeat(){
  12.   Number1.print("time",LEDPtime,"s");
  13. }


  14. char auth[] = "Your Device Secret Key";
  15. char ssid[] = "Your WiFi network SSID or name";
  16. char pswd[] = "Your WiFi network WPA password or WEP key";

  17. BlinkerNumber Button1("btn-abc");

  18. void setup(){
  19.   Serial.begin(115200);
  20.   Blinker.attachHeartbeat(heartbeat);
  21.   Blinker.begin(auth,ssid,pswd);

  22.   LEDP = 0;
  23.   runTime = 0;
  24.   LEDPtime = 0;
  25.   nightTime = 0;
  26. }

  27. void loop(){
  28.   runTime = millis();
  29.   LEDP = analogRead(A0);
  30.   Serial.println(LEDP);
  31.   Serial.println(">>>>>>>>");
  32.   if (LEDP >= Thre) {
  33.     Serial.println("run timing");
  34.     LEDPtime = LEDPtime + (millis() - runTime);
  35.     if (LEDPtime >= CheckDayTime) {
  36.       nightTime = 0;

  37.     }

  38.   } else if (LEDP < Thre) {
  39.     Serial.println("sleep");
  40.     if (LEDP <= Thre) {
  41.       nightTime = nightTime + (millis() - nightTime);
  42.       if (nightTime >= CheckNightTime) {
  43.         LEDPtime = 0;

  44.       }

  45.     }
复制代码
blinker软件界面定制

编辑app界面,添加一个数据控件,修改数据的参数特征,数据键名为程序中定义的一致。再添加一个图表控件,修改和数据控件一样的键名和显示文本。
rzsj1.png rzsj5.png


观察现象


根据一定时间的检测,我们可以观察手机app中日照时间及其曲线
rzsj3.png



blinker物联网教程目录

该用户从未签到

发表于 2021-5-20 10:59 | 显示全部楼层
在大神的基础上,可以把光敏电阻和湿度传感器分别接到A0与D1、D2上面,使用查理复用(Charlieplex)方法把D1、D2分时置于输入状态(高阻抗)和数码1、0来分时检测水干和光照,以前用查理复用方法用8266读取过XY的模拟操纵杆,效果还行,缺点是时间上不能太快,比较适合于植物的全托物联网控制电路。

该用户从未签到

发表于 2021-5-19 17:11 | 显示全部楼层
datastorage存的数据,超过一周会被清掉是吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

atmega32u4芯片的主控最多有多少引脚?
atmega32u4芯片的主控最多
想自己diy一个键盘,涉及到的引脚比较多,淘宝找了下没找到相应的主控 需要atmega32u4
Arduino与S7-200 PLC 进行Modbus通信测试
Arduino与S7-200 PLC 进行
Modbus是一种串行通信协议,Modbus已经成为工业领域通信协议的业界标准,并且现在是工
Arduino Nano V3.0无法烧录问题
Arduino Nano V3.0无法烧
在t宝上买的那种改了“USB转TLL”芯片的nano板,上手后无法烧录程序,L灯闪烁(我的UN
请教一个有关NodeMCU和舵机的问题
请教一个有关NodeMCU和舵
[*]问题现象 我尝试使用网页控制NodeMCU引脚的方式来控制舵机。但是在程序烧进去
arduino pid麦克纳姆轮小车程序详解
arduino pid麦克纳姆轮小
之前发过几个帖子,大家可以参考,但经过多次尝试,整套系统升级了,优化了很多地方目录:
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表