2021-1-17 19:02:39 [显示全部楼层]
940浏览
查看: 940|回复: 6

[项目] 感知生长——桌面植物景观

[复制链接]
【项目源起】
去年DF社区举办了一场主题为“创客大作战暖冬行动”比赛,当时我从淘宝上购买了种子和种植盆,并利用掌控,制作了一个基于物联网的种植项目。今天,我们将对其进行改造,使其更微型化,智能化,既具备植物水培的功能,又能作为植物景观摆放在桌面上。项目展示如图1。

图1.jpg
【项目展示】
桌面植物景观系统具有三种工作模式:加速模式、景观模式、休息模式,如图2—4所示。

图3三种模式 拷贝.jpg
图4空气流通.jpg
图5感知生长.jpg

【功能简介】
(1)智能水培:通过微环境控制系统采用无土栽培方式,集成模拟了植物生长所需要的阳光、空气、水和养分等自然环境,使种植不受天气和环境的影响,全年生长。该控制系统带有一个蠕动泵,加速模式下工作保持水体含氧量有效防止植物烂根。
(2)分类模式:该控制系统可设定三种模式:加速模式、景观模式、休息模式。
(3)空气流通:该系统带有风扇,加快空气流通,促进植物更好呼吸,为种植提供良好的植物生长环境。。
(4)感知生长:使用HuskyLens视觉识别传感器对植物进行感知,当植物叶片出现增大,则触发拍照记录植物照片到TF卡中。

【硬件材料】
序号
名称
数量
1
1
2
IO 传感器扩展板 V7.1
1
3
DHT11温湿度传感器
1
4
HuskyLens AI 视觉传感器
1
5
模拟角度传感器
1
6
RGBled灯带
1
7
130 直流电机风扇
1
8
蠕动泵
1
9
7.4V锂电池及充电器
1
【制作过程】

1.系统设计
图片6.png
桌面植物景观系统有三种工作模式:加速模式、景观模式、休息模式。加速模式使用红光加速植物进行光和作用,促进植物生长,同时蠕动泵工作,加快营养液循环,防止植物烂根;景观模式使用彩灯达到一种点缀环境氛围的效果,可作为桌面摆件装饰环境;休息模式使用蓝光,促进植物根茎部发育,防止植物疯长、徒长。

2.结构设计
本次作品结构设计涉及两部分,一部分是激光切割松木板和亚格利板,用作系统结构。另一部分是3D打印的自浇花的花盆和摆件,作为水培种植盆。框架结构设计,使用LaserMaker绘制结构图。3D打印的自浇花花盆从网上下载。

(1)框架结构件设计(松木板)

首先以3mm厚的松木板为原料,使用“快速造盒工具”,生成一个盒体。然后删除盒体底部,并对前后左右四面绘制出窗体,用于安装亚格利板,并绘制螺丝孔位。最后在盒体顶部,绘制主控及相关传感器安装孔位。具体设计如下图7所示。
图片7.png

(2)窗体设计(亚格利)
以3mm亚格利板为原料,绘制下图所示的矩形(尺寸见模型文件),并定位螺丝孔,与图7的结构件能吻合安装。此部分需要切割两份。
图片8.png

3.电路连线

装置电路连接如图11所示。两个迷你巡线模块分别接D7,D8口,人体红外传感器接D2口,RGBLED接D10口,继电器接D12口。
图9.jpg

