打印

浇花小助手

[复制链接]
2885|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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初始化代码

/* ADC init function */
void MX_ADC_Init(void)
{
  ADC_ChannelConfTypeDef sConfig;

    /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
    */
  hadc.Instance = ADC1;
  hadc.Init.OversamplingMode = DISABLE;
  hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
  hadc.Init.Resolution = ADC_RESOLUTION_12B;
  hadc.Init.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc.Init.ContinuousConvMode = ENABLE;
  hadc.Init.DiscontinuousConvMode = DISABLE;
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc.Init.DMAContinuousRequests = DISABLE;
  hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc.Init.LowPowerAutoWait = DISABLE;
  hadc.Init.LowPowerFrequencyMode = DISABLE;
  hadc.Init.LowPowerAutoPowerOff = DISABLE;
  HAL_ADC_Init(&hadc);

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

}

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

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



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

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

  if(adc_value > 3000)
                {
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
                        
                        count ++;
                        
                        if(count == 20)
                        {
                                
                                count = 0;
                                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
                        }
                        
                        
                        
                }
                else
                {
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
                        
                }

注意这里的阀值设定,直接取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 | 只看该作者
既然是传感器,多长寿命?

使用特权

评论回复
5
bang54321| | 2016-6-8 12:06 | 只看该作者
楼主,代码有没有分享一下

使用特权

评论回复
6
ecoren| | 2016-6-8 12:43 | 只看该作者
是把妹惹的祸吧,敢问隔壁是谁,

使用特权

评论回复
7
jekey| | 2016-6-8 13:39 | 只看该作者
还要控制浇花的时间, 不要在太阳直晒时浇水, 也就是避开10:00 - 17:00这段时间。

使用特权

评论回复
8
dirtwillfly| | 2016-6-9 20:35 | 只看该作者
如果只是使用NUCLEO上的板载仿真器,没必要截断板子的

使用特权

评论回复
9
gaoxiang1243| | 2016-6-11 12:22 | 只看该作者
duhemayi 发表于 2016-6-8 08:24
既然是传感器,多长寿命?

反正是做的玩的,没有必要苛责。

使用特权

评论回复
10
byron0523| | 2016-6-13 14:37 | 只看该作者
想问一下,你的温湿度是使用的什么传感器

使用特权

评论回复
11
幸福至上| | 2016-6-14 11:15 | 只看该作者
板子断了,有点可惜哦。楼主的这个点子挺不错哦,不过具体的认同性不好说,反正我是没养东西的习惯(如果厨房天花板上的老鼠不算的话,哇哈哈)。
说一处我认为可能可以改进下的地方哈,关于水泵的控制,我个人认为采用PMOS管控制会比继电器好一些。理由有二个:1、水泵是单向通电控制,使用一个PMOS管构成的单向通电电路即可,材料只需一片MOS管加一两个电阻,如果要隔离下,也就最多再加个光耦或三极管,这样不论是体积,还是成本都比用一个继电器模块低吧?二是,继电器的机械使用寿命有限这是个瑕疵之处。虽然咱们DIY不用细究这么多,所以如果纠结一点地说,MOS管就没有开关次数限制。

使用特权

评论回复
12
rejoice818| | 2016-6-17 10:37 | 只看该作者
我就是养花人,有用的东西药顶起,创意改变生活

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

144

帖子

4

粉丝