昆明市网站建设企业-智能产品之DIY空气监测仪

摘要:Author:飘易 Source:飘易Categories:物联网网 PostTime::34飘易好长时间以前就会有个念头,自身DIY一套气体品质检验仪,能够即时检测气体的溫度、环境湿度、CO2、TVOC、室内甲醛、PM2.5等,...

--------

昆明市网站建设企业

-------Author:飘易 Source:飘易
Categories:物联网 PostTime::34

飘易很久之前就有个念头,自身DIY一套空气品质检验仪,能够即时监测空气的温度、湿度、CO2、TVOC、甲醛、PM2.5等,并根据云端即时纪录这些传感器的值,随后根据APP能够便捷的查询历史时间纪录,而且根据APP远程控制操纵智能化机器设备上的一些机器设备例如继家用电器、电动机、全彩LED灯等。


随后2020年春节遇上新冠疫情,得以空出一些時间,飘易就把这个念头落地,刚开始执行这个空气品质检验仪的DIY计划方案。


先简易展现一下基本的成效吧。


面包板上的接线:


万用板上焊接的:

板子右下角预留的空白地区是留给往后焊接别的元器件用的。


手机上APP里的操纵页面:


下面我就大约的分几个方面来讲,硬件配置端 、服务平台端、APP端来讲说这样的智能化硬件配置新项目如何去一步步的完成它。


一、硬件配置端

需要的硬件配置目录(总费用大概200多元化):

MEGA 2560单片机(或2560 PRO)

ESP8266⑿S wifi模组

0.96寸OLED液晶显示信息屏或LCD1602

功能键一组

温湿度传感器:广州市奥松DHT11

CO2 TVOC传感器: 瑞士Sensirion盛思锐 SGP30 (或瑞典SenseAir森尔CO2二空气氧化碳传感器 S8-0053,小米新风机用的这款)

甲醛传感器: 英国达特WZ-S(或国产炜盛ZE08-CH2O,小米有品众筹的霍尼韦尔甲醛监测仪用的是这个传感器)

PM2.5传感器: 日本夏普GP2Y1014AU0F(或攀藤PM2S-3 PM2.5激光器粉尘传感器,小米新风机用的这款)

若干杜邦线

1-2块面包板或万用板
       


1、单片机MEGA 2560

单片机是关键,全部的传感器都归集到MCU这里集中化解决。Arduino mega 2560 有2款,一款是 2560(下图左侧的板子),也有一款是 贴片版的2560 PRO(下图右侧的板子)

如何挑选呢?假如你是准备根据面包板来联接电源电路的话,那末就挑选左侧的2560,一般淘宝上有许多卖家在卖的是Arduino MEGA2560 R3改善CH340G 适配版本号,这是国产的板子,一般创客实验能够买这类的。


假如你是准备把电源电路焊在洞洞板(万用板)上,那末就购买右边的mega 2560 pro贴片版本号,能够立即焊在洞洞板上,变小体积。


2560 和 2560 PRO 的差别就是一些引脚的差别,作用基本一样,PRO少了一对IIC引脚,仅有一组(D20/D21),而2560有2组IIC引脚,可是针对PRO来讲,iic是适用多个机器设备并联的,因而大家能够把多个机器设备立即接到这个IIC引脚上,根据不一样的详细地址来区别机器设备便可。


这是一块以ATmega2560为关键的微操纵器开发设计板,自身具备54组数据I/O input/output端(在其中14组可做PWM輸出),16组仿真模拟比键入端,4组UART(hardware serial ports),应用16 MHz crystal oscillator。因为具备bootloader,因而能夠根据USB立即免费下载程序而不需历经别的外界烧写器。供电部分可挑选由USB立即出示开关电源,或应用AC-to-DC adapter及电池做为外界供电。


下面是2560 PRO 的引脚表明:


2、ESP8266⑿S WIFI模组

wifi模组买得手,先刷固件版本号到1.6.2,提升下平稳性,有关怎样刷固件,能够参照飘易的这篇:乐鑫ESP8266⑿S刷固件1.7版本号的正确姿态 和这篇 乐鑫ESP8266烧录固件、升級全新固件、刷MQTT固件 。


刷好了AT固件后,便可以把WIFI模组联接到MCU上去了,大家只需要联接4个线:

RX
GND


别的线无需联接,除此以外,大家需要设计方案一个配网功能键,当客户按下这个配网功能键后,MCU根据AT命令给wifi模组推送配网命令:

//起动smartconfig,适用ESP-Touch和Airkiss智能化配网
AT+CWSTARTSMART=3

实际的能够参照:Arduino运用AT命令联接乐鑫ESP8266完成串口通信、配网



3、0.96 英寸 OLED 液晶显示信息屏

照片就是下面的这类:

引脚界定:

GND: 接地装置
VCC: 3.3-5V
SCL: 串行通信数字时钟
SDA: 串行通信数据信息


