• 方案介紹
    • 一、項(xiàng)目名稱:
    • 二、項(xiàng)目概述:
    • 三、作品實(shí)物圖
    • 四、項(xiàng)目文檔
    • 五、視頻
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

車內(nèi)環(huán)境監(jiān)控

05/28 14:30
334
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

carairinfo.zip

共1個(gè)文件

一、項(xiàng)目名稱:

車內(nèi)環(huán)境監(jiān)測(cè)系統(tǒng)。

二、項(xiàng)目概述:

伴隨現(xiàn)代化生活,每日在車上的時(shí)間越來(lái)越長(zhǎng)。車內(nèi)環(huán)境對(duì)身體影響比重也在加大。為保障健康,對(duì)車內(nèi)環(huán)境進(jìn)行監(jiān)測(cè)就很有必要了。
本系統(tǒng)以樹莓派5作為主控制器,外接多個(gè)傳感器。
1、MQ-3酒精探測(cè)器,與ADS1115配合使用,用于檢測(cè)駕駛員是否有喝酒,酒駕作為最危險(xiǎn)的駕駛行為必須嚴(yán)厲禁止。
2、MH-Z19B二氧化碳濃度傳感器,二氧化碳濃度過高,容易導(dǎo)致疲勞、注意力下降,需要及時(shí)換氣通風(fēng)。
3、PM2.5空氣質(zhì)量傳感器,這是一個(gè)可以測(cè)量PM2.5,PM1.0,PM10等顆粒物的空氣質(zhì)量傳感器。
4、溫濕度傳感器STH30,用來(lái)監(jiān)測(cè)溫度和濕度。
5、微雪1.28寸圓形屏幕,用來(lái)展示各種信息。

 

制作出實(shí)物,發(fā)現(xiàn)個(gè)問題,購(gòu)買的ADS1115芯片,買錯(cuò)封裝了,導(dǎo)致芯片無(wú)法安裝,無(wú)奈之下,使用ADS1115的模塊,來(lái)代替板子上的芯片的功能。

 

傳感器中SHT30、ADS1115模塊和PM2.5空氣質(zhì)量傳感器,與樹莓派使用I2C通訊,共用一組I2C接口。MH-Z19B二氧化碳濃度傳感器使用串口通信,這里使用串口1。
軟件部分:
系統(tǒng)使用python+C來(lái)實(shí)現(xiàn)。需要預(yù)先安裝對(duì)應(yīng)的包
pip install spidev
pip install numpy
pip install smbus
pip install rpi.gpio
pip install getrpimodel
pip install gpiozero
pip install pillow
pip install pyserial
pip install getrpimodel
pip install getrpimodel
pip3 install adafruit-circuitpython-ads1x15
這里遇到個(gè)奇怪的問題,SHT30溫濕度傳感器,掛載在樹莓派的I2C1總線上。通過命令查詢SHT30掛載正常。但是使用python始終無(wú)法正常讀取到溫濕度信息。
import time
import smbus
BUS = smbus.SMBus(1)
addr=0x44# sht30
def read_value():
    BUS.write_byte_data(addr,0xe0,0x0)
    time.sleep(1)
    data = BUS.read_i2c_block_data(addr,0x0,6) 
    rawT = ((data[0]) << 8) | (data[1])
    rawR = ((data[3]) << 8) | (data[4])
    temp = -45 + rawT * 175 / 65535
    RH = 100 * rawR / 65535
    return temp,RH
 
def init_sht30():
    try:
        BUS.write_byte_data(addr,0x23,0x34)
        time.sleep(0.5)
    except:
        return False
    else:
        return True 
        
if __name__ == '__main__':
    init_sht30()
    while True:
        temp,rh=read_value()
        strtemp="{:.1f}".format(temp)
        strrh="{:.1f}".format(rh)
        print(strtemp,strrh)
        time.sleep(1)

焊接的芯片,一直懷疑是硬件問題,更換了芯片也是問題依舊。后來(lái)使用C去讀取傳感器,就一切正常,原因還是沒能找到

#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>

void main() 
{
        // Create I2C bus
        int file;
        char *bus = "/dev/i2c-1";
        if ((file = open(bus, O_RDWR)) < 0) 
        {
                printf("0 0n");
                exit(1);
        }
        char config[2] = {0x2C,0x06};
        char data[6] = {0};
        // 循環(huán)讀取sht30數(shù)據(jù)
        while(1){
                // Get I2C device, SHT30 I2C address is 0x44(68)
                ioctl(file, I2C_SLAVE, 0x44);                
                write(file, config, 2);
                sleep(1);
                // Read 6 bytes of data
                // Temp msb, Temp lsb, Temp CRC, Humididty msb, Humidity lsb, Humidity CRC        
                if(read(file, data, 6) != 6)
                {
                        printf("0 0n");
                }
                else
                {
                        printf("%d %dn",(data[0] * 256 + data[1]), (data[3] * 256 + data[14]));
                }
                fflush (stdout);
                sleep(1);
        }
}
最終妥協(xié)為,SHT30使用C代碼去讀取,并用管道與python代碼連接。其余傳感器都是用python獲取。
# 溫濕度信息由SHT30提供,使用線程 通過管道獲取
class Sht30(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.sht =Popen('sht30',shell=True,stdin=PIPE,stdout=PIPE)

    def run(self):
        while True:
            line = self.sht.stdout.readline()
            if not line:  #空則跳出
                break
            # print(type(line.decode("GBK").replace('n', '').split()),line.decode("GBK").replace('n', '').split())
            valuelist=line.decode("GBK").replace('n', '').split()
            airinfo['temperature']=-45 + (175 * int(valuelist[0]) / 65535.0)
            airinfo['humidity'] = 100 * int(valuelist[0]) / 65535.0;
        print("look up!!! EXIT ===")   #跳出

酒精監(jiān)測(cè)也是本項(xiàng)目重點(diǎn)關(guān)注的點(diǎn)。使用半導(dǎo)體MQ-3酒精傳感器。MQ-3酒精傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)酒精傳感器所處環(huán)境中存在酒精蒸汽時(shí),氣體傳感器的電導(dǎo)率隨空氣中酒精氣體濃度的增加而增大。使用簡(jiǎn)單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出信號(hào)。由于樹莓派沒有ADC的電路,這里使用ADS1115,一個(gè)10位的AD轉(zhuǎn)換芯片來(lái)讀取MQ-3的輸出。

