[活动] 【APM32M3514开发板测评】+双设双控电热水壶

[复制链接]
 楼主| jinglixixi 发表于 2025-2-17 11:13 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-2-17 11:20 编辑

通过前面的技术铺垫,可以将其整合成一个具有智感效果的电热水壶,它由OLED屏来显示感知数据并具有双设双控的功能,即可以设置水位高度和加热温度、可控制注水的高度和加热的温度。
在水位的管控上,是通过超声波模块来实现,它有2个工位,一个在水壶外,是通过手掌来设置注水高度的;一个工位是在水壶上端,它是在向水壶注水时监控水位的高度,一旦达到指定的水位高度,则控制水泵停止注水,并将超声波模块转换到设置水位的工位,以供下一次使用。
另一个是通过电位器来设置加热温度,用NTC温度传感器来检测加热温度,当达到设置温度时,会控制加热器暂停加热,在温度低于设置温度时,会再次启动加热以维持在指定的温度值。
实现双设双控的显示界面如图1所示:

图片1.png
1 显示界面形式

实现OLED屏界面显示的程序为:
  1. int main(void)
  2. {
  3.         uint8_t dat,i;
  4.         uint8_t zl[10]={0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xFE,0xF7,0xEF};
  5.         GPIO_Config_T gpioConfig;
  6.         USART_Config_T usartConfig;               
  7.         APM_DelayInit();
  8.         GPIO_Init();
  9.         KEY_Init();
  10.         APM_DelayUs(100);
  11.         ADC_Init();
  12.         OLED_Init();
  13.         OLED_Clear();
  14.         OLED_ShowCHinese(24,0,0);
  15.         OLED_ShowCHinese(40,0,1);
  16.         OLED_ShowCHinese(56,0,2);
  17.         OLED_ShowCHinese(72,0,3);
  18.         OLED_ShowCHinese(88,0,4);               
  19.         OLED_ShowCHinese(0,2,5);
  20.         OLED_ShowCHinese(16,2,6);
  21.         OLED_ShowCHinese(64,2,7);
  22.         OLED_ShowCHinese(80,2,8);
  23.         OLED_ShowCHinese(0,6,11);
  24.         OLED_ShowCHinese(16,6,12);
  25.         OLED_ShowChar(32,2,':',16);
  26.         OLED_ShowChar(96,2,':',16);
  27.         OLED_ShowNum(40,2,6,2,16);        
  28.         OLED_ShowNum(104,2,36,2,16);
  29.         OLED_ShowChar(32,4,':',16);
  30.         OLED_ShowChar(96,4,':',16);
  31.         OLED_ShowNum(40,4,6,2,16);        
  32.         OLED_ShowNum(104,4,36,2,16);
  33.         OLED_ShowChar(32,6,':',16);
  34.         OLED_ShowChar(96,6,':',16);               
  35.         OLED_ShowString(40,6,"OFF",16);
  36.         OLED_ShowString(104,6,"OFF",16);
  37.         while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
  38.         ADC_StartConversion();
  39.         while (1)
  40.         {
  41.              ADC_MultiChannelPolling();
  42.              APM_DelayMs(500);
  43.         }
  44. }
1)超声波测控程序
  1. 含有工位切换与检测数据显示的超声波测距程序为:
  2. void  USART_Receive_Isr(void)
  3. {
  4.     uint8_t dat;
  5.     uint16_t l;
  6.     if (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_RXBNE) == SET)
  7.     {
  8.              dat = (uint8_t)USART_RxData(MINI_COM1);
  9.              sj[j]=dat;
  10.              j=j+1;
  11.     }        
  12.     if((j==4)&&(f<3))
  13.     {
  14.                   l=sj[1]*256+sj[2];   // mm
  15.                   l=l/10;            // cm
  16.                   if(GPIO_ReadInputBit(GPIOC, GPIO_PIN_13)==1)
  17.                   {
  18.                           OLED_ShowNum(40,2,l,2,16);         // 设置
  19.                           s1=l;
  20.                           if(f==2)  f=f+1;
  21.                   }
  22.                   else
  23.                   {     
  24.                           OLED_ShowNum(40,4,l,2,16);    // 测距
  25.                           if(l<s1)
  26.                           {
  27.                                  OLED_ShowString(40,6,"OFF",16);
  28.                           }
  29.                           else
  30.                           {
  31.                                 OLED_ShowString(40,6,"ON ",16);
  32.                           }                  
  33.                           f=2;
  34.                   }        
  35.                   j=0;
  36.                   if(f<3)  printf("%c", 0x55);
  37.         }
  38. }
图片2.png
2 超声波测距

在控制方面,是采用开发板上控制电机的某一相来控制注水水泵的启停;而加热器的控制则是用继电器或可控硅来完成。

2)NTC温度测控程序
为与主界面相匹配,相应的A/D数据采集与显示程序为:
  1. void ADC_MultiChannelPolling(void)
  2. {
  3.     float voltage;
  4.     uint8_t index;
  5.     uint16_t W,P,O;
  6.     for (index = 0; index < ADC_CH_SIZE; index++)
  7.     {
  8.                 voltage = (adcData[index] * 3300.0) / 4095.0;                        
  9.                 if(index == 1)
  10.                 {        // NTC                  
  11.                         OLED_ShowNum(40,2,(voltage-1540),4,16);
  12.                         O=bh(voltage-1540);
  13.                         OLED_ShowNum(104,4,O,2,16);           
  14.                         if(O<P)
  15.                         {
  16.                                 GPIO_ClearBit(GPIOA, GPIO_PIN_12);
  17.                                 OLED_ShowString(104,6,"ON ",16);
  18.                         }
  19.                         else
  20.                         {
  21.                               GPIO_SetBit(GPIOA, GPIO_PIN_12);
  22.                                 OLED_ShowString(104,6,"OFF",16);
  23.                         }
  24.                  }
  25.                  if(index == 2)
  26.                  {   //  电位器
  27.                          W=bh(voltage);
  28.                          P=W;
  29.                          OLED_ShowNum(104,2,W,2,16);        
  30.                  }
  31.       }
  32. }
图片3.png
3 温度检测


沉浮的茶叶 发表于 2025-2-26 09:23 | 显示全部楼层
这个可以,现实使用要考虑防水和高温的问题
 楼主| jinglixixi 发表于 2025-2-27 00:10 | 显示全部楼层
沉浮的茶叶 发表于 2025-2-26 09:23
这个可以,现实使用要考虑防水和高温的问题

有道理!
VelvetNight 发表于 2025-3-8 15:48 | 显示全部楼层
超声波测试水位的想法真好。
实现便捷,准确度也高
赞一下楼主
 楼主| jinglixixi 发表于 2025-3-9 00:15 | 显示全部楼层
VelvetNight 发表于 2025-3-8 15:48
超声波测试水位的想法真好。
实现便捷,准确度也高
赞一下楼主

感谢支持!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2933

帖子

39

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