2018年4月2日 星期一

自製環境監控器(發射器)


       
         這東西上個月就在研究了,但在忙就沒有貼上來.......
    安裝好客廳的新風系統(進氣過濾風機),一直想要讓它可以自動運作,自動監控pm2.5和自動開關,於是就開始繼續研究ARDUINO,首先是LCD部分,我用的是NOKIA5110,LCD網路上有教學http://yfrobot.com/thread-2412-1-1.html,然後我想用遙控來做輸入和設定用,所以也加上紅外線接收頭,而且為了不要每次燒錄要拔IC,所以把RXTX腳拉出來,並買了個USB轉串列的CP2102來作上傳動作,為了供電方便,也加了個MICRO USB ,下圖是初步完成的一些東西


                                                                                               上圖是功能測試頁面(舊版)
如上圖左下是RTCPM2.5偵測器和DHT22溫溼度感應器 ,右下是18650和鋰電充放電保護板和升壓模組
這是電路板背面
為了能將時間和測量到的PM2.5發送出去,故加了RF模組,由於第一片板子的328容量不夠,故加了一片NANO板負責RF發送任務
把它們用螺絲和我自己印的骨架組合在一起,用跳冒做連接
RF發射模式
這是組合起來的樣子,盡量充分運用洞洞板的空間,減少跳線的結果,這台負責監控溫溼度和PM2.5 和現在時間,並把數據透過RF發送出去
上圖是最新改版的設定頁面(因為發現溫溼度感應器的DHT.h庫和IRremote.h庫會有相衝問題),當執行irrecv.enableIRIn(),溫溼度就讀不到數據,解決方式就是將紅外線停用,執行下面3
cli(); // 禁止中斷
dht.begin();//溫溼度致能
TIMER_DISABLE_INTR; //取消irrecv.enableIRIn()的影響
sei(); // 允許中斷
就可以恢復到irrecv.enableIRIn()執行前的狀態

但我設定和測試一定要遙控器,所以就取消了溫溼度選項
按下遙控器的1,進入遙控碼測試功能
這時候可以把遙控碼顯示出來
第二個功能是時間顯示和設定,按遙控器2進入
設定時間按ok,進入設定模式,用遙控器上下鍵設定年
設定好年按ok設定月
設定月ok後是日
然後是設定星期
然後是設定時
然後設定分鐘,設定好後按ok0秒開始算
設定好會跳回現在時間

然後這是pm2.5測試功能,剛開所以是0

       上圖是pm2.5感測器PMS3003的數據表,串列傳輸一次8,0000000011111111,傳輸24,516次為我們要的數據

         另外介紹一下,這是我的示波器普源DS1054Z (有破解解碼功能,接好串列於CH1,按下MATH,就可以對波型解碼),這台15有中文介面和4通道,算很有CP值的示波器


               將訊號調整下,可以看到PMS3003的串列數據和波型,串列開頭一定有424D

所以我程式碼是這樣寫的
while (Serial1.available()) //如果接收到資料,就不斷迴圈,直到Serial1.available()=0才跳出
    {
    if(Serial1.available()>=16)
    {
       tm[0] = Serial1.read();
      if(tm[0]==0x42)
      {
        tm[1] = Serial1.read();
        if(tm[1]==0x4d)
      {
        tm[2] = Serial1.read();
        if(tm[2]==0x00)
      {
        tm[3] = Serial1.read();
         if(tm[3]==0x14)
      {
        tm[4] = Serial1.read();
        tm[5] = Serial1.read();
        tm[6] = Serial1.read();
        tm[7] = Serial1.read();
        tm[8] = Serial1.read();
        tm[9] = Serial1.read();
        tm[10] = Serial1.read();
        tm[11] = Serial1.read();
        tm[12] = Serial1.read();
        tm[13] = Serial1.read();
        tm[14] = Serial1.read();
        tm[15] = Serial1.read();
        pmcf10 = tm[4]*256+tm[5];
        pmcf25 = tm[6]*256+tm[7];
        pmcf100 = tm[8]*256+tm[9];
        pmat10 = tm[10]*256+tm[11];
         pmat25 = tm[12]*256+tm[13];
         pmat100 = tm[14]*256+tm[15];
         while(Serial1.available()) //多的資料清除
        {
                   Serial1.read();
        }


      }
        }        
        } 
      }
        }
 

      }
如上,利用判斷式判斷開頭,利用陣列tm來儲存資料,就可以得到串列的資料來做計算處理
然後這是控制功能(用遙控器上下改變狀態)

這是藍芽hc-05控制功能
要裝藍芽模組才能用(如上圖)
這是rf發射功能

這是實際運作樣子

程式碼太長不方便貼,電路圖很簡單,網路上都找的到,未來我還會想到其他功能再加進去


4/5更新:發現在IRremoteInt.H內可以更改使用的 TIMER,如果和其他程式庫相衝可以改看看



沒有留言:

自製簡易新風系統

                   最近空氣品質很糟糕 , 家裡的空氣清淨機開全速壓制 , 只能壓到室內 30~40ug/m3 , 而且要關窗才有效 , 長時間關窗會有二氧化碳的問題 , 後來看網路的文章看多了 , 發現有種東西叫 全熱交換器 , 在裡面...