近日学习STM32串口通信,手上又有现成的PM2.5传感器和蓝牙HC-06模块,于是做了一个小型的空气检测并通过蓝牙实时往手机发送的小系统,并且通过L298N电机驱动可以控制一个电机进行空气清新,因为电机还没到,而且空气净化的过滤器也没有,所以我这个暂时只是一个简单的实现空气净化的模拟机,具体的空气过滤环节还请读者自行设计。
这是我这次使用的传感器图片,在某宝上可以买到,100大洋左右
,
这是程序运行的结果,天津这两天空气质量太差了,学校寝室室内浓度都100+
程序的话,我在这儿就不粘出来了,下载了那个包都能看见,接线也在包里,四个按键的作用都有说明,我在这儿就不一一解释了,那个传感器可以测PM2.5和PM10,一秒发送十个字节,其中四个字节是有效的数据,如果购买传感器的话,都会有的,具体实现的功能很简单,就控制电机转的三个挡位,还有一个实时发送数据并自动控制电机的挡位,如果想要PM10数据的读者可自行设计一下。
刚入门单片机没多久,大神勿喷。
接线
电机PWM输出→PF9
PM2.5传感器TX→PA10
蓝牙HC06RX→PA9
探索者四个按键功能
up→根据PM2.5数据自动控制电机并实时上传数据到蓝牙串口
2→电机全速运行
1→电机中速运行
0→电机慢速运行
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "beep.h"
- #include "key.h"
- #include "lcd.h"
- #include "pwm.h"
- #include "exti.h"
- u8 MOTOR;
- int main(void)
- { u8 key; //保存键值
- u8 x=0;
- u8 t;
- u8 T1;
- u8 T2;
- float temp;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //延时初始化
- uart_init(9600); //串口初始化波特率为115200
- LED_Init(); //初始化与LED连接的硬件接口
- KEY_Init(); //初始化与按键连接的硬件接口
- LCD_Init(); //初始化LCD FSMC接口
- EXTIX_Init(); //初始化外部中断输入
- TIM14_PWM_Init(2000-1,840-1);
- POINT_COLOR=RED; //画笔颜色:红色
- while(1)
- {
- POINT_COLOR=RED;
- LCD_ShowString(30,40,210,24,24,"The Air Purifier");
- LCD_ShowString(30,70,200,16,16,"PRPOTOTYPE TEST");
- LCD_ShowString(30,90,200,16,16,"TJUT");
- LCD_ShowString(30,180,200,16,16,"DATA:");
- LCD_ShowString(78,210,200,16,16,"PM2.5:000.0 ug/m^3"); //先在固定位置显示小数点
- T1=USART_RX_BUF[1];
- T2=USART_RX_BUF[2];
- temp=(float)(T1+(T2*256))/10;
- if(MOTOR)
- {
- printf("\r\nPM2.5:");
- printf("%5.1f\r\n",temp);
- if (temp>200)
- TIM_SetCompare1(TIM14,1999);
- else
- TIM_SetCompare1 (TIM14,temp*10);
- }
- T2=temp;
- LCD_ShowxNum(126,210,T2,3,16,0);
- temp-=T2;
- temp*=10;
- LCD_ShowxNum(158,210,temp,1,16,0);
- LED0=!LED0;
- delay_ms(1000);
-
- }
- }
复制代码
所有资料51hei提供下载:
空气净化器(程序).7z
(336.7 KB, 下载次数: 66)
|