亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

SmartAgro

组件和用品

Arduino MKR GSM 1400
× 1
SORACOM Air Global IoT SIM
× 1
Arduino MKR MEM 扩展板
× 1
GY21 温度和湿度
× 1
Adafruit SI1145 紫外光传感器
× 1
SparkFun 土壤湿度传感器(带螺丝端子)
× 1
Adafruit 防水 DS18B20 数字温度传感器
× 1
跳线(通用)
× 1

必要的工具和机器

烙铁(通用)

关于这个项目

概览

耕地是一种宝贵的资源,是现代社会赖以生存的必需品。但是农业耕作面临着如此多的挑战,您需要为作物提供合适的温度、湿度和阳光,然后您必须确保不会破坏作物。

概念智能农业 近年来,远程监控作物状况的想法逐渐成形。但是这场农业革命需要付出巨大的代价,大多数可用的系统在小型农场实施成本太高,而且这些系统可能无法覆盖大型农场。

SmartAgro 打算创建一个易于使用的设备网络,可以放置在被监控的现场。这些设备收集大气数据、土壤相关参数和光值,将所有数据发送到云端,在那里显示在仪表板上。

这让任何规模的农场都能步入新的农业时代,在他们的土地上部署可扩展的设备群,在干旱即将来临时向他们发出警告。

视频

图片

功能

SmartAgro 允许用户在被监控的现场轻松实施一组设备。这些设备以定义的时间间隔从传感器中取样。

然后将数据记录到 SD 卡上的 .csv 文件并发送到后端,数据在仪表板上可视化。项目由前端和后端组成。

前端

项目的前端是指放置在现场的物理设备。这些设备从它们的传感器中获取数据样本,将它们刻录到 SD 卡并将数据发送到后端。以下是该项目的功能概述。

MKR GSM 用于前端,该设备收集数据,然后将其发送到 Soracom,在那里进行可视化。以下是设备在收集数据时采取的步骤。

SD卡

设备将从传感器获取的数据记录到与其相连的 SD 卡中。数据将附加到可以下载的 .csv 文件中。

在设置中,设备会定位要写入的 .csv 文件是否可用,如果已存在,则将附加到该文件。如果一个文件不存在,它将创建一个新文件。下面是文件的一些图片。

电池

该设备可以通过多种方式供电。它可以通过设备上提供的端口由锂聚合物电池供电,也可以通过移动电源或通过设备上的 VIN 端口连接电池供电。

设备的寿命在很大程度上取决于电池的电量。设备在读取之间进入睡眠模式以尽可能节省能源。

数据发送

数据通过与服务器的 GSM 连接发送到 Soracom。数据作为 JSON 负载发送。该数据然后由后端接收并进行处理。以下是有效载荷的示例。

{ "Latitude":53.3570404, "Longitude":-6.2609935, "soilTemp":20.56, "soilHumidity":40, "atmoTemp":22.12, "atmoHumidity":62, "uvLight":0.00, "irLight":257, "deviceName":"device1"} 

后端

应用程序的后端是指 Soracom。数据由 Soracom 接收、处理,然后显示在仪表板上。

仪表板

该项目的仪表板托管在 Soracom Lagoon 上。数据由后端的 Soracom Air 接收,Soracom Harvest 收集数据,然后 Lagoon 向 Harvest 查询。

车队中每个设备的位置和所有传感器数据都绘制在仪表板上。仪表板的屏幕截图如下。

警报

用户还可以设置后台在设备采集到的紫外线指数或土壤湿度异常时接收邮件通知。这样,用户就会知道农作物是否需要注意。

好处

操作这个项目的用户将有很多好处:

  • 使用仪表板随时随地可视化数据。
  • 轻松扩展设备并用作多个设备。
  • 比市场上通常的解决方案成本更低。

建设项目

第 1 步:所需设备

这个项目需要一份传感器和其他材料的清单。所需材料的完整清单如下。

  • 1、Arduino MKR GSM
  • 1、Arduino MEM 扩展板
  • 1、GY-21温湿度模块
  • 1、防水温度传感器
  • 1、SI-1145 紫外光传感器
  • 1、土壤湿度传感器
  • 1、2AA 电池盒(带电池) 锂聚合物电池
  • 1、Soracom SIM 卡
  • 1、SD 卡
  • 跳线

第 2 步:连接电路

将需要烙铁将所有组件焊接在一起。原理图在下面的fritzing文件中说明。

记得将 MEM 屏蔽板连接到板上!

准备 MKR GSM

需要准备 Arduino MKR GSM。我通过 VIN 端口用 2 节 AA 电池为电路板供电。步骤如下。

第 3 步:确认代码

用于项目的代码有 4 个主要部分。

  • 准备 SD
  • 收集数据
  • 将数据刻录到 SD
  • 向 Soracom 发送数据

下面对所有这些部分进行了描述和详细说明。

准备 SD

bool createFile(){ // 在 SD 卡中创建 .csv 文件 Serial.println("Creating File"); Serial.println(" OK - 创建并打开文件"); File dataFile =SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println(" OK - 文件已创建"); Serial.println(" OK - 将图例附加到文件中"); Serial.print(" OK - Appending "); Serial.println(图例); dataFile.println(图例);数据文件.close(); Serial.println("成功 - 附加数据"); } else { Serial.println("错误 - 未检测到文件"); Serial.println("OK - 5 秒后重试"); Serial.println("________________________________________"); Serial.println("");数据文件.close();延迟(5000);返回假; } Serial.println("________________________________________"); Serial.println(""); return true;} void checkFile(){ Serial.println("检查 .csv"); Serial.println("________________________________________"); Serial.println("设置文件"); Serial.println(" OK - 检查文件是否存在"); if(SD.exists("datalog.csv")) // 检查 .csv 文件是否已经存在 { // 附加到现有文件是否存在 Serial.println(" OK - File Exists"); Serial.println(" OK - 将追加到现有文件"); Serial.println("________________________________________"); Serial.println(""); } else { // 创建一个新文件附加到 Serial.println(" OK - File Not Present"); Serial.println(" OK - 创建文件"); Serial.println(""); while(!createFile()) {}; }} 

checkFile() 函数检查设备应该附加到的 .csv 文件是否存在。如果文件存在,函数结束,否则调用 createFile() 这将创建一个新的 .csv 文件以附加到。

收集数据

void collectData(){ Serial.println("收集数据"); Serial.println("________________________________________"); Serial.println("从传感器获取数据"); Serial.println(" OK - 联系所有传感器"); //从所有传感器收集数据soilSens.requestTemperatures();土壤温度 =土壤传感器.getTempCByIndex(0);土壤湿度 =模拟读取(A1);土壤湿度 =地图(土壤湿度,1023, 0, 0, 100); atmoTemp =gy21.readTemperature(); atmoHumidity =gy21.readHumidity();可见光 =uv.readVisible(); irLight =uv.readIR(); rawUVLight =uv.readUV(); uvLight =(rawUVLight / 100); Serial.println("OK - 数据已收集"); Serial.println(" OK - 转储数据"); Serial.print("[光]可见"); Serial.println(visibleLight); Serial.print("[光]红外线"); Serial.println(irLight); Serial.print("[光]紫外线"); Serial.println(uvLight); Serial.print("[Atmo] 温度"); Serial.println(atmoTemp); Serial.print("[Atmo] 湿度"); Serial.println(atmoHumidity); Serial.print("[土壤]温度"); Serial.println(soilTemp); Serial.print("[土壤] 湿度"); Serial.println(土壤湿度); Serial.println("成功 - 数据转储"); Serial.println("________________________________________"); Serial.println("");} 

这部分代码从船上的所有传感器收集数据。它接触大气温度和湿度、土壤湿度和温度以及紫外线指数、红外光值和可见光的传感器。

将数据刻录到 SD

boolburnData(String data){ Serial.println("Burning Data"); Serial.println("________________________________________"); Serial.println("烧录数据到SD卡"); Serial.println(" OK - 打开文件"); File dataFile =SD.open("datalog.csv", FILE_WRITE); if(dataFile) { Serial.println(" OK - 文件存在"); Serial.print(" OK - Appending "); Serial.println(数据); Serial.println("OK - 正在烧录数据"); dataFile.println(数据); // 将数据烧录到 SD 卡 dataFile.close(); Serial.println("成功 - 附加数据"); Serial.println("________________________________________"); Serial.println(""); } else { Serial.println("错误 - 文件不存在"); Serial.println(" OK - 5 秒后重试"); Serial.println("________________________________________"); Serial.println("");延迟(5000); } Serial.println("");} 

该功能将之前编译成一行a.csv文件的数据烧录到SD卡上。数据附加到卡上的文件中。

向 Soracom 发送数据

void parseData(String dataToSend){ Serial.println("发送数据"); Serial.println("________________________________________"); Serial.println("向Soracom发送数据"); Serial.println(" OK - 建立连接"); if(client.connect(url, 80)) // 准备连接并格式化 send { Serial.println(" OK - 连接建立,解析数据"); client.println("POST / HTTP/1.1"); client.println("主机:harvest.soracom.io"); client.println("用户代理:Arduino/1.0"); client.println("连接:关闭"); client.print("内容长度:"); client.println(dataToSend.length()); client.println(""); client.println(dataToSend); Serial.println(" OK - 数据解析"); } Serial.println(" OK - 得到响应"); Serial.println(""); // 从服务器读回 while(1) { if(client.available()) { char c =client.read(); Serial.print(c); } if(!client.connected()) { 中断; } } Serial.println("成功 - 数据被解析"); Serial.println("________________________________________"); Serial.println("");} 

最后,数据被发送到 Soracom。设备与服务器建立连接,然后准备凭据。然后将数据发送到服务器,并将响应打印到串行监视器。

然后设备进入休眠状态,持续一定的时间,再次重复这些步骤。

第 4 步:设置变量

在使用项目之前,用户必须编辑一些变量。可编辑的变量位于代码的主文件中。这些描述如下。

  • 设备名称 代表设备的自定义名称。这与有效负载一起发送到 Soracom,在管理一组设备时区分设备非常有用。
  • sleepTime 是设备在两次读取之间休眠的时间(以毫秒为单位)。设备将在读取之间进入休眠状态,以减少电池消耗。
  • proDebug 如果窃听,则设置为 true,否则设置为 false。如果启用了 proDebug,则设备需要连接到带有串行监视器的计算机才能工作。调试时设置为 true,但如果它在现场,请确保将其设置为 false。请注意,即使 proDebug 为 false,设备仍会打印到串口;

步骤 5:设置 SD 卡

必须先准备好 SD 卡,然后才能将其用于设备。 SD卡必须格式化为FAT 32。请按照以下步骤准备SD卡。

第 6 步:上传代码

在设置后端之前,必须将数据发送给它。

为此,请将您的 MKR GSM 连接到您的计算机并将代码上传到设备,确保此设置的设备模式设置为 1。代码上传后,将所有传感器放入水中。

现在按下设备上的按钮并等待数据收集和发送。重复几次以填充 Soracom Air。

第 7 步:设置 Soracom

此步骤分为 2 个部分,第一个部分将介绍在 Soracom 上创建帐户并注册您的 SIM 卡,而另一个部分将介绍设置 Soracom Harvest 以从 Air 收集数据。如果您已经拥有 Soracom 帐户,请跳过第一部分。

第 1 部分:创建帐户

第 2 部分:组和收获

第 8 步:设置 Soracom Lagoon

在 Soracom 上设置的最后一件事是 Lagoon,这是我们将用来可视化数据并在数据不好时创建电子邮件警报的工具。请按照以下步骤操作。

图书馆

  • ArduinoLowPower (c) 2016 Arduino LLC GNU 宽松通用公共许可证,此库在公共领域
  • MKRGSM (c) 2016 Arduino AG GNU 宽松通用公共许可证该库在公共领域
  • Wire (c) 2006 Nicholas Zambetti GNU 宽松通用公共许可证,此库属于公共领域
  • OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
  • DallasTemperature GNU General Public Licence this library is in the public domain
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • SPI (c) 2015 Hristo Gochkov Lesser GNU Lesser General Public Licence this library is in the public domain
  • SD (C) 2010 SparkFun Electronics GNU General Public Licence this library is in the public domain

Final

Finally I designed an enclosure for the project, it would be preferable if the top of the enclosure would be transparent so that the UV sensor can be placed within the enclosure, I placed my sensor outside the enclosure to prevent any interference.

Finally, ensure that all the variables are set and then place the device on the field, it should be ready to monitor all parameters now.

Using an SD Card Module

I have chosen to use the Arduino MKR MEM shield as it is easy to use and quite compact. An SD card module can also be used though most operate with 5v while the MKR GSM can only provide 3.3v, therefore a level convertor is needed to step up the 3.3v to 5v.

Background

I came up with this idea while going on a bus past fields. I remembered reading about new devices used to monitor agricultural fields but I was made aware of the costs which are mostly not affordable for farmers.

So I decided to use the low cost Arduino to monitor multiple parameters on the farm and allow any farm, big or small to step into the age of IoT and smart farming.

代码

SmartAgro
The Full Code

示意图

schematics_rrBJ3HiIfc.fzz

制造工艺

  1. Arduino 传感器 – 类型和应用
  2. 在家中构建无线传感器网络
  3. 使用 K30 传感器监测二氧化碳
  4. 你有多高?
  5. 带有 Arduino 的简单障碍物传感器
  6. 带有 Arduino 或 ESP8266 的电容式指纹传感器
  7. Arduino Cloud Sensor Tower
  8. 运动感应水枪
  9. 如何使用 PHP 创建一个与 Arduino 通信的网站
  10. 带 Arduino 的迷你雷达
  11. Arduino 将传感器数据发送到 MySQL 服务器 (PHPMYADMIN)
  12. 使用 Arduino 的触摸控制灯