自动浇花系统

演示视频

下面的视频展示由嵌入式平台搭建的自动浇花系统。

网站端控制嵌入式平台输出9伏电压驱动水泵。除了控制水泵,平台还连接温度湿度传感器,可以从传感器中每5秒读取温度和湿度的信息,并展示到网站上。

项目图示

  1. 嵌入式平台: 锐客创新嵌入式平台,USB Type-C供电,以太网和外界通信,杜邦线连接外设。
  2. 温度湿度传感器: 使用dht22温度湿度传感器。在嵌入式平台设置合适的硬件操作语言和该传感器进行交互。
  3. 水泵: 内部为一个额定电压为12V的无刷电机。嵌入式平台提供5/9/15/20V电压,这里我们选择9V对水泵供电。
  4. 继电器: 通过GPIO管脚控制9V供电,即可以控制水泵的开启和关闭。
  5. 接线端子: 起连接杜邦线和固定的作用。

控制水泵

水泵里有一个无刷电机。当接入直流电时,电机转动,继而带动水流流动,可将水流从低的地方带到高的地方。

继电器的控制端连接一个GPIO引脚(继电器的3和4引脚),输出端(继电器的1和2引脚)分别连接水泵的高电压端和嵌入式平台的高电压输出端。这样继电器便可以控制开关水泵了。

选择嵌入式平台输出9V电压

嵌入式平台可以输出5/9/15/20V电压,用户需要在SD卡上的system/config.json文件中指定9V电压,如下:

{
  "voltage": "9v"
}
GPIO开关水泵

如果嵌入式平台的高电压输出直接连接到水泵,那么平台将无法控制水泵的开关。所以平台的高电压输出端先连接到继电器,通过GPIO的高低电压实现控制继电器的开关,继而控制水泵。

嵌入式平台的引脚1和继电器连接,可以通过下面的硬件操作语言可以实现水泵开启5秒然后关闭。

{
    'event': 'now',
    'actions': [["gpio", 1, "output", 1],["delay", 0, "s", 5],["gpio", 1, "output", 0]]
}

控制温度湿度传感器

嵌入式平台通过GPIO引脚连接dht22传感器读取温度和湿度的信息。传感器有自己的通信协议,该协议规定了如何和传感器交互并从中读取温度和湿度的信息。平台可以通过硬件操作语言实现协议并得到传感器温度和湿度的数据。下面的链接是dht22的手册:

下载:DHT22手册

下图是dht22的引脚信息,VCC和GND分别和平台的5V和GND连接,DOUT引脚传送数据和平台的GPIO引脚0连接。

下图是通信协议,dht22在收到响应信号后,会先发送16位的湿度信息,然后发送16位的温度信息,最后发送校验位。

下图展示了dht22的响应信号,平台需要将信号线拉低1毫秒,然后释放总线(即平台将信号引脚设置为输入)。

下图是dht22的数据信号,如果是信号0,dht22会拉高数据信号26us,如果是信号1,dht22会拉高数据信号70us。

通过硬件操作语言实现协议

下面的硬件操作语言实现了上面描述的dht22通信协议:

body = {
    'event': 'now',
    'actions': [["gpio", 0, "output", 0],["delay", 0, "ms", 1],["onewire", 0, "us", 10, 170]]
}

第一个硬件操作语言拉低gpio的引脚0,第二个硬件操作语言会等待1ms。这两个硬件操作语言实现了dht22的起始信号。

第三个硬件操作语言在数据信号上每10us捕获一次电平信号,一共捕获170次。如果是信号0,dht22会拉高数据信号26us,如果是信号1,dht2会拉高数据信号70us。当收到该硬件操作语言的结果,如果在结果中有连续两个或只有一个'1',则为信号0,如果在结果中有超过两个'1',则为信号1。网站端的JavaScript会处理结果并将温度和湿度信息显示到用户端。

网站页面

用户可以将下方链接中的文件保存到SD卡中的public文件夹,当平台上电后,通过浏览器访问平台,即可使用该自动浇花系统。

下载:自动浇花系统-网站页面

在index.html中,用户可以查看getTemperatureHumidity函数了解如何从dht22中获得温度和湿度的信息。查看wateringOnce函数了解如何驱动水泵进行单次浇水。查看wateringScheudle函数了解如何实现水泵的定时浇水。