STM32小项目 小小智能婴儿床


前言

本篇文章用于记录在进行32学习时的一些记录,以便个人回顾,个人能力有限,如有发现错误,欢迎各位大佬指点。一起加油!
链接在最后!!!


一、所用器件

(1)STM32F103ZET6

在这里插入图片描述
主控开发板

(2) MQ_烟雾传感器

在这里插入图片描述
通过ADC外设进行数据采集。

(3)声音传感器

在这里插入图片描述
通过外部中断来进行操作。

(5)sg90舵机

在这里插入图片描述

通过设置定时器输出PWM波来进行控制转动。
模拟舵机与数字舵机的区别

(5)DHT11 温湿度传感器

在这里插入图片描述
依据数据手册编写内部时序。
点这里看操作

(6)OLED显示屏

在这里插入图片描述
通过iic进行数据通信。

二、代码分析

1.接线

STM32DHT11
PB11DO
STM32MQ_气体检测
PA4AO
STM32声音传感器
PA1DO
STM32OLED
PB0SCL
PB1SDA
STM32SG90舵机
PB5DO
PB4DO

在进行使用的时候发现有一个舵机烧坏了,在这里把两个PWM输出口都说明了,但是只用了一个。

2.代码分析

main.c

int  main()
{	
//MQ2_Sensor 初始化
	extern u16 ADC_Val;
// DHT11初始化	
	uint16_t i;
	uint8_t k;
    uint8_t kk;
	uint8_t kkk;
	uint8_t pwmval1;

    initSysTick();
	delay_ms(1500);
	Adc_Init();
	Sound_Init();
	TIM3_PWM_Init(199, 7199);
	OLED_Init();  //OLED初始籨?
	OLED_Clear();
    Oled_Show();
    Usart1_Init(115200);	
    while(1)
	{

/*******************************************************
											声源检测
*******************************************************/			 
		OLED_ShowString(74,6,"off");
/*******************************************************
											气敏检测
*******************************************************/		
		ADC_Val_Disp(10,20);    //气敏检测
//		printf("t=%d,h=%d\r\n",t,h);
		OLED_ShowString(74,0,"normality");

//		OLED_ShowNum(72,0,ADC_Val/1000,4,4);
//		OLED_ShowNum(85,0,(ADC_Val%1000)/100,4,4);
//		OLED_ShowNum(97,0,(ADC_Val%100)/10,4,4);
//		OLED_ShowNum(111,0,ADC_Val%10,4,4);
//		delay_ms(1000);
		 
/*******************************************************
											温度检测
*******************************************************/			 
		 
		DHT11_UpdateData();
		
		i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
       if(Rxbuff[4] ==i)
		{
		  k=Rxbuff[2];
		  kk=Rxbuff[0];
		  kkk=Rxbuff[3];
	      OLED_ShowNum(74,2,k/10,3,3);
		  OLED_ShowNum(82,2,k%10,3,3);
	      OLED_ShowNum(98,2,kkk,3,3);
		  OLED_ShowNum(88,4,kk/10,3,3);
	  	  OLED_ShowNum(98,4,kkk%10,3,3);

		}
		delay_ms(2000);
   }
}

DHT11.c

void DHT11_GPIO_Init(void);       //DHT11_GPIO 输出函数
void DHT11_GPIO_Init1(void);      //DHT11_GPIO 输入函数
void DHT11_Start(void);           //DHT11 起始信号
void DHT11_ReceptionBuff(void);   //DHT11 时序图编写的函数
void DHT11_UpdateData(void);      //DHT11 初始化

MQ_Sensor.c

void Adc_Init(void);              //初始化ADC
u16 Get_adcvalue(void);           //得到数据(数字量)
void ADC_Val_Disp(u8 Page,u8 Colum);  //得到数据(模拟量)  在主函数中 令其=ADC_Val

EXIC.c

void GPIo_Init(void);     //  GPIO初始化
void EXIC1_Init(void);    //  设置外部中断

oled.c

static void OLED_IIC_Start(void);    //iic起始信号
static void OLED_IIC_Stop(void);     //iic停止信号
static unsigned char IIC_Wait_Ack(void);   //iic应答信号
static void Write_IIC_Byte(unsigned char IIC_Byte);  //iic写操作
static void Write_IIC_Command(unsigned char IIC_Command);   //iic写指令
static void Write_IIC_Data(unsigned char IIC_Data);     //iic写数据
void OLED_WR_Byte(unsigned char dat,unsigned char cmd);   //oled写入一个字节
void OLED_Set_Pos(unsigned char x,unsigned char y);    //设置数据写入的起始行,列
void OLED_Display_On(void);          //oled开显示
void OLED_Display_Off(void);         //oled关显示
void OLED_Clear(void);               //oled清屏
void OLED_ShouChar(unsigned char x,unsigned char y,unsigned char chr);   //oled写入一个字符
void OLED_Init(void);   //oled初始化  (此函数为厂家提供的)
void OLED_ShowString(unsigned char x, unsigned char y,unsigned char *chr);  //oled显示一个字符串
void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len ,unsigned char size);   //oled显示一个数字
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no);  //oled显示 温湿度字符(使用了自定义的字库)
void OLED_ShowMQ(unsigned char x,unsigned char y,unsigned char no);   //oled显示气体浓度字符  (使用了自定义的字库)
void OLED_ShowSound(unsigned char x,unsigned char y,unsigned char no);  //oled显示声源检测   (使用自定义的字库)

timer.c

void TIM3_Int_Init(u16 arr,u16 psc);   //配置定时器TIM3
void TIM3_PWM_Init(u16 arr,u16 psc);   //定时器输出双路PWM波

3.注意事项

在使用时由于使用的杜邦线接线,所以会有接触不好的情况
如果出现显示不对的时候可以按复位键重新通信

4.实验现象

上电之后 ,oled显示 :气体浓度、当前温度、当前湿度、声源检测。
当检测到声音之后会控制舵机进行制动。

总结

由于时间关系有好多模块没有加上,而且这个项目比较简单,在代码的分析上只写了函数名,想要了解详细代码,可以私聊我发你邮箱。
另外,能力有限,在主函数的逻辑上还有许多欠佳的地方,欢迎大佬们指点。

链接:https://pan.baidu.com/s/1Mfc3eFAvvVRgMS9zAYk3dA
提取码:A0G4
在这里插入图片描述

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值