WaterPi跟踪有关室内植物的关键指标,并通过图表将这些指标可视化,并远程给植物浇水。
这个项目中使用的东西
以下硬件各一个:
- Raspberry Pi B
- Arduino UNO或者Genuino UNO
- DHT11温湿度传感器(4针)
- 水位传感器
- LCD 1602
- YL-69土壤湿度传感器
- 水泵马达
- 5V继电器
- 4xAA电池座
软件应用程序和在线服务
开始
介绍
该系统是那些喜欢并希望照顾自己家中植物但又非常忙于日常工作的人们的合适解决方案。为了取得成功,种植植物需要时间和精力,因为有些常规的事情要做,例如每天浇水。人们有时会忘记照顾植物。此外,有些人经常出差旅行,花更少的时间在家里。在这种情况下,他们通常会寻求帮助来照顾他们的室内植物,否则他们会简单地放弃以拥有它们。WaterPi可以帮助那些做常规植物的人。此外,由于可以远程控制,因此植物所有者可以在需要时轻松干预浇水过程。
该系统监视该地点的温度和湿度以及地面的土壤湿度,对植物进行远程灌溉,然后通过AWS IoT将所有数据保存到DynamoDB。收集的数据通过不同的图表和图形进行可视化显示,以更好地了解植物生长的条件。
Raspberry Pi运行一个nodejs应用程序来控制所有传感器和水泵。为此,我更喜欢使用Johnny-Five 库。为了与AWS进行通信,我使用了适用于JavaScript的AWS IoT SDK。
步骤1:设定DynamoDB
DynamoDB用于保存传感器收集的数据。转到DynamoDB 页面并使用以下属性创建一个新表:
- 表名称:waterpi_sensor_data
- 分区键:键
- 单击添加排序键并添加时间戳
重要的是键和时间戳记类型必须为String。
步骤2:设定AWS IoT
转到AWS IoT控制台页面并执行以下操作:
创建一个名称为raspi-water-pump的东西
创建一个新策略。策略名称pump-policy,操作iot:*,资源* ,选择允许,然后单击添加语句并创建。
使用 1-Click证书create创建证书。然后下载公钥,私钥和证书。
然后,您应该选择创建的证书并执行以下操作:
- 单击 操作 > 激活按钮证书
- 单击操作>附加策略,键入您创建的策略名称,然后单击附加
- 单击操作>附加事物,键入raspi-water-pump,然后单击附加
创建具有以下内容的规则:
- 名称 saveToDynamoDB
- 属性 *
- 主题过滤器 传感器/数据
- 选择一个动作 插入消息到数据库表中
- 表名 waterpi_sensor_data
- 哈希键值 $ {topic()}
- 范围键值 $ {timestamp()}
- 角色名称>单击 创建新角色 ,然后在打开的页面中单击 允许 按钮,然后从角色名称下拉列表中选择它
第三步:准备Arduino
水位和土壤湿度传感器输出为模拟输出。因此,与直接将它们连接到Raspberry Pi相比,我更喜欢使用Arduino来获取这些模拟值,然后通过Arduino作为数字值发送给Pi。Arduino代码由pi更新,因此我们在此步骤中唯一要做的就是将Arduino连接到我们的计算机并将标准固件上传到它。
如果您没有Arduino IDE,请按照 此处的步骤 进行安装。
- 打开 Arduino IDE
- 打开文件>示例> Firmata> StandardFirmata 示例
- 将草图上传到Arduino
将土壤水分连接至Arduino模式应如下所示;
- VCC(电源)-> PIN 7
- GND(地)-> GND
- AO(模拟输出)-> A1
将水位传感器连接到Arduino模式应如下所示;
- (+)-> PIN 4
- (-)-> GND
- S-> A0
之后,您应该 通过USB电缆将arduino与树莓派连接。另外,别忘了将土壤湿度传感器放入花盆,将水位传感器放入水箱。
步骤4:准备Raspberry Pi
有线液晶屏,dht11,带树莓派继电器的水泵。
将DHT11接线至Pi
- S-> GPIO4(引脚7)
- (+)-> 3V3(引脚1)
- (-)-> GND(引脚25)
液晶屏接线
- VCC-> 5V(引脚2)
- GND-> GND(引脚6)
- SDA-> GPIO2(引脚3)
- SCL-> GPIO3(引脚5)
水泵接线继电器
- S-> GPIO18(引脚12)
- (+)-> 5V(引脚4)
- (-)-> GND(引脚20)
带继电器和电池组的水泵接线
- 水泵有两条电缆。一个应连接到继电器,另一个应与电池组电缆连接。
- 其他电池组电缆应连接到继电器。请查看上图以了解如何连接它们。
步骤5:在Pi上运行Nodejs App
在这一部分中,我们将在pi上运行nodejs应用程序以收集传感器数据并控制水泵。Raspberry pi应该连接到Internet。您可以通过以太网或wifi进行操作。
在继续之前,必须在pi上安装Node。如果您之前没有安装nodejs,请按照此处的教程进行安装。
连接树莓派并运行以下命令:
git clone git@github.com:demirhanaydin/waterpi-node.git
cd waterpi-node
npm install
您应该将从aws iot页面下载的公用密钥,专用密钥和证书文件放在certs 文件夹下。另外,您还应该从root证书自己加载root CA证书文件 。将该文件另存为rootCA.pem并将其放在certs 文件夹下。
然后使用您喜欢的文本编辑器打开device.js 文件,并 使用文件路径更新这些行。您应该通过单击您的东西从AWS IoT平台获取 IOT_DEVICE_URL 。它应该像 https://XXXXXXXXX.iot.us-east-1.amazonaws.com
然后跑
sudo node index.js
如果一切正确,则应该能够在LCD屏幕上看到打印的传感器值。
此外,您还应该在DynamoDB表中看到这些值。该应用程序每20秒将传感器数据发送到IoT平台
步骤6:运行Web应用程序
sinatra的基本应用程序使用highcharts 可视化dynamodb表上的数据。另外,它可以远程控制水泵。它的作用是,每当用户单击“开始/停止”按钮时,它将事件发布到AWS IoT平台。Raspberry Pi接受此事件并处理它是否启动或停止泵。
应该在您的计算机上安装Ruby才能继续本教程。如果不是,请下载此页面以进行安装。
打开您的终端并运行以下命令
git clone git@github.com:demirhanaydin/waterpi-web.git
cd waterpi-web
bundle install
您应该将公用密钥,专用密钥,证书和rootCA文件放在 certs 文件夹下。然后打开boot.rb 并 使用适当的值更新这些行。您应该从AWS管理控制台上的“安全凭证”页面获取aws访问密钥和机密。
如果完成了,那么您应该像
ruby app.rb
打开浏览器并键入 http:// localhost:4567 / 您应该能够在图表上看到来自dynamodb的收集的传感器数据。
当单击开始时,泵将开始给植物浇水。
这是我在开发项目时拍摄的一些照片
原理图
原创文章,转载请注明: 转载自科技爱好者博客
本文链接地址: WaterPi:室内植物远程浇水和监控系统 (https://www.tujing.site/4302)
如果博客对您有帮助,请给我 赞助