电子说
第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,我们可以在方便的时候欣赏鸟类。
我们发现监视器的一件事是鸟类落在一个栖息地的频率,然后跳到下一个栖息地,直到它们有环绕整个支线。因此,鸟类数量与访问我们的饲养者的单个鸟类的数量有关。只有一个或两个狭窄栖息地的饲养者可能最适合“计数”鸟类。
全部0条评论
快来发表一下你的评论吧 !