GigaDevice GD32 MCU
直播中

阿飞

10年用户 124经验值
擅长:控制/MCU RF/无线
私信 关注
[经验]

【GD32330C-START开发板试用体验】温湿度自动检测与调控

近期家人生病, 忙于求医照料, 这几天抽了点时间做下结项实验. 后续再根据情况进行其他实验.
实验名称: 温湿度自动检测与调控
实验目的: 通过开发板实时监测环境温湿度, 当温湿度超出预设阀值时, 通过继电器启动外设(风扇), 以调控环境参数; 同时可通过点击用户按钮来调整此阀值.
实验材料:
GD32330C-START开发板. 为方便接线, 在引脚位置焊接了4块10PIN的排针插座
0.96寸OLED
DHT11模块
自焊继电器电路
自接带开关USB延长线
USB小风扇及移动电源
1.jpg

实验步骤:
1.接线
将OLED及DHT11模块插到开发板插座上, 并将开发板的PB3,GND引脚用杜邦线连接至继电器电路板的基极与GND.
将USB延长线开关连接至继电器的常开引脚, 同时将移动电源与USB小风扇连接.
接通开发板电源, 此时OLED将实时显示当前温湿度及初始化阀值99. 此时PB3引脚输出低电平, 小风扇停止.
2.jpg
3.jpg
2.调整参数
通过按下用户按钮, 将阀值调整至80
4.jpg
3.触发条件
对着DHT11模块哈几口气, 使模块检测到的湿度上升并超过阀值.
5.jpg
4.观察结果
湿度超出预设阀值后, 开发板PB3输出高电平, 使三极管处于放大状态, 继电器吸合, 外设USB小风扇通电, 向DHT11模块吹风, 使模块湿度降低.
6.jpg
当湿度降至预设阀值以下时, PB3输出低电平, 继电器断开, 小风扇停止.
7.jpg
实验完毕. 以上为通过检测湿度进行调控, 温度同理.

GD32是个可以媲美STM32的MCU, 其强大的功能还有待我们去学习, 去发现.

关键代码:
  1. void control_init();

  2. int main(void)
  3. {
  4.                 DHT11_Data_TypeDef data;
  5.           u8 pos, cond;
  6.           cond = 99;
  7.     systick_config();
  8.                 OLED_Init();
  9.                 DHT11_GPIO_Config();
  10.           control_init();
  11.           gd_eval_key_init(KEY_USER, KEY_MODE_GPIO);
  12.         
  13.     //显示初始信息
  14.                 OLED_ShowString(0, 0, "GD32330C-START",16);  
  15.                 OLED_ShowString(0,18, "FINAL TEST",16);
  16.           OLED_ShowString(0,36, "T:",12);
  17.           OLED_ShowString(64,36, "H:",12);
  18.           OLED_ShowString(0,52, "COND: H > 99",12);
  19.                 OLED_Refresh_Gram();
  20.         
  21.                 while(1)
  22.                 {
  23.                         //检测是否按下用户按钮, 按下时条件值-1
  24.                         if(SET == gd_eval_key_state_get(KEY_USER)){
  25.             delay_1ms(50);
  26.             if(SET == gd_eval_key_state_get(KEY_USER)){
  27.                 cond--;
  28.                                                           if(cond == 10)
  29.                                                                         cond = 99;
  30.                                                                 OLED_ShowNum(60, 52, cond, 2, 12);
  31.                 while(SET == gd_eval_key_state_get(KEY_USER));
  32.             }
  33.         }
  34.                         if(SUCCESS == Read_DHT11(&data))
  35.                         {
  36.                                 //读温湿度并显示
  37.                                 if(data.temp_int<10)
  38.                                 {
  39.                                         OLED_ShowNum(20, 36, data.temp_int, 1, 12);
  40.                                         pos = 6;                                       
  41.                                 } else if(data.temp_int<100)
  42.                                 {
  43.                                         OLED_ShowNum(20, 36, data.temp_int, 2, 12);
  44.                                         pos = 12;
  45.                                 } else {
  46.                                         OLED_ShowNum(20, 36, data.temp_int, 3, 12);
  47.                                         pos = 18;
  48.                                 }
  49.                                 OLED_ShowString(20+pos,36,".",12);
  50.                                 pos+=6;
  51.                                 if(data.temp_deci<10)
  52.                                 {
  53.                                         OLED_ShowNum(20+pos, 36, data.temp_int, 1, 12);
  54.                                 } else if(data.temp_deci<100)
  55.                                 {
  56.                                         OLED_ShowNum(20+pos, 36, data.temp_int, 2, 12);
  57.                                 } else {
  58.                                         OLED_ShowNum(20+pos, 36, data.temp_int, 3, 12);
  59.                                 }
  60.                                 if(data.humi_int<10)
  61.                                 {
  62.                                         OLED_ShowNum(84, 36, data.humi_int, 1, 12);
  63.                                         pos = 6;                                       
  64.                                 } else if(data.humi_int<100)
  65.                                 {
  66.                                         OLED_ShowNum(84, 36, data.humi_int, 2, 12);
  67.                                         pos = 12;
  68.                                 } else {
  69.                                         OLED_ShowNum(84, 36, data.humi_int, 3, 12);
  70.                                         pos = 18;
  71.                                 }
  72.                                 OLED_ShowString(84+pos,36,".",12);
  73.                                 pos+=6;
  74.                                 if(data.humi_deci<10)
  75.                                 {
  76.                                         OLED_ShowNum(84+pos, 36, data.humi_deci, 1, 12);
  77.                                 } else if(data.humi_deci<100)
  78.                                 {
  79.                                         OLED_ShowNum(84+pos, 36, data.humi_deci, 2, 12);
  80.                                 } else {
  81.                                         OLED_ShowNum(84+pos, 36, data.humi_deci, 3, 12);
  82.                                 }
  83.                                 
  84.                                 //判定当湿度满足条件时输出引脚置高电平, 同时显示内容
  85.                                 if(data.humi_int>=cond)
  86.                                 {
  87.                                         if(gpio_output_bit_get(GPIOB, OUT_CONTROL_PIN) == RESET)
  88.                                         {
  89.                                                 gpio_bit_set(GPIOB, OUT_CONTROL_PIN);
  90.                                                 OLED_ShowString(84,52, "1",12);
  91.                                         }
  92.                                 }
  93.                                 else
  94.                                 {
  95.                                         if(gpio_output_bit_get(GPIOB, OUT_CONTROL_PIN) == SET)
  96.                                         {
  97.                                                 gpio_bit_reset(GPIOB, OUT_CONTROL_PIN);
  98.                                                 OLED_ShowString(84,52, "0",12);
  99.                                         }
  100.                                 }
  101.                         }
  102.                         OLED_Refresh_Gram();
  103.                         delay_1ms(100);
  104.                 }
  105. }

实验过程视频:
[media]http://v.youku.com/v_show/id_XMzg3NjE0NTA0OA==.html?spm=a2h3j.8428770.3416059.1[/media]

回帖(1)

daqin

2019-3-20 12:50:12
谢谢支持啊   判定当湿度满足条件时输出引脚置高电平, 同时显示内容
举报

更多回帖

发帖
×
20
完善资料,
赚取积分