Anda di halaman 1dari 20

PRAKTEK PERANCANGAN ELEKTRONIKA

MINGGU 2
OTOMASI RUMAH TERKENDALI SUARA

Otomatisasi Rumah Terkendali Suara Berbasis Google Assistant


menggunakan DIY Arduino Wi-Fi Shield
ARDUINO

Perisai Wi-Fi Arduino DIY menggunakan ESP8266 untuk Otomatisasi Rumah


yang dikontrol Suara. Manusia dan mesin berinteraksi dan berkomunikasi
satu sama lain dalam banyak cara yang mungkin, komputer memiliki monitor,
keyboard dan mouse, sementara ponsel pintar memiliki layar sentuh, kontrol
gerakan dll dan bahkan AR dan VR sedang dalam perjalanan. Tetapi alat
paling dasar yang digunakan oleh manusia untuk berkomunikasi adalah
komunikasi vokal, kita memiliki kemampuan untuk mendengarkan dan
berbicara dan jika mesin entah bagaimana bisa melakukan hal yang sama
maka berkomunikasi dengan mereka tidak bisa menjadi lebih sederhana.
Jam tangan pintar dan pengeras suara pintar seperti Google home , Amazon
Echo dll perlahan-lahan menemukan jalannya ke rumah kita dan berbicara
dengan mesin perlahan menjadi kenyataan. Jadi dalam modul ini kita akan
belajar bagaimana kita dapat menggunakan asisten Google yang dapat
dipanggil dari Smartphone Anda, atau Google home atau jam tangan pintar
untuk mengontrol lampu/kipas hanya dengan menggunakan perintah
suara . Bukannya kita sangat malas untuk mengganti beban dengan sakelar,
tetapi pada akhirnya kita senang menyelesaikan sesuatu hanya dengan
perintah suara kita. Jadi mari kita mulai.

Modul Otomasi Rumah yang dikendalikan Asisten Google 


Kita menggunakan Arduino UNO untuk sisi mikrokontroler dan modul
ESP8266 untuk menghubungkan ke internet. Sejujurnya, ada banyak cara
lain untuk melewati ini; Anda dapat menggunakan prosesor yang lebih kuat
seperti Raspberry Pi atau SOC lain dengan Wi-Fi internal seperti ESP12E
atau ESP32.

Untuk modul ini, kita juga akan membangun pelindung WiFi Arduino


menggunakan ESP8266 yang terpasang pas di atas papan Arduino
UNO. Shield ini dapat digunakan untuk memprogram ESP8266 menggunakan
perintah AT atau langsung menggunakan Arduino IDE . Ini juga memiliki opsi
untuk menghubungkan modul FTDI langsung ke ESP8226 yang
memungkinkan ESP8266 diprogram sebagai perangkat stand one tanpa
Arduino dan juga untuk mem-flash firmware baru ke modul ESP8266 jika
diperlukan. Jadi perisai dapat digunakan untuk banyak modul Arduino kreatif
lainnya yang membutuhkan koneksi internet.

Untuk berkomunikasi dengan asisten Google di ponsel kita, kita telah


menggunakan layanan IFTTT, yang mengonfigurasi asisten untuk
mendengarkan perintah tertentu dan memicu tautan jika perintah
diterima. Sekarang, seperti yang mungkin sudah Anda ketahui, ESP8266
dapat membaca informasi dari internet hanya melalui panggilan API, jadi kita
membutuhkan platform yang dapat menyediakan opsi API ini. Di
sinilah ThingSpeak masuk. Pada dasarnya perintah suara yang diberikan
kepada asisten Google mengubah nilainya bidang di saluran ThingSpeak kita
sesuai. Sedangkan ESP8266 secara berkala memeriksa nilai field ini
menggunakan panggilan API dan mengirimkan nilai ini ke Arduino
menggunakan komunikasi serial. Arduino kemudian melakukan tindakan yang
diperlukan seperti mengaktifkan relai berdasarkan nilai yang diterima.

Arduino Uno Wi-Fi Shield menggunakan ESP8266 

Mari kita mulai dengan menghubungkan papan Arduino UNO dengan modul
Wi-Fi ESP8266. ESP8266 adalah modul yang rumit untuk
digunakan; membutuhkan sumber dayanya sendiri dan pengaturan koneksi
khusus untuk berkomunikasi dengan Arduino. Jika Anda benar-benar pemula
maka sangat disarankan untuk membaca modul Memulai dengan
ESP8266 sebelum melanjutkan lebih jauh.