參考著資料和網(wǎng)上**們的經(jīng)驗(yàn),使用擬合方式計(jì)算酒精濃度。公式:ppm=pow((6.467*10*V)/(5-V),(1.0/0.3962))(變量V為ADC采集到的電壓值)
但是通過上邊公式計(jì)算出來(lái)的值的單位是PPM,如何轉(zhuǎn)換為交警同志認(rèn)可的酒精血液濃度,沒找到相關(guān)資料,這里僅僅使用PPM來(lái)做處理,通過實(shí)際測(cè)量,10000以下僅僅是淡淡的酒精味道,當(dāng)酒味稍微濃郁一些時(shí),空氣中酒精濃度的PPM就超過10000了,程序里先使用10000作為閾值。
#讀取其它傳感器 二氧化碳傳感器,酒精傳感器 空氣質(zhì)量傳感器
airqualitysensor = DFRobot_AirQualitySensor()
i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1015(i2c)
alcoholval = AnalogIn(ads, ADS.P3)    #使用P3管腳
def readDevice():
    #讀取二氧化碳傳感器  單位 PPM
    co2dic=read_all()
    airinfo['co2']=co2dic['co2']
    #讀取空氣質(zhì)量信息 單位 指定顆粒物類型的濃度 PM1.0 PM2.5 PM10    濃度(ug/m3)
    airinfo['PM25']=airqualitysensor.read_standard()
    #酒精濃度 大致為 ppm=pow((6.467*10*V)/(5-V),(1.0/0.3962)) 單位ppm
    airinfo['alcohol']=pow((6.467*10*alcoholval.voltage)/(5.0-alcoholval.voltage),(1.0/0.3962))
    # print("{:>5}t{:>5.3f}".format(alcoholval.value, alcoholval.voltage))

三、作品實(shí)物圖

四、項(xiàng)目文檔

參考附件

五、視頻

  • carairinfo.zip
    下載
DigiKey得捷

DigiKey得捷

DigiKey 總部位于美國(guó)明尼蘇達(dá)州錫夫里弗福爾斯市,是一家獲得原廠授權(quán)的全球性、全類目電子元器件和自動(dòng)化產(chǎn)品分銷商。我們通過分銷來(lái)自 2,300 多家優(yōu)質(zhì)品牌制造商的 1,020 多萬(wàn)種元器件獲得了強(qiáng)大的技術(shù)優(yōu)勢(shì)。DigiKey 還為工程師、設(shè)計(jì)師、開發(fā)者和采購(gòu)專業(yè)人員提供豐富的數(shù)字解決方案、無(wú)障礙互動(dòng)和工具支持,以幫助他們提升工作效率。在中國(guó),客戶可以通過電子郵件、電話和客服獲得全方位技術(shù)支持。如需了解更多信息和獲取 DigiKey 廣泛的產(chǎn)品,請(qǐng)?jiān)L問 www.digikey.cn 并關(guān)注我們的微信、微博、騰訊視頻和 BiliBili 賬號(hào)。

DigiKey 總部位于美國(guó)明尼蘇達(dá)州錫夫里弗福爾斯市,是一家獲得原廠授權(quán)的全球性、全類目電子元器件和自動(dòng)化產(chǎn)品分銷商。我們通過分銷來(lái)自 2,300 多家優(yōu)質(zhì)品牌制造商的 1,020 多萬(wàn)種元器件獲得了強(qiáng)大的技術(shù)優(yōu)勢(shì)。DigiKey 還為工程師、設(shè)計(jì)師、開發(fā)者和采購(gòu)專業(yè)人員提供豐富的數(shù)字解決方案、無(wú)障礙互動(dòng)和工具支持,以幫助他們提升工作效率。在中國(guó),客戶可以通過電子郵件、電話和客服獲得全方位技術(shù)支持。如需了解更多信息和獲取 DigiKey 廣泛的產(chǎn)品,請(qǐng)?jiān)L問 www.digikey.cn 并關(guān)注我們的微信、微博、騰訊視頻和 BiliBili 賬號(hào)。收起

查看更多

相關(guān)推薦