Arduino上进行使用传感器的开发,非常轻松!搭载8种传感器的罗姆传感器评估套件用后感

转载自 Device Plus,获得了相关许可,特此声明

用Arduino Create制作植物培育装置

罗姆传感器评估套件的试用系列已经连载了好几期,本期将对照度传感器和接近传感器等其他传感器进行组合,以提升植物培育装置的能力!

另外Device Plus编辑部之前也刊发过新闻报道,堪称Arduino界重磅消息的"Arduino Create"已经于2016年8月18日正式发布!Arduino Create简而言之就是使"Arduino也能像mbed一样在线进行源数据写入"的东西,对Arduino而言,这实在是一条令人振奋的消息。

对于Arduino Create,将从下期开始介绍详细的内容,本期我将通过安装传感器评估套件的方式,第一时间使用Arduino Create来进行装置的安装。

此次的电子工程配方

完成为止的大致时间标准:120分钟
必要零件

※罗姆传感器评估套件可通过以下网站购买!
AMEYA360
RightIC

目 录

  1. 考虑提升植物培育装置能力的规格
  2. 使用Arduino Create×罗姆传感器评估套件进行开发!
  3. 开始工作!安装!
  4. 总结

1.考虑提升植物培育装置能力的规格

本期,我们以提升植物培育系统的能力为目标,看看要如何使用迄今所介绍过的传感器才能对植物有效。对于各种传感器的详细作用和使用方法,让我们参阅往期的讲座,思考一下以往用过的传感器的用途和能否在植物培育装置中使用…

图1 传感器评估套件的传感器一览

图1 传感器评估套件的传感器一览

  • 加速度传感器:检测倾斜和动作、振动等 → 这次好像没有出场…
  • 气压传感器:检测气压 → 从气压与天气的关系来看,和植物是有点关系的。
  • 地磁传感器:检测方位 → 是否能根据太阳的方位来改变植物的朝向呢?
  • 接近照度传感器:检测接近的物体、检测亮度 → 能否实现在变暗时停止装置运行等使用方法?
  • 颜色传感器:检测颜色 → 叶子枯萎时等情况下也应该能起作用…
  • 霍尔传感器:利用磁性特性检测物体 → 这次好像没有出场…
  • 温度传感器:检测温度 → 温度过高、过低时可以进行灌溉控制…

 

在回顾一系列传感器的用途后,可以发现有很多传感器与植物培育装置有关系,并且能够作为有用的功能进行安装。关于要使用哪些传感器并怎样组合成装置,这次让我们从植物的角度出发来思考一下…

 

图2 普通观叶植物的培育方法

图2 普通观叶植物的培育方法

 

从植物角度出发,哪些条件使其愉快成长,哪些条件不利成长,可以作为传感器使用方法的参考。 说个笑话,我曾经觉得我培育的观叶植物也应该偶尔到阳光充足的户外去散散心!我就将它放在夏季艳阳下几天,之后它就被晒枯了…(泪)

我们以上述信息为基础,考虑本期植物培育装置的规格…

  • 日晒条件 → 使用紫外线传感器和温度传感器,在温度高、紫外线强的情况下减弱阳光
  • 灌溉规则 → 检测土壤的干燥状态,根据花盆尺寸进行供水
  • 关于温度 → 调查目标植物的特性,在温度过高、过低时发出警报
  • 关于通风 → 在室内风少的场所,进行送风

让我们以上述功能为目标来试着制作装置!

 

通过Arduino Create×罗姆传感器评估套件进行开发!

接下来要制作程序和电路,本期我将尝试使用刚发布不久的Arduino Create。可以在线连接电线,且SNS功能等也终于能够实现共享,现在我们接触到的还只是其中一小部分,我预感其将来会更加精彩。

 

照片2 可在线使用Arduino的

照片2 可在线使用Arduino的"Arduino Create"

Arduino Create网页

Arduino Create的入门方法