4. 代码编写
主程序如下图所示,模拟角度传感器接A3口读取的数值我们通过映射函数将其映射为0-125之间,对其定义区间休息(0-40),景观(40-80),加速(80以上),与之对应在主程序中,我们定义了加速模式、景观模式、休息模式三个函数以及感知植物生长的感知函数。感知生长函数,我们使用了哈士奇的物体追踪功能,先完成对植物的学习,而当植物生长叶片其宽度和高度超过我们设定的值时,屏幕出现“grow yes”提示,同时拍照记录植物生长过程。
  1. /*!
  2. * MindPlus
  3. * uno
  4. *
  5. */
  6. #include <DFRobot_DHT.h>
  7. #include <DFRobot_NeoPixel.h>
  8. #include <DFRobot_HuskyLens.h>
  9. #include <DFRobot_Libraries.h>
  10. // 动态变量
  11. volatile float mind_n_M;
  12. // 函数声明
  13. void DF_JiaSuMoShi();
  14. void DF_XiuXiMoShi();
  15. void DF_JingGuanMoShi();
  16. void DF_NO_PUMP();
  17. void DF_pump();
  18. void DF_GanZhiShengChang();
  19. // 创建对象
  20. DFRobot_HuskyLens huskylens;
  21. DFRobot_NeoPixel  neoPixel_4;
  22. DFRobot_Servo360  servo360_2;
  23. DFRobot_DHT       dht11_5;
  24. // 主程序开始
  25. void setup() {
  26.         servo360_2.attach(2);
  27.         dht11_5.begin(5, DHT11);
  28.         huskylens.beginI2CUntilSuccess();
  29.         huskylens.writeAlgorithm(ALGORITHM_OBJECT_TRACKING);
  30.         neoPixel_4.begin(4, 40);
  31.         neoPixel_4.setBrightness(255);
  32.         mind_n_M = 0;
  33. }
  34. void loop() {
  35.         mind_n_M = (map(analogRead(A3), 0, 1023, 0, 125));
  36.         huskylens.request();
  37.         huskylens.writeOSD(String((String("temp:") + String(dht11_5.getTemperature()))), 200, 35);
  38.         huskylens.writeOSD(String((String("humi:") + String(dht11_5.getHumidity()))), 200, 65);
  39.         DF_JiaSuMoShi();
  40.         DF_JingGuanMoShi();
  41.         DF_XiuXiMoShi();
  42.         DF_GanZhiShengChang();
  43. }
  44. // 自定义函数
  45. void DF_JiaSuMoShi() {
  46.         if ((80<mind_n_M)) {
  47.                 huskylens.writeOSD(String((String("mode:") + String("acce"))), 200, 95);
  48.                 neoPixel_4.setRangeColor(0, 40, 0xFF0000);
  49.                 DF_pump();
  50.                 digitalWrite(9, HIGH);
  51.         }
  52. }
  53. void DF_XiuXiMoShi() {
  54.         if ((mind_n_M<40)) {
  55.                 huskylens.writeOSD(String((String("mode:") + String("rest"))), 200, 95);
  56.                 DF_NO_PUMP();
  57.                 digitalWrite(9, LOW);
  58.                 neoPixel_4.setRangeColor(0, 40, 0x0000FF);
  59.         }
  60. }
  61. void DF_JingGuanMoShi() {
  62.         if (((mind_n_M<80) && (40<mind_n_M))) {
  63.                 huskylens.writeOSD(String((String("mode:") + String("land"))), 200, 95);
  64.                 DF_NO_PUMP();
  65.                 digitalWrite(9, LOW);
  66.                 neoPixel_4.showRainbow(0, 40, 1, 360);
  67.                 delay(200);
  68.                 neoPixel_4.rotate(1);
  69.         }
  70. }
  71. void DF_NO_PUMP() {
  72.         servo360_2.speed(0);
  73. }
  74. void DF_pump() {
  75.         servo360_2.speed(100);
  76. }
  77. void DF_GanZhiShengChang() {
  78.         if (huskylens.isLearned(1)) {
  79.                 if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
  80.                         if (((120<huskylens.readBlockParameter(1).height) || (80<huskylens.readBlockParameter(1).width))) {
  81.                                 huskylens.writeOSD(String((String("grow") + String("yes"))), 200, 95);
  82.                                 huskylens.takePhotoToSDCard();
  83.                                 delay(500);
  84.                         }
  85.                 }
  86.         }
  87. }
复制代码

5.设备组装
第一步:激光切割框架和窗体。
图16.jpg
第二步:拿出顶板,在主控、二哈、传感器位置上固定铜柱。
图17.jpg
第三步:在顶板的背面粘贴灯带,如图18所示。
图18.jpg

第四步:拿出温湿度传感器DH11安装在对应的铜柱上,如图19所示。
图19.jpg

第五步:在顶板上安装Arduino Uno、二哈及模拟角度传感器,如图20所示,注意安装主控部分时,先将主控板与对应的支撑铜柱对齐,用螺母固定后,再叠加拓展板。
图20.jpg

第六步:拿出窗体与框架结构,按照对应的孔位用螺丝固定,如下图21所示。
图21.jpg

第七步:拿出蠕动泵,按如图22方式安装,注意将硅胶管,放置在内部。
图22.jpg

第八步:将前后左右顶五片结构件进行组装,如图23所示。
图23.jpg

第九步:本次使用的风扇模块本身无法合理的固定在顶板上。因此,我们使用激光切割加工出图24所示的三片木板,叠加后与风扇模块固定。再将此部分与顶板内部用502胶水粘贴,从而完成风扇模块的安装。
图24.jpg

6.系统测试
(1)系统加电对其进行测试,通过旋转模拟角度传感器,分别测试对应的加速模式mode:acce(如图25)、景观模式mode:land(如图26)、休息模式mode:rest(如图27)。
图25加速模式.jpg 拷贝.jpg

图26景观模式.jpg 拷贝.jpg

图27休息模式.jpg 拷贝.jpg

(2)感知生长:当植物叶片长大其宽度或高度超过我们设定的值时,会触发哈士奇拍照,并在哈士奇屏幕上出现提示信息。如图28所示。
1610845364841.jpg

图29拍照.png

7.改进与提升
本次制作过程中,风扇的安装设计的比较粗糙,后续有待改进。另外作品内部的走线,虽然在安装时,尽量在铜柱上绕线,避免缠绕,但是在实施过程中还是出现了缠绕的情况。对于功能上,后续可以增加物联网的功能。

shzrzxlee  中级技匠

发表于 2021-1-17 19:26:20

保存在二哈的TF卡里吗?谢谢
回复

使用道具 举报

rzyzzxw  版主

发表于 2021-1-18 08:39:14

回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2021-1-18 09:21:18

回复

使用道具 举报

taifyx7986  学徒

发表于 2021-1-20 10:06:09

提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

小含糊online  中级技师

发表于 2021-5-15 23:28:47

二哈如何保持始终学习的状态呢?
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2021-5-16 05:36:00

小含糊online 发表于 2021-5-15 23:28
二哈如何保持始终学习的状态呢?

你可以强制它进入学习状态
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail