打印
[活动]

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

[复制链接]
56|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2025-2-17 11:20 编辑

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

1 显示界面形式

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

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

2)NTC温度测控程序
为与主界面相匹配,相应的A/D数据采集与显示程序为:
void ADC_MultiChannelPolling(void)
{
    float voltage;
    uint8_t index;
    uint16_t W,P,O;
    for (index = 0; index < ADC_CH_SIZE; index++)
    {
                voltage = (adcData[index] * 3300.0) / 4095.0;                        
                if(index == 1)
                {        // NTC                  
                        OLED_ShowNum(40,2,(voltage-1540),4,16);
                        O=bh(voltage-1540);
                        OLED_ShowNum(104,4,O,2,16);           
                        if(O<P)
                        {
                                GPIO_ClearBit(GPIOA, GPIO_PIN_12);
                                OLED_ShowString(104,6,"ON ",16);
                        }
                        else
                        {
                              GPIO_SetBit(GPIOA, GPIO_PIN_12);
                                OLED_ShowString(104,6,"OFF",16);
                        }
                 }
                 if(index == 2)
                 {   //  电位器
                         W=bh(voltage);
                         P=W;
                         OLED_ShowNum(104,2,W,2,16);        
                 }
      }
}
3 温度检测


使用特权

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

本版积分规则

475

主题

2821

帖子

38

粉丝