DIY一款基于arduino的自动浇花系统

电子说

1.3w人已加入

描述

  最近七夕快到了~又到了给妹子做礼物的时间了~,所以要做一点既有创意,又实用,又好看的东西!那么这个可以给植物自动浇水的……饭盒,是非常理想的选择。

  首先放成品图:

  

左边的是土壤湿度探头,当土壤的干燥程度达到一定值的时候,打开电磁阀进行浇水。

  

左边是DC电源线(DC5.5*2.1mm),5V输入。可以直接使用USB转DC来做电源。右边就是进水口,直接与水龙头相连。

  

电磁阀使用的是饮水机的电磁阀,成本10元左右。电压12V,所以需要另外购买一个升压模块。

  

最上面的是升压模块,然后依次是土壤湿度检测模块,DHT11温湿度模块。

  

LCD1602,可以显示当前已经运行的时间,大气温湿度,以及土壤湿度值。

  

  亮起来是这样子的:

  
俯视图。两根白色的管子一根是进水口,一根是出水,内部是电磁阀控制。

  

程序结构也非常简单:

  

土壤湿度探头检测到土壤干燥了,就打开电磁阀进行浇水,完毕关闭电磁阀,然后继续检测,就这样无限循环下去。每间隔3小时进行一次判断。

  这是设计图(很初步的构想,实际实现和这个图有一些细微的区别):

  DHT11

(原谅我的灵魂画风→_→)

  关于如何浇水,有两种方案:

  方案一:使用电磁阀直接浇自来水。

  

  方案二:使用水泵抽水。

  

  在选择实用水泵还是电池阀的时候纠结了很久。最后决定用电池阀,因为如果使用水泵的话,要专门放个水盆来装水……而且要手动给水盆加水,不是一劳永逸的方案

  (没错我就是这么懒……(╯‵□′)╯︵┻━┻)

  首先来看材料一览表:

  

(你没有猜错,我就是把东西这么随手一扔,然后就拍了张照片……)

  然后做一个供电的模块,一行接正极一行接负极,用来给各种模块供电。(因为我没有买arduino的Shields,只能这样做了)

  

  这万能板的孔大小是M2的,被我强行扩展为M3大小,然后才能拧上M3的铜柱

  

  然后目测一下摆放的位置,做好标记,准备钻孔:

  

  直接电动手钻上吧,其实给这种塑料钻孔,感觉是摩擦产生的热量将塑料融化掉,并不是真正的钻出来的孔……所以有很多毛边。

  

拧上螺丝就可以了。


  

  下面对LCD1602进行固定:

  

找大概的位置,做好标记

  

  打孔,拧螺丝(其实这个孔我还打歪了……不过塑料盒子可以有一定的形变,所以还是强行拧上去了。)

  

  打歪的孔……

  

还是强行拧上了。

  

  继电器这种接口可以直接用杜邦线来插,只要把杜邦线黑色的塑料头拿掉就好了。就不用另外买专门的线。

  

杜邦线就可以解决!省钱!

  

  关于杜邦线的处理,用美工刀把杜邦线头卡位的迷之凸起翘起来:

  就可以很轻松的拿出来了。

  

  之后就可以把露出来的金属部分插进去了。

  

  再把继电器安装上去,无尽的打孔……拧螺丝

  

  其实装得有点歪,不过不要紧。

  

然后突然觉得,这个饭盒太大了,还有每个模块都要我这样打孔,效率太低……

  

然后睡觉去了。睡觉的时候灵感来了,换了一种思路(没错,前面我做的全部都推到重做了!)

  第二天,拿着一大堆模块,研究如何科学地进行组装……

  然后……

  。

  。..。..。十分钟后,这两个叠在了一起

  

  。..。..。..。二十分钟后(忙着摆弄,忘记拍照了→_→)

  duang~~这就是成品!采用了多层的结构,布局合理,结构精巧(魔性BGM操起来:我的朋友我想骄傲的告诉你,哦我真的不错我真的很不错。)

  

因为是用来浇水的,整个电路板是固定不动的(这又不是智能小车!),所以连接的结构强度不是首要考虑的问题。

  

下面多角度展示,从上往下依次是实时时钟模块DS1307,温湿度模块DHT11,土壤湿度传感器,升压模块(用来获得12V的输出)。

  

已经预留了铜柱,可以很方便地固定在万能板上面。

  

这样……我就可以把你捧在手心了~(¯﹃¯)

  

  然后下一步计划固定到万能板上,右边用来放电磁阀,中间的缝隙可以焊两排排针,用于给各种模块供电。

  
