第1步:喂鳥器監(jiān)控系統(tǒng)概述
這是一個(gè)監(jiān)控系統(tǒng),用于計(jì)算,計(jì)時(shí),記錄和拍攝喂鳥器的鳥類。我的Bird Feeder Monitor的早期版本使用了Arduino Yun,并將數(shù)據(jù)存儲(chǔ)在我的Google Drive上的電子表格中。該版本使用多個(gè)Raspberry Pi,MQTT通信以及數(shù)據(jù)和照片的本地存儲(chǔ)。
Bird Feeder配備了Raspberry Pi Zero W和電容式觸摸傳感器(CAP1188)。棲息地上的任何鳥類都會(huì)激活觸摸傳感器,觸摸傳感器啟動(dòng)計(jì)時(shí)器以確定每個(gè)事件持續(xù)的時(shí)間長(zhǎng)度。觸摸一旦激活,Bird Feeder Monitor就會(huì)發(fā)布“ monitor/feeder/picture ”MQTT消息。此消息通知Raspberry Pi相機(jī)拍攝照片。如果MQTT服務(wù)器發(fā)布“ monitor/feeder/getcount ”消息,則Bird Feeder Monitor將響應(yīng)“ monitor/feeder/count ”MQTT消息,服務(wù)器將發(fā)送該消息存儲(chǔ)。
MQTT服務(wù)器執(zhí)行多項(xiàng)任務(wù)。它從Bird Feeder Monitor請(qǐng)求和存儲(chǔ)數(shù)據(jù),并控制監(jiān)視器的操作。它在Dawn激活顯示器并在黃昏時(shí)將其關(guān)閉。它還控制請(qǐng)求數(shù)據(jù)的時(shí)間間隔,并通過DarkSky監(jiān)控當(dāng)前的天氣狀況。監(jiān)測(cè)天氣狀況有幾個(gè)原因。首先,降水量可能會(huì)影響傳感器。如果發(fā)生這種情況,傳感器會(huì)在雨水下降的情況下定期重新校準(zhǔn)。第二個(gè)原因是監(jiān)視和記錄與鳥類數(shù)據(jù)相關(guān)的天氣條件。
Raspberry Pi相機(jī)是RPi + Raspberry Pi相機(jī)模塊。用于此項(xiàng)目的相機(jī)軟件無法使用USB網(wǎng)絡(luò)攝像頭。 RPi相機(jī)配備WIFI并運(yùn)行MQTT客戶端軟件。它訂閱“監(jiān)視器/饋送器/圖片”MQTT消息,并在每次收到此消息時(shí)拍攝照片。這些照片存儲(chǔ)在RPi相機(jī)上,并進(jìn)行遠(yuǎn)程管理。
第2步:在Bird Feeder Monitor上安裝Raspbian
在Raspberry Pi Zero W上安裝最新版本的Raspbian Lite。我建議按照Adafruit的Raspberry Pi Zero無頭快速入門中的分步說明進(jìn)行操作。
包括以下步驟在上面的說明中,但值得重申:
通過ssh連接到RPi并運(yùn)行以下命令:
sudo apt-get update
sudo apt-get upgrade
上述命令需要一段時(shí)間才能完成,但運(yùn)行這些命令可確保您獲得最新信息使用最新的軟件包。
接下來,運(yùn)行以下命令配置RPi軟件:
sudo raspi-config
更改密碼,啟用SPI和I2C,以及展開文件系統(tǒng)。完成后,退出 raspi-config 。
步驟3:連接RPi和CAP1188
Raspberry Pi W(RPi)和CAP1188使用I2C連線。還有其他電容式觸摸傳感器可用于一個(gè),五個(gè)或八個(gè)傳感器。我選擇了八個(gè),因?yàn)槲业奈锅B器有六個(gè)側(cè)面。
接線:
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連接器連接每個(gè)導(dǎo)線上的導(dǎo)線
CAP1188 3Vo == CAP1188 AD - 將I2C地址硬連線至0x28
RPi Pin 2 == + 5VDC
RPi引腳14 == GND
RPi的電源是從外部提供的,通過從我的車庫(kù)地下運(yùn)行電線,然后向上通過用作管道的管道喂鳥器架。一根2針防風(fēng)雨連接器連接在電線末端,用于連接RPi Bird Feeder Monitor。電線的另一端連接到車庫(kù)中的熔斷5-VDC電源。這個(gè)項(xiàng)目應(yīng)該與電池配合使用,但我不想在日常工作中更換電池的麻煩。
我構(gòu)建了一根16英寸長(zhǎng)的電纜,將裝有RPi的防水箱連接到含有防水箱的防水箱中。 CAP1188。電容式傳感器需要盡可能靠近棲息地。
RPi Zero和CAP1188可以打包在一個(gè)防風(fēng)雨箱中,但我更喜歡將它們單獨(dú)打包。
步驟4:配置喂鳥器監(jiān)視器
登錄 Raspberry Pi Zero W 并執(zhí)行以下步驟。
安裝pip:
sudo apt-get install python3-pip
安裝Adafruit CircuitPython:
sudo pip3 install --upgrade setuptools
檢查I2C和SPI設(shè)備:
ls /dev/i2c* /dev/spi*
你應(yīng)該看到以下回復(fù):
/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,將看到與上圖中相同的響應(yīng),表明傳感器處于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來配置和設(shè)置此RPi上的MQTT。
安裝Bird Feeder Monitor軟件:
cd ~
sudo apt-get install git
git clone “https://github.com/sbkirby/RPi_bird_feeder_monitor.git”
創(chuàng)建日志目錄:
cd ~
mkdir logs
將CAP1188傳感器連接到RPi并執(zhí)行以下操作以在MQTT服務(wù)器之后測(cè)試系統(tǒng)正在運(yùn)作:
cd RPi_bird_feeder_monitor
sudo nano config.json
替換“OIP_HOST”,“MQTT_USER”,“MQTT_PW”和“MQTT_PORT”的值以匹配您的本地設(shè)置。退出并保存更改。
在啟動(dòng)時(shí)運(yùn)行
仍然在 /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
我們需要使腳本成為可執(zhí)行文件。
chmod 755 launcher.sh
測(cè)試腳本。
sh launcher.sh
接下來,我們需要編輯crontab(linux任務(wù)管理器)以在啟動(dòng)時(shí)啟動(dòng)腳本。注意:我們之前已經(jīng)創(chuàng)建了 /logs 目錄。
sudo crontab -e
這將帶來如上所示的crontab窗口。導(dǎo)航到文件末尾并輸入以下行。
@reboot sh /home/pi/RPi_bird_feeder_monitor/launcher.sh 》/home/pi/logs/cronlog 2》&1
退出并保存文件,然后重新啟動(dòng)RPi。 RPi重新啟動(dòng)后,腳本應(yīng)啟動(dòng) feeder_mqtt_client.py 腳本。可以在位于 /logs 文件夾中的日志文件中檢查腳本的狀態(tài)。
步驟5:3D打印部件
這些STL文件用于我為此項(xiàng)目創(chuàng)建的3D打印部分,以及所有這些零件是可選的。防風(fēng)雨箱可以在當(dāng)?shù)刂圃旎蛸?gòu)買。
CedarWorks喂鳥器的“安裝楔”也是可選的。這部分是安裝CAP1188傳感器外殼所必需的。
步驟6:喂鳥器監(jiān)視器組件
之后如前所述,安裝Raspbian,配置和測(cè)試RPi和CAP1188傳感器,現(xiàn)在是時(shí)候?qū)⑦@些設(shè)備安裝在防風(fēng)雨的情況下了。
我使用了我打印的兩個(gè)防風(fēng)雨箱來安裝RPi和CAP1188傳感器。首先,我在每個(gè)箱子的一端鉆了一個(gè)1/2“的孔。用SD卡在側(cè)面對(duì)面的RPi箱上鉆孔。在每個(gè)孔中安裝帶有可調(diào)節(jié)鎖緊螺母的尼龍電纜壓蓋接頭。運(yùn)行四個(gè)如上圖所示,將2針汽車防水電氣母頭連接器安裝并焊接到RPi上。將紅線焊接到RPi的+ 5VDC引腳2,將黑線焊接到GND或引腳14 。請(qǐng)參閱RPi上使用的其他連接的接線圖。
將四根導(dǎo)線的另一端穿過CAP1188外殼上的壓蓋接頭,并按照接線圖中的說明連接導(dǎo)線。所有8個(gè)CAP1188電容式觸摸傳感器都焊接到8針母頭Dupont連接器上。該連接器嵌入殼體側(cè)面,以便在應(yīng)用頂部時(shí)進(jìn)行防水密封。注意:兩種情況下的頂部都可能需要修改以允許壓蓋接頭連接器上的螺母。
之前關(guān)閉,我將硅膠填縫應(yīng)用于每個(gè)表殼的邊緣,并在壓蓋接頭的導(dǎo)線周圍密封表殼。我還在Dupont連接器的背面添加硅膠以將其與元件密封。
步驟7:連接喂鳥器
進(jìn)料器上的每個(gè)支架都覆蓋著1/4“寬的自粘銅箔膠帶。在膠帶和鱸魚上鉆了一個(gè)小孔,將一根電線焊接到鋁箔帶上并在饋線下面布線。每根電線連接到一根公頭6針Dupont連接器。
注意:如上圖所示的喂鳥器,我建議間隙每個(gè)箔條的末端為1 1/4“ - 1 1/2”。我發(fā)現(xiàn)較大的鳥類,如gra哥和鴿子,如果它們被放在一起,它們能夠同時(shí)接觸兩個(gè)箔條
先前提到的“安裝楔子”被打印并粘在送料器的底部,以提供安裝包含CAP1188的防水箱的水平區(qū)域。魔術(shù)貼膠帶應(yīng)用于盒子以及木塊以提供附著方式。這可以在上面完成的組件的照片中看到。維可牢尼龍搭扣帶用于纏繞管道和RPi盒以將它們固定在進(jìn)料器下方。
喂鳥器重新裝滿傳感器和RPi連接到進(jìn)料器,當(dāng)它仍在管道上時(shí)支架。幸運(yùn)的是,我身高6英尺2英寸并且不費(fèi)力氣地到達(dá)容器。
步驟8:MQTT服務(wù)器
如果你已經(jīng)涉足IOT世界,你可能已經(jīng)在你的網(wǎng)絡(luò)上啟動(dòng)并運(yùn)行了一個(gè)MQTT服務(wù)器。如果你沒有,我推薦使用一個(gè)Raspberry Pi 3表示MQTT服務(wù)器,以及在Andreas Spiess網(wǎng)站上發(fā)現(xiàn)的指令和IMG圖像文件“Node-Red,InfuxDB和Grafana安裝”.Andreas還有一個(gè)關(guān)于這個(gè)主題的信息視頻#255 Node-Red,InfluxDB和Grafana Tutorial on Raspberry Pi。
一旦Node-Red Server運(yùn)行,您可以通過復(fù)制 ?/RPi_bird_feeder_monitor/json/Bird_Feeder_Monitor_Flow.json ,并使用導(dǎo)入》剪貼板將剪貼板粘貼到新流程中。
此流程將需要以下節(jié)點(diǎn):
node-red-node-darksky - 需要使用DarkSky API帳戶這個(gè)節(jié)點(diǎn)。
node-red-contrib-bigtimer - Scargill Tech的Big Timer
node-red-contrib-Influxdb - InfluxDB數(shù)據(jù)庫(kù)
天氣數(shù)據(jù)您的位置是通過DarkSky提供的。我目前正在監(jiān)測(cè)和記錄“CanyIntensity”,“溫度”,“濕度”,“windSpeed”,“windBearing”,“windGust”和“cloudCover”。 “precipIntensity”很重要,因?yàn)樗糜诖_定傳感器是否需要因雨水而重新校準(zhǔn)。
Big Timer節(jié)點(diǎn)是計(jì)時(shí)器的瑞士軍刀。它用于每天在黎明和黃昏開始和停止數(shù)據(jù)記錄。
InfluxDB是一個(gè)輕量級(jí),易于使用的時(shí)間序列數(shù)據(jù)庫(kù)。每次插入數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)都會(huì)自動(dòng)添加時(shí)間戳。與SQLite不同,不需要定義字段。將數(shù)據(jù)插入數(shù)據(jù)庫(kù)時(shí)會(huì)自動(dòng)添加它們。
節(jié)點(diǎn) - 紅色配置
上面提到的JSON文件將加載一個(gè)Flow,需要進(jìn)行一些調(diào)整以滿足您的要求。
連接“MQTT Publish”和“監(jiān)視/饋送/#”到您的MQTT服務(wù)器。
在“Dawn&Dusk Timer(config)”Big Timer節(jié)點(diǎn)中將緯度和經(jīng)度設(shè)置為您的位置。
配置“monitor/feeder/astronomy(config)”節(jié)點(diǎn)。可以為每個(gè)棲息處啟用/禁用攝像機(jī)。例如,我的兩個(gè)棲息地位于背面,相機(jī)已禁用這些棲息地。
將“計(jì)數(shù)器計(jì)時(shí)器(config)”節(jié)點(diǎn)設(shè)置為所需的時(shí)間間隔。默認(rèn)值= 5分鐘
在“DarkSky(config)”節(jié)點(diǎn)中將緯度和經(jīng)度設(shè)置為您的位置。其次,在darksky-credentials節(jié)點(diǎn)中輸入DarkSky API密鑰。
在“monitor/feeder/recalibrate(config)”功能節(jié)點(diǎn)中設(shè)置降水強(qiáng)度。默認(rèn)值= 0.001英寸/小時(shí)
編輯“MQTT接收器調(diào)試節(jié)點(diǎn)(config)的主題過濾器”功能節(jié)點(diǎn),以過濾您不想看到的MQTT消息。
可選:如果您希望將數(shù)據(jù)存儲(chǔ)在Google云端硬盤上的電子表格中,則需要使用表單字段ID編輯“構(gòu)建Google文檔有效負(fù)載(配置)”功能節(jié)點(diǎn)。
可選:將您的唯一表單網(wǎng)址添加到“Google Docs GET(config)”HTTP請(qǐng)求節(jié)點(diǎn)的URL字段中。
Node-Red UI桌面
Bird_Feeder_Monitor_Flow包括用于通過手機(jī)訪問MQTT服務(wù)器的用戶界面(UI)。可以關(guān)閉或打開顯示器,手動(dòng)重新校準(zhǔn)傳感器或拍照。還顯示了傳感器“觸摸”的總數(shù),這將使您大致了解前往饋線的鳥類數(shù)量。
步驟9:Grafana
“Grafana是一個(gè)開源的度量標(biāo)準(zhǔn)分析和可視化套件。它最常用于可視化基礎(chǔ)架構(gòu)和應(yīng)用程序分析的時(shí)間序列數(shù)據(jù),但許多用于其他領(lǐng)域包括工業(yè)傳感器,家庭自動(dòng)化,天氣和過程控制。“ refn:Grafana Docs。
此軟件包含在Andreas Spiess用于創(chuàng)建MQTT服務(wù)器的映像文件中。在MQTT服務(wù)器上配置InfluxDB數(shù)據(jù)庫(kù)后,可以將Grafana配置為使用此數(shù)據(jù)庫(kù),如上圖所示。接下來,可以從 ?/RPi_bird_feeder_monitor/json/ Bird_Feeder_Monitor_Grafana.json中找到的JSON文件加載此項(xiàng)目使用的儀表板 的。可以在Andreas Spiess的網(wǎng)站“Node-Red,InfuxDB和Grafana安裝”中找到配置Grafana的提示。
步驟10:InfluxDB
如前所述,Adreas Spiess有一個(gè)很棒的指南和視頻,可以引導(dǎo)您通過InfluxDB的配置。以下是我配置數(shù)據(jù)庫(kù)的步驟。
首先,我通過SSH登錄我的MQTT服務(wù)器并創(chuàng)建了一個(gè)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
接下來,我創(chuàng)建了數(shù)據(jù)庫(kù):
CREATE DATABASE BIRD_FEEDER_MONITOR
》
》 SHOW DATABASES
name: databases
name
----
_internal
BIRD_FEEDER_MONITOR
》
在上面創(chuàng)建數(shù)據(jù)庫(kù)之后,可以在Node-Red中配置InfluxDB節(jié)點(diǎn)。如上圖所示,我將測(cè)量“饋線”命名為。數(shù)據(jù)初始化后,可以在InfluxDB中看到這一點(diǎn):
》 USE BIRD_FEEDER_MONITORUsing database BIRD_FEEDER_MONITOR
》
》 SHOW MEASUREMENTS
name: measurements
name
----
feeders
》
InfluxDB的眾多功能之一是不需要FIELDS配置。輸入數(shù)據(jù)時(shí)會(huì)自動(dòng)添加和配置FIELDS。以下是此數(shù)據(jù)庫(kù)的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
》
數(shù)據(jù)庫(kù)中的一些條目如下所示:
》
》 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,遠(yuǎn)程CNC停止并監(jiān)視,以組裝Raspberry Pi相機(jī)。執(zhí)行除6和8之外的所有步驟以創(chuàng)建相機(jī)。請(qǐng)注意我正在使用較舊的Raspberry Pi用于我的相機(jī),但它在我的商店櫥窗中運(yùn)行良好。
升級(jí)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”
如果你愿意的話要從相機(jī)拍攝的圖像制作視頻,請(qǐng)安裝ffmpeg:
git clone “https://git.ffmpeg.org/ffmpeg.git” ffmpeg
cd ffmpeg
。/configure
make
sudo make install
配置Bird Feeder Monitoring軟件的權(quán)限:
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
我個(gè)人不建議在RPi Camera上使用make_movie.sh。它需要許多資源才能在RPi上運(yùn)行。我建議將圖像傳輸?shù)絇C并在那里運(yùn)行ffmpeg。
在啟動(dòng)時(shí)運(yùn)行
登錄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
我們需要制作腳本和可執(zhí)行文件。
chmod 755 launcher.sh
測(cè)試腳本。
sh launcher.sh
創(chuàng)建日志目錄:
cd ~
mkdir logs
接下來,我們需要編輯crontab(linux任務(wù)管理器)以在啟動(dòng)時(shí)啟動(dòng)腳本。
sudo crontab -e
這將帶來如上所示的crontab窗口。導(dǎo)航到文件末尾并輸入以下行。
@reboot sh /home/pi/RPi_bird_feeder_monitor/launcher.sh 》/home/pi/logs/cronlog 2》&1
退出并保存文件,然后重新啟動(dòng)RPi。 RPi重新啟動(dòng)后,腳本應(yīng)啟動(dòng) camera_mqtt_client.py 腳本。可以在位于/logs 文件夾中的日志文件中檢查腳本的狀態(tài)。
步驟12:享受
我們喜歡觀鳥,但我們無法將喂食器放在最佳享受位置。我們大多數(shù)人可以看到它的唯一地方是早餐桌,并不是每個(gè)人都可以從那里看到喂食器。因此,通過Bird Feeder Monitor,我們可以在方便的時(shí)候欣賞鳥類。
我們發(fā)現(xiàn)監(jiān)視器的一件事是鳥類落在一個(gè)棲息地的頻率,然后跳到下一個(gè)棲息地,直到它們有環(huán)繞整個(gè)支線。因此,鳥類數(shù)量與訪問我們的飼養(yǎng)者的單個(gè)鳥類的數(shù)量有關(guān)。只有一個(gè)或兩個(gè)狹窄棲息地的飼養(yǎng)者可能最適合“計(jì)數(shù)”鳥類。
-
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
3904瀏覽量
174433
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論