怎样程序编写:

#include  U8glib.h 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI
// OLED显示信息,每行16字,共5行,超出80标识符不显示信息
void oledShow(String s) {
 //u8g.setFont(u8g_font_unifont);// 每行16字母,高10px
 int l = s.length();
 int lineTotal = l / 16;// 共几行
 if (l % 16) lineTotal++;
 String ss =  
 u8g.firstPage();
 do {
 for (int i = 0; i   lineTotal; i++)
 {
 if(i  = 5) break;
 ss = s.substring(i * 16, i * 16 + 16);
 u8g.setPrintPos(0, (i + 1) * 10 + i * 3);// 座标,行高10px,行间距3px
 u8g.print(ss);
 }
 } while (u8g.nextPage());
void setup(void) {
 u8g.setFont(u8g_font_8x13B);//u8g_font_unifont 高10px
}

在需要显示信息的地区,立即启用

oledShow(F( TEMP:25.00 ));

便可以了。


可是,OLED屏在写入数据信息的情况下,会传出滋滋的电流声,这类声音我本人听上去会觉得十分的不舒服,尽管并不是很响,可是你调节机器设备,放在电脑键盘周边的话,这个电流声還是很扰人的。假如你也反感这类吱吱的电流声,能够应用LCD屏幕,例如LCD1602,LCD是是非非常清静的。


4、DHT11温湿度传感器

DHT11是比较完善的一种温湿度传感器了。淘宝搜一下一大堆,照片像下面的这类:

引脚界定:

VCC → 3.3V/5V开关电源正极
GND →开关电源负极
DATA →单片机IO口


怎样程序编写?

立即引入 arduino IDE 库 

#include  DHT.h 
// 获得温湿度
void getTempHumi()
 // 载入温度或湿度需要约250ms
 float t = dht.readTemperature();// 温度
 float h = dht.readHumidity();// 湿度
 // 查验是不是载入不成功
 if (isnan(h) || isnan(t)) {
 Serial.println(F( Failed to read from DHT sensor! ));
 return;
 }
 temp = String(t);
 humi = String(h);
}



5、CO2 TVOC传感器 SGP30

CO2和TVOC的收集大家应用SGP30传感器

这个传感器一般的价钱是在50元左右,各位能够自主淘宝下。


SGP30是一款单一芯片上具备多个传感元件的金属材料空气氧化物气体传感器,内集成化4个气体传感元件,具备彻底校准的空气品质輸出数据信号。此外,SGP易于集成化,可以将金属材料空气氧化物气体传感器集成化到挪动机器设备中,为智能化家居、家电和物联网运用中的自然环境监测开拓了新的将会性。


SGP30控制模块规格型号:

工作中开关电源电压: 1.8V-5V

功耗:40MA

尺寸: 12 mm x 12 mm x 1.6 mm

插口种类: I2C


怎样程序编写?

大家能够引入Adafruit_SGP30库,里边出示了一些事例,能够从事例里改变程序:

#include  Adafruit_SGP30.h 
/* SGP30传感器 温湿度赔偿 - return absolute humidity [mg/m^3] with approximation formula
 @param temperature [°C]
 @param humidity [%RH]
uint32_t getAbsoluteHumidity(float temperature, float humidity) {
 // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
 const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
 const uint32_t absoluteHumidityScaled = static_cast uint32_t (1000.0f * absoluteHumidity); // [mg/m^3]
 return absoluteHumidityScaled;
// 获得CO2   TVOC
void getCo2Tvoc(float temperature, float humidity)
 // 温湿度赔偿 - If you have a temperature / humidity sensor, you can set the absolute humidity to enable the pensation for the air quality signals
 //float temperature = 22.1; // [°C]
 //float humidity = 45.2; // [%RH]
 sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));
 if (! sgp.IAQmeasure()) {
 Serial.println( Measurement failed 
 return;
 }
 CO2 = sgp.eCO2;// 企业ppm
 TVOC = sgp.TVOC;// 企业ppb
}



6、甲醛传感器 D-art WZ-S

甲醛传感器,飘易应用的英国达特的wz-s,这个是带ph2.0 联接线的,也有此外一款是 wz-s-k,这个是插针版本号的。这2款的技术性指标值是一样的,只是对外的引脚方法不一样罢了。大伙儿能够依据需要自主挑选适合的传感器。

WZ-S 型甲醛检验模组是全世界甲醛检验权威专家——英国达特企业的全新力作,选用 升級版达特甲醛传感器结合优秀的微检验技术性,立即将自然环境中的甲醛含量变换成 浓度值,规范化数据輸出,便于顾客集成化应用。WZ-S 型甲醛检验模组历经严苛 的加工厂校准,可立即运用于您的检验管理体系中。


技术性指标值以下:

wz-s和单片机通信是选用串口通信的,大家要是接四个线便可以了:

VCC
TX

通信串口协议书:


通信分积极提交和问与答式,出厂默认设置为积极提交,每隔 1 秒推送 1 次浓度值。


飘易选用问与答式。切换到问与答式,指令行文件格式以下:


怎样程序编写?

// 获得甲醛
void getCH2O()
 int flag_end = false;
 int flag_start = false;
 int count = 0;
 byte buffer[9] = {};
 for (int i = 0; i   9; i++) {
 CH2OSerial.write(Ask_code[i]);//在问与答方式下恳求数据信息
 }
 sleep(10);
 // 载入
 while (flag_end == false)
 {
 if (CH2OSerial.available()   0) {//接受到数据信息
 byte inChar = CH2OSerial.read();
 buffer[count] = inChar;
 if (buffer[count] == 0xFF) { //接受到起止标示
 count = 0;
 flag_start = true;
 }
 count++;
 if (count  = 9 ) { //接受9个byte数据信息
 count = 0;
 if (flag_start) {
 // 校检 且 指令号是 0X86
 if (buffer[8] == FucCheckSum(buffer, 9)   buffer[1] == 0x86 ) { //校检
 flag_end = true;
 }
 }
 }
 }
 }
 if (flag_end)
 {
 int h1 = (int)buffer[2] * 256 + (int)buffer[3];// 企业ug/m3,我国规范是80ug/m3(0.08mg/m3)
 //int h2 = (int)buffer[6] * 256 + (int)buffer[7];// 企业ppb
 CH2O = String(h1);
 }
// 甲醛校检涵数
unsigned char FucCheckSum(unsigned char *i, unsigned char ln) {
 unsigned char j, tempq = 0; i += 1;
 for (j = 0; j   (ln - 2); j++) {
 tempq += *i;
 i++;
 }
 tempq = (~tempq) + 1;
 return (tempq);
}



7、PM2.5传感器 夏普 GP2Y1014AYU0F

PM2.5传感器,飘易现阶段采用的是日本夏普GP2Y1014AYU0F,这是一款性价比很高的传感器,淘宝上的价钱一般在20元左右,它的前一代商品是夏普 GP2Y1010AYU0F,现阶段早已被1014替代了。这是根据红外的尘土传感器,假如你期待有着更高的精准度,能够采用激光器种类的传感器。

一般发货清单以下:

1,GP2Y1014AU0F 尘土传感器(1个)替代早已停产的GP2Y1010AU0F 

2,150ohm的电阻(1个)

3,220uF的电容(1个)

4,6pin联接线(1个)


技术性主要参数:

开关电源电压:5-7V

工作中温度:⑽-65摄氏度

耗费电流:20mA最大

最少颗粒检出值:0.8微米

灵巧度:0.5V/(0.1mg/m3)

清洁空气中电压:0.9V 典型值

工作中温度:⑽~65℃

储存温度:-20~80℃

应用使用寿命:5年

尺寸尺寸:46mm×30mm×17.6mm

净重尺寸:15g


这个传感器一共有6口,ph2.0接线,如何联接呢?

具体接线像下面的这样:

留意LED-VCC引脚需要接一个150欧姆的电阻后再到VCC,同时再接一个220uF的电容再到GND,不可以立即接VCC哦。


电压和尘土之间的关联图:

大家需要依据上面的这个关联图,推导一个传感器輸出电压和尘土浓度之间的关联:

float dustDensity = (0.17 * voltage - 0.1) * 1000; // 企业:ug/m3


程序编写:

// PM2.5传感器 - 夏普GP2Y1014AU0F
String PM25 =  0 
int dustPin = A1;//粉尘传感器仿真模拟键入引脚
int dustLedPower = 29;//粉尘传感器led数据引脚
int dustDelayTime = 280;//取样時间为280微秒
int dustDelayTime2 = 40;//精确测量完后单脉冲需要再次维持,维持時间为320-280=40
int dustOffTime = 9680;//LED单脉冲周期为10毫秒,故此处为10000-320=9680
// 获得PM2.5
void getPm25()
 // 10ms取样周期
 digitalWrite(dustLedPower, LOW);
 delayMicroseconds(dustDelayTime);
 float dustVal = analogRead(dustPin);
 delayMicroseconds(dustDelayTime2);
 digitalWrite(dustLedPower, HIGH);
 delayMicroseconds(dustOffTime);
 // 电压
 float voltage = dustVal * (5.0 / 1024);
 // 粉尘密度 0.9v清洁空气,3.6V最大污染-512ug/m3
 float dustDensity = (0.17 * voltage - 0.1) * 1000; // 企业:ug/m3
 if (dustDensity   0) dustDensity = 0;
 int density = dustDensity * 1.0;// 取整
 //Serial.println(dustDensity);
 PM25 = String(density);

---------

昆明市网站建设企业

------------


联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:如何做一个小程序