Daftar Isi:

PINt@t10n: Sistem Pemantauan Pabrik Cerdas: 9 Langkah
PINt@t10n: Sistem Pemantauan Pabrik Cerdas: 9 Langkah

Video: PINt@t10n: Sistem Pemantauan Pabrik Cerdas: 9 Langkah

Video: PINt@t10n: Sistem Pemantauan Pabrik Cerdas: 9 Langkah
Video: ARMAC (Automatic Reservoir Monitoring And Control) 2024, Juli
Anonim
Pint@t10n: Sistem Pemantauan Pabrik Cerdas
Pint@t10n: Sistem Pemantauan Pabrik Cerdas

Proyek ini dibuat sebagai ujian untuk ibm iot cloud. Kami menggunakan esp-8266 untuk mengirim dan menerima data ke dan dari ibm cloud. Komunikasi antara esp dan ibm cloud terjadi melalui MQTT.

Untuk menangani semua data dan menyajikan antarmuka pengguna kepada pengguna, kami menggunakan node-red. Ini sangat ramah pemula.

Untuk memulai, Anda perlu:

  • Esp-8266
  • dht 11/22 sensor suhu/kelembaban
  • dioda fotosensitif (pengukuran cahaya)
  • bel
  • sensor kelembaban tanah
  • akun ibm cloud

Langkah 1: Hubungkan Sensor Anda

Hubungkan Sensor Anda
Hubungkan Sensor Anda
Hubungkan Sensor Anda
Hubungkan Sensor Anda
Hubungkan Sensor Anda
Hubungkan Sensor Anda

Seperti yang kami sebutkan sebelumnya, kami akan menggunakan esp8266 untuk membaca dan mengirim data sensor. Untuk tutorial ini kami akan menganggap Anda tahu cara menghubungkan sensor ke pengontrol mikro Anda. Anda juga sudah perlu tahu cara mengupload kode ke esp8266.

Model esp kami hanya memiliki satu port analog sehingga kami memilih untuk menerima informasi analog dari sensor cahaya kami karena kami dapat memantau berapa banyak cahaya yang didapat tanaman.

Semua sensor lainnya terhubung secara digital. Sensor DHT11 kami mengirimkan data secara digital dan kami menggunakan perpustakaan dht untuk menginterpretasikan data sensor.

Di atas Anda dapat menemukan diagram sirkuit untuk sensor yang kami gunakan. Namun harap diingat bahwa sensor yang kami gunakan sering kali dilengkapi dengan modul sehingga Anda dapat dengan mudah menghubungkannya ke pengontrol mikro Anda tanpa semua resistor tambahan yang kami sertakan dalam diagram.

Langkah 2: Kode

Ini adalah sketsa arduino yang kami gunakan. Anda dapat mempelajari tentang cara kerja kode jika Anda membaca komentar.

#include ArduinoJson.h#include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h

#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define moisturePin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; suhu mengambang = 0; kelembaban mengambang = 0; kelembaban boolean = salah; int cahaya = 0; const char* ssid = STASSID; const char* kata sandi = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; klien PubSubClient (espClient); long lastMsg = 0; pesan char[50]; nilai int = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d:cmfwqk:ESP8266:ESP" #define MQTT_USER "use-token-auth" #define MQTT iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // not dalam melodi: // durasi not: 4 = quarter not, 8 = not kedelapan, dst.: int shortTone = 80; int nada panjang = 200; int standarTunda = 50; int delayBetweenBars = 50; void setup_wifi() { delay(10); // Kita mulai dengan menghubungkan ke jaringan WiFi Serial.println(); Serial.print("Menghubungkan ke "); Serial.println(ssid); WiFi.begin(ssid, kata sandi); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi terhubung"); Serial.println("Alamat IP: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Pesan tiba ["); Serial.print(topik); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload); } Serial.println(); StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, payload); Akar JsonObject = jsonBuffer.as(); if(root["lagu"]=="berani"){ berani(); } if(root["lagu"]=="starwars"){ starwars(); } if(root["lagu"]=="jacques"){ Serial.println("jakakakakakkakaka"); jacques(); } } void reconnect() { // Ulangi sampai kita terhubung kembali while (!client.connected()) { Serial.print("Mencoba koneksi MQTT…"); // Mencoba menghubungkan if (client.connect(MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println("connected"); klien.berlangganan(MQTT_TOPIC_DISPLAY); } else { Serial.print("gagal, rc="); Serial.print(klien.status()); Serial.println("coba lagi dalam 5 detik"); // Tunggu 5 detik sebelum mencoba lagi delay(5000); } } } void setup() { Serial.begin(9600); pinMode(MoisturePin, INPUT); dht.mulai(); pinMode(0, OUTPUT); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setCallback(panggilan balik); penundaan (20); } void loop() { if (!client.connected()) { menyambung kembali(); } klien.loop(); kelembaban = digitalRead(moisturePin); cahaya = analogBaca(A0); suhu = dht.readSuhu(); kelembaban= dht.readHumidity(); Serial.println("Temperature =" + String(temp, 1) + "\nHumidity =" + String(humidity, 1) + "\nMoisture: "+String(moisture)+"\nLight: "+String(light)); Payload string = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(kelembaban, 1)+"}, \"ms \":{"m\": "+String(kelembaban)+"}, \"ls\":{"l\":"+String(cahaya)+"}}"; Serial.println(muatan); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("publish ok"); }else { Serial.println("penerbitan gagal"); } penundaan(2000); } void darude(){ tone(0, NOTE_B3, shortTone); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); delay(delayBetweenBars); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_E4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); tone(0, NOTE_E4, longTone); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_D4, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); tone(0, NOTE_D4, longTone); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); tone(0, NOTE_A3, longTone); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); delay(delayBetweenBars); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); tone(0, NOTE_E4, longTone); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); delay(delayBetweenBars); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, NOTE_B3, nada pendek); penundaan (nada pendek); tidakNada(0); penundaan (penundaan standar); nada(0, CATATAN_B3, nada panjang); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); tone(0, NOTE_E4, longTone); penundaan (longTone); tidakNada(0); penundaan (penundaan standar); } void starwars() { bip(CATATAN_A4, 500); bip(CATATAN_A4, 500); bip(CATATAN_A4, 500); bip(CATATAN_F4, 350); bip(CATATAN_C5, 150); bip(CATATAN_A4, 500); bip(CATATAN_F4, 350); bip(CATATAN_C5, 150); bip(CATATAN_A4, 650); penundaan (500); bip(CATATAN_E5, 500); bip(CATATAN_E5, 500); bip(CATATAN_E5, 500); bip(CATATAN_F5, 350); bip(CATATAN_C5, 150); bip(CATATAN_GS4, 500); bip(CATATAN_F4, 350); bip(CATATAN_C5, 150); bip(CATATAN_A4, 650); } void beep(int note, int duration) { //Memutar nada pada buzzerPin tone(0, note, durasi); penundaan (durasi); tidakNada(0); penundaan (penundaan standar); } void heartOfCourage(){ } void jacques(){ bip(CATATAN_C4, 500); bip(CATATAN_D4, 500); bip(CATATAN_E4, 500); bip(CATATAN_C4, 500); bip(CATATAN_C4, 500); bip(CATATAN_D4, 500); bip(CATATAN_E4, 500); bip(CATATAN_C4, 500); bip(CATATAN_E4, 500); bip(CATATAN_F4, 500); bip(CATATAN_G4, 500); bip(CATATAN_E4, 500); bip(CATATAN_F4, 500); bip(CATATAN_G4, 500); bip(CATATAN_G4, 500); bip(CATATAN_A4, 500); bip(CATATAN_G4, 500); bip(CATATAN_F4, 500); bip(CATATAN_E4, 500); bip(CATATAN_C4, 500); bip(CATATAN_G4, 500); bip(CATATAN_A4, 500); bip(CATATAN_G4, 500); bip(CATATAN_F4, 500); bip(CATATAN_E4, 500); bip(CATATAN_C4, 500); bip(CATATAN_C4, 500); bip(CATATAN_G4, 500); bip(CATATAN_C4, 500); bip(CATATAN_C4, 500); bip(CATATAN_G4, 500); bip(CATATAN_C4, 500); }