Ingatlah bahwa ESP8266 saat dibeli dilengkapi dengan firmware default yang
mampu berkomunikasi dengan perintah AT. Tetapi jika modul sudah langsung
diprogram dengan Arduino, maka firmware bawaan akan terhapus dan harus
di-flash lagi jika ingin menggunakan perintah AT. Detail cara menggunakan
flash akan dijelaskan kemudian. Diagram sirkuit untuk pelindung Wi-Fi
ditunjukkan di bawah ini

Kita telah menggunakan LM317 sebagai pengatur tegangan 3.3V. 3.3V ini


digunakan untuk memberi daya pada modul ESP8266 karena 3.3V dari
Arduino UNO tidak akan dapat memasok arus yang cukup untuk modul
ESP. Pin input LM317 dapat ditenagai oleh jack barel input DC dari pin Vin
papan Arduino UNO.

Pin GPIO0 dari modul ESP terhubung ke pin jumper yang dapat di-toggle
untuk menghubungkan pin ke ground. Ini memungkinkan pengguna untuk
mengatur modul ESP agar berfungsi baik dalam mode perintah AT atau mode
Pemrograman (Arduino IDE). Baik GPIO0 dan GPIO2 terhubung ke konektor
eksternal sehingga pin GPIO ini juga dapat digunakan.

Akhirnya di sisi Arduino ,


kita telah menghubungkan pin Rx dan Tx dari modul ESP8266 ke pin Arduino
12 dan 13. Kita tidak menggunakan serial perangkat keras (pin 0 dan 1) untuk
memudahkan debugging. Anda juga dapat melihat bahwa opsi untuk
menghubungkan LCD 16x2 juga disediakan, sehingga dapat dipasang
langsung di atas pelindung. LCD ini didukung oleh pin 5V dari Arduino.

Otomatisasi Rumah Terkendali Suara menggunakan Google


Assistant – Mengontrol Banyak beban dalam Mode Online,
Manual, dan Timer
Edit 2020

Otomatisasi Rumah Terkendali Suara menggunakan Asisten Google


Dengan kemajuan asisten virtual seperti Google Assistant dan Alexa,
otomatisasi Rumah dan aplikasi yang dikontrol Suara menjadi
normal. Sekarang, kita sendiri telah membangun banyak modul otomatisasi
rumah , mulai dari Lampu Tangga Otomatis sederhana hingga Otomatisasi
Rumah yang dikendalikan web berbasis IoT menggunakan Raspberry Pi. Tapi
modul ini di sini berbeda, idenya di sini adalah untuk membuat papan
otomatisasi Rumah praktis yang dapat masuk ke unit daya AC kita di dinding
kita dan tetap tersembunyi di dalamnya. Papan tidak boleh mengganggu kerja
normal sakelar unit daya kita, yaitu sakelar itu harus ON atau OFF dengan
sakelar manual juga. Dan tanpa dikatakan, itu juga harus dapat mengontrol
beban yang sama dengan suara menggunakan asisten google dan juga
mengatur timer sehingga beban apa pun dapat secara otomatis AKTIF atau
MATI selama waktu yang ditentukan dalam sehari.
Modul ini sangat mirip dengan steker Smart Wi-Fi ESP8266 kita tetapi di sini
karena kita akan menggunakan ESP12, kita akan memiliki lebih banyak pin
GPIO yang memungkinkan kita untuk mengontrol empat beban AC secara
bersamaan. Juga, karena kita telah mengintegrasikan Blynk dan Google
Assistant, modul ini menjadi menarik dan praktis untuk digunakan. Untuk
modul ini kita telah membangun papan sirkuit menggunakan layanan
pembuatan PCB PCBGOGO. Di bagian artikel selanjutnya kita telah
menyediakan file Gerber yang dirancang untuk rangkaian dan juga
menjelaskan prosedur lengkap untuk memesan PCB dari PCBGOGO .
Peringatan: Modul ini melibatkan bekerja dengan tegangan listrik AC. Harap
diperhatikan bahwa harus sangat berhati-hati saat bekerja dengan tegangan
AC tinggi. Pastikan Anda diawasi oleh orang yang berpengalaman jika Anda
baru.
Diagram Sirkuit untuk Otomatisasi Rumah yang dikendalikan Asisten Google
Diagram rangkaian lengkap untuk otomatisasi rumah dapat ditemukan di
bawah.

Seperti yang Anda lihat, rangkaiannya sangat sederhana, mari kita mulai
penjelasannya dari Modul Wi-Fi ESP12E. Anda juga dapat melihat video di
bawah ini untuk penjelasan modul yang terperinci. Modul ini dapat diprogram
seperti papan pengembangan nodeMCU dan mengurangi banyak
ruang. Secara default, saat dihidupkan, ESP12E akan memasuki mode
operasi. Untuk memprogramnya, kita harus menggunakan tombol Reset dan
Flash. Yaitu untuk menempatkan ESP12 dalam mode pemrograman, tekan
dan tahan tombol Reset dan Flash, lalu lepaskan tombol reset. Ini akan mem-
boot ESP12E dengan menekan tombol flash, sekarang lepaskan tombol flash
dan ESP12E akan masuk ke mode pemrograman. Setelah pemrograman,
Anda harus menekan tombol reset lagi untuk mem-boot ESP12E dalam mode
operasi normal untuk menjalankan Program yang diunggah. Pin
pemrograman Rx, Rx, dan Ground diperpanjang untuk dapat terhubung
dengan papan FTDI atau konverter USB ke TTL. Pastikan untuk
menghubungkan pin Tx ESP12 ke pin Rx Programmer dan sebaliknya.

Pin bendera lainnya I1 hingga I4 dan R1 hingga R4 digunakan untuk


menghubungkan Sakelar dan Relai. Pin I1 hingga I4 adalah singkatan dari
Pin input. Semua pin ini mendukung resistor pull-up internal sehingga kita
hanya perlu menghubungkan sakelar pada kotak ekstensi ke pin Input melalui
resistor pull-down seperti yang ditunjukkan di bawah ini.
Demikian pula, pin output Relay R1 hingga R4 digunakan untuk mengontrol
Relay. Kita telah menggunakan rangkaian driver relay standar dengan Dioda
BC547 dan IN4007 seperti gambar di bawah ini. Perhatikan bahwa relai harus
dipicu dengan 5V tetapi pin keluaran ESP12E hanya 3.3V. Jadi, wajib
menggunakan transistor untuk menggerakkan relai. Kita juga telah
menempatkan LED di jalur basis transistor sehingga setiap kali transistor
dipicu, LED juga akan menyala.

Akhirnya, untuk memberi daya pada semua sirkuit kita, kita telah
menggunakan konverter Hi-Link AC-DC untuk mengubah 220V AC menjadi
5V DC. DC 5V ini kemudian diubah menjadi 3.3V menggunakan regulator
tegangan AMS117-3.3V. 5V digunakan untuk memicu Relay dan 3.3V
digunakan untuk memberi daya pada Modul Wi-Fi ESP21.
Langkahnya dengan cara instal aplikasi, buat modul baru untuk NodeMCU
dan mulailah menempatkan widget Anda seperti yang ditunjukkan di bawah
ini.  

Kita telah menggunakan pin virtual V1 hingga V4 untuk mengontrol relai 1


