浇花小助手

[复制链接]
 楼主| netlhx 发表于 2016-6-7 11:26 | 显示全部楼层 |阅读模式
dc, ADC, AD, AC, pi
本帖最后由 netlhx 于 2016-6-7 11:31 编辑

首先声明,咱不养花,但隔壁有喜欢养花的。所以以外行的眼光来做一个浇花助手,必有不妥帖之处,海涵海涵!

侍弄花草本来是很风雅的事情,为何要让技术来插一杠子,都是无聊惹的祸?!
正题正题。

一、物料准备
  • 12VDC电源一个,用来给水泵及开发板供电
  • 小水泵一个,当然是用来抽水(含水管及花洒等配件)

  • YL-69土壤湿度传感器,用来检测土壤湿度

  • 继电器,打开或关闭水泵

  • NUCLEO32小型开发板一块
  • 其它配件

部分设备来自TB,部分为改装,充分发挥DIY的破坏本色。

二、改装及设计

功能框图




太简单,浪费了一块好板子,有木有?
下面看看需要改装的部分。

首先是电源的改造,12VDC本来是用来给水泵供电的,但是咱的开发板也要电,所以得改一下



一刀两断,然后引出两根电源线,直接用杜邦线改装了,不用担心电流大小的限制,毕竟开发板上的电流还是很小的。注意红色接的是+12V,千万不要搞错。

然后是改造继电器的外围电路。这个继电器没有原理图,同时避免把它弄坏了。所以只能按照黑盒原理来推测和改装了。从功能上看,外围电路开路,则会自动打开继电器,如果是闭合,则关闭继电器输出。所以咱用一个简单的S9012来控制打开和关断。继电器内部有限流电阻,所以咱只要使用三极管的开关功能就行了。


注意LED的正极与NUCLEO32的PB4连接,这样就很好控制水泵了。

现在准备一块小万用板,准备连接。连接很简单,就不上原理图了,给个组装好后的效果图。



注意NUCLEO32小板没有焊死,体验过后就可以拆下来,仍然是一块独立的开发板。
接下来调试程序。

先看YL-69湿度传感器,基本的原理图如下



两种输出接口,D0输出二值信号,高或低电平;AO输出模拟信号。

本文使用STM32的ADC功能读取传感器输出的值,使用的引脚为PB1。下面是ADC初始化代码

  1. /* ADC init function */
  2. void MX_ADC_Init(void)
  3. {
  4.   ADC_ChannelConfTypeDef sConfig;

  5.     /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  6.     */
  7.   hadc.Instance = ADC1;
  8.   hadc.Init.OversamplingMode = DISABLE;
  9.   hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
  10.   hadc.Init.Resolution = ADC_RESOLUTION_12B;
  11.   hadc.Init.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  12.   hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  13.   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  14.   hadc.Init.ContinuousConvMode = ENABLE;
  15.   hadc.Init.DiscontinuousConvMode = DISABLE;
  16.   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  17.   hadc.Init.DMAContinuousRequests = DISABLE;
  18.   hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  19.   hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  20.   hadc.Init.LowPowerAutoWait = DISABLE;
  21.   hadc.Init.LowPowerFrequencyMode = DISABLE;
  22.   hadc.Init.LowPowerAutoPowerOff = DISABLE;
  23.   HAL_ADC_Init(&hadc);

  24.     /**Configure for the selected ADC regular channel to be converted.
  25.     */
  26.   sConfig.Channel = ADC_CHANNEL_9;
  27.   sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  28.   HAL_ADC_ConfigChannel(&hadc, &sConfig);

  29. }

默认时钟为32MHZ,所以对ADC时钟进行4分频,采样时间设为最长,也就是239.5个时钟周期,连续采样。

将YL-69连接到设备,开始调试。首先在开路状态下读取值,模拟干水的情况,得到4095,也就是输出3.3V;然后短接传感器的两个探头,模拟被水淹的情况,得到的值为64左右,约为0V。



接下来的逻辑就简单了,根据上面的功能框图,MCU反复读取ADC的值,然后决定浇还是不浇。

下面是主循环中关键功能代码

  1.   if(adc_value > 3000)
  2.                 {
  3.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
  4.                         
  5.                         count ++;
  6.                         
  7.                         if(count == 20)
  8.                         {
  9.                                 
  10.                                 count = 0;
  11.                                 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
  12.                         }
  13.                         
  14.                         
  15.                         
  16.                 }
  17.                 else
  18.                 {
  19.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
  20.                         
  21.                 }

注意这里的阀值设定,直接取3000作为是否浇水的依据,有进一步调整的必要。比如不同的土壤,花肥的使用情况,植物喜湿程序等。这是下一步改善的方向。

嗯,很简单吧!


三、结果

下面是全部调试和组装好成品图。




注意及局限:
  • 组装时注意线不能接错,DC输出的是12V,所以一定要接到VIN,千万不能接到5V上面,否则会烧板子。
  • YL-69的电源来自NUCLEO32的3V3输出,注意接线引脚
  • 水泵直接从储水器皿中取水,所以需要一个稳定的水源
  • 只有一个湿度探头,所以只能检测一处土壤的湿度值
  • 程序逻辑相对比较简单,特别是阀值的设定,简单粗暴,需要进一步结合实际情况进行优化、调整。
  • 整个设计器件的组合尚不够紧凑,如果能设计一块专用的PCB板,将MCU,继电器,电源转换等全部做成一个盒子,则实用性会非常好。
  • 下一步的方向:添加WIFI或BLE传感器,实现远程监控,自动浇水与手动控制,效果会更好。


最后为本次DIY中牺牲的NUCLEO L073默哀3分钟!

DIY无小事,不可不慎!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
kz_zank 发表于 2016-6-7 13:28 | 显示全部楼层
长时间插土里使用不会氧化吗
 楼主| netlhx 发表于 2016-6-7 16:07 | 显示全部楼层
kz_zank 发表于 2016-6-7 13:28
长时间插土里使用不会氧化吗

会有一点,不过可以换,反正就是俩金属片
duhemayi 发表于 2016-6-8 08:24 | 显示全部楼层
既然是传感器,多长寿命?
bang54321 发表于 2016-6-8 12:06 | 显示全部楼层
楼主,代码有没有分享一下
ecoren 发表于 2016-6-8 12:43 | 显示全部楼层
是把妹惹的祸吧,敢问隔壁是谁,
jekey 发表于 2016-6-8 13:39 | 显示全部楼层
还要控制浇花的时间, 不要在太阳直晒时浇水, 也就是避开10:00 - 17:00这段时间。
dirtwillfly 发表于 2016-6-9 20:35 | 显示全部楼层
如果只是使用NUCLEO上的板载仿真器,没必要截断板子的
gaoxiang1243 发表于 2016-6-11 12:22 | 显示全部楼层
duhemayi 发表于 2016-6-8 08:24
既然是传感器,多长寿命?

反正是做的玩的,没有必要苛责。
byron0523 发表于 2016-6-13 14:37 | 显示全部楼层
想问一下,你的温湿度是使用的什么传感器
幸福至上 发表于 2016-6-14 11:15 | 显示全部楼层
板子断了,有点可惜哦。楼主的这个点子挺不错哦,不过具体的认同性不好说,反正我是没养东西的习惯(如果厨房天花板上的老鼠不算的话,哇哈哈)。
说一处我认为可能可以改进下的地方哈,关于水泵的控制,我个人认为采用PMOS管控制会比继电器好一些。理由有二个:1、水泵是单向通电控制,使用一个PMOS管构成的单向通电电路即可,材料只需一片MOS管加一两个电阻,如果要隔离下,也就最多再加个光耦或三极管,这样不论是体积,还是成本都比用一个继电器模块低吧?二是,继电器的机械使用寿命有限这是个瑕疵之处。虽然咱们DIY不用细究这么多,所以如果纠结一点地说,MOS管就没有开关次数限制。
rejoice818 发表于 2016-6-17 10:37 | 显示全部楼层
我就是养花人,有用的东西药顶起,创意改变生活
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

144

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部