有个非常巧合的地方,这个万能板的宽度,正好和继电器模块的长度完全一样~边角的孔完全对的上,强迫症看了表示非常舒服。

  

顺便说一下板的尺寸是5x7的

  

  固定这堆模块,只需要钻两个孔。用小刀刻出要钻孔的位置,避免钻歪(就是图中Q和R之间刻了一个标记):

  

  警告:对玻璃纤维板切割、钻孔,一定要注意粉尘污染!

  吸入这些粉尘是非常危险的。所以我是把整块电路板放到水里面进行钻孔的。(过程因为有水,就没有拿手机出来拍照)

  准备钻孔之前,先把所有模块扔到饭盒里面测试一下布局:

  

饭盒大小是1000ml的:

  

  好了各位我钻完孔回来了。这次钻的不错,都能对上,误差不是很大。

  

  果断拧上螺丝,感受一下:

  

  然后计划在这里焊两排排针,一排接正极,另一排是负极。

  

  然后又拆下其他模块,专心焊接电路板:

  

  放上元件:

  

  准备进行焊接:

  

  然后这就是效果……光滑圆润的焊点?臣妾做不到啊!

  

  ……我承认焊电路我一点都不在行,所以就不要吐槽这个焊点丑了= =

  最后我用万用表测了,能用,所以也并没有什么问题。

  焊好当然要得瑟一下:于是我又装上去了(感觉我拆了又装中浪费了不少时间……)

  

  然后给电磁阀焊接两个排针,就可以直接插杜邦线了,这样各种模块还是独立的,以后拆卸也方便。(保证接口统一,才能方便调用!)

  

  焊点是这样的……其实这里是虚焊了,我后来重新焊了一遍=_=。所以看到这么圆的焊点,一般都是虚焊。

  

  然后又一天过去了……晚上临睡前东西都是这样扔一堆的。

  

  第三天起来~今天我们来讲解一下如何给arduino pro mini写程序,使用FT232RL,和arduino pro mini直接六个引脚一对一进行对接(非常方便的说):

  

如果给arduino单独供电的话,只需要接三个引脚。但是要记得两个芯片要共地,不然是传不上去的。

  

首先连接的是LCD1602,对应的电路图是这样子的:

  

  根据LCD1602的引脚定义,和arduino的连接方法如下:

  LCD VSS 接地

  LCD VDD 接5V电源

  LCD VL 用于调节对比度,通过电位器再接地。

  LCD RS pin 链接数字口 pin12

  LCD R/W pin 接地

  LCD Enable pin 链接数字口 pin11

  LCD D4 pin 链接数字口 pin5

  LCD D5 pin 链接数字口 pin4

  LCD D6 pin 链接数字口 pin3

  LCD D7 pin 链接数字口 pin2

  LCD BLA 光源正极

  LCD BLK 光源负极

  但是我稍稍修改了引脚的位置,为了更方便接线:

  RS-》8

  Enable -》7

  D4 -》6

  D5-》5

  D6-》4

  D7-》3

  R/W-》GND

  然后接好了就密密麻麻这么多线了:

  

  然后连DHT11模块,VCC和GND分别接电源和接地,OUT接2号数字口。

  

  然后连接电位器,COM 和NO就是开关的两端:

  

  可以很轻松地插入~

  

  完全插入(不能裸露太多金属部分):

  

  拧紧螺丝,大功告成:

  

  这里线太多,也是要用钳子进行连接了……

  

  两个继电器分别接9号数字口和10号数字口。

  

  写点小程序测试一下,继电器1和继电器2都可以正常开关。

  

接下来花了很多时间,一个一个连接模块,两个电源分别独立,一个电源长期供电,连接arduino,继电器1,升压模块,LCD1602。另一路电源可以关闭,给DHT11,土壤湿度模块,LCD1602的背景光LED,还有给继电器2进行供电,平时会关掉这部分的电源,达到节能的目的。

  

  密密麻麻的连接线……

  

  这个是实时时钟模块DS1307,实际并没有派上用途。所以就把它拆了下来(没用你为什么要把人家装上去(╯‵□′)╯︵┻━┻)。

  

  然后把所有模块接好线,预组装一下,看看能否放下:

  

  在规划好模块的位置,又要进行标记……打孔:

  

  然后打孔完毕。过程和前面说的大同小异,就不放图了。

  

  然后拧上螺丝看看,右边很多空白空间,以后可以用来放锂电池,或者移动电源:

  

  俯视图:

  

  放一个移动电源进去,测试一下,刚好能放下呢。

  

  饭盒的容积是1000ML的,逼格than逼格!

  

  通电后,点亮LCD背景灯的效果

  

  然后又调试程序……如此循环。其中调试程序的苦逼过程就没有记录了……代码放到github了,地址在帖子的最下面:

  

  然后链接水管。直接用电钻开一个6mm的孔就可以插进去了。

  

  链接好的样子。因为这个饭盒可以很容易地形变,所以很容易调节:

  

  紧密结合:

  

  发现电源线插不进去,用1cm的钻头进行开孔:

  1cm开孔效果

  

接入电源线,也是刚好可以插入

  

总体效果,一边进水,另一边出水:

  

入水口是这样的一个转接口,可以直接固定在水龙头上,而且不影响正常使用。某宝搜索就可以了(关键字:2分 万能接头 净水器)。

  

上面有个开关,可以不影响正常出水的情况下,引入水流。

  

  最终展示

  

arduino pro mini芯片

  

  2015年8月10日09:37:32更新物品清单:

  arduino pro mini (或者其他任意可以兼容的都可以)

  FT232RL(USB转串口,用于给arduino pro mini编程)

  LCD1602(用于显示)

  DHT11温湿度模块(只是用来显示温湿度,目前程序并没有根据温湿度数据来判断浇水量的功能)

  杜邦线(10cm和21cm的都买点)

  万能板,焊锡,烙铁。(如果你使用arduino uno 加上传感器shield就不需要自己焊电路)

  排针

  DC接头(或者micro usb接头,用于供电)

  DC供电线

  电磁阀(或者水泵)

  升压模块/降压模块(根据电磁阀或水泵的电压进行选择)

  土壤湿度检测模块

  水管(我用的是2分管,具体要根据电磁阀或者水泵的尺寸来选择)

  水龙头转接口(用于电磁阀方案,水泵方案不用买)

  M3螺丝,M3铜柱若干

  继电器(如果不是太阳能供电,不用省电的话,只需要1个。如果采用太阳能供电的方案,可以模仿我的做法)

  光敏电阻

  2015年8月13日15:09:30 更新,增加光敏电阻:

  如果你百度搜索“arduino如何接光敏电阻”,结果一般都是让你接一个电阻,再和光敏相连。实际上这样并没有必要,因为AVR单片机内部就有一个电阻:

  

  只需要利用这个电阻就好了。将一个模拟口设置为高

  #define PHOTO_RESISTOR_PIN A2

  pinMode(PHOTO_RESISTOR_PIN, OUTPUT);//设置引脚模式为输出

  digitalWrite(PHOTO_RESISTOR_PIN, HIGH);//拉高引脚

  Serial.println(analogRead(PHOTO_RESISTOR_PIN));//调试输出

  光敏电阻一端与A2相连,另一端直接接地。这样结构非常简单。实测全黑条件下读取数值为1023,强光手电照射读取数值623,户外阴天环境(没有阳光直射),读取数值为981,虽然不是很精确,但是一般情况下判断是白天还是黑夜还是够用了。设置阈值为1000,读取数值小于这个值,则表示是白天,不进行土壤湿度检测。

  

  

环境为阴天,没有阳光直射,连接光敏电阻的引脚数值为981

  

  还有拆的时候不小心太暴力,把饭盒拆破了= =。

  

两处破损……挺严重的,只能换饭盒。

  

  就这样放着,今晚去买了新的饭盒再修理了。

  ================分割线=========================

  代码下载地址:直接打包ZIP下载 或者 访问github主页

  里面有个ino格式的文件,就是arduino程序的文件。要使用arduino软件打开。arduino软件下载

  虽然我用的是arduino pro mini,但是理论上arduino uno之类的板子都可以兼容使用。

  下一步计划:

  加入根据气温判断浇水量的功能。如果温度低则少浇水(不知道有没有这种需求?据说有些花冬天不能浇太多的水。有多年种花经验的童鞋来传授点经验吧~)

  增加tf卡模块。将土壤湿度的变化数值写入tf卡。

  增加光敏模块,检测到有光再进行浇水。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
樊瑞华 2019-06-28
0 回复 举报
您好,请问DHT-11不就是温湿度传感器吗?为什么还要放置一个土壤湿度传感器?它们各自的作用又是什么呢?谢谢。 收起回复
elecfans 2018-03-22
0 回复 举报
风帆股份给 收起回复
全部评论

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分