hingga 4 pada modul kita. Pastikan untuk mengubah jenis tombol untuk
beralih. Opsi pengatur waktu juga dapat digunakan untuk memicu pin virtual
secara otomatis selama waktu yang ditentukan, bahkan jika telepon
dimatikan. Kita telah menggunakan timer hanya untuk pin virtual V1 di sini,
misalnya, tetapi Anda dapat menggunakannya untuk keempat pin jika
diperlukan.
Pastikan untuk mendapatkan nilai token auth blynk Anda dari halaman modul
Anda. Cukup klik ikon mur (dilingkari merah pada gambar di atas) dan salin
token auth menggunakan opsi salin semua dan tempel di tempat yang aman,
yang akan kita perlukan saat memprogram papan Arduino.
Menyiapkan IFTTT dengan Google Assistant dan Blynk untuk Membaca
String
Cara termudah menggunakan Google Assistant untuk otomatisasi rumah
adalah dengan menggunakan IFTTT.  Dalam modul ini, kita akan
menggunakan aplikasi Blynk untuk memicu webhook menggunakan asisten
Google. Ini sangat mirip dengan otomatisasi rumah yang dikendalikan
suara dan modul radio FM yang dikendalikan suara . Kecuali, di sini kita akan
menggunakan blynk dengan IFTTT untuk mengirim string yang membuatnya
lebih mudah dan menarik.
Pada dasarnya, kita akan menggunakan pin virtual V5 dan V6 pada blynk
untuk mengirim perintah pemicu. V5 akan digunakan untuk menyalakan
perintah dan V6 akan digunakan untuk mematikan perintah. Misalnya, jika kita
mengatakan nyalakan TV dan Lampu. Perintah string di sini "TV and Lamp"
akan dikirim ke NodeMCU menggunakan API. Sintaks API adalah seperti di
bawah ini.
Sekarang yang harus kita lakukan di IFTTT adalah menggunakan asisten
google sebagai IF dan webhook sebagai ITU, jadi dengarkan perintah ini dan
kirim informasinya ke NodeMCU menggunakan API yang disebutkan di
atas. Bentuk applet turn-on yang sama ditunjukkan di bawah ini.
Perhatikan bahwa Anda harus memilih ucapkan frasa dengan opsi bahan
teks saat membuat resep untuk Asisten Google. Demikian pula, Anda harus
mengulangi hal yang sama untuk pin virtual V6 untuk mematikan relai. Anda dapat
memeriksa video di bagian bawah halaman ini untuk informasi rinci.  
Pemrograman Arduino untuk Blynk Home Automation
Kode Arduino lengkap untuk modul ini dapat ditemukan di bagian bawah halaman
ini. Penjelasan yang sama adalah sebagai berikut. Sebelum itu pastikan anda sudah bisa
menggunakan Blynk dan Program NodeMCU dari Arduino IDE. Jika tidak, ikuti artikel memulai
dengan ESP12 . Juga, tambahkan perpustakaan blynk ke Arduino IDE menggunakan
pengelola papan.
Seperti biasa, kita memulai kode kita dengan mendefinisikan pin input dan output, di sini input
akan dari switch dan output dari relay. Kita telah mendefinisikan nama pin untuk keempat
sakelar sebagai sw dan relai sebagai rel seperti yang Anda lihat di bawah.
#define sw1 13
#define sw2 12
#define sw3 14
#define sw4 16
#define rel1 4
#define rel2 5
#define rel3 9
#define rel4 10

Pada tahap selanjutnya, Anda harus memasukkan beberapa kredensial seperti blynk auth
token dan nama pengguna dan kata sandi untuk router Wi-Fi yang harus terhubung dengan
nodeMCU Anda. Token auth blink bisa didapatkan dari aplikasi blynk. Kita akan mempelajari
lebih lanjut tentang itu di bagian pengaturan aplikasi blynk.

char auth[] = "Fh3tm0ZSrXQcROYl_lIYwOIuVu-E"; //get from blynk application


char ssid[] = "home_wifi";
char pass[] = "fakepass123";

Selanjutnya, kita telah memberikan definisi untuk fungsi yang


disebut read_switch_toggle() . Dalam fungsi ini, kita akan membandingkan keadaan saat ini
dan keadaan sebelumnya dari sakelar kita. Jika sakelar telah dihidupkan atau dimatikan yaitu
Jika sakelar telah dimatikan. Akan ada perubahan status sakelar, fungsi akan memantau
perubahan ini dan mengembalikan nomor sakelar. Jika tidak ada perubahan yang terdeteksi,
itu akan mengembalikan 0.

int read_switch_toggle()
{
int result = 0;
//Note all previous values
for (int i=0; i<=3; i++)
pvs_state[i] = crnt_state[i];
//Read the current status of switchs
crnt_state[0] = digitalRead (sw1);
crnt_state[1] = digitalRead (sw2);
crnt_state[2] = digitalRead (sw3);
crnt_state[3] = digitalRead (sw4);
//compare current and pvs state
for (int i=0; i<=3; i++)
{
if (pvs_state[i] != crnt_state[i])
{
result = (i+1); //if any switch is toggled we get switch number as result
return result;
}
else
result = 0; //if no change result 0
}
return result; //return the resul
}

Selanjutnya, kita memiliki kode untuk aplikasi blynk. Kita akan menggunakan pin virtual V1
hingga V6 untuk mengontrol kotak sambungan pintar kita. Pin V1 hingga V4 akan digunakan
untuk mengontrol relai 1 hingga 4 masing-masing langsung dari aplikasi blynk. Kode di bawah
ini menunjukkan apa yang terjadi ketika V1 dipicu dari aplikasi blynk. Kita hanya membaca
status (TINGGI atau RENDAH) dan mengontrol relai yang sesuai.

