首页-达尔闻    全部    毕业设计| STM32智能婴儿床监控(基础款)

毕业设计| STM32智能婴儿床监控(基础款)

婴儿床监测主要有以下功能:
床内温度;检测婴儿状态;配置RTC实时时间;电机PWM按键三档调速;自动开关加热器;发送温度到手机终端;把所有要呈现的状态通过OLED屏幕显示。
收藏
  • # 设备功能说明 #

     

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

    床内温度;检测婴儿状态;配置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 \r\n", 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);
         }
     
    本篇毕设分享来自文妹怒敲键盘,如果想要了解他的更多项目可以至他的博客:blog.csdn.net/lllmeimei/article/details/116852724
    也可以加入他的QQ交流群:721421120。