在使用Arduino Create推进开发前,先对其步骤进行简单的说明。首先,其与现有Arduino不同的是可在Web浏览器上书写源代码。以往的流程是先下载Arduino软件并安装到计算机上,再启动软件来写入至Arduino主体,Arduino Create的情况下则是:

  1. 打开浏览器后,打开Arduino Create的网站
  2. 在Arduino Create中注册用户(仅首次)
  3. 输入注册信息~点击激活邮件的URL后完成注册(仅首次)
  4. 安装用于将浏览器与Arduino主体连接起来的"ArduinoCreateAgent"(仅首次)
  5. Web浏览器上开始Arduino开发。

与计算机版软件的重大差别有:

  • 连接互联网的情况下,可以随时随地浏览过去所书写的源代码
  • 库也是在线登录,即使换了一台计算机也无需再次安装相同的库

等等,都变得非常方便!(仅仅上述这些还看不出什么,在下期开始的报道中会详细的介绍)
如果要举出一个缺点的话,那就是不联网就无法使用!这种情况下,就用一直使用的现有版本吧。

 

下面让我们试着启动Arduino Create的主画面和传感器评估套件库

用户注册完成后,先打开Web浏览器。

图3 Arduino Create Web浏览器

图3 Arduino Create Web浏览器

也许是浏览器的关系,以往竖长的画面变为横宽,菜单等也能看得一清二楚。 软件的情况下,因为窗口过多,源代码打开过多的情况下,会找不到所需要的源代码,现在这个问题得到了解决。

过去位于上方的菜单整齐地排列在左侧的菜单中。

 

图4 Arduino Create Web浏览器-基本功能

图4 Arduino Create Web浏览器-基本功能

下面让我们来确认常用的功能。首先从左侧菜单的"Examples"打开使LED闪烁的"Blink"源代码。接着,通过位于画面中央上方的Arduino种类、端口的选择,选择连接着的Arduino的端口号与种类,试着进行"编译"→"写入"后,与软件版一样,写入Arduino中后,可以进行LED闪烁!

 

添加传感器评估套件库

运行正常,因此接下来我将添加传感器评估套件的库并确认动作。从左侧菜单的"Libraries"选择,并点击上方的"ADD ZIP LIBRARY"后,可以上传zip文件,因此选择要增加的库的zip文件即完成添加。可以从这里下载各传感器的传感器评估套件的库(zip文件)。

 

图5 Arduino Create Web浏览器-添加库

图5 Arduino Create Web浏览器-添加库

 

好了,传感器评估套件也轻松运行起来了!

已经确认传感器评估套件也可运行,接下来开始制作程序和电路。

本期装置所需的规格如下,接下来根据规格来组合部件和传感器。

  • 日晒条件 → 使用紫外线传感器和温度传感器,在温度高、紫外线强的情况下减弱阳光
    →用伺服电机来制造阴影!
  • 灌溉规则 → 检测土壤的干燥状态,根据花盆尺寸进行供水
    →通过土壤传感器和泵来实现灌溉!
  • 关于温度 → 调查目标植物的特性,在温度过高、过低时发出警报
    →使LED发光来进行通知!(将来希望能跨网络进行通知!)
  • 关于通风 → 在室内风少的场所,用风扇送风
    →像夏天一样,通过伺服电机扇动扇子

在上述基础上,构成如下所示的电路。

图6 电路图(设想在Arduino上安装传感器评估套件)

图6 电路图(设想在Arduino上安装传感器评估套件)

 

程序的关键是在loop的前半取得各传感器的值后,根据该传感器的值来驱动伺服电机或LED以实现所需动作。各传感器的反应阈值因花盆的尺寸和植物而异,请调查所需培育的植物并试着调整数值。

 