Langkah 3: IBM Cloud

IBM Cloud
IBM Cloud

Anda perlu menyiapkan instans IBM-cloud. Anda dapat menemukan informasi tentang ini melalui tautan ini: github.

Langkah 4: Node-RED

Kami menggunakan node-red untuk menangani logika bisnis umum kami dan untuk memvisualisasikan data ini dalam antarmuka pengguna yang intuitif.

Langkah 5: Pengaturan Node-RED: Ringan

Pengaturan Node-RED: Ringan
Pengaturan Node-RED: Ringan

Impor kode berikut ke dalam proyek Anda.

[{"id":"deb0d57.1c46528", "type":"tab", "label":"Light", "disabled":false, "info":""}, {"id":"8a0fcaac. 4e54", "type":"ibmiot in", "z":"deb0d57.1c46528", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Dapatkan data dari ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":

Langkah 6: Pengaturan Node-RED: Suhu

Pengaturan Node-RED: Suhu
Pengaturan Node-RED: Suhu

Impor kode berikut ke dalam proyek Anda.

[{"id":"fbad3799.f0e0e", "type":"tab", "label":"Temperature", "disabled":false, "info":""}, {"id":"b8618eb9. 1c9288", "type":"ibmiot in", "z":"fbad3799.f0e0e", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Dapatkan data dari ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":

Langkah 7: Pengaturan Node-RED: Kelembaban

Pengaturan Node-RED: Kelembaban
Pengaturan Node-RED: Kelembaban

Impor kode berikut ke dalam proyek Anda.

[{"id":"144cd53b.c00473", "type":"tab", "label":"Humidity", "disabled":false, "info":""}, {"id":"d958f58b. 2678e", "type":"ibmiot in", "z":"144cd53b.c00473", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Dapatkan data dari ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":

Langkah 8: Pengaturan Node-RED: Kelembaban

Pengaturan Node-RED: Kelembaban
Pengaturan Node-RED: Kelembaban

Impor kode berikut ke dalam proyek Anda.

[{"id":"4ee73536.ec6fc4", "type":"tab", "label":"Moisture", "disabled":false, "info":""}, {"id":"a6daac3e. 2d5268", "type":"ibmiot out", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "outputType":"cmd", "deviceId":" ESP", "deviceType":"ESP8266", "eventCommandType":"update", "format":"json", "data":"msg", "qos":0, "name":"Kirim perintah ke ESP ", "service":"registered", "x":804.1944580078125, "y":383.0000305175781, "wires":}, {"id":"4134fdb7.18e9b4", "type":"ibmiot in", "z":"4ee73536.ec6fc4", "otentikasi":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":"", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"update", "commandType":"", "format":"json", "name":"Dapatkan data dari ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":

Langkah 9: Anda Selesai

Selamat! Anda sekarang memiliki sistem pengamatan tanaman yang berfungsi.

Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi kami!