IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik
Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel
Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.
Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul
Satu kata yang dapat menjabarkan MQTT pada platform IOT milik telkom antares adalah keruwetannya, namun saya sudah terlebih dahulu mengalami pusing saat membedahnya 3 tahun yang lalu pada tulisan saya disini: https://www.aisi555.com/2020/06/solved-bug-fatal-pada-mqtt-subscription.html, dan saya sudah "khatam" dengan ini. Buat anda sepertinya harus paham prinsisp M2M IOT yg dipakai oleh antares yaitu :
Proses PUB antares spesifik dikirimkan ke project/device namun berbeda dengan SUB pada Antares yang menggunakan 1 topik yg sama untuk kemudian lebih tepatnya dinamakan proses RESPONSE. Jadi ketika data MQTT realtime diterima antares (pada akun yang sama), maka semua data dari semua device yg PUB akan diberikan/relay kepada client yang SUB (secara realtime juga), jadi butuh parsing data payload dengan metode tertentu baru data yg di inginkan muncul. Bisa dibaca disini , disini , dan disini .
Python Paho-mqtt sebagai library paling umum untuk menerima dan mengolah protokol mqtt sehingga dapat dilanjutkan ke proses advance seperti menyimpan database, membuat grafik atau mengirim ke bot telegram. Bisa dibaca dulu agar mengerti disini dan disini.
Untuk kali ini saya memanfaatkan google colab untuk melakukan PUBLISH data random ke antares melaui script python, dan dapat dicoba GRATIS dengan script dibawah ini : jangan lupa install paho-mqtt dulu di colab!
suhu = float( randrange(250,350,2) / 10) #random suhu dan kelembaban
humi = randrange(80,95,2)
datanya = {"suhu": suhu, "humi": humi}
antares_pub(datanya)
sleep(5)
Jadi ubah dulu parameter akun dan device sesuai yang anda buat di antares. Selajutnya gunakan MQTT explorer untuk membuat demo proses SUB nya.
1. Masuk ke MQTT EXPLORER dengan parameter MQTT Servernya di : mqtt.antares.id port 1883. Username dan password jangan diisi, namun pada bagian advance anda perlu subscribe pada topik yang ada input User:Key antares anda.
TOPIK SUBSCRIBE :
/oneM2M/resp/antares-cse/access:key/json
2. Masuk/konek ke mqtt explorer lalu running script python pada google colab,
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 :
Rangkaian yang akan saya gunakan sudah banyak beredar di berbagai sumber di internet, terdiri dari optotriac MOC3021, Triac BTXX dan beberapa resistor pembatas arus. Rangkaian pda umumnya seperti ini :
Script yang akan kita gunakan kali ini cukup sederhana saja, hanya akan memberikan delay beberapa waktu saat zero crossing terdeteksi lalu memutus triacs. Jika delay firing OFF nya lama maka lampu akan terang dan jika cepat saja maka akan menyebabkan triac hidup lebih sebentar dalam 1 periode sinus AC nya.
#include<NoDelay.h>
#define zcd_pin 3 //sesuaikan dengan pin zcd kamu
#define triac_pin 4 //sesuaikan dengan pin triac kamu
noDelay delaytime(500);//ubah waktu perubahan kecerahan
int x,y = 0;
bool naik = true;
void setup() {
pinMode(zcd_pin, INPUT_PULLUP);
pinMode(triac_pin, OUTPUT);
attachInterrupt(zcd_pin, deteksi, FALLING); // attach Interrupt
}
void loop() {
if(delaytime.update())//buat tambah variabel x
{
if(naik) x+=10;
else x=-10;
if(x>=100) naik = false;
else (x <=0 ) naik = true;
y= map(x,0,100, 200,7200); // merubah x ke range y
}
}
ICHACE_RAM_ATTR void deteksi()
{
delayMicroseconds(y);
digitalWrite(triac_pin, HIGH);
delayMicroseconds(50); //delay 50 uSec on output pulse to turn on triac
digitalWrite(triac_pin, LOW);
}
Dan efek apakah yang muncul pada lampu? Silahkan ubah-ubah angka yang ada pada script untuk membuat pembaca lebih mengerti maksud dari script diatas.
Jika pembaca sering main di blog ini, maka membuat otomasi lampu IOT seperti gambar diatas akan menjadi sangat mudah seperti yang saya rangkum disini.
DISCLAIMER : Bermain dengan listrik PLN 220 volt adalah berbahaya, selalu gunakan sarung tangan kain untuk menghindari terjadinya sengatan listrik
Gambar diatas adalah perubahan sinyal yang ingin kita capai untuk mendeteksi yang dinamakan Zero crossing dari gelombang sinusoidal listrik AC. Perhatikan gambar rangkaian berikut dan akan saya jelaskan prinsip kerjanya.
Resistor 47K berjumlah 2 buah sebagai pembatas arus sehingga dapat bekerja pada tegangan AC yang dapat ditolelir oleh dioda bridge
Dioda bridge berfungsi untuk menjadi rectifier merubah sinus menjadi full wave rectified AC dimana saat sinus berada di tegangan negatif akan dibalik menjadi positif
Optocoupler yang dipilihkan bisa berjenis 4N25 / PC817 yang kemudian akan mendeteksi ketika sinyal sinus berada disekitar 0 volt yang menyebabkan led internalnya OFF
Resistor pull up 10K akan menyebabkan kondisi logic ZCD = 0 saat LED ON dan ketika LED OFF (pada optocoupler) maka akan menyebabkan pulse pada output ZCD yang menuju microcontroller.
- Interupt pada ESP8266
ESP 8266 memiliki kecepatan prosesor yang cukup tinggi bila dibandingkan seri arduino, sehingga portnya kebanyakan dapat digunakan sebagai input interrupt. Jika menggunakan arduino uno berbasis mega328 maka pin interruptnya hanya ada di pin I/O nomer 2.
Untuk belajar konsep interrupt dapat dibaca pada tulisan saya sebelumnya disini.
Ada yang spesial pada interrupt di ESP8266 dimana function untuk melakukan interrupt harus disediakan di RAM, sehingga jika menggunakan contoh pada arduino akan terjadi overflow dan ram akan error. Untuk itu dibutuhkan penambahan ini :
ICHACE_RAM_ATTR void perintah_zcd()
{
// masukkan perintah eksekusi interupt jika memakai sketch jadul
}
IRAM_ATTR void perintah_zcd()
{
// masukkan perintah eksekusi interupt jika sketch 3.o keatas
}
Jadi script contoh yang lengkap untuk pendeteksi Zero Crossing sebagai berikut:
#define zcd_pin 3 //sesuaikan dengan pin esp kamu
int x = 0;
void setup() {
Serial.begin(9600);
pinMode(zcd_pin, INPUT_PULLUP);
attachInterrupt(zcd_pin, deteksi, FALLING); // attach Interrupt
}
void loop() {
}
ICHACE_RAM_ATTR void deteksi()
{
x++;
Serial.print("ZCD terdeteksi ke: ");
Serial.println(x);
}
Sambungkan rangkaian pendeteksi ZCD ke pin ESP8266 dan upload script diatas dan lihatlah pada serial monitor kamu.