自制办公室植物灌溉监测系统

由于我的工作,我非常擅长维护我们的代码库,但对于我们的办公设备,就不太在行了。所以衍生出了这个项目,使用 arduino 让我们的植物保持活力。
背景
最近,我们非常兴奋于搬进了我们的新办公空间。我们一直在用白板覆盖的墙壁、闪亮的新技术和所有居家般的舒适设施来装饰它。当我们在整个空间中放置一些这些绿叶朋友时,这个办公室也开始有了家的感觉!
但当我们忘了给它们浇水,一周左右之后我们的绿叶朋友就会开始看起来像这样:
鉴于我们是一家物联网公司,在这个项目中还是比较有利的。所以我使用我们的 anduino wifi shield 和ifttt组合了一个解决方案。是时候认真对待我们的植物朋友了!
为了让您的植物“发出声音”,您需要一个 arduino due 或 zero、一个anduinowifi shield(或任何其他可以与 adafruit io 对话的 wifi 连接的 arduino),最后是一个“电容式土壤湿度传感器”。别忘记,还需要一杯水。
湿度传感器
土壤湿度传感器非常酷,实际上并没有多少传感器提倡把传感器浸入潮湿的泥土中,但由于项目的需要:
不过虽然要接触土壤,但还是需要注意不要将传感器浸入该白线以下。上面没有任何措施可以很好地承受水分暴露,所以在给含有这个传感器的植物浇水时要小心。
如何校准“电容式土壤湿度传感器”
我们的电容传感器有三根线,我们将连接到 3.3v(红色)、接地(黑色)和(蓝色信号)模拟引脚 a1。当我们校准我们的传感器时,我们将在传感器完全干燥时记录电容读数,然后在传感器浸入一杯水中(注意白线!)时再读取一次读数。这为我们提供了极端的 0-100% 相对湿度阈值。
连接你的传感器,运行下方的概要,然后记下你的结果。作为参考,我的 dryval 为 807,wetval 为 415。
int inputpin = a1; 
void setup() { 
 serial.begin(115200); 
 delay(3000); 

void loop() { 
serial.print(raw val: ); 
serial.println(readhumidity()); 
delay(3000); 

int readhumidity() { 
 int sensorval = analogread(inputpin); 
return sensorval; 

一旦你有了这两个数字,你就可以配置相对湿度映射了。考虑自己校准!
#include  
#include adafruit_mqtt.h 
#include adafruit_mqtt_client.h 
#include anduinolcd.h 
// wifi parameters 
#define wlan_ssid       andium 
#define wlan_pass       maybeitsjustpassword 
// adafruit io 
#define aio_server      io.adafruit.com 
#define aio_serverport  1883 
#define aio_username    yourusernname 
#define aio_key         dosifje0j230fj32lksdfj230ff23 
wificlient client; 
adafruit_mqtt_client mqtt(&client, aio_server, aio_serverport, aio_username, aio_key); 
/****************************** feeds ***************************************/ 
// setup feed for temperature 
adafruit_mqtt_publish humidityval = adafruit_mqtt_publish(&mqtt,  aio_username /feeds/officeplants); 
/*create an instance of the anduinolcd */ 
anduinolcd lcd = anduinolcd(st7735_cs_pin, st7735_dc_pin, st7735_rst_pin); 
int inputpin = a1; 
const int dryval = 807; 
const int wetval = 415; 
int humidity = 0;  
int humidityprev = 0; 
int relhumidity = 0; 
void setup()  
{   
 serial.begin(115200); 
 delay(3000); 
 //connect to wifi & adafruit.io 
 connecttowifi(); 
 connecttoadafruit(); 
 //initialize lcd 
 lcd.begin(); 
 lcdinit(); 

void loop() { 
   // ping adafruit io a few times to make sure we remain connected 
 if(! mqtt.ping(3)) { 
   // reconnect to adafruit io 
   if(! mqtt.connected()) 
     connect(); 
 } 
   humidity = readhumidity(); 
   //convert int temp to char array 
   char b[4]; 
   string str; 
   str=string(humidity); 
   for(int i=0; i= 0) 
     mqtt.disconnect(); 
   serial.println(f(retrying connection...)); 
   delay(1000); 
 } 
 serial.println(f(adafruit io connected!)); 

void displayhumidity(int humidity, int humidtyprev) 

   //clear the stale value 
   lcd.settextcolor(st7735_black);  
   lcd.settextsize(2); 
   lcd.settextwrap(true); 
   lcd.setcursor(40,60); 
   lcd.settextsize(5); 
   lcd.print(humidityprev); 
   lcd.settextsize(2); 
   lcd.print(%);  
   //print new value 
   lcd.settextcolor(st7735_white);  
   lcd.settextsize(2); 
   lcd.settextwrap(true); 
   lcd.setcursor(40,60); 
   lcd.settextsize(5); 
   lcd.print(humidity); 
   lcd.settextsize(2); 
    lcd.print(%);  
 } 
void connecttowifi() 

 // connect to wifi access point. 
 delay(10); 
 serial.print(f(connecting to )); 
 serial.println(wlan_ssid); 
 wifi.begin(wlan_ssid, wlan_pass); 
 while (wifi.status() != wl_connected) { 
   delay(500); 
   serial.print(f(.)); 
 } 
 serial.println(f(wifi connected!)); 

void connecttoadafruit() 

   // connect to adafruit io 
 connect(); 

void lcdinit() 

 lcd.setbacklight(on); 
 lcd.fillscreen(st7735_black);  //clear the screen    
 lcd.showbanner();              //load andium banner 
 lcd.settextcolor(st7735_white);  
 lcd.settextsize(2); 
 lcd.settextwrap(true); 
 lcd.setcursor(0,40); 
 lcd.print(humidity: ); 

int readhumidity() { 
 int sensorval = analogread(inputpin); 
      relhumidity = map(sensorval, dryval, wetval, 0, 100); 
      serial.println(relhumidity); 
      serial.print(relhumidity); 
return relhumidity; 

将此概要复制并粘贴到您的 ide 中,并确保已安装这些库。
wifi101
adafruit_mqtt
arduino lcd
以及您的个人校准:
const int dryval = 807;
const int wetval = 415;
湿值和干值。当我们读取humidity()时,在草图的底部,我们使用这些值来映射0-100%的相对湿度。所以现在我们的值在干燥时为 0%,在完全饱和时为 100%。
relhumidity = map(sensorval, dryval, wetval, 0, 100);
如果一切顺利,并且您的 arduino 连接到 wifi 和 adafruit io,您应该开始看到每 10 分钟出现一次读数。
不要介意今天早些时候的那些异常值,当我阅读我的原始未映射电容以确定我的干湿值时,我也在调整。
到此,现在我们每 10 分钟发布一次土壤湿度读数。不必过于在乎读数是多少,设定一个值到我们的植物需要浇水时给它们浇水。让我们使用 ifttt 设置阈值湿度水平并配置要发送的通知,以便提醒我们给植物浇水!
ifttt 阈值
使用 ifttt,我设置了一个阈值,当土壤的相对湿度降至 20% 以下时,我们口渴的植物将通过设定好的联系方式联系我们,请求浇水!这是设置的一瞥。

如何为云计算和数据中心提供电源保障?
二极管和三极管的工作原理是什么
老果粉心碎!iOS 11不再支持老设备,这是逼你换新机的节奏
你信吗?车机导航行业将有80%的厂家将会消失
铠装热电偶如何安装_铠装热电偶的使用
自制办公室植物灌溉监测系统
定时开关控制器蓝牙搜索不到的原因和解决办法
越来越慢了,苹果笔记本清理内存怎么清理
四通道多路复用器有助于确保完成多路复用器上电
基于TMS320F2812的高压电机保护装置
倍加福推出带IO-Link接口的双张超声波传感器
iPhone8什么时候发布?iPhone8杀死Home键,iPhone8钢化膜不再有圆孔了!
White Paper 5: Using 1-Wire AP
受新品影响多款锐龙Threadripper2900系列处理器价格大幅降价
第二期物联网产融精准对接交流会,在腾讯会议直播平台上召开
苹果欲将iPad生产择址印度
华为荣耀准备在2019年第四季度推出5G手机
3GPP宣布5G Rel-17标准延期半年
简要介绍测量Wi-Fi应用的能耗的方法
高功率密度快充及PD适配器电源结构解析