Sistem Penyiraman Tanaman Kantor Otomatis dengan Arduino, WiFi & IFTTT
Komponen dan Perlengkapan
Arduino Due – 1 unit
Andium Anduino WiFi – 1 unit
Arduino Zero – 1 unit
Capacitive Soil Moisture Sensor – 1 unit
Aplikasi dan Layanan Online
Arduino IDE
IFTTT
Adafruit IO
Tentang Proyek
Motivasi
Di sini di Andium, kami sangat senang akhirnya telah pindah ke ruang kantor baru. Kami telah menghiasnya dengan dinding yang ditutupi papan tulis, teknologi baru yang megah, dan semua kenyamanan rumah. Ini terutama mulai terasa seperti rumah ketika kami menempatkan beberapa teman hijau ini di seluruh ruang!
Hanya kami lupa menyiraminya dan dalam seminggu atau lebih teman hijau kami mulai terlihat seperti ini...
Gagal.
Kami adalah perusahaan IoT, kami lebih baik dari ini. Mengapa tanaman kami tidak terhubung ke internet! Semoga belum terlambat untuk si kecil ini saya gabungkan solusi menggunakan anduinoWiFi shield dan IFTTT. Waktu untuk memberi tanaman kami suara!
Memulai
Jika Anda memiliki jempol hijau Anda mungkin sudah berhenti membaca, tetapi jika Anda seperti saya dan perlu memberi tanaman Anda kemampuan untuk memohon pengampunan secara digital dan berteriak meminta air maka Anda berada di tempat yang tepat.
Untuk memberi tanaman suara Anda akan membutuhkan Arduino Due, atau Zero, anduinoWiFi shield, (atau Arduino WiFi lain yang dapat berbicara dengan Adafruit IO) dan terakhir 'Capacitive Soil Moisture Sensor'. Oh, dan gelas air. (Berikan kepada tanaman Anda saat selesai, mereka akan berterima kasih melalui e-mail sekarang).
Sensor Kelembaban
Sensor kelembaban tanah ini cukup keren, tidak banyak sensor di mana Anda sebenarnya ditorokkan untuk merendam dalam tanah basah, jadi nikmati sambil bisa. Tidak terlalu banyak, perhatikan baris ini...
Apa pun yang Anda lakukan, jangan merendam sensor Anda di bawah garis putih itu. Tidak ada di atas sana yang akan menahan kelembaban terlalu baik, jadi hati-hati saat menyirami tanaman yang mengandung sensor ini.
Jika Anda mengklik melalui ke foto berikutnya di atas, Anda mungkin bertanya-tanya mengapa saya merendam sensor dalam gelas air. Nah, jangan heran lagi!
Cara Mengkalibrasi 'Capacitive Soil Moisture Sensor'
Sensor kapasitif kami memiliki tiga kabel yang akan kita sambungkan ke 3.3v(merah), ground(hitam), dan (biru- sinyal) pin analog A1. Saat kita mengkalibrasi sensor kita kita akan mencatat pembacaan kapasitansi saat sensor dalam kondisi kering sepenuhnya, dan kemudian mengambil pembacaan kedua saat sensor direndam (hingga garis putih!) dalam gelas air. Ini memberikan kita ambang kelembaban relatif 0-100%.
Rangkaikan sensor Anda, jalankan sketsa ini, dan catat hasil Anda. Untuk referensi, dryVal saya adalah 807 dan wetVal saya adalah 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; }
Setelah Anda memiliki dua angka ini Anda siap untuk mengonfigurasi pemetaan kelembaban relatif. Pertimbangkan diri Anda terkalibrasi!
Sketsa
#include <WiFi101.h> #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<str.length(); i++) { b[i]=str.charAt(i); } b[(str.length())+1]=0; // Publish data if (!humidityVal.publish((char*)b)) { Serial.println(F("Failed to publish temp")); } else { Serial.print(F("Humidity published: ")); Serial.println(humidity); displayHumidity(humidity, humidityPrev); } Serial.print("Humidity: "); Serial.print(humidity); //Serial.print(" *F\t"); //prev temp stored for LCD humidityPrev = humidity; //repeat every 10min delay(600000); } // connect to adafruit io via MQTT void connect() { Serial.print(F("Connecting to Adafruit IO... ")); int8_t ret; while ((ret = mqtt.connect()) != 0) { switch (ret) { case 1: Serial.println(F("Wrong protocol")); break; case 2: Serial.println(F("ID rejected")); break; case 3: Serial.println(F("Server unavail")); break; case 4: Serial.println(F("Bad user/pass")); break; case 5: Serial.println(F("Not authed")); break; case 6: Serial.println(F("Failed to subscribe")); break; default: Serial.println(F("Connection failed")); break; } if(ret >= 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; }
Salin dan tempel sketsa ini ke IDE Anda dan pastikan Anda telah menginstal pustaka ini.
WiFi101
Adafruit_MQTT
AnduinoLCD
Beserta nilai kalibrasi pribadi Anda...
const int dryVal = 807; const int wetVal = 415;
nilai basah dan kering. Di bagian bawah sketsa ketika kita membaca readHumidity() kita menggunakan nilai ini untuk memetakan 0-100% kelembaban relatif. Jadi sekarang nilai kita akan membaca 0% saat kering dan 100% saat penuh tergenang.
Jika semuanya berjalan dengan baik, dan arduino Anda terhubung ke WiFi dan Adafruit IO Anda harus mulai melihat pembacaan datang setiap 10 menit. Di sini adalah tangkapan layar pembacaan kami hari ini.
Jangan peduli outlier tadi hari, saya juga menerbitkan saat saya membaca kapasitansi mentah yang tidak dipetakan untuk menentukan nilai kering dan basah saya.
Hebat, sekarang setiap 10 menit kita menerbitkan pembacaan kelembaban tanah kita. Sekarang saya sebenarnya tidak peduli apa pembacaan sampai saya harus menyelamatkan tanaman saya dari mati dan menyiramnya. Mari kita gunakan IFTTT untuk menetapkan ambang kelembaban dan mengonfigurasi pemberitahuan untuk dikirim sehingga kami diingatkan untuk menyiram tanaman kami!
Ambang IFTTT
Menggunakan IFTTT saya telah mengatur ambang sehingga ketika kelembaban relatif tanah turun di bawah 20% tanaman yang haus kami akan menghubungi kami melalui twitter (@andiumPlants) meminta untuk disiram! Di sini adalah sekilas pengaturan.
Itu saja!
Apa Selanjutnya?
Saya menyerahkan kepada Anda! Bagaimana lagi kita dapat secara kreatif memberi tanaman suara dan menjaga fauna kita dari gagal. Ambil anduinoWiFi dan sensor tanah dan mulai membuat!
Kode
Anduino
An Arduino library for the Andium(Anduino) shield. Transform your Arduino into an AndiumNode. https://github.com/andium/Anduino