这篇文章来源于DevicePlus.com英语网站的翻译稿。
今天,我们将利用ROHM传感器评估套件打造一套智能花园系统。在此项目中,我们整合接近/环境光传感器(ALS)和其他传感器,实现植物培育设备的自动化操作!
有关ROHM传感器的更多信息,请参阅我们的文章ROHM传感器评估套件概览!
此外,我们将使用Arduino Create对系统进行编程。
Arduino Create是一个多合一的在线平台,可以编写代码、配置电路板、共享项目。该平台于2016年8月18日正式发布。
Arduino Create 提供以下服务:
Arduino Web Editor
Arduino Web Editor 是一款在线编辑器,用户可以编写代码并将程序从网页浏览器上传至任何Arduino开发板上。
- 将代码写入或导入 Arduino
- 上传/分享程序
- 使用Arduino库
- 通过云连接服务
Arduino Project Hub
Arduino Project Hub 是一个hackstar.io提供的教程平台。该Hub拥有大量不同难度和人气的项目。
Arduino Cloud
凭借Arduino Cloud,用户可以通过互联网在云中管理项目。Arduino Cloud执行亚马逊的云计算服务,能够为用户提供安全的开发环境。
- 将Arduino直接连接到互联网
- 通过MQTT在Arduino之间进行互通
- 采用AWS IoT和AWS Lambda
今天的电子食谱
预计完成时间:120分钟
所需部件:
- Arduino 主体 (Arduino UNO R3)
- Rohm 传感器评估套件https://www.rohm.com/web/global/sensor-shield-support
- 电阻 (220 欧姆) × 2
- 红色 / 蓝色 LED
- 土壤传感器https://www.dfrobot.com/wiki/index.php/Moisture_Sensor_(SKU:SEN0114)
- 伺服电机 (SG90)
※ 您可以从以下站点购买罗姆传感器评估套件!
考虑植物培育设备的电气规格
打造智能花园系统的第一步就是要确定需要集成的内容。我们如何使用这些传感器打造一套有利于植物培育的设备呢?首先,我们看一下各种传感器的功能和用法以及它们在该项目中的潜在用途。
传感器评估套件提供8种不同的传感器。我们应将哪些传感器集成到植物培育系统中呢?我们来复习一下每个传感器的功能,看看系统可以采用哪些传感器。
- 加速度计: 检测倾斜、运动、振动等。→我们可能不会用此器件来测量加速度。
- 气压传感器:检测大气压力→压力与天气之间的关系似乎与室内植物没有关系
- 地磁传感器:检测方向→可以根据太阳的方向改变植物的朝向吗(?)
- 接近传感器:检测正在接近的物体;检测亮度→如果我们的系统只是在白天(或明亮时)而不是在黑暗中工作,那么这个器件很有用。
- 颜色传感器:检测颜色→叶子是否枯萎,等等……我们以后再研究这个功能吧……
- 霍尔传感器:通过磁铁检测物体→我觉得这个项目可能不会使用接近开关或定位功能…
- 温度传感器:检测温度→我们可以用温度数据来控制植物的浇水情况(比如温度较高时应该多浇水,等等)。
- 紫外线传感器:检测紫外线→日光太强/太弱时可通知用户相关情况。
根据各个传感器的功能简述,为了完成此项目,我们可能需要在系统中整合多个传感器。那么我们应该集成哪些传感器呢?
如图2所示,种植健康的植物必须满足一定条件。一般来讲,植物在通风良好、阳光充足和温度适中的地方生长最好。当然,它们需要水。
根据这些信息,我们可以缩小传感器的选择范围:
- 日光条件→利用紫外线传感器和温度传感器检查温度是否过高/紫外线强度是否过大,并采取必要的措施以减少日光照射。
- 浇水原则→利用土壤传感器,我们可以确定土壤中的水分含量,并根据盆的大小为植物浇水。
- 关于温度→如果温度过高或过低,我们可以检查植物含量并触发警报。
- 通风→我们可以测量室内空气流速,如果室内风量不够,我们可以用风扇来产生风。
现在,我们开始构造这个系统吧!
类似的设备……
说到植物培育设备……已经有人制作过大型植物培育系统。比如FarmBot。从外观上看,FarmBot就像是一台巨大的激光切割机或3D打印机。正如下面的视频所示,该机器还可以帮忙播种,似乎我们通过电脑或移动应用程序就能控制播种过程。长时间在室外管理和控制这些设备会比较困难,尤其是在天气比较恶劣的情况下。不管怎样,这些非常酷的设备在改善可持续发展农业领域具有巨大的潜力。
FARMBOT GENESIS – https://farmbot.io/
Arduino Create × Rohm 传感器评估套件!
接下来我们看一下如何用Arduino Create编写程序。
Arduino Create 入门
我们循序渐进地看一下Arduino Create如何使用。Arduino Create的迷人之处就在于您可以直接在浏览器中在线编写代码并进行共享(比如在社交媒体上)。通常,如果您要使用Arduino,您得在电脑上下载并安装Arduino IDE,但是Arduino Create无需这个步骤。
- 打开浏览器,然后转到Arduino Create 网站。
- 如果您是首次使用Arduino,那么必须创建一个用户帐户。请进入用户注册页面以创建您的帐户(如果您有Arduino帐户,那么可以直接用现有帐户登录)。
- (仅适用于初次使用的用户)完成注册后,您会收到一封包含一个URL的电子邮件,点击该链接完成注册。
- (仅适用于初次使用的用户)安装“Arduino Web Editor Plugin”(或“ArduinoCreateAgent”),以便浏览器可以连接到Arduino主机。
- 打开Arduino Web Editor。
PC版和网络版之间的主要区别是什么呢?
- 只要可以上网,您几乎能在任何地方查看/编辑您的程序。
- 网络版还支持多个库,因此即使更换电脑,您也不必重新安装原来使用的库。
Arduino Create非常有用。唯一的缺点是:要使用Web Editor,您必须连接互联网,否则是无法使用的。我觉得介绍的差不多了。此时,您可以简单地在电脑上使用现有的Arduino软件。
运行Arduino Create主屏幕和传感器评估套件库
首先打开Arduino Web Editor.
您会看到编辑器在浏览器中打开。值得一提的是,与Arduino Software IDE相比,这些菜单更易于查看和定位。有时,在电脑上使用IDE并打开太多带有很多程序的窗口时,它们会变得杂乱无章;但是这个编辑器的窗口整洁有序,您可以轻松地找到所需文件。
菜单栏位于编辑器的左侧。
我们来查看一些常用功能。我们从“Blink.ino”开始(路径:Examples →BUILT IN→01.BASICS→Blink)。使用屏幕上方中央的下拉菜单,选择要连接的Arduino开发板和端口。然后,点击“Verify”→“Upload”(通常在Arduino软件中执行此操作)。
添加传感器评估套件库
接下来,我们将添加传感器评估套件库。要添加库,您可以点击左侧菜单的“Libraries”,并单击“ADD ZIP LIBRARY”。然后,选择要添加的库的zip文件完成添加。您可以从此处为每个传感器下载传感器评估套件库(zip文件)。
传感器评估套件已成功连接。现在,我们进行连线和编程!
整个系统的设计理念如下:
- 日光条件→利用紫外线传感器和温度传感器检查温度是否过高/紫外线强度是否过大,并采取必要的措施以减少日光照射。
→ 用伺服电机遮阳!
- 浇水原则→利用土壤传感器,我们可以确定土壤中的水分含量,并根据盆的大小为植物浇水。
→ 使用土壤传感器和喷壶!
- 关于温度→如果温度过高或过低,我们可以检测植物的环境温度并触发警报。
→ 用LED触发警报!(也许将来我们可以通过网络通知程序来实现这个功能!)
- 通风→我们可以测量室内空气流速,如果室内风量不够,我们可以用扇子来产生风。
→ 用伺服电机操作扇子扇风。
至于程序,在循环的前半部分获取每个传感器的值后,我们将根据每个传感器的值启动伺服电机和LED灯。由于每个传感器的激活阈值因设备大小而异,因此您可以自己的喜好调整具体数值。
程序–植物培育设备
#include <Wire.h>
#include <Servo.h>
#include <RPR-0521RS.h>
#include <BD1020.h>
#include <ML8511A.h>
#include <BM1383GLV.h>
//***********************************************
//Set threshold
//***********************************************
int moi_threshold = 500; //set the moisture threshold (moist←0~1023→dry)
int upper_temp_threshold = 30; //high temperature-red LED
int under_temp_threshold = 10; //low temperature-blue LED
int uv_threshold = 4; //set the intensity of ultraviolet light, shade if exceeded
int send_wind_sec = 30; //wind blowing interval (in seconds)
//***********************************************
Servo uvServo;
Servo windServo;
Servo waterServo;
int redLedPin = 13;
int blueLedPin = 12;
int moisture_pin = A0;
int tempout_pin = A2;
int uvout_pin = A0;
int counter = 0;
bool uvFlg = false;
BD1020 bd1020;
RPR0521RS rpr0521rs;
ML8511A ml8511a;
BM1383GLV bm1383;
//***********************************************************
void setup() {
Serial.begin(9600);
while (!Serial);
Wire.begin();
byte rc;
rc = rpr0521rs.init();
rc = bm1383.init();
pinMode(redLedPin,OUTPUT);
pinMode(blueLedPin,OUTPUT);
uvServo.attach(9);
windServo.attach(10);
waterServo.attach(11);
bd1020.init(tempout_pin);
ml8511a.init(uvout_pin);
}
//***********************************************************
void loop() {
//*********************************
//Soil Sensor
int moi = analogRead(moisture_pin);
Serial.write("MOISTURE = ");
Serial.println(moi);
Serial.println();
//*********************************
//Temperature sensor
float temp;
bd1020.get_val(&temp);
Serial.print("BD1020HFV Temp=");
Serial.print(temp);
Serial.print(" [degrees Celsius], ADC=");
Serial.println(bd1020.temp_adc);
//*********************************
//UV sensor
float uv;
ml8511a.get_val(&uv);
Serial.write("ML8511A UV = ");
Serial.print(uv);
Serial.println(" [mW/cm2]");
Serial.println();
//*********************************
//Barometric pressure sensor
byte cp;
float press;
cp = bm1383.get_val(&press);
if (cp == 0) {
Serial.write("BM1383GLV (PRESS) = ");
Serial.print(press);
Serial.println(" [hPa]");
Serial.println();
}
//*********************************
//ALS/proximity sensor
byte rc;
unsigned short ps_val;
float als_val;
byte near_far;
rc = rpr0521rs.get_psalsval(&ps_val, &als_val);
if (rc == 0) {
Serial.print(F("RPR-0521RS (Proximity) = "));
Serial.print(ps_val);
Serial.print(F(" [count]"));
near_far = rpr0521rs.check_near_far(ps_val);
if (near_far == RPR0521RS_NEAR_VAL) {
Serial.println(F(" Near"));
} else {
Serial.println(F(" Far"));
}
if (als_val != RPR0521RS_ERROR) {
Serial.print(F("RPR-0521RS (Ambient Light) = "));
Serial.print(als_val);
Serial.println(F(" [lx]"));
Serial.println();
}
}
//***********************************
//depending on the sensor value each time
//the water level will rise when the soil dries
if(moi > moi_threshold){
Serial.println("Water Servo start.");
for(int m=0;m < 10;m++){ waterServo.write(0); //move servomotor to 0 degree
delay(1500); //wait 1.5 seconds
waterServo.write(90); //move the servomotor to 90 degrees
}
} //Temperature activate
if(upper_temp_threshold > temp){
digitalWrite(redLedPin, HIGH); //turn on LED
delay(moi); //set the moisture to LED flashing time
digitalWrite(redLedPin, LOW); //turn off LED
}
if(under_temp_threshold < temp){
digitalWrite(blueLedPin, HIGH); //turn on LED
delay(moi); //set the moisture to LED flashing time
digitalWrite(blueLedPin, LOW); //turn off LED
}
//shades when the sunlight is too strong
if(uv < uv_threshold && !uvFlg){
waterServo.write(90);
uvFlg = true;
}
else if(uv >= uv_threshold && uvFlg){
waterServo.write(0);
uvFlg = false;
}
//create wind at a specific time
if(counter > send_wind_sec){
Serial.println("Wind Servo start.");
for(int n=0;n < 10;n++){
waterServo.write(0);
delay(1000);
waterServo.write(90);
}
counter = 0;
}
counter++;
delay(1000);
}
组装植物培育系统!
现在,接线和编程已经完成,我们来把系统组合在一起。
首先,您需要一棵植物(当然)!
当紫外线太强时,安装在伺服电机上的遮光板将旋转90度,从而挡住窗户上的阳光。
我们可以根据湿度水平利用伺服电机拉动喷壶进行喷水。
我们的吹风设备是一把东方折扇!
整个系统仍有很大的改进空间。如果您想要科技感更高一些,您可以使用小型水泵、PC风扇等设备。此外,如果房间中没有窗户,那么可以同时利用LED与照度传感器,在房间变暗时关闭植物的LED。
总结
在本项目中,我们组合使用传感器评估套件中的多个传感器来打造智能花园系统。市面上已经出现了一些很酷的植物培育设备(教程中做了简要介绍),我相信本教程能够为开发更先进的植物培育设备奠定坚实的基础。
在下一个教程中,我们将更详细地介绍Arduino Create,并尝试使用传感器评估套件中的加速度计。