Alamat
Tampin, 73000 Negeri Sembilan

Waktu Bekerja
Isnin to Jumaat: 8AM - 6PM

Spread the love

Projek kali ini ialah pengering baju IoT. Ada pelbagai teknik untuk membuat pengering baju automatik dengan keupayaan IoT ini.

Litar Projek

Kali ini saya ingin menunjukan secara ringkas yang anda boleh ikut untuk menghasilkan projek pengering baju IoT ini.

Sambungan litar projek pengering baju iot
Sambungan Litar

Rajah litar berikut adalah mengikut idea saya:

ESP32 ada microcontroller untuk mengawal on/off relay dan membaca sensor DHT22, ultrasonic.

DHT22 ialah sensor untuk membaca suhu dan kelembapan persekitaran. Bacaan sensor ini untuk menentukan bahawa baju sudah kering ataupun tidak. Mungkin perkara ini tidak menggambarkan kefungsian 100% namun boleh diambil sebagai rujukan.

Relay module ada sebagai suis penghubung antara ESP32 dan blower. Oleh kerana masukkan kuasa blower adalah AC 240V manakala ESP32 adalah DV 5V, jadi relay diperlukan sebagai pengantara antara ESP32 dan blower.

Blower adalah kipas yang mengeluarkah angin panas untuk mengeringkan baju dengan lebih berkesan. (tidak ditunjukkan dalam litar. Akan bersambung dengan relay. Oleh kerana blower menggunakan AC240V, sila dapatkan khidmat pakar jika anda tidak arif tentangnya)

MQTT

Konsep MQTT

Pada bahagian IoT saya akan menggunakan MQTT. MQTT adalah berasaskan konsep publish dan subscribe mengikut topik.

Sebagai contoh jika phone telah subscribe kepada topik pengeringBaju/sensor dan litar ESP32 publish bacaan sensor juga pada topik pengeringBaju/sensor, maka phone tadi akan menerima bacaan sensor itu.

Ada banyak MQTT broker servis yang ditawarkan. Ada yang percuma dan ada yang berbayar.Untuk contoh ini saya akan menggunakan MQTT broker percuma yang disediakan HiveMQ. Maklumat terperinci adalah seperti berikut:

Broker: broker.hivemq.com

TCP Port: 1883

Websocket Port: 8000

TLS TCP Port: 8883

TLS Websocket Port: 8884

Seterunnya adalah code untuk menjalankan projek ini. Pertama ada code untuk hardware(ESP32) dan kedua adalah code untuk app. Code hardware saya akan gunakan Arduino IDE. App saya hanya akan tunjukkan code untuk HTML dan Javascript yang anda boleh ubahsuai nanti untuk paparan yang lebih cantik.

Arduino IDE

Library yang diperlukan untuk code arduino adalah seperti berikut:

ArduinoMqttClient by Arduino

ArduinoJson by Benoit Blanchon

NewPing by Tim Eckel

DHT sensor lirary by Adafruit

Adafruit Unified Sensor by Adafruit

Code

/*
  Projek Pengering Baru dengan IoT
  Pengarang: https://denshie.com/
*/

#include <ArduinoMqttClient.h>
#include <WiFi.h>
#include <NewPing.h>
#include <ArduinoJson.h>
#include "DHT.h"
#include <Ticker.h>

//+++++++++++++++++++change only below this part+++++++++++++++++++++++++++++++++++++++++
char ssid[] = "wifi_faiz";  // your network SSID (name)
char pass[] = "w1f1fa12";  // your network password (use for WPA, or use as key for WEP)
const char broker[] = "broker.hivemq.com"; //mqtt broket that use
int port = 1883;  // mqtt port
const char topicSub[] = "projekCmd/pengeringBajuIoT";  //topic to receive message
const char topicPub[] = "projekSensor/pengeringBajuIoT";  //topic to send message
//+++++++++++++++++++change only up this part++++++++++++++++++++++++++++++++++++++++++++

#define DHTPIN 22  // Digital pin connected to the DHT sensor

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22  // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

#define TRIGGER_PIN 19    // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 18       // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200  // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

