首页>>科技 >>内容

自制测试仪的介绍,制作一个PM2.5测试仪

发布时间:2023-07-04 16:50:42编辑:温柔的背包来源:

很多朋友对自制测试仪的介绍,制作一个PM2.5测试仪不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

自制测试仪的介绍,制作一个PM2.5测试仪

雾霾已经成为常态,DIY一个PM2.5检测仪很有必要。利用零基础开发板Arduino UNO R3,用非常简单的电路和很少的代码就可以自己做一个PM2.5检测仪。为了保证测量精度,选用激光粉尘传感器检测空气中的雾霾污染程度,选用DHT11检测环境温度和湿度,非常适合中小学生练习。一、制作PM2.5探测器所需材料Arduino UNO R3开发板,一个激光PM2.5传感器,一个。

1.3寸有机发光二极管屏,1个温湿度传感器DHT11,1个面包板,1根杜邦线,几个电阻,阻值5k左右。1二、元件介绍1、Arduino UNO R3开发板。

Arduino是一个开源设计平台,由硬件Arduino板和软件Arduino IDE集成开发环境组成。Arduino板卡是以AVR微控制器为核心的开源硬件平台,有很多型号和配套资源,其中Arduino UNO R3板卡是最基本最常用的板卡,价格低廉,23元左右,体积小巧,使用方便。Arduino IDE是一个优秀的软件开发平台,界面简单友好,启动快捷,跨平台性好。

Arduino编程基于入门级C语言,门槛较低。最重要的是,在Arduino环境下,很多函数都被封装成了函数,可以直接调用来完成相应的功能,大大降低了编程的复杂度。学生可以在没有太多单片机知识的情况下,使用Arduino板连接各种传感器和电子元器件,快速搭建各种有趣实用的电路,实现丰富的功能。Arduino还支持第三方库和硬件,具有灵活性和可扩展性。2、激光PM2.5传感器

为了保证测试精度,选用了激光PM2.5传感器。缺点是价格离谱,这个东西成本不高。但由于缺乏竞争,价格一直居高不下。传感器接口有六个引脚,但实际上只使用了四个引脚,每个引脚定义如下。

传感器采用异步串行通信(UART ),以帧为单位进行通信。帧格式固定,每帧由9个字节组成,分为命令帧和响应帧。当外部设备向传感器发送命令帧时,传感器将回复外部设备的相应响应帧。波特率:9600;校验位:无;停止位:1位;数据位:8;3、OLED屏幕有机发光二极管显示器采用有机发光二极管,不需要背光。它是一种相对较新的显示器,但其价格较高,寿命不如LCD长。

有机发光显示技术由非常薄的有机材料涂层和玻璃基板组成。当电荷通过这些有机材料时,它们就会发光。有机发光二极管的发光颜色取决于有机发光层的材料,因此制造商可以通过改变发光层的材料来获得所需的颜色。有源阵列有机发光显示屏内置电子电路系统,每个像素由相应的电路独立驱动。

有机发光二极管具有结构简单、无背光自发光、对比度高、厚度薄、视角宽、反应速度快、可用于柔性面板、温度范围宽等优点。

该程序使用128x64的1.3英寸有机发光二极管单色显示屏。连接IIC接口时,请仔细检查电源和地线,不要接反。4、温度和湿度传感器

DHT11是一种廉价的温度和湿度传感器。湿度由湿敏电阻测量,温度由数字温度传感器测量。经单片机处理后,采用串行输出。DHT11大概4块钱,但是有点丑。DHT22价格15元左右。虽然颜色变白了,但是颜值还是很低。两者的引脚定义相同,但操作时序不同,应用时需要注意。在这里,我们选择DTH11型号。DHT11的硬件连接非常简单,原理图如下三、软件环境配置和安装。

双击arduino-1.8.3-windows.exe,安装指南将出现。依次确认,默认安装。安装完成后,桌面上会出现Arduino软件的logo。下次双击它。配置开发环境,插入Arduino UNO R3开发板,系统自动安装USB驱动。选择相应的板卡选择端口,通过设备管理器查看设备对应的端口情况。这台机器相当于COM5。验证打开的文件,例如,找到闪烁程序。

点击勾号,验证程序是否可以编译,如果一切正常;点击右边的箭头,将编译好的程序上传到Arduino UNO R3的AVR微控制器;也可以直接点击箭头,IDE会先进行验证,验证通过后直接上传。如果你看到LED闪烁,这意味着一切正常。恭喜安装成功,板卡正常。添加第三方库启动Adruino IDE项目——“加载库——”管理库,搜索DHT,安装DHT传感器库,支持DHT11。

项目-加载库-管理库,搜索U8GLIB,安装U8GLIB支持有机发光二极管四、开始动手操作温湿度传感器1、先将Arduino UNO R3板上的电源和地引到面包板上2、连接温湿度传感器,传感器的数据输出SDA接到Arduino板的A0口,温湿度的连接方式很简单。如本文前面的原理图所示,除了电源和地,只有一条SDA线通过一个5-10k的电阻上拉至5V,同时连接到Arduino板卡的A0口。

3、调用例程文件-“示例-“DHT传感器库-”DHT测试仪4、修改数据输入#定义DHT管脚A0//我们重新连接到什么数字管脚5、修改例程以支持DHT11。去掉这行前面的//# define DHT type DHT 11//DHT 116、上传程序,打开串口监视器,设置波特率为9600,观察环境温度和湿度。有机发光二极管屏操作1、断开Arduino UNO R3板卡电源。

