Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 08 Desember 2023

Dimmer Arus AC: Menghubungkan Triac Dengan IOT - MQTT

 



Pembahasan saya kali ini merupakan kesimpulan dari 4 tulisan saya sebelumnya dan juga merupakan evaluasi dari pengumpulan tugas dari mahasiswa saya di jurusan teknik listrik - fakultas vokasi - unesa Surabaya. Tugas yang saya berikan bertujuan untuk memperkenalkan konsep elektronika daya modern yang terhubung dengan IOT sehingga mahasiswa mampu membayangkan kedepannya akan berhadapan dengan kelistrikan model terbaru.

Untuk menghubungkan Triac dimmer ke IOT sebenarnya bisa pembaca rangkai sendiri dengan menelusuri tulisan saya sebelumnya mengenai konsep mikrokontroller dengan protokol IOT MQTT. 

Ada 2 buah konsep PUBLISH dan SUBSCRIBE yang bisa dibaca dipenjelasan tulisan saya disini.


- Dimmer IOT tanpa ZCD

Perhatikan rangkaian dibawah ini, yang merupakan rangkaian dimmer yang sering dijumpai dan dapat dibeli di toko online, dan telah saya bahas sebelumnya disini.



Dari rangkaian sederhana diatas dapat dilihat bahwa pengaturan trigger dari Triac didapatkan oleh delay R-C yang terhubung dengan Diac. Dengan merubah nilai VR / potensiometer pada rangkaian diatas maka dapat pula merubah kecerahan dari lampu/beban akibat delay "firing angle" pada triac. Bagaimana kalau resistansinya ini kita ubah secara IOT ? Perhatikan ulasan pameran saya terdahulu yang bisa dibaca disini



Pada pameran ini saya mendapatkan ide untuk mengontrol lampu menggunakan fitting lampu ber LDR (yang umum ada di toko listrik) dimana saya akan menyalakan lampu dan mematikannya secara IOT. Untuk itu kita akan tiru konsepnya namun kini saya akan dengan merubah resistansi pada potensiometer dengan menggantinya dengan LDR dan memberikannya sumber cahaya dari LED. Jadi dengan merubah-ubah kecerahan lampu LED maka resistansi dari LDR akan ikut berubah dan berefek pada Triac dan beban lampu.


#include <ESP8266WiFi.h>
#include <PubSubClient.h> //library pubsub MQTT



const char *ssid =  "nama wifi";   // Gunakan sesuai wifi kamu
const char *pass =  "passwordnya";   // password

//inisialisasi broker
const char *mqtt_server = "broker.hivemq.com"; //BROKER GRATIS
const int mqtt_port = 1883;
const char *mqtt_user = "";
const char *mqtt_pass = "";
const char *mqtt_client_name = "namamu123456"; // Client connections random dan gak boleh sama

// Ubah nama topik biar unik gak nabrak sama rekan lainnya
#define TOPIC "/aisi555/dimmer"

//IO pin

#define LED_DIM D4  //prot D4 ke LED lalu menyinari LDR

WiFiClient wclient;            //wifi client terhubung lib pubsub
PubSubClient client(wclient);

void setup() {
  pinMode(LED_DIM, OUTPUT);  //inisialisasi LED

  digitalWrite(LED_DIM,LOW);
  
  //Inisialisasi broker & Callback sub message
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(mqtt_callback);
  Serial.begin(9600);
  delay(10);
  Serial.println();
  Serial.println();
  setupwifi();

}

