毕业设计| STM32智能婴儿床监控

2023-04-26  

婴儿床监测主要有以下功能:

床内温度;检测婴儿状态;配置RTC实时时间;电机PWM按键三档调速;自动开关加热器;发送温度到手机终端;把所有要呈现的状态通过OLED屏幕显示。

感兴趣的小伙伴还可以加入更多的功能。

# 硬件元件清单 #

主控为STM32F103C8T6,使用最小系统板:

OLED显示屏1个,连接方式:VCC-3.3/5V;GND-GND;SCL-单片机SCL脚;SDA-单片机SDA脚

轻触按键3个,连接方式:对脚连接;一脚接GND;一脚接上拉电阻至电源、及IO口引脚

一路5v继电器模块 1个,连接方式:上面口:VCC-5V;GND-GND;PIN-单片机信号脚下面口:选择常开/常闭连接负载

L298N电机驱动板模块 1个,连接方式如下:


由于不用配置正反转可以四个口随便接 只是用来驱动电机的作用(需要与单片机共地)。

MAX声音传感模块 1个,连接方式:VCC接5V,GND-GND,OUT接信号脚

Jdy-311蓝牙模块,连接方式:VCC、GND接5V的源,TXD接单片机RXD,RXD接单片机TXD

DS18b20传感器 1个,连接方式:从左到右,GND OUT VCC 连接单片机

int main(void)

{  

    u8 ccc=99;//测试值

    u8 a;

    u8 key=0;

    u16 led0pwmval=0;

      u8 dir=1;  

    u8 t=0; 

    short temperature;         

        u8 humidity;//以上都为用作判断的变量定义

    delay_init();         //延时函数初始化    

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级   LED_Init();           

      //delay_ms(8000);

    uart_init(9600);//串口初始化 波特率为9600  

    OLED_Init();      //初始化OLED  

    OLED_Clear(); //清屏

    KEY_Init(); //按键初始化

    TIM3_PWM_Init(899,0);//定时器3PWM初始化

        LED_Init();//io口初始化

    usmart_dev.init(SystemCoreClock/1000000);  //初始化USMART

    RTC_Init();//时钟初始化   

    ADC_Configuration1();//adc配置

    TIM_SetCompare2(TIM3,500);//占空比设置

    OLED_ShowCHinese(0,0,1);//oled显示文字

    OLED_ShowCHinese(18,0,15);

    OLED_ShowCHinese(36,0,16);

    OLED_ShowCHinese(54,0,17);

    OLED_ShowCHinese(110,0,6);

    OLED_ShowCHinese(0,2,11);

    OLED_ShowCHinese(18,2,12);

    OLED_ShowCHinese(36,2,13);

    OLED_ShowCHinese(54,2,14);

    OLED_ShowCHinese(0,4,18);

    OLED_ShowCHinese(18,4,19);

    OLED_ShowCHinese(36,4,20);

    OLED_ShowCHinese(54,4,21);

    //OLED_ShowCHinese(32,6,22);

    //OLED_ShowCHinese(60,6,23);

    OLED_ShowCHinese(108,4,26);

    while(DS18B20_Init())//等待ds18b20初始化完成

    {

    delay_ms(200);

    delay_ms(200);

    delay_ms(200);

    } 


    while(1)

  {            

     if(t%10==0)      //每100ms读取一次

    {                    

      temperature=DS18B20_Get_Temp();              

    OLED_ShowNum(70,0,temperature/10,2,16);  //显示温度

    //USART_SendData(USART1,ccc);

    printf("%d",temperature);//把温度通过串口发出

    if(temperature/10<23)//温度低于23摄氏度 打开加热器

    GPIO_ResetBits(GPIOB,GPIO_Pin_7);

        if(temperature/10>=30)//温度高于等于30摄氏度 关闭加热器

    GPIO_SetBits(GPIOB,GPIO_Pin_7);  

      //             

        OLED_ShowString(85,0,".",16);  

      OLED_ShowNum(90,0,temperature%10,2,16);

    }           

     delay_ms(10);

    t++;

    if(t==20)

    {

      t=0;    

    }

        

    if(a!=calendar.sec)//RTC实时时间显示

    {

    a=calendar.sec;

//    LCD_ShowNum(60,130,calendar.w_year,4,16);

        OLED_ShowNum(0,6,calendar.w_year,4,16);

        OLED_ShowString(30,6,".",16);  

        OLED_ShowString(30,6,".",16);        

//    LCD_ShowNum(100,130,calendar.w_month,2,16);

    OLED_ShowNum(33,6,calendar.w_month,1,16);

    OLED_ShowString(50,6,".",16);  

//    LCD_ShowNum(123,130,calendar.w_date,2,16);  

     // OLED_ShowString(72,6,".",16);    

    OLED_ShowNum(53,6,calendar.w_date,2,16);

//    LCD_ShowNum(60,162,calendar.hour,2,16);

        OLED_ShowString(70,6,".",16);        

    OLED_ShowNum(73,6,calendar.hour,2,16);

        

//      LCD_ShowNum(84,162,calendar.min,2,16);

        OLED_ShowNum(93,6,calendar.min,2,16);

        OLED_ShowString(88,6,".",16);        

//      LCD_ShowNum(108,162,calendar.sec,2,16);

    OLED_ShowString(108,6,".",16);  

    OLED_ShowNum(113,6,calendar.sec,2,16);

//      LED0=!LED0;

    }  

    delay_ms(10);      

    AD_value = ADC_ConvertedValue;

      AD_value = (AD_value/4096)*3.3;//算法得到电压值

//      printf("The current Sound AD value = %4.2fV rn", AD_value);

      if(AD_value>=2)//通过转化而来电压值判断婴儿状态

      { 

        OLED_ShowCHinese(90,2,31);

          OLED_ShowCHinese(108,2,32);

        delay_ms(200);      

      }

    

        if(AD_value<2)

      {

          OLED_ShowCHinese(90,2,29);    

            OLED_ShowCHinese(108,2,30);

      }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。