BLYNK_WRITE(V1)
{
digitalWrite(rel1,param.asInt());
Serial.println("V1");
}

Demikian pula, pin virtual juga dapat digunakan untuk membaca string dari aplikasi blynk. Kita
akan belajar cara mengirim string dari asisten google ke NodeMCU menggunakan IFTTT dan
asisten Google nanti, tetapi untuk sekarang, mari kita lihat bagaimana kode NodeMCU
membaca string ini dan mencari kata kunci tertentu dan memicu relai yang sesuai.
Pada kode di bawah ini, Anda dapat melihat bahwa ketika pin virtual V5 dipicu, kita
mendapatkan string yang diteruskan ke variabel string yang disebut ON_message . Kemudian
dengan menggunakan variabel string ini dan metode inderOf, kita mencari apakah ada kata
kunci seperti "lampu", "LED", "musik", "TV", jika ya, kita menyalakan beban tertentu.  Jika kata
kunci "semuanya" terdeteksi, kita mengaktifkan semuanya. Hal yang sama juga dapat
dilakukan untuk V6 untuk mematikan relai. Kita akan memahami lebih banyak tentang ini ketika
kita masuk ke bagian IFTTT.

BLYNK_WRITE(V5)
{
String ON_message = param.asStr();
Serial.println (ON_message);
if(ON_message.indexOf("lamp") >= 0)
digitalWrite(rel1,HIGH);
if(ON_message.indexOf("LED") >= 0)
digitalWrite(rel2,HIGH);
if(ON_message.indexOf("music") >= 0)
digitalWrite(rel3,HIGH);
if(ON_message.indexOf("TV") >= 0)
digitalWrite(rel4,HIGH);
if(ON_message.indexOf("everything") >= 0)
{
digitalWrite(rel1,HIGH);digitalWrite(rel2,HIGH);digitalWrite(rel3,HIGH);digitalWrite(rel4,HIGH);
}
}
Terakhir, di dalam fungsi loop, kita hanya perlu memeriksa apakah ada tombol yang posisi
sakelarnya telah berubah. Jika ya, maka kita menggunakan kasus sakelar seperti yang
ditunjukkan di bawah ini untuk mengubah posisi relai tertentu.

switch (toggle_pin) {
case 0:
break;
case 1:
Serial.println("Toggling Relay 1");
digitalWrite(rel1,relay_state[toggle_pin -1]);
break;
case 2:
Serial.println("Toggling Relay 2");
digitalWrite(rel2,relay_state[toggle_pin -1]);
break;
case 3:
Serial.println("Toggling Relay 3");
digitalWrite(rel3,relay_state[toggle_pin -1]);
break;
case 4:
Serial.println("Toggling Relay 4");
digitalWrite(rel4,relay_state[toggle_pin -1]);
break;
}
}

Fabrikasi PCB menggunakan PCBGoGo


Sekarang kita memahami cara kerja skema, kita dapat melanjutkan dengan
membangun PCB untuk modul otomatisasi Rumah kita . Tata letak PCB
untuk rangkaian di atas juga tersedia untuk diunduh sebagai Gerber dari
tautan.
 Unduh GERBER untuk Otomatisasi Rumah Terkendali Suara menggunakan
Asisten Google
Sekarang desain kita sudah siap, saatnya untuk membuatnya menggunakan
file Gerber. Untuk menyelesaikan PCB dari PCBGOGO cukup mudah, cukup
ikuti langkah-langkah di bawah ini-
Langkah 1:  Masuk ke  www.pcbgogo.com , daftar jika ini adalah pertama
kalinya Anda. Kemudian pada tab Prototype PCB, masukkan dimensi PCB
Anda, jumlah lapisan, dan jumlah PCB yang Anda butuhkan. Dengan asumsi
PCB adalah 80cm × 80cm, Anda dapat mengatur dimensi seperti yang
ditunjukkan di bawah ini.
Langkah 2:  
Lanjutkan dengan mengklik tombol  Quote Now  . Anda akan dibawa
ke halaman tempat untuk mengatur beberapa parameter tambahan jika
diperlukan seperti material yang digunakan jarak lintasan, dll. Tetapi
kebanyakan, nilai default akan berfungsi dengan baik. Satu-satunya
hal yang harus kita pertimbangkan di sini adalah harga dan
waktu. Seperti yang Anda lihat, Waktu Pembuatan hanya 2-3 hari dan
biayanya hanya $5 untuk PCB kita. Anda kemudian dapat memilih
metode pengiriman yang diinginkan berdasarkan kebutuhan Anda.

