کاربرد آردوینو در گلخانه هیدروپونیک
مقدمه
در پست قبلی درباره هیدروپونیک آردوینو، در مورد برخی از ساده ترین پروژه هایی که می توانید با آردوینو بسازید صحبت کردم. ما همچنین در مورد اینکه چگونه می توانید به طور پیوسته به سمت پروژه های پیچیده تر پیش بروید، اگر با تخته ها و سپرهای مناسب شروع کنید، صحبت کردیم. در این پست قصد دارم نحوه ساخت یک ایستگاه حسگر ساده را به شما نشان دهم که رطوبت رسانه را اندازه گیری می کند و همچنین به یک پلت فرم رایگان داشبورد (فلسپی) متصل می شود. آردوینو خوانش های سنسور را می گیرد و نمایش می دهد و آنها را از طریق اینترنت منتقل می کند، جایی که ما می توانیم با استفاده از داشبورد سفارشی آنها را نظارت کنیم. این پروژه نیازی به مهارت های لحیم کاری یا پروتو برد ندارد.
ایده این پروژه این است که یک شروع ساده برای دنیای هیدروپونیک آردوینو و رابط اینترنت اشیا برای شما فراهم کند. اگرچه این پروژه بسیار ساده است، اما می توانید از آن به عنوان پایه ای برای ساخت استفاده کنید. می توانید سنسورهای بیشتری اضافه کنید، نمایشگر را بهبود ببخشید، داشبوردهای پیچیده تری ایجاد کنید و غیره.
آنچه شما نیاز خواهید داشت
برای این ساخت، ما از Arduino Wifi Rev2 و محافظ LCD از DFRobot استفاده می کنیم. برای سنسور خود، ما از این سنسورهای رطوبت خازنی کم هزینه استفاده می کنیم. این پروژه نمونه تنها از یک سنسور استفاده می کند، اما می توانید حداکثر پنج سنسور را به محافظ LCD متصل کنید. از آنجایی که این پروژه قرار است به اینترنت متصل شود، نیاز به دسترسی به یک شبکه WiFi متصل به اینترنت دارد.
علاوه بر این، به یک حساب رایگان flespi نیز نیاز خواهید داشت. قبل از ادامه پروژه به صفحه flespi بروید و یک حساب کاربری ایجاد کنید. هنگام ایجاد حساب کاربری خود باید گزینه MQTT را انتخاب کنید زیرا پروژه از پروتکل MQTT برای انتقال استفاده می کند. پس از ورود به حساب کاربری خود، رمز نشان داده شده در صفحه “Tokens” را کپی کنید، زیرا برای تنظیم کد به آن نیاز دارید.
کتابخانه ها و کد
این پروژه از کتابخانه های U8g2، ArduinoMQTTClient و WiFiNINA استفاده می کند. قبل از اجرای کد باید آنها را نصب کنید. کد زیر تنها چیزی است که برای پروژه نیاز دارید. قبل از آپلود آن در آردوینو، مطمئن شوید که کد را برای وارد کردن SSID وای فای، رمز عبور و توکن فلسپی خود ویرایش کرده اید. این همچنین فرض می کند که سنسور رطوبت را به پورت آنالوگ 2 آردوینو خود متصل خواهید کرد. شما باید متغیر ANALOG_PORT را تغییر دهید تا در صورت نیاز به پورت صحیح اشاره کند.
#include
#include
#include
#include
#include
#define SECRET_SSID "enter your wifi ssid here"
#define SECRET_PASS "enter your password here"
#define FLESPI_TOKEN "enter your flespi token here"
#define ANALOG_PORT A2
#define MQTT_BROKER "mqtt.flespi.io"
#define MQTT_PORT 1883
U8G2_ST7565_NHD_C12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
float capacitance;
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
// checks connection to wifi network and flespi MQTT server
void check_connection()
{
if (!mqttClient.connected()) {
WiFi.end();
WiFi.begin(SECRET_SSID, SECRET_PASS);
delay(10000);
mqttClient.setUsernamePassword(FLESPI_TOKEN, "");
if (!mqttClient.connect(MQTT_BROKER, MQTT_PORT)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
delay(100);
}
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
analogReference(DEFAULT);
check_connection();
}
void loop() {
String moisture_string;
check_connection();
// read moisture sensor, since this is a wifiRev2 we need to set the reference to VDD
analogReference(VDD);
capacitance = analogRead(ANALOG_PORT);
// form the string we will display on the Arduino LCD screen
moisture_string = String(capacitance) + " mV";
Serial.println(moisture_string);
// send moisture sensor reading to flespi
mqttClient.beginMessage("MOISTURE1");
mqttClient.print(capacitance);
mqttClient.endMessage();
// the LCD screen only works if I reinitialize it on every loop
// I also need to reset the analogReference for it to properly work
analogReference(DEFAULT);
u8g2.begin();
u8g2.setFont(u8g2_font_crox3h_tf);
u8g2.clearBuffer(); // clear the internal memory
u8g2.drawStr(10,15,moisture_string.c_str()); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(5000);
}
اکنون آردوینو شما باید به اینترنت متصل شود، از سنسور رطوبت یک قرائت بگیرد، آن را روی محافظ LCD نمایش دهد و برای ضبط به flespi ارسال کند. توجه داشته باشید که نمایش داده ها روی محافظ LCD کاملا ابتدایی است. این به این دلیل است که من فونت را بهینه نکردم یا خیلی با رابط بازی نکردم. با این حال، اگر می خواهید نمایشگر را اصلاح کنید، این کد باید یک الگوی خوب در اختیار شما قرار دهد.
Flespi را پیکربندی کنید
مرحله بعدی این است که flespi را برای ضبط و نمایش خوانشهایمان پیکربندی کنیم. ابتدا روی گزینه MQTT در سمت چپ کلیک کنید و سپس به “MQTT Board” بروید (روی دکمه کلیک کنید، نه فلشی که صفحه جدیدی را باز می کند). در اینجا، شما قادر خواهید بود یک مشترک جدید اضافه کنید. “مشترک” نمونه ای است که به پیام های MQTT در حال انتشار گوش می دهد و “MOISTURE1” موضوعی است که آردوینو ما پیام هایی را برای آن منتشر می کند. اگر میخواهید دادههای چند سنسور را منتشر کنید، باید به هر سنسور موضوع خاص خود را بدهید، سپس یک مشترک flespi برای هر سنسور اضافه کنید.
داشبورد را ایجاد کنید
آخرین مرحله، استفاده از منوی “عناوین MQTT” برای ایجاد یک داشبورد است. من یک ویجت گیج را به داشبورد جدید اضافه کردم و سپس موضوع آن را روی MOISTURE1 قرار دادم تا داده های آن با پیام های MQTT ما به روز شود. من حداقل مقدار را روی 200 تنظیم کردم. حداکثر مقدار به 460; و سطوح پایین، متوسط و بالا به ترتیب به 250، 325 و 400 می رسد.
پس از اتمام ساخت داشبورد، میتوانید از دکمه «دریافت پیوند» استفاده کنید، که شبیه پیوندی از زنجیرهای در کنار عنوان داشبورد شما است. شما باید یک نشانه اضافی در منوی “Tokens” ایجاد کنید تا بتوانید از آن برای اشتراک گذاری داشبورد استفاده کنید. پس از ایجاد پیوند، باید برای هر کسی که علاقه مند است در دسترس عموم قرار گیرد. این لینک داشبوردی است که من ایجاد کردم.
نتیجه
می توانید با استفاده از Arduino Wifi Rev2، حسگر رطوبت خازنی و محافظ LCD، یک ایستگاه حسگر ساده و قابل ارتقا ایجاد کنید. این ایستگاه می تواند از طریق Wifi به اینترنت متصل شود و اطلاعات آن را به flespi ارسال کند که به ما امکان ایجاد داشبورد آنلاین رایگان را می دهد. میتوانید این ایستگاه حسگر را با اضافه کردن سنسورهای رطوبت بیشتر یا هر سنسور دیگر سازگار با محافظ جاذبه، مانند سنسور BME280 برای اندازهگیری دما، رطوبت و فشار اتمسفر، گسترش دهید.