Bikin Sendiri Saklar Rumah dengan Timer

Saklar teras rumah biasanya kita nyalakan malam hari, sekitar jam 6 sore sampai jam 6 pagi.

Atau ruang tamu ingin dinyalakan jam 5 sore sampai jam 10 malam saja, kemudian nyala lagi pagi jam 4 sampai jam 6.

Sebenarnya ada banyak produk saklar dengan timer yang dijual dipasaran, namun kalo kita bisa bikin sendiri kan keren.. :D selain itu bisa kita atur programnya semau kita

Komponen

Komponen-komponen yang kita butuhkan sebagai berikut

  • Arduino Nano
  • Modul TinyRTC
  • Modul Relay DPDT 5v 220v
  • Charger / power supply 5v
  • Breadboard
  • Kabel-kabel

Sebenarnya hanya 3 komponen utama saklar lampu dengan timer. RTC, Relay dan Timer

1. RTC Module

RTC atau Real Time Clock module ini berfungsi seperti jam, menyimpan dan penunjuk waktu. Module ini berikut baterainya, sehingga jika mikrokontrollernya kehilangan daya waktunya tidak tereset.

2. Relay

Relay ini fungsinya sebagai saklar elektronik. Sinyal dari tegangan rendah 5V digunakan untuk mengontrol lampu 220V

3. Mikrokontroller atau dalam hal ini Arduino

Mikrokontroller adalah otaknya, dimana sinyal INPUT dari modul RTC berupa waktu akan diolah disini. Dan OUTPUT berupa sinyal digital ke relay dikirimkan sesuai jadwal yang kita buat untuk menyalakan dan mematikan lampu.

Supaya lebih mudah, mikrokontroller yang kita gunakan adalah Arduino, lebih mudah merangkainya dan lebih mudah memprogramnya.

Dan yang akan kita gunakan sekarang adalah Arduino Nano, baru denger ya? Secara fungsi sama, mirip dengan Uno. Memang tidak sepopuler Arduino Uno, tapi karena bentuknya yang lebih kecil, harganyapun lebih hemat. 

4. Lain-lain

Komponen tambahan lain yang kita butuhkan adalah breadboard, kabel-kabel, serta power supply 5v untuk arduino bisa diambil dari charger hp yang tidak terpakai.

Breadboard Mini

kabel male-female

kabel jumper breadboard

Rangkaian

Dari komponen-komponen tersebut Kita rangkaikan sebagai berikut:

  • RTC modul dihubungkan ke Arduino menggunakan I2C, yaitu pin SDA dan SCL, di Arduino Nano dan Arduino Uno pin SDA adalah A4, pin SCL adalah A5.
    Untuk board Arduino yang lain mengikuti tabel dibawah
BoardI2C / TWI pins
Uno, Ethernet, NanoA4 (SDA), A5 (SCL)
Mega256020 (SDA), 21 (SCL)
Leonardo2 (SDA), 3 (SCL)
Due20 (SDA), 21 (SCL), SDA1, SCL1
  • Pilih satu pin digital sebagai OUTPUT, disini kita gunakan pin 11 (pastikan sesuai dengan codingan)
  • Relay dihubungkan secara PARALEL dengan saklar LAMPU
    (-) kelemahannya jika saklar lampu kita nyalakan, maka saklar otomatis ini tidak akan berjalan
    (-) lampu tidak dapat dinyalakan secara manual
    (+) kelebihan instalasi lebih mudah
    (+) lampu masih dapat dinyalakan secara manual
Arduino & module TinyRTC yang sudah terhubung.
Rangkaian siap diinstall

Software

Untuk memprogram arduino dengan RTC ini langkah-langkahnya sebagai berikut:

  1. Install Arduino IDE di PC kesayanganmu
  2. Install driver Arduino supaya board bisa berkomunikasi dengan PC
  3. Tambahkan Library RTC.lib di Arduino IDE, bisa didownload disini
  4. Copy source code dibawah,
  5. Upload ke Arduino

Berikut source code saklar lampu dengan timer pukul 18 sampai 6 pagi

Copy dan paste program di atas ke Arduino IDE, hubungkan Arduino ke PC, lalu tekan tombol upload.

Jika belum pernah upload program dari Arduino IDE, cek cara uploadnya di project Arduino Flip-flop.

Penjelasan Program

Dari program di atas kita menggunakan library RTClib.h dan Wire.h untuk menghubungkan modul RTC dengan Arduino menggunakan I2C

SETUP

Pada setup() kita tidak perlu mendefine pin-pin untuk koneksi ke TinyRTC.  Menggunakan I2C default pin yang digunakan adalah pin SDA dan SCL, dimana di Arduino Nano ada di pin A4 dan A5. Hanya perlu menjalankan rtc.begin().

