由于我的工作,我非常擅长维护我们的代码库,但对于我们的办公设备,就不太在行了。所以衍生出了这个项目,使用 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适配器电源结构解析