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