小言_互联网的博客

基于stm32的智能婴儿床(毕业设计)

525人阅读  评论(0)

整体图(最后有视频演示)

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

元件清单
主控 stm32f103c8t6

导线 若干根
OLED显示屏 一个
VCC-3.3/5V GND-GND SCL-单片机SCL脚 SDA-单片机SDA脚

轻触按键 三个
对脚连接 一脚接GND 一脚接VCC

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

L298N电机驱动板模块 一个
接法如下 由于不用配置正反转可以四个口随便接 只是用来驱动电机的作用(需要与单片机共地)

MAX声音传感模块 一个
VCC接5VGND-GND OUT接信号脚

Jdy-311蓝牙模块
接法 VCC GND接5V的源 TXD接单片机RXD RXD接单片机TXD

DS18b20传感器 一个
从左到右 GND OUT VCC 连接单片机

4.7K贴片电阻 一个
四针排组两个
三针排组一个
四针弯形弯型排组一个(小器件不配图)

程序部分 (附带注释)
main.c函数

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(DHT11_Init())
//	{
   

//		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);
			}
     




所有代码加群分享 QQ群号为721421120

下面进行视频展示

基于stm32f103的智能婴儿车设备


转载:https://blog.csdn.net/lllmeimei/article/details/116852724
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场