【平头哥RVB2601创意应用开发】我的吉他环境保护器——干湿度自动调节器
本帖最后由 神龙居市 于 2022-5-19 11:13 编辑<ul>
<li><span style="font-size:20px;"><strong>风起需求</strong></span></li>
</ul>
<p>最近买了一把吉他,看到保养注意上说,湿度要保持在40-60%,太干燥会开裂,太潮湿会变形。还挺难伺候。现在正好拿平头哥练习一下,自己做一个湿度监测和加湿、除湿控制端。</p>
<ol>
<li>室内空气湿度监测</li>
<li>湿度临界条件上,控制加湿器开关、控制除湿器开关</li>
</ol>
<ul>
<li><span style="font-size:20px;"><strong>工作流程图</strong></span></li>
</ul>
<p><img _height="550" border="0" src="https://bbs.eeworld.com.cn/data/attachment/forum/202205/08/175430fjyfeyffjcfezef8.png.thumb.jpg" width="429" /></p>
<ul>
<li><span style="font-size:20px;">逻辑说明</span></li>
</ul>
<p align="justify" style="text-align:justify"><span style="font-size:10.5pt"><span style="text-justify:inter-ideograph"><span style="font-family:"Times New Roman""><span style="font-size:10.5000pt"><span style="background:#ffffff"><span style="font-family:微软雅黑"><span style="color:#333333"><span style="letter-spacing:0.0000pt"><span style="font-style:normal"><font face="微软雅黑">为了保证环境的湿度在一定范围内,需要依靠环境检测传感器获得当前湿度,配合内部控制外接加湿器和除湿器,在湿度的上限和下限开启加湿或除湿。这里的控制已经不是一个临界点了,而是一个区域。所以控制逻辑上是</font>4个临界点。40~50~60分成3个节点,就是说<40需要加湿时,一直加湿到50关闭加湿器,50~60之间不工作,其实也包含了40~60之间,因为回落到40~50间也是不工作的,除湿也是类似超过60开始除湿,湿度降到50关闭除湿器。</span></span></span></span></span></span></span></span></span></p>
<ul>
<li><span style="font-size:20px;"><strong>硬件准备</strong> </span></li>
</ul>
<ol>
<li>平头哥RVB2601开发板</li>
<li>DHT11温湿度传感器</li>
<li>雾化加湿器模块</li>
<li>除湿器设备</li>
<li>继电器2个</li>
<li>电源5v</li>
</ol>
<ul>
<li><span style="font-size:20px;"><strong> 软件准备</strong></span></li>
</ul>
<ol>
<li>CDK v1.12版</li>
<li>SDK v7.4.3</li>
</ol>
<ul>
<li><span style="font-size:20px;"><strong>案例核心代码</strong></span></li>
</ul>
<p><span style="font-size:12px;"><strong>代码引用了DHT11传感器</strong></span></p>
<pre>
<code class="language-cpp">#include <stdlib.h>
#include <string.h>
#include <aos/aos.h>
#include "aos/cli.h"
#include "main.h"
#include "app_init.h"
#include "oled.h"
#include "dht11.h"
#define TAG "app"
//引脚PA4 加湿器
static csi_gpio_pin_t Humidifie;
//引脚A7 除湿器
static csi_gpio_pin_t Dehumidifie;
int main(void)
{
board_yoc_init();
LOGD(TAG, "%s\n", aos_get_app_version());
oled_init();
u8g2_t u8g2;
u8g2Init(&u8g2);
//继电器控制
//设置引脚模式为通用IO口:
csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
//引脚初始化:
csi_gpio_pin_init(&Humidifie, PA4);
csi_gpio_pin_init(&Dehumidifie, PA4);
//设置引脚输出方向:
csi_gpio_pin_dir(&Humidifie, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_dir(&Dehumidifie, GPIO_DIRECTION_OUTPUT);
//设置引脚电平:
csi_gpio_pin_write(&Humidifie, GPIO_PIN_LOW);
csi_gpio_pin_write(&Dehumidifie, GPIO_PIN_LOW);
u8g2_SetFontMode(&u8g2, 1);
u8g2_SetFont(&u8g2, u8g2_font_unifont_t_symbols);
DHT11Init();
float Temp = 0;
float Humi = 0;
char strTemp;
char strHumi;
while(1)
{
u8g2_FirstPage(&u8g2);
do
{
DHT11ReadData(&Humi, &Temp);
sprintf(strTemp, "Temp: %.1f C", Temp);
sprintf(strHumi, "Humi: %.1f %%", Humi);
u8g2_ClearBuffer(&u8g2);
u8g2_DrawStr(&u8g2, 0, 30, strTemp);
u8g2_DrawCircle(&u8g2, 84, 22, 2, U8G2_DRAW_ALL);
u8g2_DrawStr(&u8g2, 0, 60, strHumi);
u8g2_SendBuffer(&u8g2);
if(Humi <= 40)
{
//湿度小,开加湿器
csi_gpio_pin_write(&Humidifie, GPIO_PIN_HIGHT);
}
else if(Humi >= 50)
{
//湿度大,关闭加湿
csi_gpio_pin_write(&Humidifie, GPIO_PIN_LOW);
}
if(Humi >= 60)
{
//开除湿机
csi_gpio_pin_write(&Dehumidifie, GPIO_PIN_HIGHT);
}
if(Humi <= 50)
{
//关闭除湿机
csi_gpio_pin_write(&Dehumidifie, GPIO_PIN_LOW);
}
delay_ms(3000);
} while (u8g2_NextPage(&u8g2));
}
return 0;
}</code></pre>
<ul>
<li>
<h1>硬件图片</h1>
</li>
<li>DHT11传感器</li>
</ul>
<p></p>
<p> </p>
<ul>
<li>继电器模块,控制加湿器和除湿器</li>
</ul>
<p>因为GPIO端口输出的高电平不足以引起工作电压工作,这里用了继电器开关来外接整整的加湿器和除湿器设备。</p>
<p></p>
<p> </p>
<ul>
<li>最终成品</li>
</ul>
<p></p>
<p> </p>
<ul>
<li><span style="font-size:20px;">最后完善了一下的视频</span></li>
</ul>
<p>8af3567544ee1771a7d4e4012fb63054<br />
</p>
<p>这个干湿度自动调节器不错,谢谢分享</p>
页:
[1]