1. 自動檢測空氣品質(pm2.5,Pm10)
2. 自動檢測溫度,濕度,氣壓
3. 定時上傳空氣品質資料到伺服器,并通過手機App顯示
4. 當空氣品質差的時候自動開啟空氣淨化器并報警提示關窗
5. 當空氣品質淨化完畢後自動關閉空氣淨化器
前言
話說樓主終于更新當爸了,寶寶現在5個月了,寶寶出生的時候是冬天,正是魔都空氣污染嚴重的時候,當時就想搞個自動開啟空氣淨化器,由于種種原因一直沒有時間搞,最近終于閑下來了這個事情終于提上議程了,現在是夏天,空氣都還行,各種空氣品質相關電子産品都打折,正是動手的好時機。
計劃的主要功能有:
- 自動檢測空氣品質(pm2.5,Pm10)
- 自動檢測溫度,濕度,氣壓
- 定時上傳空氣品質資料到伺服器,并通過手機App顯示
- 當空氣品質差的時候自動開啟空氣淨化器并報警提示關窗
- 當空氣品質淨化完畢後自動關閉空氣淨化器
架構
計劃使用ardunio連接配接空氣品質傳感器,溫度,濕度,氣壓傳感器,通過wifi子產品通過http上傳到伺服器背景,伺服器采用.net mvc架構。app使用網站提供的接口擷取資料并顯示
計劃使用的硬體有:
Ardunio mini pro
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iN5QzM0YzMzITL2UTM3IjM1ATM0IjNwYTMwITLzgTN4kzLcZDM2EDMy8CXzgTN4kzLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
攀藤G5 空氣品質傳感器
繼電器
溫濕度傳感器
氣壓傳感器
WIFI子產品
電源子產品
有些朋友可能會問為啥用ardunio pro mini,主要有兩個原因,一個便宜,一個性能夠用。
空氣品質傳感器使用攀藤的原因主要是該傳感器市場回報性能不錯,經過試驗确實性能不錯,另外一個就是現在買便宜:-)
電源子產品為啥要用兩個的原因是部分傳感器使用3.3v電壓,部分傳感器使用5v電壓,計劃使用交流轉5v子產品獲得5V點,然後5v電再接一個降壓子產品獲得3.3v電
我會用一系列的文章來記載我這次的DIY,有興趣的朋友可以加我扣扣-1942916494,大家一起探讨。
擷取空氣污染指數
硬體連接配接
首先連接配接攀藤G5傳感器和ardunio,隻要連3根線,vcc,gnd,把攀藤G5的tx線連到ardunio的D8口
注意攀藤的vcc和gnd是紫色和黃色的不是紅色和黑色
攀藤的vcc和gnd是紫色和黃色的不是紅色和黑色
重要的話說三遍,攀藤的tx是綠色的線,綠色的線接D8,理論上可以接任意一個數字口,不過不要接4,5,原因是arduino的i2c是通過這個兩個數字接口,我們很多傳感器都是用i2c來和ardunio來通訊,是以不要占用這兩個口
連接配接電腦
ardunio mini pro需用FTDI-232連接配接電腦,連線 ardunio vcc - ftdi vcc, ardunio gnd - ftdi gnd, ardunio tx - ftdi rx, ardunio rx - ftdi tx, ardunio rst - ftdi rst
如果已經用降壓子產品連接配接了ardunio的電源,不要接vcc和gnd,如果已經用降壓子產品連接配接了ardunio的電源,不要接vcc和gnd,如果已經用降壓子產品連接配接了ardunio的電源,不要接vcc和gnd
接好後,把ftdi連接配接到電腦的usb上,如果是第一次連接配接會安裝驅動,裝好後,會虛拟出一個com口
我的是com5
編寫代碼
使用官方IDE編寫代碼,下載下傳位址:https://www.arduino.cc/en/Main/Software
可以下載下傳綠色版,解壓縮就能用
打開後界面是這樣的
點工具,開發闆選擇ardunio mini or ardunio mini pro,端口選擇虛拟出來的那個com口。
建立一個檔案,拷貝下面的代碼到ardunio IDE中
#include <SoftwareSerial.h>
SoftwareSerial pm25Serial(8, 9); // RX, TX
struct _panteng {
unsigned char len[2];
unsigned char pm1_cf1[2];
unsigned char pm2_5_cf1[2];
unsigned char pm10_0_cf1[2];
unsigned char pm1_0[2];
unsigned char pm2_5[2];
unsigned char pm10_0[2];
unsigned char d[20];
} panteng;
float caiqarr[8] = {0,50,100,150,200,300,400,500};
float cpm10arr[8] = {0,50,150,250,350,420,500,600};
float cpm25arr[8] = {0,35,75,115,150,250,350,500};
int caculateAiq(float * aiqarr, float * contaminatarr,int val , int size)
{
int findidx = 1;
for(int i=findidx;i<size;i++,findidx++)
{
if(contaminatarr[i] >= val)
break;
}
if(findidx >= size)
return (int)aiqarr[size - 1];
float aiq = (aiqarr[findidx]-aiqarr[findidx - 1]) / (contaminatarr[findidx] - contaminatarr[findidx - 1]) * (val - contaminatarr[findidx - 1]) + aiqarr[findidx - 1];
return (int)aiq;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); //USB序列槽向PC發送資料
pm25Serial.begin(9600); //軟序列槽連接配接傳感器
pinMode(13, OUTPUT);//内置led
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
unsigned char c;
char str[100];
static int state = 0;
static int count = 0;
static int time = 0;
int pm1_0, pm2_5, pm10_0; //PM1.0、PM2.5、PM10
int i;
while (pm25Serial.available()) {
c = pm25Serial.read();
// say what you got:
//Serial.print("I received: ");
//Serial.println(c, DEC);
//Serial.println("read");
switch (state) {
case 0:
if (0x42 == c)
{
digitalWrite(13, HIGH); //開始讀取亮燈
state = 1;
}
break;
case 1:
if (0x4d == c) {
state = 2;
count = 0;
//Serial.println(' ');
}
break;
case 2:
((unsigned char *) &panteng)[count++] = c;
sprintf(str, "%02X ", c);
if (count > 28) {
state = 0;
pm1_0 = panteng.pm1_0[0] * 256 + panteng.pm1_0[1];
pm2_5 = panteng.pm2_5[0] * 256 + panteng.pm2_5[1];
pm10_0 = panteng.pm10_0[0] * 256 + panteng.pm10_0[1];
int pm25aiq = caculateAiq(caiqarr,cpm25arr,pm2_5,8);
int pm10aiq = caculateAiq(caiqarr,cpm10arr,pm10_0,8);
sprintf(str, "%d\t%d\t%d\t%d\t%d\t%d", time++, pm1_0, pm2_5, pm10_0, pm25aiq, pm10aiq);
Serial.println(str);
snprintf(str, 16, "PM2.5=%d ", pm2_5);
digitalWrite(13, LOW); //結束讀取熄燈
}
break;
default:
break;
}
}
}
點選上傳,IDE會自動編譯,并上傳代碼到ardunio中。
上傳完畢後,點選工具,序列槽螢幕,在彈出的視窗中就可以看到目前的空氣品質了
強行插入硬廣告
http://www.51bilin.com/,比利牛彙聚全網優惠,為您網購省錢,自動采集目前各大電商最優惠的活動,購物前搜一搜,幫您省錢,提供Chrome插件,android用戶端,iOS用戶端即将推出。