waktu tersisa untuk klaim promo DISKON 40%. Klaim Promo
Lebih terarah belajar coding melalui Kelas Online dan Interactive Coding Lihat Materi Belajar

Membuat Alarm Elektronik Menggunakan Arduino dengan Sensor Ultrasonik dan MP3 Module

Ditulis oleh sheli indriani, dipublikasi pada 19 Jul 2019 dalam kategori Info
Membuat Alarm Elektronik Menggunakan Arduino  dengan Sensor Ultrasonik dan MP3 Module - CodePolitan.com

Lihat video rangkaian jadinya di https://www.youtube.com/watch?v=2jHmjzTkjak

Embedded system (sistem tertanam) adalah sebuah sistem dan aplikasi yang mempunyai central processing unit (CPU) yang dapat diprogram, biasanya dalam bentuk microcontroller ataupun microprocessor. Sistem ini dapat pula didefinisikan sebagai sistem berukuran relatif kecil dan berbasis komputer yang dikemas dalam bentuk chip. Sistem inilah yang berperan layaknya komputer yang memberikan kemudahan dalam pengoperasian serta meningkatkan fungsi dinamis dan otomatis sistem.

Embedded system digunakan sebagai komponen inti dari komponen lain dan tertanam dari beberapa komponen atau peralatan yang lebih besar. Embedded system dirancang untuk suatu pekerjaan yang dapat dikerjakan secara otomatis, terutama sebagai suatu sistem pengontrol. Dengan adanya embedded system, suatu sistem dapat di kerjakan lebih baik, bekerja secara otomatis dan berukuran relatif kecil. Umumnya dengan embedded system ini diharap kita dapat membuat suatu sistem yang bersifat stand alone (bekerja sendiri tanpa harus tergantung dengan komputer).

Beberapa komponen yang diterapkan dalam pembuatan alarm :

1. Kabel jumper

Kabel jumper adalah salah satu alat pendukung untuk membuat rangkaian elektronika pada saat teman-teman menggunakan papan breadboard.

Dalam merancang rangkaian elektronika tentu saja kabel jumper ini sangat dibutuhkan. Fungsinya untuk menghubungkan antartik pada papan pcb single slide dan juga dapat digunakan untuk menghubungkan jalur rangkaian yang terputus dengan cara men-jumper-nya.

Harga : Rp. 1.000,- / Pcs

2. Papan Breadboard

Papan breadboard adalah sebuah sirkuit elektronika yang merupakan bagian prototipe dari rangkaian yang belum disolder sehingga masih dapat dirubah skema ataupun pergantian komponen.

Kali ini penulis menggunakan papan breadboard untuk memasang rangkaian elektronika apa saja yang akan saling terhubung dengan menggunakan kabel jumper sebagai media penghubung antara rangkaian elektronika satu dengan yang lainnya.

Harga : Rp. 17.000,-

3. Resistor

Resistor merupakan salah satu komponen yang paling sering ditemukan dalam rangkaian elektronika. Hampir setiap peralatan elektronika menggunakannya. Pada dasarnya resistor adalah komponen elektronika pasif yang memiliki nilai resistansi atau hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam suatu rangkaian elektronika.

Harga : Rp. 1.500,- / Pcs

4. Arduino Uno/Mega

Arduino adalah pengendali mikro single-board yang bersifat terbuka, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang.

Mikcokontroller diprogram menggunakan bahasa pemrograman arduino yang memiliki kemiripan syntax dengan menggunakan bahasa pemrograman C. Karena sifatnya sangat terbuka maka siapa saja dapat mengunduh skema hardware arduino dan menggunakannya.

Harga : 126.000,-

5. Mp3 Module / DFPlayer Mini

Mp3 Module atau DFPlayer Mini merupakan module pemutar file audio / module sound player music dengan support format audio seperti file .mp3 yang sudah umum dikenal oleh khalayak umum. Bentuk fisik dari DFPlayer mini ini berbentuk persegi dengan ukuran 20 x 20 mm yang dimana memiliki 16 kaki pin.
Output pada module mp3 mini ini dapat langsung dihubungkan dengan speaker mini ataupun amplifier sebagai pengeras suaranya. Teman-teman bisa mengunduh library-nya melalui link di bawah ini :

Unduh DFMiniMp3

Harga : Rp. 30.000,-

6. RTC DS3231

RTC adalah kepanjangan dari Real Time Clock merupakan suatu chip yang bisa menyimpan waktu,waktu itu dapat berupa detik, menit, tanggal, bulan dan tahun. Misalnya kalau kita perhatikan komputer,saat di matikan dan saat nyalakn kembali waktunya tetap sesuai,karena RTC masih menyimpan data waktunya dan saat komputer di matikan RTC masih bekerja.Agar tetap dapat bekerja, sebuah RTC dilengkapi dengan baterai CMOS.

Harga : Rp. 25.000,-

7. Speaker

Perangkat Keras yang berupa speaker merupakan piranti dengan kedudukannya hampir tidak bisa dipisahkan lagi dengan komputer. Karena itu, speaker memiliki peran yang sangat penting dalam mengeluarkan hasil pemrosesan berupa suara. Tentunya, kebanyakan pengguna komputer menyukai musik atau video sehingga membutuhkan speaker untuk mendukung keinginan pengguna. Speaker komputer dapat berfungsi sebagaimana mestinya apabila didukung perangkat keras bernamakan sound card atau pemroses audio/suara.

Penulis menggunakan speaker sebagai output berupa suara yang di simpan pada mp3 module / DFPlayer Mini. Ketika alarm telah disetting maka suara akan keluar melalui speaker.

Harga : Rp. 15.000,- sampai Rp. 20.000,-

8. LCD (Liquid Crystal Display)

LCD (Liquid Crystal Display) ini adalah suatu jenis media tampilan yang menggunakan kristal cair sebagai penampil utama. LCD sudah digunakan di berbagai bidang, misalnya dalam alat-alat elektronik, seperti televisi, kalkulator ataupun layar komputer.

Disini penulis menggunakan LCD untuk mengatur waktu yang akan terus berjalan ketika alarm sudah aktif.

Harga : Rp. 40.000,-

9. Kabel USB

Kabel USB ini digunakan sebagai alat untuk memasukkan perintah / input, program yang akan dijalankan di atur menggunakan aplikasi bawaan arduino sendiri unduh di sini

Harga : Rp. 12.000,-

Setelah teman-teman mengetahui semua alat elektronika yang digunakan berupa penjelasannya. Silahkan teman-teman merangkai semua alat tersebut sesuai yang tertera pada gambar 1.1 dan gambar 1.2 diatas.

Kemudian penulis akan sedikit menjelaskan keterkaitan antara beberapa komponen elektronika ini.

Rangkaian elektronika yang perlu teman-teman perhatikan betul :

​ Gambar 1.1 Rangkaian 1

Teman-teman bisa mulai merancang rangkaian pada Gambar 1.1 Rangkaian 1.

Rangkaian ini cukup mudah, teman-teman hanya perlu menggabungkan atau menyatukan Arduino dan LCD hingga pin antara keduanya terhubung.

LCD ini berfungsi untuk mengeluarkan output berupa teks, disini penulis menggunakan LCD sebagai output waktu yang akan diatur sesuai alarmnya.

​ Gambar 1.2 Rangkaian 2

Disini terdapat arduino sebagai pengontrol, controller (input). Kemudian ada Mp3 Module sebagai media penampung (penyimpan suara), yang kemudian ada speaker sebagai output dari Mp3 Module yang telah diprogram melalui Arduino dan terakhir ada dua buah resistor yang memiliki nilai resistansi atau hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam suatu rangkaian Elektronika.

​ Gambar 1.3 Rangkaian 3

Setelah teman-teman selesai mengikuti rangkaian pada Gambar Rangkaian 1.1 dan Gambar Rangkaian 1.2, terakhir teman-teman ikuti rangkaian pada Gambar Rangkaian 1.3.