程序 – 植物培育装置

							#include <Wire.h>

							#include <Servo.h>

							#include <RPR-0521RS.h>

							#include <BD1020.h>

							#include <ML8511A.h>

							#include <BM1383GLV.h>
							


							//***********************************************

							//阈值的设定

							//***********************************************

							int moi_threshold   = 500;  //设定水的干湿程度。(潮湿←0~1023→干燥)

							int upper_temp_threshold  = 30;   //高温检测-过高时红色LED发光

							int under_temp_threshold  = 10;   //低温检测-过低时蓝色LED发光

							int uv_threshold  = 4;   //紫外线的强度设定-超过时形成阴影

							int send_wind_sec  = 30; //送风的大致间隔(秒数)

							//***********************************************
							


							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() {

									//*********************************

									//土壤传感器

									int moi = analogRead(moisture_pin);

									Serial.write("MOISTURE = ");

									Serial.println(moi);

									Serial.println();
								


									//*********************************

									//温度传感器

									float temp;

									bd1020.get_val(&temp);

									Serial.print("BD1020HFV Temp=");

									Serial.print(temp);

									Serial.print("  [degrees Celsius], ADC=");

									Serial.println(bd1020.temp_adc);
							


									//*********************************

									//紫外线传感器

									float uv;

									ml8511a.get_val(&uv);

									Serial.write("ML8511A UV = ");

									Serial.print(uv);

									Serial.println(" [mW/cm2]");

									Serial.println();
							


									//*********************************

									//气压传感器

									byte cp;

									float press;
									


									cp = bm1383.get_val(&press);

									if (cp == 0) {

										Serial.write("BM1383GLV (PRESS) = ");

										Serial.print(press);

										Serial.println(" [hPa]");

										Serial.println();

									}
									


									//*********************************

									//接近照度传感器

									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();

										}

									}
							


									//***********************************

									//根据传感器的值进行各项处理
							


									//土壤变干时进行灌溉

									if(moi > moi_threshold){

										Serial.println("Water Servo start.");

										for(int m=0;m < 10;m++){ waterServo.write(0); //将伺服电机驱动至0度

													delay(1500); //等待1.5秒

													waterServo.write(90); //将伺服电机驱动至90度

										}

									} //基于温度的动作

									if(upper_temp_threshold > temp){

										digitalWrite(redLedPin, HIGH);  //使LED发光

										delay(moi);                     //将干湿程度转变为LED的发光时间

										digitalWrite(redLedPin, LOW);   //熄灭LED

									}

									if(under_temp_threshold < temp){

										digitalWrite(blueLedPin, HIGH);  //使LED发光

										delay(moi);                     //将干湿程度转变为LED的发光时间

										digitalWrite(blueLedPin, LOW);   //熄灭LED

									}
							


									//日晒过强时形成阴影

									if(uv < uv_threshold && !uvFlg){

											waterServo.write(90);

											uvFlg = true;

									}

									else if(uv >= uv_threshold && uvFlg){

											waterServo.write(0);

											uvFlg = false;

									}
							


									//按固定时间进行送风

									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);

							}

 

开始工作!安装!

程序和电路已经完成,接下来进行组合以完成硬件!

照片3 作为本次实施对象的观叶植物

照片3 作为本次实施对象的观叶植物

首先,本次的实施对象是这种植物。

 

照片4 阴影部分的结构

照片4 阴影部分的结构

紫外线变强时,将安装在伺服电机上的面板旋转90度,以遮挡从窗口射入的阳光。

 

灌溉部分,本次通过伺服电机拉拽喷雾装置来实现。

灌溉部分,本次通过伺服电机拉拽喷雾装置来实现。

 

送风的情形。用充满夏季感觉的扇子扇风。

 

照片5 植物培育装置整体图

照片5 植物培育装置整体图

组装起来暂时是这样一种感觉。用伺服电机会有一种模拟的感觉,要显得更高科技的话,使用小型泵进行灌溉、使用小型风扇和计算机风扇等作为送风部分也许会更好。另外,在室内无窗等情况下,还可以将植物用LED与照度传感器组合,在室内变暗时关闭植物用LED。

 

总结

本期通过组合传感器评估套件,成功提升了植物培育装置的能力。因为也有新闻中介绍的出色的元器件,这次的并不是最终的成品,通过以更好、更有趣的创意作为基础不断进行改进,相信我们会更加享受开发的过程并愉快地开发下去。

下期我们将在更详细地使用Arduino Create的同时,试用体验一下传感器评估套件的最后一个成员——加速度传感器!