Dan pastikan tidak salah memasang pin, kaki SDA modul TinyRTC ke pin A4 dan SCL ke A5.

Yang perlu diseting adalah pin yang akan kita gunakan sebagai OUTPUT ke relay. Di program ini kita gunakan pin 11. pinMode(pinRelay, OUTPUT); dan sebelumnya konstanta pinRelay ini didefine sebagai 11, const int pinRelay = 11;

LOOP

Pada loop(), pertama ambil waktu sekarang dari RTC

DateTime now = rtc.now(); membuat object now yang berisi waktu sekarang. 

now.hour() berisi jam. Jam inilah yang kita pakai untuk pembandingan. output jam nya bernilai 0 sampai 24

if ((now.hour() >= 18) || (now.hour() < 6)) {

Kondisi ini dibaca jika jam sekarang lebih besar atau sama dengan jam 18, atau jam sekarang sebelum jam 6.

Artinya kondisi ini akan TRUE  pada pukul 18 – 24 dan 0 – 6

Kamu bisa variasikan kondisi ini tergantung kebutuhanmu, misal hanya pada pukul 4, now.hour() == 4, dan sebagainya.

Pada kondisi TRUE inilah kita hidupkan relay, dengan mengirim sinyal HIGH ke pin 11

digitalWrite(pinRelay, HIGH);

maka otomatis Lampu akan menyala.

sebaliknya jika kita kirim LOW ke pin 11, maka lampu akan mati.

Debugging

Terkadang program tidak berjalan sesuai keinginan, maka perlu dilakukan debug atas program tersebut.

Caranya matikan komentar dengan menghilangkan // atau /* di depan baris dengan tag #debug pada source diatas.

Sambungkan ke pc kemudan buka serial monitor di Arduino IDE untuk melihat apakah tanggal jam sudah benar atau belum.

Instalasi

Untuk instalasi kita pasangkan relay secara paralel dengan saklar lampu. Dan membutuhkan colokan untuk mensuply power Arduino.

Akan memudahkan jika saklar dan colokan berdekatan, seperti foto berikut

Saklar & colokan

Sebaiknya matikan terlebih dahulu sumber listrik dari PLN.

Hati-hati Tegangan Tinggi!!

220V

Buka sekrup saklar dan kendorkan.

Sambungkan kabel dari relay secara paralel ke saklar

Pasang kembali saklar ke rumahnya, dan colokkan Arduino.

Saklar timer sudah siap.

Catatan

Beberapa catatan dari project ini

  • Hati-hati dengan tegangan tinggi. Bila tidak ditutup semua, minimal amankan kaki relay yang terhubung ke tegangan tinggi.
  • Relay dihubungkan paralel dengan saklar
    • kelebihan:
      • saklar masih bisa digunakan manual (pada saat arduino OFF)
      • lebih mudah uninstalasinya jika sudah tidak dipakai
    • kekurangan:
      • tidak bisa mematikan manual jika lampu dihidupkan oleh Arduino (solusinya dengan mematikan Arduino)
      • saklar otomatis tidak bekerja jika saklar manual dalam keadaan close (selalu hidup)
  • Rangkaian ini sangat sederhana, jauh dari sempurna dan masih sangat bisa ditingkatkan lagi kemampuannya. Beberapa ide untuk improvement:
    • Tambahkan LCD untuk menampilkan waktu
    • Tambahkan tombol untuk mengatur waktu

Demikian proyek lampu timer dengan arduino semoga bisa dicoba, jika kesulitan bisa hubungi di kolom komentar.

Dan semoga teman-teman bisa mendapatkan inspirasi untuk membut yang lebih baik lagi.

Selamat berkarya.

Febrianto

Penulis Senior Ndoware.com yang lagi suka ngulik Arduino dan IoT. Hoby bermain game baik itu di komputer, gadget maupun di dunia nyata :)

