聚豐項目 > 便攜式無線供電空氣質(zhì)量檢測儀

便攜式無線供電空氣質(zhì)量檢測儀

隨著近些年環(huán)保問題的日益嚴峻,身邊的朋友也越來越重視自己的生存環(huán)境,尤其是對空氣質(zhì)量的關(guān)注度日益增高。我就打算自己設(shè)計制作一套便攜式的空氣質(zhì)量檢測儀,采用無線供電的方式來運行保證檢測儀的運行,同時利用無線供電系統(tǒng)給檢測儀內(nèi)部的鋰電池進行充電。(本項目采用的是IDT 5W無線充電開發(fā)套件)

我是活得精彩 我是活得精彩

分享
3 喜歡這個項目
團隊介紹

我是活得精彩 我是活得精彩

團隊成員

嚴曉凱 成員

分享
項目簡介
隨著近些年環(huán)保問題的日益嚴峻,身邊的朋友也越來越重視自己的生存環(huán)境,尤其是對空氣質(zhì)量的關(guān)注度日益增高。我就打算自己設(shè)計制作一套便攜式的空氣質(zhì)量檢測儀,采用無線供電的方式來運行保證檢測儀的運行,同時利用無線供電系統(tǒng)給檢測儀內(nèi)部的鋰電池進行充電。(本項目采用的是IDT 5W無線充電開發(fā)套件)
硬件說明

隨著近些年環(huán)保問題的日益嚴峻,身邊的朋友也越來越重視自己的生存環(huán)境,尤其是對空氣質(zhì)量的關(guān)注度日益增高。目前大部分人獲取當(dāng)?shù)乜諝赓|(zhì)量的途徑是通過當(dāng)?shù)丨h(huán)保站發(fā)布的數(shù)據(jù),但是那些數(shù)據(jù)并不是實時更新的,也不能代表你身邊的空氣質(zhì)量,所以為了想進一步掌握身邊的空氣質(zhì)量到底如何,我就打算自己設(shè)計制作一套便攜式的空氣質(zhì)量檢測儀,恰逢“無線電”論壇和IDT公司舉辦了一場無線供電應(yīng)用的大賽,使我萌發(fā)了一個新的想法,采用無線供電的方式來運行保證檢測儀的運行,同時利用無線供電系統(tǒng)給檢測儀內(nèi)部的鋰電池進行充電,這樣才真正實現(xiàn)了便攜式的意義。通過設(shè)計計算,整機負載電流約500ma,考慮到設(shè)計的充電電流是1000ma,所以項目選用了IDT 5W無線供電系統(tǒng),該系統(tǒng)可以提供5V 1A的最大5W的功率輸出,完全滿足設(shè)計要求。(本項目采用的是IDT 5W無線充電開發(fā)套件)

便攜式無線供電空氣質(zhì)量檢測儀原理圖.jpg


項目的原理圖部分:

包含三大部分組成:

1、無線供電鋰電池充放電部分,由于傳感器的TTL輸出電平是3.3V,所以還需要通過一個LDO將MCU供電電源降為3.3V。傳感器供電部分是5V(內(nèi)部有LDO降壓),有系統(tǒng)直接供電即可。本項目用的電池選用了常見的18650鋰電池,容量2600mah。充放電芯片選用上海鈺泰的ETA9640一體式芯片,最大充放電電流1000ma,自帶鋰電池保護電路,無需外圍再加保護電路。無線供電接收板接口直接與USB供電接口并接,既可以采用USB供電,也可以采用IDT無線系統(tǒng)供電。

2、MCU部分選用了AVR內(nèi)核的8位單片機LGT8F328D,傳感器選用攀藤科技的A003最新款顆粒物傳感器和森爾電子的S8 0053二氧化碳傳感器(由于二氧化碳傳感器價格較貴,最終未進行購買)。

3、顯示屏幕選用了2.2寸串口屏,便于快速開發(fā),降低開發(fā)難度。

便攜式無線供電空氣質(zhì)量檢測儀PCB圖.jpg

便攜式無線供電空氣質(zhì)量檢測儀3D效果圖.jpg

項目的PCB圖和3D圖部分:

這個PCB板子尺寸為80*70mm,正面為主要電路和屏幕部分,反面為18650電池倉和兩個傳感器接口。

最終PCB板和焊接好的PCB板:

焊接好的PCB板子.jpg

半成品正面照片.jpg

半成品反面照片.jpg

IDT無線供電系統(tǒng)接收板

IDT無線供電系統(tǒng)接收板.jpg


無線充電過程

無線充電過程.jpg

軟件說明

