第1步:喂鳥器監控系統概述
這是一個監控系統,用于計算,計時,記錄和拍攝喂鳥器的鳥類。我的Bird Feeder Monitor的早期版本使用了Arduino Yun,并將數據存儲在我的Google Drive上的電子表格中。該版本使用多個Raspberry Pi,MQTT通信以及數據和照片的本地存儲。
Bird Feeder配備了Raspberry Pi Zero W和電容式觸摸傳感器(CAP1188)。棲息地上的任何鳥類都會激活觸摸傳感器,觸摸傳感器啟動計時器以確定每個事件持續的時間長度。觸摸一旦激活,Bird Feeder Monitor就會發布“ monitor/feeder/picture ”MQTT消息。此消息通知Raspberry Pi相機拍攝照片。如果MQTT服務器發布“ monitor/feeder/getcount ”消息,則Bird Feeder Monitor將響應“ monitor/feeder/count ”MQTT消息,服務器將發送該消息存儲。
MQTT服務器執行多項任務。它從Bird Feeder Monitor請求和存儲數據,并控制監視器的操作。它在Dawn激活顯示器并在黃昏時將其關閉。它還控制請求數據的時間間隔,并通過DarkSky監控當前的天氣狀況。監測天氣狀況有幾個原因。首先,降水量可能會影響傳感器。如果發生這種情況,傳感器會在雨水下降的情況下定期重新校準。第二個原因是監視和記錄與鳥類數據相關的天氣條件。
Raspberry Pi相機是RPi + Raspberry Pi相機模塊。用于此項目的相機軟件無法使用USB網絡攝像頭。 RPi相機配備WIFI并運行MQTT客戶端軟件。它訂閱“監視器/饋送器/圖片”MQTT消息,并在每次收到此消息時拍攝照片。這些照片存儲在RPi相機上,并進行遠程管理。
第2步:在Bird Feeder Monitor上安裝Raspbian
在Raspberry Pi Zero W上安裝最新版本的Raspbian Lite。我建議按照Adafruit的Raspberry Pi Zero無頭快速入門中的分步說明進行操作。
包括以下步驟在上面的說明中,但值得重申:
通過ssh連接到RPi并運行以下命令:
sudo apt-get update
sudo apt-get upgrade
上述命令需要一段時間才能完成,但運行這些命令可確保您獲得最新信息使用最新的軟件包。
接下來,運行以下命令配置RPi軟件:
sudo raspi-config
更改密碼,啟用SPI和I2C,以及展開文件系統。完成后,退出 raspi-config 。
步驟3:連接RPi和CAP1188
Raspberry Pi W(RPi)和CAP1188使用I2C連線。還有其他電容式觸摸傳感器可用于一個,五個或八個傳感器。我選擇了八個,因為我的喂鳥器有六個側面。
接線:
CAP1188 SDA == RPi Pin 3
CAP1188 SCK == RPi引腳5
CAP1188 VIN == RPi引腳1(+ 3.3VDC)
CAP1188 GND == RPi引腳9(GND)
CAP1188 C1-C8 ==通過1x8母Dupont連接器連接每個導線上的導線
CAP1188 3Vo == CAP1188 AD - 將I2C地址硬連線至0x28
RPi Pin 2 == + 5VDC
RPi引腳14 == GND
RPi的電源是從外部提供的,通過從我的車庫地下運行電線,然后向上通過用作管道的管道喂鳥器架。一根2針防風雨連接器連接在電線末端,用于連接RPi Bird Feeder Monitor。電線的另一端連接到車庫中的熔斷5-VDC電源。這個項目應該與電池配合使用,但我不想在日常工作中更換電池的麻煩。
我構建了一根16英寸長的電纜,將裝有RPi的防水箱連接到含有防水箱的防水箱中。 CAP1188。電容式傳感器需要盡可能靠近棲息地。
RPi Zero和CAP1188可以打包在一個防風雨箱中,但我更喜歡將它們單獨打包。
步驟4:配置喂鳥器監視器
登錄 Raspberry Pi Zero W 并執行以下步驟。
安裝pip:
sudo apt-get install python3-pip
安裝Adafruit CircuitPython:
sudo pip3 install --upgrade setuptools
檢查I2C和SPI設備:
ls /dev/i2c* /dev/spi*
你應該看到以下回復:
/dev/i2c-1 /dev/spidev0.0 /dev/spidev0.1
接下來安裝GPIO和Adafruit blinka軟件包:
pip3 install RPI.GPIO
pip3 install adafruit-blinka
安裝Adafruit的CAP1188模塊:
pip3 install adafruit-circuitpython-cap1188
安裝I2C工具:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
使用上述工具檢查I2C地址:
i2cdetect -y 1
如果連接了CAP1188,將看到與上圖中相同的響應,表明傳感器處于I2C地址0x28(或0x29,具體取決于您選擇的I2C地址)。
安裝mosquitto,mosquitto-clients和paho-mqtt :
sudo apt-get install mosquitto mosquitto-clients python-mosquitto
sudo pip3 install paho-mqtt
我建議在Raspberry Pi上使用Adafruit的配置MQTT來配置和設置此RPi上的MQTT。
安裝Bird Feeder Monitor軟件:
cd ~
sudo apt-get install git
git clone “https://github.com/sbkirby/RPi_bird_feeder_monitor.git”
創建日志目錄:
cd ~
mkdir logs
將CAP1188傳感器連接到RPi并執行以下操作以在MQTT服務器之后測試系統正在運作:
cd RPi_bird_feeder_monitor
sudo nano config.json
替換“OIP_HOST”,“MQTT_USER”,“MQTT_PW”和“MQTT_PORT”的值以匹配您的本地設置。退出并保存更改。
在啟動時運行
仍然在 /home/pi/RPi_bird_feeder_monitor 目錄中。
nano launcher.sh
在 launcher.sh
#!/bin/sh
# launcher.sh
# navigate to home directory, then to this directory, then execute python script, then back home
cd /
cd home/pi/RPi_bird_feeder_monitor
sudo python3 feeder_mqtt_client.py
cd /
中包含以下文字退出并保存 launcher.sh
我們需要使腳本成為可執行文件。
chmod 755 launcher.sh
測試腳本。
sh launcher.sh
接下來,我們需要編輯crontab(linux任務管理器)以在啟動時啟動腳本。注意:我們之前已經創建了 /logs 目錄。
sudo crontab -e
這將帶來如上所示的crontab窗口。導航到文件末尾并輸入以下行。
@reboot sh /home/pi/RPi_bird_feeder_monitor/launcher.sh 》/home/pi/logs/cronlog 2》&1
退出并保存文件,然后重新啟動RPi。 RPi重新啟動后,腳本應啟動 feeder_mqtt_client.py 腳本。可以在位于 /logs 文件夾中的日志文件中檢查腳本的狀態。
步驟5:3D打印部件
這些STL文件用于我為此項目創建的3D打印部分,以及所有這些零件是可選的。防風雨箱可以在當地制造或購買。
CedarWorks喂鳥器的“安裝楔”也是可選的。這部分是安裝CAP1188傳感器外殼所必需的。
步驟6:喂鳥器監視器組件
之后如前所述,安裝Raspbian,配置和測試RPi和CAP1188傳感器,現在是時候將這些設備安裝在防風雨的情況下了。
我使用了我打印的兩個防風雨箱來安裝RPi和CAP1188傳感器。首先,我在每個箱子的一端鉆了一個1/2“的孔。用SD卡在側面對面的RPi箱上鉆孔。在每個孔中安裝帶有可調節鎖緊螺母的尼龍電纜壓蓋接頭。運行四個如上圖所示,將2針汽車防水電氣母頭連接器安裝并焊接到RPi上。將紅線焊接到RPi的+ 5VDC引腳2,將黑線焊接到GND或引腳14 。請參閱RPi上使用的其他連接的接線圖。
將四根導線的另一端穿過CAP1188外殼上的壓蓋接頭,并按照接線圖中的說明連接導線。所有8個CAP1188電容式觸摸傳感器都焊接到8針母頭Dupont連接器上。該連接器嵌入殼體側面,以便在應用頂部時進行防水密封。注意:兩種情況下的頂部都可能需要修改以允許壓蓋接頭連接器上的螺母。
之前關閉,我將硅膠填縫應用于每個表殼的邊緣,并在壓蓋接頭的導線周圍密封表殼。我還在Dupont連接器的背面添加硅膠以將其與元件密封。
步驟7:連接喂鳥器
進料器上的每個支架都覆蓋著1/4“寬的自粘銅箔膠帶。在膠帶和鱸魚上鉆了一個小孔,將一根電線焊接到鋁箔帶上并在饋線下面布線。每根電線連接到一根公頭6針Dupont連接器。
注意:如上圖所示的喂鳥器,我建議間隙每個箔條的末端為1 1/4“ - 1 1/2”。我發現較大的鳥類,如gra哥和鴿子,如果它們被放在一起,它們能夠同時接觸兩個箔條
先前提到的“安裝楔子”被打印并粘在送料器的底部,以提供安裝包含CAP1188的防水箱的水平區域。魔術貼膠帶應用于盒子以及木塊以提供附著方式。這可以在上面完成的組件的照片中看到。維可牢尼龍搭扣帶用于纏繞管道和RPi盒以將它們固定在進料器下方。
喂鳥器重新裝滿傳感器和RPi連接到進料器,當它仍在管道上時支架。幸運的是,我身高6英尺2英寸并且不費力氣地到達容器。
步驟8:MQTT服務器
如果你已經涉足IOT世界,你可能已經在你的網絡上啟動并運行了一個MQTT服務器。如果你沒有,我推薦使用一個Raspberry Pi 3表示MQTT服務器,以及在Andreas Spiess網站上發現的指令和IMG圖像文件“Node-Red,InfuxDB和Grafana安裝”.Andreas還有一個關于這個主題的信息視頻#255 Node-Red,InfluxDB和Grafana Tutorial on Raspberry Pi。
一旦Node-Red Server運行,您可以通過復制 ?/RPi_bird_feeder_monitor/json/Bird_Feeder_Monitor_Flow.json ,并使用導入》剪貼板將剪貼板粘貼到新流程中。
此流程將需要以下節點:
node-red-node-darksky - 需要使用DarkSky API帳戶這個節點。
node-red-contrib-bigtimer - Scargill Tech的Big Timer
node-red-contrib-Influxdb - InfluxDB數據庫
天氣數據您的位置是通過DarkSky提供的。我目前正在監測和記錄“CanyIntensity”,“溫度”,“濕度”,“windSpeed”,“windBearing”,“windGust”和“cloudCover”。 “precipIntensity”很重要,因為它用于確定傳感器是否需要因雨水而重新校準。
Big Timer節點是計時器的瑞士軍刀。它用于每天在黎明和黃昏開始和停止數據記錄。
InfluxDB是一個輕量級,易于使用的時間序列數據庫。每次插入數據時,數據庫都會自動添加時間戳。與SQLite不同,不需要定義字段。將數據插入數據庫時會自動添加它們。
節點 - 紅色配置
上面提到的JSON文件將加載一個Flow,需要進行一些調整以滿足您的要求。
連接“MQTT Publish”和“監視/饋送/#”到您的MQTT服務器。
在“Dawn&Dusk Timer(config)”Big Timer節點中將緯度和經度設置為您的位置。
配置“monitor/feeder/astronomy(config)”節點。可以為每個棲息處啟用/禁用攝像機。例如,我的兩個棲息地位于背面,相機已禁用這些棲息地。
將“計數器計時器(config)”節點設置為所需的時間間隔。默認值= 5分鐘
在“DarkSky(config)”節點中將緯度和經度設置為您的位置。其次,在darksky-credentials節點中輸入DarkSky API密鑰。
在“monitor/feeder/recalibrate(config)”功能節點中設置降水強度。默認值= 0.001英寸/小時
編輯“MQTT接收器調試節點(config)的主題過濾器”功能節點,以過濾您不想看到的MQTT消息。
可選:如果您希望將數據存儲在Google云端硬盤上的電子表格中,則需要使用表單字段ID編輯“構建Google文檔有效負載(配置)”功能節點。
可選:將您的唯一表單網址添加到“Google Docs GET(config)”HTTP請求節點的URL字段中。
Node-Red UI桌面
Bird_Feeder_Monitor_Flow包括用于通過手機訪問MQTT服務器的用戶界面(UI)。可以關閉或打開顯示器,手動重新校準傳感器或拍照。還顯示了傳感器“觸摸”的總數,這將使您大致了解前往饋線的鳥類數量。
步驟9:Grafana
“Grafana是一個開源的度量標準分析和可視化套件。它最常用于可視化基礎架構和應用程序分析的時間序列數據,但許多用于其他領域包括工業傳感器,家庭自動化,天氣和過程控制。“ refn:Grafana Docs。
此軟件包含在Andreas Spiess用于創建MQTT服務器的映像文件中。在MQTT服務器上配置InfluxDB數據庫后,可以將Grafana配置為使用此數據庫,如上圖所示。接下來,可以從 ?/RPi_bird_feeder_monitor/json/ Bird_Feeder_Monitor_Grafana.json中找到的JSON文件加載此項目使用的儀表板 的。可以在Andreas Spiess的網站“Node-Red,InfuxDB和Grafana安裝”中找到配置Grafana的提示。
步驟10:InfluxDB
如前所述,Adreas Spiess有一個很棒的指南和視頻,可以引導您通過InfluxDB的配置。以下是我配置數據庫的步驟。
首先,我通過SSH登錄我的MQTT服務器并創建了一個USER:
root@MQTTPi:~#
root@MQTTPi:~# influx
Connected to “http://localhost:8086” version 1.7.6
InfluxDB shell version: 1.7.6
Enter an InfluxQL query
》 CREATE USER “pi” WITH PASSWORD ‘raspberry’ WITH ALL PRIVILEGES
》 SHOW USERS
user admin
---- -----
pi true
接下來,我創建了數據庫:
CREATE DATABASE BIRD_FEEDER_MONITOR
》
》 SHOW DATABASES
name: databases
name
----
_internal
BIRD_FEEDER_MONITOR
》
在上面創建數據庫之后,可以在Node-Red中配置InfluxDB節點。如上圖所示,我將測量“饋線”命名為。數據初始化后,可以在InfluxDB中看到這一點:
》 USE BIRD_FEEDER_MONITORUsing database BIRD_FEEDER_MONITOR
》
》 SHOW MEASUREMENTS
name: measurements
name
----
feeders
》
InfluxDB的眾多功能之一是不需要FIELDS配置。輸入數據時會自動添加和配置FIELDS。以下是此數據庫的FIELDS和FIELDTYPE:
》 SHOW FIELD KEYS
name: feeders
fieldKey fieldType
-------- ---------
cloudcover float
count_1 float
count_2 float
count_3 float
count_4 float
count_5 float
count_6 float
humidity float
name string
precip_Int float
temp float
time_1 float
time_2 float
time_3 float
time_4 float
time_5 float
time_6 float
winddir float
windgust float
windspeed float
》
數據庫中的一些條目如下所示:
》
》 SELECT * FROM feeders LIMIT 10
name: feeders
time cloudcover count_1 count_2 count_3 count_4 count_5 count_6 humidity name precip_Int temp time_1 time_2 time_3 time_4 time_5 time_6 winddir windgust windspeed
---- ---------- ------- ------- ------- ------- ------- ------- -------- ---- ---------- ---- ------ ------ ------ ------ ------ ------ ------- -------- ---------
1550270591000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550271814000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550272230000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550272530000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550272830000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550273130000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550273430000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550273730000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550274030000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
1550274330000000000 0 0 0 0 0 0 Feeder1 0 0 0 0 0 0
》
步驟11:Raspberry Pi Camera
我建議使用我的Instructable,遠程CNC停止并監視,以組裝Raspberry Pi相機。執行除6和8之外的所有步驟以創建相機。請注意我正在使用較舊的Raspberry Pi用于我的相機,但它在我的商店櫥窗中運行良好。
升級Rasbian:
sudo apt-get update
sudo apt-get upgrade
安裝PIP:
sudo apt-get install python3-pip
安裝paho-mqtt:
sudo pip3 install paho-mqtt
安裝git和Bird Monitoring軟件:
cd ~
sudo apt-get install git
git clone “https://github.com/sbkirby/RPi_bird_feeder_monitor.git”
如果你愿意的話要從相機拍攝的圖像制作視頻,請安裝ffmpeg:
git clone “https://git.ffmpeg.org/ffmpeg.git” ffmpeg
cd ffmpeg
。/configure
make
sudo make install
配置Bird Feeder Monitoring軟件的權限:
cd RPi_bird_feeder_monitor
sudo chmod 764 make_movie.sh
sudo chmod 764 take_photo.sh
sudo chown www-data:www-data make_movie.sh
sudo chown www-data:www-data take_photo.sh
我個人不建議在RPi Camera上使用make_movie.sh。它需要許多資源才能在RPi上運行。我建議將圖像傳輸到PC并在那里運行ffmpeg。
在啟動時運行
登錄RPi并切換到/RPi_bird_feeder_monitor 目錄。/p》 cd RPi_bird_feeder_monitor
nano launcher.sh
在launcher.sh中包含以下文本
#!/bin/sh
# launcher.sh
# navigate to home directory, then to this directory, then execute python script, then back home
cd /
cd home/pi/RPi_bird_feeder_monitor
sudo python3 camera_mqtt_client.py
cd /
退出并保存launcher.sh
我們需要制作腳本和可執行文件。
chmod 755 launcher.sh
測試腳本。
sh launcher.sh
創建日志目錄:
cd ~
mkdir logs
接下來,我們需要編輯crontab(linux任務管理器)以在啟動時啟動腳本。
sudo crontab -e
這將帶來如上所示的crontab窗口。導航到文件末尾并輸入以下行。
@reboot sh /home/pi/RPi_bird_feeder_monitor/launcher.sh 》/home/pi/logs/cronlog 2》&1
退出并保存文件,然后重新啟動RPi。 RPi重新啟動后,腳本應啟動 camera_mqtt_client.py 腳本。可以在位于/logs 文件夾中的日志文件中檢查腳本的狀態。
步驟12:享受
我們喜歡觀鳥,但我們無法將喂食器放在最佳享受位置。我們大多數人可以看到它的唯一地方是早餐桌,并不是每個人都可以從那里看到喂食器。因此,通過Bird Feeder Monitor,我們可以在方便的時候欣賞鳥類。
我們發現監視器的一件事是鳥類落在一個棲息地的頻率,然后跳到下一個棲息地,直到它們有環繞整個支線。因此,鳥類數量與訪問我們的飼養者的單個鳥類的數量有關。只有一個或兩個狹窄棲息地的飼養者可能最適合“計數”鳥類。
-
監控系統
+關注
關注
21文章
3939瀏覽量
175849
發布評論請先 登錄
相關推薦
評論