45 Respon

  1. ilyas berkata:

    kalau keluar
    exit status 1
    RTClib.h: No such file or directory
    itu maksudnya apa ?

  2. Iljam berkata:

    Jika pakai arduino uno, apakah port2 yg ditancapkan dari rtc sama?

  3. Drjo berkata:

    Asalaamuualaikkum.. terimakasih gan ilmunya sngt brmanfaat..

  4. dody darmadi berkata:

    makasih ilmunya , sudah di coba berhasil, nanya dikit nih jika mau menuliskan jam on lampu bukan jam 18 tapi 17;30 gmn

  5. rai berkata:

    kalau relaynya ada 4 dimana setting nya mas ..? misal mau pakai di port 11,12,13,14
    const int pinRelay = 11;
    ditambahkan baris nerikutnya =12 sampai 14 atau 11,12,13,14

    • Febrianto berkata:

      Berarti perlu ditambahkan 3 konstanta baru mas, sesuai pinnya, contohnya jadi seperti ini:
      const int pinRelay = 11;
      const int pinRelay2 = 12;
      const int pinRelay3 = 13;
      const int pinRelay4 = 14;

  6. Zuma Zayn berkata:

    Maaf mau nanya mas , arduino nano nya jika ngatur nya pkek hp bukan pakek PC apakah bisa…? Klau bisa pakai aplikasi apa.
    Trims

  7. Aulia Salsabila berkata:

    ini cuma buat 1 lampu?

  8. Bacrul Ulum berkata:

    gan, mau tanya itu kan set itunya harian gan, klo misal kita mau bikin nyala lampunya misal 8 hari sekali gimana gan

    • Febrianto berkata:

      Salah satu caranya bisa dengan menghitung jumlah hari dari epoch

      [code language=”arduino”]Serial.print(now.unixtime() / 86400L); // menampilkan hari ke .. dari tanggal 1/1/1970[/code]

      Kemudian tinggal dihitung selisih hari dari terakhir nyala

      [code language=”arduino”]if (((now.unixtime() / 86400L) – varHariTerakhirNyala) >= 8) {
      // jalankan program
      varHariTerakhirNyala = now.unixtime() / 86400L; // inisiasi kembali variable
      }[/code]

  9. Irza berkata:

    Bagaimana jika saya ingin mengaktifkan relay pada pukul 18.30 bang?

  10. dani berkata:

    kalau mau nambahin lcd 8×2 gmna bang?

  11. Dede Rizki berkata:

    Mas punya saya pake RS3231 apa bisa ? Library nya apa aja? Apakah sama pakai RTC lib ?.

  12. dody darmadi berkata:

    jika waktu on lampu yg di mau pk 17:30 dan off lampu pk 05;30
    programnya gmn mas ?

    • Febrianto berkata:

      if (((jam == 17) && (menit >= 30))
      || (jam >= 18)
      || (jam < 5) || ((jam == 5) && (menit <= 30))) { // lampu nyala } else { // lampu mati }

  13. Pawoko berkata:

    Mas kok muncul eror gini ya ?
    #include expects “FILENAME” or

  14. Markus berkata:

    Izin bertanya komandan,
    itu rtc.now berpengaruh ga dengan wilayahnya.
    contoh saya ada di papua yang WIT dan komandan di jawa yang WIB.
    itu berpengaruh gak, atau sudah otomatis seuai waktu di tempat kita komandan?

  15. Muhammad iqbal berkata:

    Bang ada WAnya gak biar enak konsultasinya?

  16. rizki berkata:

    saat on saya mau menambahkan buzzer mas tp hanya 5 detik saja habis itu mati,

    if ((now.hour() >= 18) || (now.hour() < 6)) { // kondisi pukul 18 – 6
    digitalWrite(pinRelay, HIGH); // relay HIGH, lampu nyala
    digitalWrite(pinBuzzer,HIGH); // Buzzer menyala
    delay(5000);
    digitalWrite(pinBuzzer,LOW);
    ditambah seperti ini apakah bisa (tdk melakukan looping)?

  17. velkam berkata:

    jika saya mau menyalkan pompa air setiap sekali se jam,sketc program yang harus diubah dimananya mas,terimaksih

    • Febrianto berkata:

      Setiap jam ya, berarti tidak perlu cek jamnya, cukup cek menitnya dengan now.minute() .
      Contoh:
      // Menyalakan pompa selama 5 menit setiap jam
      if (now.minute() == 1) { // setiap jam pada menit 1
      digitalWrite(pinRelay, HIGH); // relay HIGH, pompa nyala
      }
      if (now.minute() == 6) { // setiap jam pada menit 6
      digitalWrite(pinRelay, LOW); // relay LOW, pompa mati
      }

      • Tri berkata:

        Mas..kalo nyala jam 17:30 dan mati 21:30…kodingnya gmna ya ?

        • Febrianto berkata:

          Coba seperti ini mas

          [code language=”arduino”]
          if (((now.hour() == 18) && (now.minute() >= 30)) || // 18.30 – 18:59 atau
          ((now.hour() > 18) && (now.hour() < 21)) || // 19:00 – 20:59 atau
          ((now.hour() == 21) && (now.minute() <= 30))) // 21:00 – 21:30
          {
          digitalWrite(pinRelay1, HIGH); // relay HIGH, lampu nyala
          } else {
          digitalWrite(pinRelay1, LOW); // relay LOW, lampu mati
          }
          [/code]

  18. Windu berkata:

    Ilmu Sangat bermanfaat, bisa saya gunakan untuk bahan edukasi anak saya.
    Terimakasih Barokallah

  1. 23 Juli 2020

    […] Mengontrol saklar lampu, […]

Tinggalkan Balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.