Langkah 3:  
Langkah terakhir adalah mengunggah file Gerber dan melanjutkan
pembayaran. Untuk memastikan prosesnya lancar, PCBGOGO
memverifikasi apakah file Gerber Anda valid sebelum melanjutkan
pembayaran. Dengan cara ini, Anda dapat yakin bahwa PCB Anda
ramah fabrikasi dan akan menjangkau Anda sesuai komitmen.
Merakit PCB
Setelah papan dipesan, papan tersebut sampai kepada kita setelah beberapa
hari melalui kurir dalam kotak berlabel rapi yang dikemas dengan baik, dan
seperti biasa, kualitas PCB sangat mengagumkan. PCB yang kita terima
ditunjukkan di bawah ini. Seperti yang Anda lihat, baik lapisan atas dan
bawah telah berubah seperti yang diharapkan.
Vias dan bantalan semuanya dalam ukuran yang tepat. Butuh waktu sekitar
15 menit untuk merakit papan PCB untuk mendapatkan sirkuit yang
berfungsi. Papan rakitan ditunjukkan di bawah ini. 

Menghubungkan Papan dengan Unit Daya AC / Papan Ekstensi


Papan ini dirancang untuk dipasang di dalam soket listrik AC di rumah
kita. Tapi demi modul ini, kita akan menggunakan kotak ekstensi. Jika Anda
menginginkan solusi yang lebih permanen, maka sambungkan ini ke dalam
soket listrik AC Anda, seperti yang Anda lihat di bawah, panjang PCB cukup
ringkas untuk ditempatkan di dalam soket listrik AC.
Pastikan Anda mengikuti tindakan pencegahan keselamatan saat bekerja
dengan listrik AC. Ikuti diagram sirkuit di bawah ini untuk memahami cara
menghubungkan relai dan sakelar Anda ke papan PCB kita.

Diagram koneksi turun hanya untuk satu Relay dan sakelar tetapi Anda juga
dapat mereplikasi yang sama untuk tiga yang tersisa juga. Setelah koneksi
selesai, papan Anda akan terlihat seperti ini
Setelah sambungan dibuat, pastikan Anda telah mengencangkannya erat-erat
dengan terminal sekrup dan juga menggunakan lem panas untuk keamanan
tambahan. Kemas semuanya kembali ke dalam kotak dan kita harus siap
untuk pengujian. Anda dapat menemukan cara kerja lengkap dari modul ini
dalam video di bawah ini.
Kita harap Anda menikmati artikel ini dan belajar sesuatu yang
bermanfaat. Jika Anda memiliki pertanyaan, silakan tinggalkan di bagian
komentar di bawah atau gunakan forum kita  .

