查看: 1002|回复: 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存的数据,超过一周会被清掉是吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

esp32s2 在Arduino IDE调试USB CDC
esp32s2 在Arduino IDE调
各位大佬好,最近尝试弄清如何使用esp32s2的usb功能。然后在Github上找的代码,放到自
一直想做个飞行器,但是出了电小问题
一直想做个飞行器,但是出
这是主函数的源码 extern uint8_t PWM_PIN[8]; void initOutput();//初始化函数 void
Arduino mega2560 usb串口01被modbus master库占用,无法下载程序
Arduino mega2560 usb串口
Arduino mega2560 用来测试modbus master通信,因未发现串口可选择,直接下载了串口(
DIY炫彩灯带,竟如此简单,更有硬件开发工具免费领!
DIY炫彩灯带,竟如此简单
什么是涂鸦Arduino SDK? Arduino 是全球最流行的开源硬件平台,涂鸦官方推出的 Ardui
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表