本項目軟件設(shè)計采用Arduino IDE開源編程框架,主要分為系統(tǒng)初始化和循環(huán)執(zhí)行兩大部分構(gòu)成。程序部分均包含詳細注釋,可以直接使用,本代碼完全開源,如需轉(zhuǎn)載請注明原作者,謝謝!

 

程序部分:

/*

 

   本程序為V1版本空氣質(zhì)量檢測儀代碼,顯示屏幕為2.2寸串口高分屏。

 

   編譯環(huán)境:Arduino 1.8.5  (其它版本不保證通過編譯)

 

   版權(quán)所有:活得精彩 (QQ:3720300)  如需轉(zhuǎn)載,請注明原作者,謝謝!

 

*/

 

#include <SoftwareSerial.h>//調(diào)用軟串口庫文件

SoftwareSerial pm(2, NULL);//定義PM2.5傳感器接收引腳

SoftwareSerial co(4, NULL);//定義CO2傳感器接收引腳

 

unsigned int CO2;//定義全局變量

unsigned int  pm25;//定義全局變量

 

 

void getCO2(unsigned char Data) //定義CO2計算函數(shù)

{

  static unsigned char RxBuffer[7];

  static unsigned char RxCnt = 0;

  RxBuffer[RxCnt++] = Data;

  if (RxBuffer[0] != 0xFE && RxBuffer[1] != 0x04)

  {

    RxCnt = 0;

    return;

  }

  if (RxCnt > 6)

  {

    CO2 = (int) RxBuffer[3] * 256 + (int) RxBuffer[4];

    RxCnt = 0;

    return;

  }

}

 

void getPM25()//定義PM2.5計算函數(shù)

{

  uint8_t mData = 0;

  uint8_t i = 0;

  uint8_t mPkt[32] = {0};

  int mCheck = 0;

  pm.listen();  //監(jiān)聽pm軟串口

  delay(100);

  while (pm.available() > 0)

  {

    mData = pm.read();

    delay(2);

    if (mData == 0x42) //頭數(shù)據(jù)1   OK

    {

      mPkt[0] =  mData;

      mData = pm.read();

      delay(2);

      if (mData == 0x4d) //頭數(shù)據(jù)2  OK

      {

        mPkt[1] =  mData;

        mCheck = 66 + 77;

        for ( i = 2; i < 30; i++) //循環(huán)接收串口數(shù)據(jù)

        {

          mPkt[i] = pm.read();

          delay(2);

          mCheck += mPkt[i];

        }

        mPkt[30] = pm.read();

        delay(2);

        mPkt[31] = pm.read();

        delay(2);

        // Serial.println("-----------");  //系統(tǒng)調(diào)試用

        // Serial.print(mCheck);//系統(tǒng)調(diào)試用

        // Serial.print("  ");//系統(tǒng)調(diào)試用

        // Serial.println(mPkt[30] * 256 + mPkt[31]);//系統(tǒng)調(diào)試用

        if (mCheck == mPkt[30] * 256 + mPkt[31]) //CRC校驗  OK

        {

          // Serial.println("CRC OK");//系統(tǒng)調(diào)試用

          pm25 = mPkt[12] * 256 + mPkt[13];//根據(jù)協(xié)議計算出PM2.5濃度值

          // Serial.print("pm25:");  Serial.print(pm25); Serial.println("ug/m3  ");//系統(tǒng)調(diào)試用

          Serial.flush();//清空串口緩存

          return;//返回

        }

      }

    }

  }

}

 

void setup()//程序初始化

{

  Serial.begin(9600);

  pm.begin(9600);

  co.begin(9600);

  delay(5000);

  Serial.println("SPG(2);"); //調(diào)用串口屏的第二頁內(nèi)容

  delay(100);

}

 

void loop()//循環(huán)執(zhí)行程序

{

  getPM25();//調(diào)用PM2.5計算函數(shù)

  co.listen();  //監(jiān)聽co軟串口

  delay(100);

  static unsigned char TxBuffer[] = {0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5};//定義讀取指令

  co.write(TxBuffer, 8);//發(fā)送讀取指令給CO2傳感器

  delay(100);

  while (co.available())

  {

    getCO2(co.read());//獲取CO2濃度值

  }

  Serial.print("LABL(48,0,40,159,'");  Serial.print(pm25);  Serial.print("',");  Serial.print(15);  Serial.println(",1);");//將PM2.5數(shù)據(jù)輸出給屏幕

  Serial.print("LABL(48,161,40,319,'");  Serial.print(CO2);  Serial.print("',");  Serial.print(15);  Serial.println(",1);");//將CO2數(shù)據(jù)輸出給屏幕

}

 

 

//程序結(jié)束,如有優(yōu)化方案,歡迎溝通交流

 

源代碼.zip


演示效果
評論區(qū)(0 )