Silahkan hubungkan kembali RTC DS3231 pada arduino menggunakan kabel fleksibel.

Teman-teman perlu berhati-hati ketika mulai memasang beberapa komponen tersebut. Jangan sampai tertukar, ikuti seperti yang penulis buat jangan sampai tertukar karena akibatnya akan fatal, bisa jadi rangkaian yang di buat akan rusak atau tidak bisa dijalankan apabila keliru dalam penerapannya.

Setelah itu teman-teman bisa memasukkan programnya menggunakan aplikasi arduino yang sudah di unduh.

   /*
     LiquidCrystal Library - Hello World

     Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
     library works with all LCD displays that are compatible with the
     Hitachi HD44780 driver. There are many of them out there, and you
     can usually tell them by the 16-pin interface.

     This sketch prints "Hello World!" to the LCD
     and shows the time.

     The circuit:
      LCD RS pin to digital pin 12
      LCD Enable pin to digital pin 11
      LCD D4 pin to digital pin 5
      LCD D5 pin to digital pin 4
      LCD D6 pin to digital pin 3
      LCD D7 pin to digital pin 2
      LCD R/W pin to grounda
      LCD VSS pin to ground
      LCD VCC pin to 5V
      10K resistor:
      ends to +5V and ground
      wiper to LCD VO pin (pin 3)

     Library originally added 18 Apr 2008
     by David A. Mellis
     library modified 5 Jul 2009
     by Limor Fried (http://www.ladyada.net)
     example added 9 Jul 2009
     by Tom Igoe
     modified 22 Nov 2010
     by Tom Igoe
     modified 7 Nov 2016
     by Arturo Guadalupi

     This example code is in the public domain.

     http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld

   */

   // include the library code:
   #include <LiquidCrystal.h> //LCD module
   #include <Wire.h> //RTC
   #include "RTClib.h"
   RTC_Millis rtc;
   #include <SoftwareSerial.h> //DF
   #include <DFMiniMp3.h>

   //====================LCD==============================//
   const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
   LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
   //====================DF============================//
   class Mp3Notify
   {
     public:
       static void OnError(uint16_t errorCode)
       {
         // see DfMp3_Error for code meaning
         Serial.println();
         Serial.print("Com Error ");
         Serial.println(errorCode);
       }

       static void OnPlayFinished(uint16_t globalTrack)
       {
         Serial.println();
         Serial.print("Play finished for #");
         Serial.println(globalTrack);
       }

       static void OnCardOnline(uint16_t code)
       {
         Serial.println();
         Serial.print("Card online ");
         Serial.println(code);
       }

       static void OnCardInserted(uint16_t code)
       {
         Serial.println();
         Serial.print("Card inserted ");
         Serial.println(code);
       }

       static void OnCardRemoved(uint16_t code)
       {
         Serial.println();
         Serial.print("Card removed ");
         Serial.println(code);
       }
   };

   // instance a DFMiniMp3 object,
   // defined with the above notification class and the hardware serial class
   //
   DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial);
   int alarm_jam = 0;
   int alarm_menit = 0;
   int alarm_detik = 0;

   void setup() {
     pinMode(2, OUTPUT); //menentukan output atau input pada pin digital
     //==================LCD==============================//
     lcd.begin(16, 2); //menentukan jenis lcd

     //=====================RTC=====================//
     Serial.begin(9600); //menampilkan di baudrate
     rtc.begin(DateTime(__DATE__, __TIME__));

     //=======================DF=======================//

     Serial.println("initializing...");

     mp3.begin();

     uint16_t volume = mp3.getVolume();
     Serial.print("volume ");
     Serial.println(volume);

     uint16_t count = mp3.getTotalTrackCount();
     Serial.print("files ");
     Serial.println(count);

     Serial.println("starting...");
   }

   void waitMilliseconds(uint16_t msWait)
   {
     uint32_t start = millis();

     while ((millis() - start) < msWait)
     {
       // calling mp3.loop() periodically allows for notifications
       // to be handled without interrupts
       mp3.loop();
       delay(1);
     }
   }

   void loop() {
   //  if (analogRead (A0) == 721)
   //  {
   //    lcd.setCursor(12, 0);
   //    lcd.print(analogRead(A0));
   //    digitalWrite(2, LOW);
   //  }
   //  else {
   //    digitalWrite(2, HIGH);
   //    lcd.setCursor(12, 0);
   //    lcd.print(analogRead(A0));
   //  }
     DateTime now = rtc.now();

     // calculate a date which is 7 days and 30 seconds into the future
     DateTime future (now.unixtime() + 0  * 86400L + 60);
     lcd.setCursor(0, 0); //menentukan munculnya huruf pertama kolom 0 baris 0

     lcd.print(future.hour());
     lcd.print(':');
     lcd.print(future.minute());
     lcd.print(':');
     lcd.print(future.second());
     //========================LCD=====================//
     lcd.setCursor(0, 1); //menentukan munculnya huruf pertama kolom 0 baris 1

     lcd.print(future.day(), DEC);
     lcd.print('/');
     lcd.print(future.month(), DEC);
     lcd.print('/');
     lcd.print(future.year(), DEC);
     lcd.print(' ');
     alarm_jam = (future.hour());
     alarm_menit = (future.minute());
     alarm_detik = (future.second());
     //--------------------------Setting alarm 1-------------------//
     if (alarm_jam == 21) {
       if (alarm_menit == 55) {
         if (alarm_detik == 50) {
           mp3.playMp3FolderTrack(4);  // sd:/mp3/0001.mp3
           set_alarm();

         }
       }
     }
     //--------------------------setting alarm 2----------//
     if (alarm_jam == 21) {
       if (alarm_menit == 25) {
         if (alarm_detik == 05) {
           mp3.playMp3FolderTrack(5);  // sd:/mp3/0001.mp3
           set_alarm();

         }
       }
     }
     //----------------------------setting alarm 3---------//

     if (alarm_jam == 20) {
       if (alarm_menit == 53) {
         if (alarm_detik == 35) {
           mp3.playMp3FolderTrack(6);  // sd:/mp3/0001.mp3
           set_alarm();

         }
       }
     }
     //------------------------setting alarm 4---------------//
     if (alarm_jam == 20) {
       if (alarm_menit == 53) {
         if (alarm_detik == 45) {
           mp3.playMp3FolderTrack(7);  // sd:/mp3/0001.mp3
           set_alarm();

         }
       }
     }
     delay(1000);
     lcd.clear();
   }

   void set_alarm() {

     //for(int i=0;i<60;i++){
     mp3.setVolume(500);
     lcd.setCursor(0, 0);
     lcd.print("Alarm 1     ");

     waitMilliseconds(1000);

     //}

     //serial.println(); //menampilkan di baudrate (enter)
   }

   void printDigits(int digits) {
     // utility function for digital clock display: prints preceding colon and leading 0
     lcd.print(":");
     if (digits < 10)
       lcd.print('0');
     lcd.print(digits);
   }

   /*  code to process time sync messages from the serial port   */
   #define TIME_HEADER  "T"   // Header tag for serial time sync message

   unsigned long processSyncMessage() {
     unsigned long pctime = 0L;
     const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013

     if (Serial.find(TIME_HEADER)) {
       pctime = Serial.parseInt();
       return pctime;
       if ( pctime < DEFAULT_TIME) { // check the value is a valid time (greater than Jan 1 2013)
         pctime = 0L; // return 0 to indicate that the time is not valid
       }
     }
     return pctime;
   }

Selamat mencoba.


Referensi:

RTC

DFPlayer Mini

RTC DS3231


background

Gabung CodePolitan Membership

Ingin belajar coding secara online dengan lebih terarah? Gabung sekarang dalam program Premium Membership di CodePolitan. Dapatkan ratusan modul belajar pemrograman premium dalam beragam format dengan materi silabus lengkap dan tersusun rapi dari awal hingga mahir.

LIHAT MATERI BELAJAR GABUNG MEMBERSHIP