void setupwifi()
{
   if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Terhubung Ke Wifi:  ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi Terhubung");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

void reconnectmqtt() //function mengatur koneksi ke broker 
{
   
    
      Serial.println("Connecting to MQTT server..");
     
      if (client.connect(mqtt_client_name,mqtt_user, mqtt_pass)) {
        Serial.println("Connected to MQTT server");
      } else {
        Serial.println("Could not connect to MQTT server");   
      }
   

    if (client.connected()){
      Serial.print("subscribe to topic: ");
      Serial.println(TOPIC);
      client.subscribe(TOPIC); //subscribe ke topic 
    }
  
}


//function callback saat ada pesan SUB yg masuk

void mqtt_callback(char* topic, byte* payload, unsigned int length) {
 
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
 
  Serial.print("Message:");
 
  String message;
  for (int i = 0; i < length; i++) {
    message = message + (char)payload[i];  //Conver *byte to String
  }
   Serial.print(message);
   
  analogWrite(LED_DIM, message.toInt()); //angka yg masuk 0-255 jadi sesuaikan
    
  Serial.println();
  Serial.println("-----------------------");  


}



void loop() {
 
  if (!client.connected()) 
   {
    reconnectmqtt();
   }
   else client.loop(); //cek terus kalau ada data masuk
  
  
}



Hasil dari script diatas seperti video praktek mahasiswa saya dibawah. Perhatikan bahwa perlu adanya penyesuaian jarak antara led vs LDR sehingga nilai yang didapatkan sesuai. Bisa juga dengan mengatur angka yang dikirim dicari minimum dan maksimum yang sesuai dengan tingkat kecerahan lampu.




- Dimmer Menggunakan ZCD


Script yang digunakan oleh mahasiswa saya kebanyakan menggunakan library dimmer dari robodyn, namun kesulitan mereka adalah memahami konsep dimmernya, apa sih yang dilakukan oleh Triac?

Sebenarnya konsepnya bisa dibaca pada tulisan saya sebelumnya disini, dimana yang diatur adalah delay firing angle atau "derajat tembak" dari triac setelah terjadi momen Zero crossing. Scriptnya cukup sederhana, hanya merubah sedikit saja.



#include <ESP8266WiFi.h>
#include <PubSubClient.h> //library pubsub by o'leary

const char *ssid =  "nama wifi";   // Gunakan sesuai wifi kamu
const char *pass =  "passwordnya";   //

//inisialisasi broker
const char *mqtt_server = "broker.hivemq.com"; //BROKER GRATIS
const int mqtt_port = 1883;
const char *mqtt_user = "";
const char *mqtt_pass = "";
const char *mqtt_client_name = "namamu123456"; // Client connections random dan gak boleh sama

// Ubah nama topik biar unik gak nabrak sama rekan lainnya
#define TOPIC "/aisi555/dimmer"

//IO pin
#define zcd_pin 3 //sesuaikan dengan pin zcd kamu
#define triac_pin 4 //sesuaikan dengan pin triac kamu

int nilai = 0;

WiFiClient wclient;            //wifi client terhubung lib pubsub
PubSubClient client(wclient);

void setup() {

  pinMode(zcd_pin, INPUT_PULLUP);
  pinMode(triac_pin, OUTPUT);
  attachInterrupt(zcd_pin, deteksi, FALLING); // attach Interrupt 
  digitalWrite(triac_pin, LOW);
  
  //Inisialisasi broker & Callback sub message
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(mqtt_callback);
  Serial.begin(9600);
  delay(10);
  Serial.println();
  Serial.println();
  setupwifi();
}

void setupwifi()
{
   if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Terhubung Ke Wifi:  ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
     return;
    Serial.println("WiFi Terhubung");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

void reconnectmqtt() //function mengatur koneksi ke broker 
{
    
      Serial.println("Connecting to MQTT server..");
     
      if (client.connect(mqtt_client_name,mqtt_user, mqtt_pass)) {
        Serial.println("Connected to MQTT server");
      } else {
        Serial.println("Could not connect to MQTT server");   
      }
   

    if (client.connected()){
      Serial.print("subscribe to topic: ");
      Serial.println(TOPIC);
      client.subscribe(TOPIC); //subscribe ke topic 
    }
  
}



//function callback saat ada pesan SUB yg masuk

void mqtt_callback(char* topic, byte* payload, unsigned int length) {
 
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
 
  Serial.print("Message:");
 
  String message;
  for (int i = 0; i < length; i++) {
    message = message + (char)payload[i];  //Conver *byte to String
  }
   Serial.print(message);
   nilai= map(message.toInt(),0,100, 200,7200); // merubah message ke range yang sesuai 0-100
  
    
  Serial.println();
  Serial.println("-----------------------");  


}


ICHACE_RAM_ATTR void deteksi() //deteksi Zerro cross dan delay on triac
{
  delayMicroseconds(nilai); 
  digitalWrite(triac_pin, HIGH);
  
  
  delayMicroseconds(50);  //delay 50 uSec on output pulse to turn on triac
  digitalWrite(triac_pin, LOW);
}

void loop() {
 
  if (!client.connected()) 
   {
    reconnectmqtt();
   }
   else client.loop(); //cek terus kalau ada data masuk
  
  
  
}


Hasilnya bisa dilihat pada video mahasiswa saya dibawah ini :





Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) arduino (26) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (7) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (7) radio (26) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika