我們將在該項(xiàng)目中使用SGP30 CO2和VOC(揮發(fā)性有機(jī)化合物)傳感器。它講的是I2C,它在Raspberry Pi上相對(duì)容易使用。 Adafruit的Arduino和CircuitPython板已有預(yù)先存在的庫,但我找不到Pi的庫,所以我自己寫了。
將傳感器連接到Pi
首先,我們讓Pi設(shè)置為I2C。
在本指南中,我引用 物理Pi引腳數(shù) ,不 Broadcom或GPIO號(hào)碼。在本PDF中,我使用的是中間的(白色背景,在鍵中標(biāo)記為“位置”)。
在你的Pi上,運(yùn)行 sudo raspi-config 。在“接口選項(xiàng)”下,找到并啟用“I2C”。
在Raspbian的最新版本中,我們需要的軟件已經(jīng)安裝,但為了以防萬一,使用 apt-get 來安裝 python-smbus 和 i2c-tools:
$ sudo apt-get update
$ sudo apt-get install python-smbus i2c-tools
關(guān)閉pi并連接SGP30突破端的引腳,如下所示:
SCL →Pi pin 5
SDA →Pi pin 3
Vin →Pi 5v(任何會(huì)做)
Gnd →Pi接地(任何會(huì)做)
1v8 未連接
打開Pi電源并檢查是否檢測到SGP30。運(yùn)行 i2cdetect -y 1 并查找地址為0x58的設(shè)備。 (注意,在其他一些Pis上,你想要 i2cdetect -y 0 ,顯然)。
就是這樣!讓我們?cè)囍務(wù)勥@件事。
第2步:傳感器芯片 - 腳本
現(xiàn)在連接并檢測到傳感器芯片,讓我們測試一下。
從Github下拉SGP30 RPi庫:
$ git clone https://github.com/misterfifths/sgp30.git
將目錄更改為克隆的倉庫:
$ cd sgp30
運(yùn)行演示腳本:
$ python demo.py
SGP30需要大約15秒才能預(yù)熱,所以希望看到“熱身。..。..“一會(huì)兒。最終你應(yīng)該看到如上圖所示的輸出。
疑難解答
IOError :檢查與突破的連接板。這通常意味著I2C連接出現(xiàn)問題。
使用SMBus的
ImportError :未安裝SMBus。運(yùn)行 apt-get install python-smbus。
第3步:演講者
Raspberry Pi Zero沒有專用音頻輸出,因此我們將使用PWM引腳來模擬它。我們將遵循Adafruit的本指南中的一些內(nèi)容,不幸的是,這些內(nèi)容已經(jīng)過時(shí)了。還有一些小的調(diào)整,主要是因?yàn)槭褂脝温暤酪纛l。
Raspberry Pi設(shè)置
啟用PWM音頻的設(shè)備樹覆蓋,記錄在這里。在您喜歡的編輯器中以root身份打開/boot/config.txt ,并在最后添加此行:
dtoverlay=pwm
您可以跳過此步驟Adafruit將PWM引腳設(shè)置為Alt-5模式的指南;對(duì)于設(shè)備樹覆蓋,這似乎是不必要的。
您也可以跳過Adafruit指南中的低通濾波器,除非您有冒險(xiǎn)精神。沒有它我們從Pi得到了不錯(cuò)的音頻。
運(yùn)行`sudo raspi-config`,在“Audio”下,強(qiáng)制輸出超過3.5mm(耳機(jī))插孔。這將確保即使連接HDMI電纜,揚(yáng)聲器仍然可以工作。
重新啟動(dòng)Pi。
連接放大器
現(xiàn)在已將Pi設(shè)置為PWM音頻,我們需要連接放大器。規(guī)格表說如果我們沒有差分輸出(我們沒有),我們應(yīng)該接地音頻。所以布線是這樣的:
放大器A + →Pi引腳12(這是 pwm 疊加使用的PWM音頻引腳默認(rèn))
放大器A - →Pi接地(任何會(huì)做)
放大器輸入→Pi 5v(任何會(huì)做)
Amp Gnd →Pi接地(任何會(huì)做)
Amp SD 未連接(這是關(guān)機(jī)引腳 - 可以很有趣,但不是必需的)
將放大器輸出端子連接到揚(yáng)聲器,然后重新啟動(dòng)Pi。
測試音頻并最大限度地減少靜電
由于我們使用PWM偽裝音頻輸出,因此波形非常嘈雜。以下是我們?nèi)绾螐腜i獲得合適的音頻:
運(yùn)行 alsamixer 并將音量調(diào)高。
使用 aplay 播放聲音。你應(yīng)該聽到聲音,之后可能會(huì)聽到很多靜電。
使用小螺絲刀調(diào)節(jié)放大器板上的電位計(jì)。如果您聽到靜電,請(qǐng)將其關(guān)閉只是,直到您不再使用它為止。如果您什么也聽不到,請(qǐng)將其翻轉(zhuǎn)直至聽到靜電,然后再向下聽。
再次運(yùn)行 aplay ,看看它是如何發(fā)聲的。即使低于靜態(tài)限制,我們也會(huì)在音頻文件的響亮點(diǎn)上發(fā)出嘶啞的聲音。根據(jù)需要調(diào)整電位計(jì)。
請(qǐng)記住,揚(yáng)聲器最終會(huì)放在一個(gè)盒子里,所以你可能希望它盡可能大。
故障排除
如果您無法讓揚(yáng)聲器播放任何內(nèi)容,請(qǐng)檢查接線,并確保在調(diào)整 config.txt 后重新啟動(dòng)。還要檢查 gpio readall 的輸出:您應(yīng)該看到物理引腳12處于模式ALT5。如果沒有,請(qǐng)嘗試運(yùn)行 gpio -g mode 18 alt5 。這應(yīng)該是設(shè)備覆蓋的默認(rèn)設(shè)置,但值得一試。
步驟4:燈光
用于呼吸和咳嗽動(dòng)畫,我們需要一些燈!我碰巧有一個(gè)Pimoroni Blinkt!方便,但你可以很容易地使用一條NeoPixels。
Blinkt被設(shè)計(jì)為盾牌,但這對(duì)我們沒有好處;我們想要很多這些針腳。事實(shí)證明,從檢查引腳排列,Blinkt實(shí)際上只使用了4個(gè)引腳。因此,我們只需將這些內(nèi)容直接連接到Pi,這樣我們就可以使用Python庫而無需更改。
連接Blinkt
連接以下引腳:
Blinkt pin 2 →Pi 5v(任何會(huì)做)
Blinkt pin 4 →Pi ground(任何人都會(huì)這樣做)
Blinkt pin 16 →Pi pin 16
Blinkt pin 18 →Pi pin 18
所有其他Blinkt引腳可以不連接
測試
啟動(dòng)Pi并安裝Blinkt帶有 sudo的Python庫apt-get install python-blinkt
運(yùn)行 python 并嘗試一個(gè)簡單的燈光演示,也許是這樣的:
import blinkt
blinkt.set_clear_on_exit()
blinkt.set_all(128, 50, 50)
blinkt.show()
# admire for a few seconds
# hit ctrl+d to exit
疑難解答
男人,Blinkt pinout實(shí)在令人困惑。確保你的方向正確(注意圓角)。在我們的模型中,如果您將Pimoroni盜版徽標(biāo)放在頂部,則需要在標(biāo)題的左側(cè)放置引腳(參見照片)。
第5步:軟件 - Google表格設(shè)置
每隔幾秒鐘,代碼會(huì)將空氣質(zhì)量讀數(shù)記錄到Google電子表格中。我們正在使用gspread庫。授予對(duì)Google表格的gspread訪問權(quán)限有點(diǎn)復(fù)雜,他們的指南有點(diǎn)過時(shí)了。請(qǐng)按照以下步驟操作:
轉(zhuǎn)到Google Cloud Resource Manager。您可能必須注冊(cè)Google開發(fā)人員計(jì)劃才能訪問此計(jì)劃。
點(diǎn)擊頂部的“創(chuàng)建項(xiàng)目”按鈕,隨意填寫詳細(xì)信息。
在下一頁的“API”面板中,選擇“轉(zhuǎn)到API概述”。
在該頁面上,點(diǎn)擊頂部的“啟用API和服務(wù)”。
搜索并啟用Google Drive API和Google表格API。不要擔(dān)心有關(guān)憑據(jù)的警告;我們接下來會(huì)處理。
返回API Dashboard并從左側(cè)列表中選擇“Credentials”。
下拉“創(chuàng)建憑據(jù)”按鈕并選擇“服務(wù)帳戶密鑰”。當(dāng)需要對(duì)Sheet進(jìn)行更改時(shí),這將創(chuàng)建一個(gè)“用戶”,我們的腳本將充當(dāng)該用戶。
在下一頁上,為帳戶指定一個(gè)名稱(任何將要執(zhí)行的操作),并從“角色”下拉列表的“服務(wù)帳戶”部分為其指定“服務(wù)帳戶用戶”角色。
確保在“密鑰類型”部分中選擇“JSON”并點(diǎn)擊“創(chuàng)建”。 JSON憑證文件將自動(dòng)下載。保持安全,不要在任何地方發(fā)布!它等同于密碼(雖然它只能訪問您授予它訪問權(quán)限的密碼,但它仍然是最安全的)。
最后,我們需要找到服務(wù)帳戶用戶的完整用戶名。選擇左上方的漢堡菜單,然后選擇“IAM&admin”,然后選擇“IAM”,轉(zhuǎn)到“IAM”儀表板。記下服務(wù)用戶帳戶的電子郵件地址。它應(yīng)該是“username@appname.12345.iam.gserviceaccount.com”形式的東西。 (請(qǐng)注意,這也在我們之前下載的JSON文件中,如果您只是想從那里抓取它。)
好的,這很令人筋疲力盡。最后一步是為數(shù)據(jù)記錄制作電子表格并授予對(duì)服務(wù)用戶的訪問權(quán)限。我們會(huì)這樣做:
制作新的Google表格。不需要任何特別的東西。您可能想要制作一個(gè)列標(biāo)題(將有三個(gè):時(shí)間戳,CO2(ppm)和VOCs(ppb))。
授予我們之前制作的服務(wù)帳戶用戶的編輯權(quán)限。在右上角,選擇“共享”,粘貼服務(wù)用戶的電子郵件地址,下拉鉛筆按鈕并選擇“可以編輯”。點(diǎn)擊“發(fā)送”,你應(yīng)該好好去!
記下電子表格網(wǎng)址中非常長的ID部分(/spreadsheets/d/和/edit 之間的部分)。我們需要在下一步配置gspread。
第6步:軟件 - 現(xiàn)在全部在一起
好吧,讓我們下拉并配置完全可以使用的軟件!
安裝一些依賴項(xiàng):
$ sudo apt-get install python-pip python-pyaudio
$ pip install pydub oauth2client gspread
克隆存儲(chǔ)庫:
$ git clone https://github.com/misterfifths/planter.git
轉(zhuǎn)換到新的 planter 目錄:
$ cd planter
將SGP30驅(qū)動(dòng)程序復(fù)制到 planter 目錄。如果您以前克隆過它,那應(yīng)該類似于。..。..
$ cp 。./sgp30/sgp30.py 。
將Google表格JSON憑證文件從上一步復(fù)制到種植者目錄,并將其命名為“gsheets-creds.json”。
查找或記錄您喜歡的咳嗽聲(嘗試freesound.org?。┎⑵浞湃?planter 目錄中。
在您喜歡的編輯器中,打開“planter.py”文件。
在初始化GoogleSheetsLogger的第22行附近,將長串?dāng)?shù)字和字母替換為您在上一步中創(chuàng)建的工作表的ID。
在第143行附近,更改設(shè)置 cough_filename 的行中的文件名,以匹配您在步驟6中選擇的咳嗽的文件名。
就是這樣!運(yùn)行 。/planter.py 以完成整個(gè)過程。如果空氣質(zhì)量良好,前幾秒鐘前LED將以輕松的藍(lán)色“呼吸”。如果不好,揚(yáng)聲器會(huì)發(fā)出咳嗽聲,燈光會(huì)同步發(fā)出紅色脈沖。
在代碼中逛逛并改變一些東西 - 時(shí)間,“好”和“壞”的空氣質(zhì)量閾值,顏色等
第7步:案例
我們用激光切割機(jī)制作外殼為種植者。我們?cè)O(shè)計(jì)了兩個(gè)部件:木制外箱,帶電子設(shè)備的隱藏隔間和傳感器伸出的孔,以及用于工廠的防水丙烯酸套管。
兩件式的PDF均可在這里找到。盒子的骨架是使用激光切割器Ruby Gem構(gòu)建的(如果你用Illustrator打開PDF,你可以看到我們?cè)诋嫲逯馐褂玫脑O(shè)置)。我們使用了1/8“厚的木材;如果你使用不同的厚度,或者如果你的激光切割機(jī)的切口與我們的切口明顯不同,你將需要調(diào)整盒子.PDF包括3個(gè)面板選項(xiàng) - 兩個(gè)帶有非常大的格柵用于燈的小孔和第三個(gè)帶有較大圓圈的孔,Blinkt上每個(gè)LED一個(gè)。
為了防水丙烯酸,我們用硅膠粘合劑密封它,我們讓它在一夜之間固化。徹底測試密封用水填充套管,讓它靜置一段時(shí)間,然后在外面尋找水滴。根據(jù)需要重新開始直到你滿意為止。
切割后,我們?nèi)玖四绢^并涂上了巴西棕櫚樹基于蠟的輕質(zhì)防水。盒子應(yīng)以相當(dāng)明顯的方式裝配在一起。后面有四個(gè)孔的面,下面的孔是SGP30芯片穿過(上下顛倒)。兩個(gè)小塊在上面PDF的右側(cè)是芯片頂部的小蓋子。沒有孔的部分是“架子”帽子安裝在盒子三面的插槽中,為播種機(jī)套筒和電子設(shè)備的分離提供支撐。
步驟8:將所有內(nèi)容和后續(xù)步驟拼湊起來
現(xiàn)在一切都在運(yùn)行,現(xiàn)在是時(shí)候把它全部塞進(jìn)去了。我們這里沒有任何好的建議。我們確實(shí)使用半尺寸面包板的電源導(dǎo)軌為所有組件提供了一個(gè)電源和接地源,但是我們只是把東西塞進(jìn)去并用一點(diǎn)熱膠和膠帶固定。
關(guān)于從哪里開始的想法:
添加土壤濕度傳感器,或植物健康的其他傳感器(根電容,葉子顏色等)
在你的推文上
添加溫度和濕度傳感器以提高SGP30的準(zhǔn)確度
添加輪子和光電傳感器以使工廠停留在空氣質(zhì)量不佳的情況下老板或城市或EPA
盡可能多的陽光。
-
傳感器
+關(guān)注
關(guān)注
2546文章
50491瀏覽量
751189 -
Arduino
+關(guān)注
關(guān)注
187文章
6461瀏覽量
186524
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論