有一次,当我在MEPhI的一个学生营地与朋友们放松身心时,其中一个告诉我,他最近决定尝试在一块土地上种草莓。我买了锅,在某处挖了一些土,然后带了浇水软管。所有人都没事了,主人正在睡觉-草莓在生长,但它们只需要稳定地每周一次或多次去乡下,这样植物就不会在没有水的情况下变干。记得有几个Arduino躺在抽屉里,还有一个长期的愿望,就是要完成不仅仅是闪烁LED的事情,所以我立即决定承担这项任务,如果可能的话,这次要结束。
作为系统管理界面,决定提供“从按钮开始”的手动控制,以及通过Internet进行远程控制。之所以选择Arduino Mega,是因为它易于连接带有LCD屏幕和按钮的防护罩,并且还具有足够的内存和GPIO用于此任务,因此被选为头部控制器。该系统的总体方案:
为了与全球网络交互,选择了积极受到欢迎的ESP8266主板。选择无线数据传输协议的原因是,除了Wi-Fi模块的成本低外,还在于客户的dacha处始终有一个Wi-Fi路由器,这避免了在房屋内拉动有线连接。尽管ESP8266是最近才出现在DIY社区中的,但该芯片上的开发人员资源已经在RuNet中进行了积极开发,您可以在其中始终寻找问题的答案,找到连接特定ESP板的示例或寻求问题的帮助。项目估算
为了监测当前的土壤湿度,订购了带有Ebay的标准传感器。为了显示和输入信息,决定使用LCD键盘护罩,它是一种具有LCD屏幕和连接到一个模拟输入的6个按钮的电子模块。作为供水的控制装置,选择了带有两根电线的12伏机械化抽头,通过改变供电电压的符号来进行开合。因此,除了分接头外,还订购了一个4通道继电器模块(两个继电器改变供电极性,一个继电器负责供电,另一个继电器备用)。作为Ebay上的ESP8266,订购了最简单的版本-ESP-01。最主要的是要记住,ESP8266仅由3.3 V供电,必须事先注意这一点。必要设备清单:- 电动起重机
- Arduino的兆
- WiFi模块(ESP8266)
- 4通道继电器
- 土壤湿度传感器
- 带按钮的LCD显示屏
总成本(不包括焊接,组装和电源所需的一切成本):61.01美元。我的系统最终成本的主要贡献是由动力起重机(23.32美元)和Arduino Mega 2560官方(26.80美元)做出的。系统功能
经过一番思考后,我决定自动浇水系统应能够在以下三种模式下运行:- 手动(“来自按钮”)。在这种模式下,用户根据土壤湿度传感器提供给他的信息或基于个人经验来决定灌溉的开始时间;
- 预定模式。用户仅根据时间表(频率,持续时间)设置灌溉参数,然后系统根据选择的设置进行灌溉;
- 传感器模式。当达到预定湿度阈值时,自动浇水。用户只需要设置阈值水分值和浇水时间即可;
- 远程(从智能手机或计算机)。它具有使用上面列出的三种模式中的任何一种的逻辑来远程控制系统的能力。
很难想象没有最简单的菜单就可以实现这种功能,最简单的菜单将使用LCD键盘的屏蔽按钮进行导航。例如,您可以在此处阅读有关Arduino菜单实现的信息。布林克
考虑实施远程灌溉控制时,我遇到了一个有趣的Blynk项目,该项目的筹款活动于2015年1月16日在Kickstarter上启动。一个月来,该项目筹集了49,235美元,而不是10,000美元,这显然反映了全球极客社区对此类项目的巨大兴趣。Blynk的主要目标是创建一个负担得起的平台,用于从智能手机无线控制家用电子设备。按照作者的计划,互联网访问不是一个先决条件-Blynk Server可以在家庭中获得完全自治的情况下下载并部署到家庭网络中。支持的平台(包括,当然,还有的Arduino,树莓PI和英特尔爱迪生),这是计划端口Blynk,是完整的列表在这里。示意性地,下图展示了Blynk的操作原理:
在用于控制远程设备并显示从其接收的信息的智能手机程序的界面功能列表中,宣布了各种各样的元素(“小部件”)。我们选出主要的:- 按键
- 滑杆
- 单轴和双轴操纵杆;
- 使用陀螺仪和电话加速度计进行管理;
- 各种控制旋钮;
- 图表
- 箭头指示器;
- 弹出通知。
完整的项目列表可在Kickstarter的Blynk项目页面上找到。应该注意的是,该项目处于开发的活跃阶段,因此,到目前为止,开发人员声明的所有功能尚未全部实现。但是,根据他们的说法,这只是时间问题。我们项目的可用功能就足够了。技术实施
装置的原理图:
从图中可以看出,Arduino和ESP8266之间的信息交换将通过UART进行。为了避免在闪烁控制器时遇到问题,我们将Wi-Fi模块连接到D2,D3触点,在这些支脚上布置硬件UART(Serial3),并将速度设置为11520波特。细心的读者应该有一个逻辑问题-由5伏逻辑和3.3伏ESP8266供电的Arduino如何通信?在互联网上研究了这个问题之后,我得出的结论是,大多数人并没有直接通过将这两个板的相应支脚连接在一起,就完全不重视这个问题(后来证明了-没有白费)。只有很少的文章建议使用最简单的分压器或专门设计的转换器。自然地,我没有转换器,因此最初尝试使用分频器实现通信,但是没有产生任何结果,因此我加入了上述一系列令人眼花problems乱的问题(好处是在逻辑层次上没有协调) 。关于ESP8266的强大功能
正如许多教程中已经提到的那样,为使ESP正常运行,您需要在3.0-3.6伏范围内提供稳定的电源。为此,您可以使用各种线性转换器,例如今天流行的AMS1117 3.3。AMS1117上的数据表指示输入电压可以达到15V。但是,为了在大约1 A的输出电流模式下稳定运行,建议降低输入电压(实际上5-6 V就足够了)。根据我自己的经验,我会说,当转换器连接到12 V电源时,AMS会开始主动加热,这会迅速导致输出电压降低,并因此导致ESP8266重启。配置ESP8266
使用Blynk时Arduino和ESP8266的交互可以两种不同的方式实现:- «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
- ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).
两种选择都有其优点和缺点,但是第一种选择更为方便,因为无需使用两个程序并不断监视两个设备的兼容性。要使用Blynk进行控制,您必须能够将所需的固件上传到ESP8266。在我们的案例中,将使用AT固件v0.22 SDK v1.0.0的版本。要刷新ESP8266板,您需要一个USB-TTL转换器(例如,一个),但是,您也可以通过关闭Arduino的RST和GND引脚并将RX Wi-Fi模块连接到Arduino RX引脚(类似于TX至TX)来使用Arduino。在闪烁的进一步平移ESP8266(这是可封闭的GPIO0输出到地)模式和使用效用XTCom的Util填充固件,如所描述的本文所。仍然只有通过AT指令AT + UART_DEF = 115200,8,1,0,0将UART速度提高到115200波特率,然后才能完成Wi-Fi模块配置。Arduino的草图
在Arduino IDE下使用Blynk的主要库是BlynkSimpleEsp8266.h库。考虑其主要功能。1)Blynk.begin(auth,“ ssid”,“ pass”)正如您可能已经猜到的,该函数接收用于连接到Wi-Fi点的参数-它的SSID和密码,以及用于连接到Blynk服务器的设备的auth令牌。重要!仅在首次在程序中调用以下任何功能后,才开始连接到Blynk服务器的过程:Blynk.run()或Blynk.connect()。要断开/连接到Blynk服务器,将使用Blynk.disconnect()和Blynk.connect()函数,并以布尔类型返回结果。要建立连接(超时以秒为单位),使用Blynk.connect(s)(默认情况下,超时设置为30 s)。2)Blynk.run()用于将设备与Blynk服务器同步并从智能手机接收命令的主要功能。常用于循环中。此外,此功能允许您控制ESP板的输入和输出(在“独立”模式下),而无需在代码中的任何位置使用诸如digitalRead,digitalWrite,analogRead,analogWrite之类的功能。只需在智能手机上的应用程序的控制屏幕中添加必要的元素,然后将它们与必要的GPIO ESP8266相关联即可。3)使用虚拟联系人(“虚拟引脚”)Blynk的功能之一是使用虚拟联系人。该术语指的是用于在移动应用程序和设备之间传输各种信息的逻辑通道,可以是布尔变量,数值(整数或长整数)或文本数据作为字符串。虚拟触点与设备终端没有直接连接,主要用于与外围模块库(LCD,伺服等)或移动应用程序接口的交互。在草图代码中,使用块BLYNK_READ(Vn){...}和BLYNK_WRITE(Vn){...}处理编号为n的虚拟联系人的呼叫。在大括号内,指示用于访问虚拟联系人的处理代码。例如,如果应用程序小部件要求将虚拟显示2的土壤湿度值显示为图表,那么我们需要在草图中编写如下内容:BLYNK_READ(V2)
{
Blynk.virtualWrite(2, humidity);
}
同样,您可以考虑例如通过Blynk应用程序的用户通过9号虚拟联系人发送的参数:BLYNK_WRITE(V9)
{
int x = param.asInt();
}
这将使用param.asInt()将输入变量转换为整数值。还允许转换param.asStr()和param.asDouble()。重要! BLYNK_READ / BLYNK_WRITE过程应尽快执行,以便设备可以处理来自应用程序的所有请求。因此,强烈建议不要在此类例程中使用Sllep / Delay函数。有关Blynk功能的更多详细信息,可以在开发人员的github页面上的examples文件夹中或在docs页面上找到。现在,有了知识,让我们回到自动浇水并写草图。我们将为移动应用程序与系统交互提供以下可能性:- 系统运行方式的选择:手动,按传感器,按时间表;
- 显示从系统接收的土壤水分和历史数据输出;
- 通过终端应用程序元素交换信息。
我试图评论负责系统特定功能的每段代码,因此我们将不再详细讨论程序代码。我仅注意到,为了易于使用,用户进行的所有设置都记录在非易失性Arduino存储器(EEPROM)中。可以在GitHub上下载Sketch。设置Blynk移动应用程序
剩下的最后一步-设置移动应用程序。就我而言,将使用以下元素:- 4个LED指示灯(虚拟引脚1、29、30、31);
- 2个按钮(虚拟引脚2、3);
- 信息交换终端(虚拟引脚4);
- 数字指示器“值显示”(虚拟引脚8);
- 能够显示历史数据的图表“ History Graph”(虚拟引脚8);
- 用于激活邮件工作的小部件(“电子邮件”);
- 用于激活弹出通知(“推送”)的小部件。
安装Blynk移动应用程序后,您需要注册并选择要管理的设备(在本例中为ESP8266)。此外,为了不丢失,我们向自己发送了一个唯一的身份验证令牌,该令牌在草图中用于在Blynk服务器上进行身份验证。以下是说明应用程序设置的屏幕截图。在已创建项目的打开的窗口的右上角,有3个按钮:全局项目设置,向表单添加元素(小部件)并启动:仍然需要将控件添加到应用程序表单并对其进行配置。下面列出了撰写本文时可用的一些小部件:要控制系统的运行,请在表单中添加2个按钮:一个将负责选择操作模式,第二个-负责以手动模式启动灌溉。系统的当前状态将使用四个LED指示灯绘制。灌溉过程中一个指示灯会亮起,另外三个必须显示当前模式。剩下的是选择元素的颜色,添加标题并将其绑定到所需的虚拟联系人。要显示土壤水分的动态,请在表格中添加能够显示历史数据的图表(“历史图表”)。我们将在数字显示屏(“值显示”)上显示当前的湿度值。为了方便远程配置系统参数,以及获得有关当前状态的更完整信息,我们在应用程序中添加了一个终端。为了通过电子邮件和电话接收通知,您还必须在表单上放置“推送”和“电子邮件”元素。它仍然保留在上面描述的所有小部件的窗体上,我们将得到如下所示的内容:
结果
以下是系统当前状态的几张照片,以及自动浇水和Blynk工作的视频。我马上要预约,我没有开始在公寓里连接机械化的水龙头并向花盆供水,而且没有迫切需要-在测试系统时,我的妻子和普通的喷壶成功地模拟了浇水过程(水龙头打开时)。照片1:
照片2:
视频:而不是结论
总结使用Blynk创建自动浇水系统的过程,我们可以说以下几点:1. Blynk服务本身是一种非常方便易学的工具,由于受支持的板卡和设备丰富,因此可以轻松集成到几乎任何设备中。这些优点与ESP8266 Wi-Fi模块的低价格一起,可让您以最少的精力为特定项目添加远程控制。当然,使用这种解决方案的缺点是,无法为自己定制系统的灵活性较弱,并且依赖于应用程序开发人员,但是,在用于小型DIY项目时,这至少不会降低其优点。2.以上实施自动灌溉系统的两个主要缺点是其成本和所用土壤湿度传感器的质量低。如上所述,第一个缺点是由电磁分接头和官方的Arduino Mega板的高昂成本引起的。但是,可以通过使用(例如)Arduino模拟或在另一个合适的MK上实现整个电子零件来显着减少这种情况。不幸的是,找不到便宜的起重机,这不是我的目标。至于湿度传感器,为了延长其使用寿命并减少其触点之间的电解产物,首先,必须仅在测量湿度之前立即对其施加电压(这在我的系统中已实现),其次,最好更换它可以安装在石墨棒上,也可以使用不锈钢触点。计划在不久的将来将电子零件组装在一起,并放置在合适的建筑物中,我希望最终将所有零件安装在该国。感谢您的关注!