Kode
1 /*
2  * Smart Spike Buster for Home Automation using Google Asistant with Manual Control
3  * Switches connected to 13,12,14,16
4  * Relay are triggered by 4,5,9,10
5  */
6  #define sw1 13
7  #define sw2 12
8  #define sw3 14
9  #define sw4 16
10  #define rel1 4
11  #define rel2 5
12  #define rel3 9
13  #define rel4 10
14  #define BLYNK_PRINT Serial
15 #include <ESP8266WiFi.h>
16 #include <BlynkSimpleEsp8266.h>
17 char auth[] = "Fh3tm0ZSrXQcROYl_lIYwOIuVu-E"; //get from blynk application
18 char ssid[] = "home_wifi";
19 char pass[] = "fakepass123";
20 //http://188.166.206.43/Fh3tm0ZSrXQcROYlwOIuVu-E/update/V1?value=0 //use D4,D5,V1 and V2
21  boolean crnt_state[] = {0,0,0,0};
22  boolean pvs_state[] = {0,0,0,0};
23  boolean relay_state[] = {0,0,0,0};
24 int read_switch_toggle()
25 {
26 int result = 0;
27 //Note all previous values
28 for (int i=0; i<=3; i++)
29     pvs_state[i] =  crnt_state[i];
30 //Read the current status of switchs
31 crnt_state[0] = digitalRead (sw1);
32 crnt_state[1] = digitalRead (sw2);
33 crnt_state[2] = digitalRead (sw3);
34 crnt_state[3] = digitalRead (sw4);
35 //compare current and pvs state
36 for (int i=0; i<=3; i++)
37 {
38     if (pvs_state[i] !=  crnt_state[i])
39     {
40     result = (i+1); //if any switch is toggled we get switch number as result
41     return result;
42     }
43     else
44     result = 0; //if no change result 0
45 }
46 return result; //return the result
47 }
48 void setup() {
49 //Decalre all switchs as input
50   pinMode(sw1, INPUT_PULLUP); pinMode(sw2, INPUT_PULLUP); pinMode(sw3, INPUT_PULLUP); pinMode(sw4,
51 INPUT_PULLUP);   
52 //Decalre all relays as output
53   pinMode(rel1, OUTPUT); pinMode(rel2, OUTPUT); pinMode(rel3, OUTPUT); pinMode(rel4, OUTPUT);
54 //Initialize all pin to LOW
55   digitalWrite (rel1,LOW);digitalWrite (rel2,LOW);digitalWrite (rel3,LOW);digitalWrite (rel4,LOW);
56   Serial.begin(9600);
57   Blynk.begin(auth, ssid, pass);
58 }
59 //Control relay usinf Blynk Virtual Pins
60  BLYNK_WRITE(V1)
61 {
62   digitalWrite(rel1,param.asInt());
63   Serial.println("V1");
64 }
65 BLYNK_WRITE(V2)
66 {
67   digitalWrite(rel2,param.asInt());
68   Serial.println("V2");
69 }
70 BLYNK_WRITE(V3)
71 {
72   digitalWrite(rel3,param.asInt());
73   Serial.println("V3");
74 }
75 BLYNK_WRITE(V4)
76 {
77   digitalWrite(rel4,param.asInt());
78   Serial.println("V4");
79 }
80 BLYNK_WRITE(V5)
81 {
82   String ON_message = param.asStr();
83   Serial.println (ON_message);
84     if(ON_message.indexOf("lamp") >= 0)
85     digitalWrite(rel1,HIGH);
86   if(ON_message.indexOf("LED") >= 0)
87     digitalWrite(rel2,HIGH);
88   if(ON_message.indexOf("music") >= 0)
89     digitalWrite(rel3,HIGH);
  if(ON_message.indexOf("TV") >= 0)
90
    digitalWrite(rel4,HIGH);
91
  if(ON_message.indexOf("everything") >= 0)
92
  {
93
    digitalWrite(rel1,HIGH);digitalWrite(rel2,HIGH);digitalWrite(rel3,HIGH);digitalWrite(rel4,HIGH);
94
  }
95
}
96
BLYNK_WRITE(V6)
97
{
98
  String OFF_message = param.asStr();
99
  Serial.println (OFF_message);
100
    if(OFF_message.indexOf("lamp") >= 0)
101
    digitalWrite(rel1,LOW);
102
  if(OFF_message.indexOf("LED") >= 0)
103
    digitalWrite(rel2,LOW);
104
  if(OFF_message.indexOf("music") >= 0)
105
    digitalWrite(rel3,LOW);
106
  if(OFF_message.indexOf("TV") >= 0)
107
    digitalWrite(rel4,LOW);
108
  if(OFF_message.indexOf("everything") >= 0)
109
  {
110
    digitalWrite(rel1,LOW);digitalWrite(rel2,LOW);digitalWrite(rel3,LOW); digitalWrite(rel4,LOW);
111
  }
112
}
113
void loop() {
114
 Blynk.run();
115
int toggle_pin = read_switch_toggle();
116
if (toggle_pin !=0) //if any switch toggle is detected
117
{
118
relay_state [(toggle_pin-1)] = !relay_state [(toggle_pin-1)]; //change the particular bit
119
switch (toggle_pin) {
120
    case 0:  
121
      break;
122
    case 1:
123
      Serial.println("Toggling Relay 1");
124
      digitalWrite(rel1,relay_state[toggle_pin -1]);
125
      break;
126
    case 2:
127
      Serial.println("Toggling Relay 2");
128
      digitalWrite(rel2,relay_state[toggle_pin -1]);
129
      break;
130
    case 3:
131
      Serial.println("Toggling Relay 3");
132
      digitalWrite(rel3,relay_state[toggle_pin -1]);
133
      break;
134
    case 4:
135
      Serial.println("Toggling Relay 4");
136
      digitalWrite(rel4,relay_state[toggle_pin -1]);
137
      break;
138
  }
139
}
140
//delay (500);                
141
}

Anda mungkin juga menyukai