吸烟室管控系统

实现的功能:通过MQ-2监测当前环境的烟雾浓度,软件设置报警上限显示的是电压值并显示在lcd1602的第二行,第一行是实际的检测值,这里引用了ADC单通道采集DMA读取,显示的也是电压值,具体原理查看烟雾报警器的原理,如果当前的数值大于设置的上限则会导致蜂鸣器报警,并会开启风扇,反之则不会。并且这里还设置了手动调报警上限值的两个按钮,可以随时实现调大调小。

main.c文件代码如下:

#include "lcd1602.h"
#include "beep.h"
#include "key.h"


int main(void)
{
    float smoke_value =0 ;
    float limit_value =1.0;
    uint8_t key_num =0 ;
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();
    uart1_init(115200);
    KEY_init();
    adc_dma_init();
    fan_init();
    lcd1602_init();
    beep_init();
    printf("hello world!\r\n");
    
    lcd1602_show_line(1,1,"Smoke:   0.0 V");
    lcd1602_show_line(2,1,"Limit:  - 0.0 + ");
    
    while(1)
    { 
       key_num =KEY_scan();
        if(key_num ==1)
            limit_value +=0.1;
        else if (key_num ==2)
            limit_value -=0.1;
        lcd1602_display_limit(limit_value);

        smoke_value =adc_get_smoke();
        lcd1602_display_smoke(smoke_value);
        
        if(smoke_value >limit_value)
        {
        beep_on();
        fan_on();
        }
        else
        {
        beep_off();
        fan_off();
        
        }
            
        }
       
   
}

lcd1602.c文件核心如下:

void lcd1602_display_smoke(float smoke_value)
{

    char msg[16]={0};
    sprintf(msg,"Smoke:  %0.2f V",smoke_value);
    lcd1602_show_line(1,1,msg);

}

void lcd1602_display_limit(float limit_value)
{
    char msg[16]={0};
    sprintf(msg,"limit: - %0.2f +",limit_value);
    lcd1602_show_line(2,1,msg);

}

adc.c  文件代码核心如下:

void adc_dma_init(void)
{
    adc_config();
    adc_channel_config(&adc_handle,ADC_CHANNEL_8,ADC_REGULAR_RANK_1,ADC_SAMPLETIME_239CYCLES_5);
    
    dma_config();
    HAL_ADC_Start_DMA(&adc_handle,(uint32_t *)&adc_value,1);                
}

float adc_get_smoke(void)
{
    return (float)adc_value/ 4096 *3.3;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值