2、把OLED屏连接好,由于是IIC接口,电路连接很简单,OLED屏除了连接好电源和地,只需将SCL接Arduino板的A5端,SDA接Arduino板的A4端即可。

3、调入例程

文件-》示例-》U8glib -》helloword

4、修改例程,支持OLED,去掉该行前面的//

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);//I2C/TWI

5、上传程序,观察OLED屏的显示是否正确。

操作PM2.5传感器

该传感器是一款激光数字式PM2.5传感器,内置激光器和光电接收组件,采用光散射原理,激光在颗粒物上产生散射光,由光电接收器转变为电信号,再通过特定算法计算出PM2.5值和PM10值。

该传感器采用串口输出,除了1脚接地,2脚接电源,再将3脚TXD和4脚RXD分别接Arduino板的D5、D6端口,当然,您也可以接别的端口,只要程序做相应的修改即可。

常用指令只需要三条,分别是开机指令、读取PM2.5值指令和关机指令,不妨根据手册自己编写试试,简单起见,可以用串口监视器显示结果。

五、编写程序,实现PM2.5检测仪由于硬件电路已经逐步连接完毕,下面可以针对整个电路编写程序了,把各部分功能统一起来,软件示例代码如下:

#include 《DHT.h》

#include “U8glib.h”

#include 《SoftwareSerial.h》

//说明,这仅是一个简单的示例程序,目的是帮助初学者入门

#define DHTPIN A0 //接温湿度传感器的数据端

//选择合适的温湿度传感器型号

#define DHTTYPE DHT11 //DHT 11

//#define DHTTYPE DHT22 //DHT 22 (AM2302), AM2321

uint8_t PM25_OPEN={0xAA,0x01,0x00,0x00,0x00,0x00,0x01,0x66,0xBB}; //开机指令

uint8_t PM25_CLOSE={0xAA,0x03,0x00,0x00,0x00,0x00,0x01,0x68,0xBB}; //关机指令

uint8_t PM25_DATA={0xAA,0x02,0x00,0x00,0x00,0x00,0x01,0x67,0xBB}; //读数据指令

DHT dht(DHTPIN, DHTTYPE);

//软串口定义格式SoftwareSerial(rxPin, txPin, inverse_logic)

SoftwareSerial mySerial(5, 6); //定义软串口,D5、D6分别连接PM2.5传感器的3(TXD)、4(RXD)

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); //I2C/TWI OLED屏定义

uint16_t pm25, pm10;

float h, t, hic;

void setup() {

mySerial.begin(9600); //设置软串口波特率与PM2.5传感器一致

if ( u8g.getMode()==U8G_MODE_R3G3B2 ) {

u8g.setColorIndex(255); //white

}

else if ( u8g.getMode()==U8G_MODE_GRAY2BIT ) {

u8g.setColorIndex(3); //max intensity

}

else if ( u8g.getMode()==U8G_MODE_BW ) {

u8g.setColorIndex(1); //pixel on

}

else if ( u8g.getMode()==U8G_MODE_HICOLOR ) {

u8g.setHiColorByRGB(255,255,255);

}

pmOn();

delay(2000);

}

int i=0;

void loop() {

u8g.firstPage();

if (i==0) pmRead();

if(i》=5) i=0;else i++;

dhtRead();

do {

draw();

} while( u8g.nextPage() );

delay(500);

}

void pmOn(){

mySerial.write(PM25_OPEN,9);

}

void pmOff(){

mySerial.write(PM25_CLOSE,9);

}

void pmRead(){

uint8_t data9;

//while(mySerial.available());

mySerial.write(PM25_DATA,9);

delay(100);

for(int i=0;i《9;i++){

if (mySerial.available()) {

datai=mySerial.read();

}

}

if(data0==0xAA data8==0xBB){

pm25=data4*256 + data5;

pm10=data2*256 + data3;

}

}

void dhtRead(){

//Reading temperature or humidity takes about 250 milliseconds!

//Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)

h=dht.readHumidity();

//Read temperature as Celsius (the default)

t=dht.readTemperature();

//Compute heat index in Celsius (isFahreheit=false)

hic=dht.computeHeatIndex(t, h, false);

}

void draw(void) {

//graphic commands to redraw the complete screen should be placed here

char sendBuff20;

u8g.setFont(u8g_font_unifont_78_79);

sprintf(sendBuff,“%c”,14);

u8g.drawStr( 0, 18, sendBuff);

u8g.setFont(u8g_font_unifont);

sprintf(sendBuff,“H:%2d%% T:%2d%cC”,(int)h,(int)t,0xB0);

u8g.drawStr( 20, 18, sendBuff);

u8g.setFont(u8g_font_profont22);

sprintf(sendBuff,“PM2.5:%4d”,pm25);

u8g.drawStr( 6, 42, sendBuff);

sprintf(sendBuff,“PM 10:%4d”,pm10);

u8g.drawStr( 6, 64, sendBuff);

}

运行结果

六、工匠精神为使这款PM2.5检测仪更具有实用性,你也可以动手制作印刷电路板,为便于初学者使用,主控芯片可以采用与Arduino UNO R3板子一样的CPU。

以上知识分享希望能够帮助到大家!