#define relay 13
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);  // NewPing setup of pins and maximum distance.

DHT dht(DHTPIN, DHTTYPE);

// To connect with SSL/TLS:
// 1) Change WiFiClient to WiFiSSLClient.
// 2) Change port value from 1883 to 8883.
// 3) Change broker value to a server with a known SSL/TLS root certificate
//    flashed in the WiFi module.

WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
Ticker periodicTicker;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ;  // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println(F("DHTxx test!"));

  dht.begin();

  // attempt to connect to WiFi network:
  Serial.print("Attempting to connect to WPA SSID: ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // You can provide a unique client ID, if not set the library uses Arduino-millis()
  // Each client must have a unique client ID
  // mqttClient.setId("clientId");

  // You can provide a username and password for authentication
  // mqttClient.setUsernamePassword("username", "password");

  Serial.print("Attempting to connect to the MQTT broker: ");
  Serial.println(broker);

  if (!mqttClient.connect(broker, port)) {
    Serial.print("MQTT connection failed! Error code = ");
    Serial.println(mqttClient.connectError());

    while (1)
      ;
  }

  Serial.println("You're connected to the MQTT broker!");
  Serial.println();

  // set the message receive callback
  mqttClient.onMessage(onMqttMessage);

  Serial.print("Subscribing to topic: ");
  Serial.println(topicSub);
  Serial.println();

  // subscribe to a topic
  mqttClient.subscribe(topicSub);

  // topics can be unsubscribed using:
  // mqttClient.unsubscribe(topic);

  Serial.print("Waiting for messages on topic: ");
  Serial.println(topicSub);
  Serial.println();
  pinMode(relay, OUTPUT);
  periodicTicker.attach_ms(5000, readSensor);
}

void loop() {
  // call poll() regularly to allow the library to receive MQTT messages and
  // send MQTT keep alives which avoids being disconnected by the broker
  mqttClient.poll();
}

void onMqttMessage(int messageSize) {
  // we received a message, print out the topic and contents
  Serial.println("Received a message with topic '");
  Serial.print(mqttClient.messageTopic());
  Serial.print("', length ");
  Serial.print(messageSize);
  Serial.println(" bytes:");

  // use the Stream interface to print the contents
  while (mqttClient.available()) {
    char cmd = (char)mqttClient.read();
    if (cmd == '1') {
      digitalWrite(relay, 1);
      Serial.println("Relay ON");
    }
    if (cmd == '0') {
      digitalWrite(relay, 0);
      Serial.println("Relay OFF");
    }
    Serial.print((char)mqttClient.read());
  }
  Serial.println();

  Serial.println();
}

void readSensor() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  float d = sonar.ping_cm();
  int r = digitalRead(relay);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    h = 0.0;
    t = 0.0;
  }

  // Allocate the JSON document
  JsonDocument doc;

  // Add values in the document
  doc["kelembapan"] = h;
  doc["suhu"] = t;
  doc["jarak"] = d;
  doc["relay"] = r;


  // Generate the minified JSON and send it to the Serial port
  mqttClient.beginMessage(topicPub);
  serializeJson(doc, mqttClient);
  mqttClient.endMessage();
  // The above line prints:
  // {"kelembapan":123,"suhu":135, "jarak":234, "relay":1}
}
C++

APP/WEB

Paparan dashboard projek pengering baju IoT pula hanyalah menggunakan simple html dan javascript.

Pada bahagian app pula saya hanya buat menggunakan html dan javascript sahaja. Kelebihannya ialah boleh digunakan untuk android, IOS dan PC. Design website ini menggunakan Bootstrap 5. Boleh download, edit guna text editor dan boleh terus run guna web browser.

atau boleh layari https://pengering.denshie.com/ untuk demo app. Pastikan code arduino anda seperti contoh code arduino di atas.

Atau anda boleh download di pengeringBaju. Selepas download kesemua file, buka index.html dengan menggunakan text editor seperti notepad++.

Ubah di bahagian ini dalam file index.html

Sebarang pertanyaan boleh hubungi saya. https://denshie.com/contact/ atau whatsapp 0134580910