Jumat, 30 November 2018

KONSEP MENGGABUNGKAN BEBERAPA SENSOR PADA ARDUINO BAGIAN I

Dah lama g update blog nih. Maaf Uda terlalu sebuk akhir2 ini, jadi g sempat deh. Tapi karna begitu banyak permintaan yang masuk di WA, sepertinya udah saatnya untuk update pahala. Hehehe… kok jadi lari ke pahala ya. Semoga kita semua yang membaca blog ini masuk syurga dan ditambah rejekinya ya, aammiinn…

Jadi arduino ini bermacam jenisnya, yang paling umum aja kita ambil yaitu arduino uno. Arduino Uno itu sendiri memiliki 14 pin digital dan 6 pin analog. Kita bahas sedikit ya, kali aja masih ada yang bingung apa itu pin digital dan pin analog.

Pin digital adalah pin input/output (I/O) yang hanya dapat menerima input atau mengeluarkan output digital, yaitu logika “0” dan logika “1”. Pin digital ini pun ada yang mendukung PWM ada yg tidak. Di PCB nya arduino ada tanda “~” berarti pin tersebut mendukung output PWM. PWM??? apalagi itu ya? PWM adalah singkatan dari “Pulse Widh Modulation”. Untuk bahasan PWM ini sebaiknya googling aja ya bray and sis. Dari pada nantinya kepanjangan bahasan kita. Tapi pada intinya PWM ini bisa dipakai untuk kondisi logika digital normal.

Pin analog adalah pin yang hanya dapat sebagai input analog, atau mengeluarkan output digital. Jadi kalau dia kita set sebagai input, pin ini bisa membaca tegangan secara variabel dari 0 sampai 5 volt.

Sekarang kita ke pointnya ya… Memasang beberapa sensor di satu arduino…

Perhatikan dulu blok diagram di bawah



Eh iya, modul LCD I2C, kali aja masih banyak yang belum tau. Jadi salah satu fiturnya arduino ini adalah port I2C. Port ini seperti jalan raya yang bisa dilalui berbagai jenis kendaraan yang mendukung jalan tersebut. Misalnya hanya kereta api yang tidak mendukung jenis jalan ini. Xixixi… kendaraan bro/sis. Maksdnya biar g bingung. Jadi semua modul atau sensor yang memiliki port I2C dapat di hubungkan dengan port ini. Seperti kendaraan tadi, semua memiliki plat nomor sebagai penanda data modul atau sensor tersebut. Kali kalau pengen tau lebih jauh tentang port I2C googling aja ya…, dasar Uda pemalas, xixixi...
Jadi untuk lebih hematnya port, LCD tersebut dapat di hubungkan dengan modul I2C LCD. Sehingga port yang digunakan hanya 2 port, yaitu pada port SDA dan SCL. Pin ini terdapat di port A4 untuk port SDA dan A5 untuk port SCL pada arduino Uno. Untuk arduino jenis lain terdapat pada pin yang lain lagi ya. Port A4 dan A5 ini hanya berlaku untuk arduino dengan chip ATMEGA328.

Setelah kita memasang LCD dengan hanya memakai 2 port A4 dan A5 maka kita bisa membaca sensor analog sebanyak 4 sensor, 14 sensor digital dan ditambah lagi dengan sensor lainnya yang menggunakan I2C sebaga fasilitas pembacaan datanya. Woww dong ya bro/sis, xixixixi…

Masuk ke inti deh. Jadi banyak dari kita2 sebagai pemula mencari gambar rangkaian tertentu tentang pemasangan beberapa sensor di arduino. Browsing2 penggabungan sensor cahaya, rain drop sensor, temperatur dan kelembaban, dengan output LCD. Masih di tambah juga dengan pengontrolan 2 buah relay untuk motor dan heater. Yaaa.. g ada lah di google schematic diagramnya, xixixixi… jadi untuk rangkaian tersebut mesti kita rancang sendiri. Misalnya uda rancang smart home nih. Kira2 kita menggunakan apa ya???? Uda mau rumah tersebut lampunya otomatis, jika malam hari, lampunya nyala sendiri dan siang hari lampunya mati sendiri. Trus bak mandinya juga otomatis. Misalnya air di bak udah berada pada level tertentu yang kita anggap saatnya diisi dan menyalakan pompa air. Dan otomatis mati pada saat airnya udah penuh. Jika temperatur panas, kipas nyala sendiri. Jika kita mau masuk kita mesti gesek KTP kita di pintunya dan tadaaaaa… pintunya membukak sendiri cuy. Uda juga menambahkan suara di puntu luarnya. Jika KTP tersebut adalah KTP uda, keluar suara di KTP “selamat datang uda ganteng….” dan jika uda duduk di depan TV 10 detik kemudian TV nya nyala tanpa uda tekan tombol apa2. ahhh… hausnya uda pergi ke dispenser. Pas gelas di tarok di depan dispensernya, ehh kran air nya membuka sendiri. Hanya satu nih yang uda pengen tapi blum bisa merancangnya. Ketika pengen buka baju, masih istri yang bukain. Xixixixi… porno ah…

Dari keinginan Uda di atas, bagaimana uda merancang rangkaiannya????
Lampu otomatis dulu ya. Jika hari gelap nyala sendiri dan terang mati sendiri. Kita mesti gunakan sensor cahaya. LDR kayaknya cocok utk memenuhi kebutuhan kita (“formal sekali bahasa mu Uda, xixixixi”). Yang kedua pengisian bak mandi otomatis. Disini Uda menggunakan sensor ultrasonic untuk mendeteksi ketinggian air nya. Trus uda untuk masuk rumah dengan KTP Uda menggunakan sensor RFID untuk mendeteksi KTPnya. Untuk mengucapkan selamat datang uda pakai modul MP3. dan membuka pintu nya uda pakai motor yang di kontrol oleh relay. Saat Uda duduk di depan TV dan TVnya nyala sendiri, Uda pakai sensor PIR untuk mendeteksi orang. Jika haus dispensernya ngeluarkan air sendiri, cara sederhananya Uda gunakan saklar di bawah dudukan gelasnya. Dan pengatur pembukaan krannya uda pakai relay dan valve electric 12VDC. Dan perancangan terakhir, membuka pakaian sendiri… Uda tau pasti, bro/sis pasti tau caranya, xixixixi…

Yuk bikin rangkaiannya…
Pertama sensor LDR. Sensor ini bersifat analog, semakin terang cahaya yang di terima semakin kecil tahanannya. Berarti uda pasang di pin A0. yang kedua ultrasonic. Di ping, trus kita terima echonya. Berarti sifatnya digital. Uda pasang di pin digital. Pin 2 arduino untuk pin ping pada sensor ultrasonic. Dan pin 3 arduino untuk pin echo pada sensor ultrasonic. Untuk pembacaan KTP Uda gunakan modul RFID. RFID punya pin yang identik dan harus tersambung pada pin yang sama di arduino. Pin yang ada pada modul RFID yaitu SDA, SCK, MOSI, MISO, IRQ, GND, RST, dan VCC. Seperti halnya pin I2C, modul ini pun punya port penyambungan yang sama bernama ISP. Port tersebut bernama MOSI, MISO dan SCK. Port arduino tersebut tersambung ke pin yang sama pada modul RFID. Pin MOSI pada modul RFID tersambung ke MOSI pada arduino yaitu pin 11. Pin MISO pada modul RFID tersambung ke MISO pada arduino yaitu pin 12. Dan pin SCK modul RFID pada SCK arduino yaitu pada pin 13. pin SDA pada modul RFID ke pin 10 arduino , lanjut ke pin RST modul RFID ke pin 9 arduino. Untuk modul pendeteksi gerak uda gunakan sensor PIR. Sensor ini bekerja jika mendeteksi gerak outputnya akan berlogika 1. Berarti sensor ini dipasang di port digital ya bro/sis. Tapi bisa juga sih di pasang di port analog. Sekarang uda pasangnya di port digital 8 aja ya. Saklar dispenser Uda sambungin aja ke port 7. untuk LCD Uda pakai modul I2C ya, biar portnya cukup. Berarti LCD uda sambungin ke port A4 arduino utk SDA modul I2C LCD dan A5 arduino utk SCL modul I2C LCD. Lengkap yah…

skema rangkaiannya ya…

Duuhhh… maaf bro/sis, salah bikin gambar. Untuk relay lampunya dan pompa airnya belum ke bikin. bisa di tarok di pin 0 dan 1 dengan rangkaian yang sama seperti rangkaian relay yang lain. Lain kali di update lagi deh. Tapi inti nya bro/ sis paham kan apa yang uda maksud. Berarti tinggal bagian program ya…

Karna blognya udah kepanjangan, kayaknya bahasan program kita lanjutin di “KONSEP MENGGABUNGKAN BEBERAPA SENSOR PADA ARDUINO Bagian II” deh.

Kalau ada pada bagian ini yang mau di tanyakan silahkan ya. Uda akan senang hati menjawabnya. O iya, maaf juga kalau misalnya komennya g langsung dibales. Semoga tugas akhirnya terbantu ya, aamiinn…


Sabtu, 10 Februari 2018

MENGGABUNGKAN BEBERAPA SKETCH PROGRAM ARDUINO 3 (MODUL MP3 DAN BUTTON)

Modul MP3 yang banyak beredar di sekitar kita adalah modul DFPlayer Mini. Penggunaan librarynya pun gampang. Bro and bray dapat download di https://github.com/DFRobot/DFRobotDFPlayerMini Kendalanya juga g banyak. Kita langsung cobain yuk...
Salah satu sample librarynya seperti di bawah.
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
 
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
 
  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();
 
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
 
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

Dari sepanjang sample library di atas kita cuma ambil beberapa sketch program saja untuk memplay file MP3 di dalam memory yang kita selipkan dimodulnya, yaitu deklarasi program dan setup. Ijinkan Uda memenggal programnya ya...

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo")); //Pesan ini tampilkan saat inisialisasi modul oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); //Pesan ini tampilkan saat inisialisasi modul oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
 
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    Serial.println(F("1.Please recheck the connection!")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    Serial.println(F("2.Please insert the SD card!")); //ini untuk menampilkan pesan saat modul tidak terbaca oleh ardino. Pesan ini tampil di Serial Monitor arduino IDE
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online.")); //Pesan ini tampilkan jika ardino berhasil membaca modul MP3 secara serial. Pesan ini tampil di Serial Monitor arduino IDE

 
  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3. “Intinya adalah ini!!!”
}

void loop()
{
  static unsigned long timer = millis();
 
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
 
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}


Setelah dapat intinya, yuk dibikin lebih simple lagi

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini Siap digunakan.")); //*Pesan ini tampilkan jika ardino berhasil membaca modul MP3 secara serial. Pesan ini tampil di Serial Monitor arduino IDE
 
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
}

void loop()
{
  myDFPlayer.play(1);  //Play the first mp3. “Intinya adalah ini!!!”
  delay(3000);  //undur looping program selama 3 detik (3000 mili detik)
}

Nah kita cukup mengganti nomornya ke file yang akan kita play di dalam sketch program kita. Misalnya kita membaca temperatur dari angka yang di dapat dari sensor temperatur. Atau membaca tegangan di pin analog. Atau menyebutkan “welcome” saat alat pertama kali di nyalakan. Bro and bray tentu lebih bisa berkreasi sesuai dengan yang diinginkan. Sebelumnya pada postingan menggabungkan-beberapa-sketch-program 1 kita membahas tentang penggabungan modul MP3, sensor Suhu DHT11, Modul LCD 20x4, dan sensor PIR dan memplay file temperatur yang terbaca serta penambahan pernak-pernik suaranya. Mungkin sekarang kita buat contoh yang lebih simple. Memplay file x saat tombol x di tekan. 
Persiapannya adalah rekam lah suara dari 1 sampai 5 dan masing-masing file di tempatkan pada nomornya. File suara “satu” di simpan pada file 001. Begitu selanjutnya.  Kemudian pada file 006 rekamlah suara “tombol yang ditekan adalah”. Sekarang pasang sesuai pin yang kita deklarasikan. 
Sebenarnya memang sedikit lebih enak jika di jelasin dengan gambar. Yaitu bagian antara pin Tx Arduino dengan pin Rx Modul MP3 dipasang resistor antara 2K2 - 4K7, tujuannya agar suara krek..krek..krek.. di speakernya ilang. Tapi sayang kompi Uda lagi sakit, pemulihannya lama kayaknya xixixixi(gambarnya menyusul ya bro and sis)

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

const int tombol1 = 2;
const int tombol2 = 3;
const int tombol3 = 4;
const int tombol4 = 5;
const int tombol5 = 6;

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true){
      delay(0);
    }
  }
  Serial.println(F("DFPlayer Mini Siap digunakan."));   
  myDFPlayer.volume(20);   

  pinMode(tombol1, INPUT);
  pinMode(tombol2, INPUT);
  pinMode(tombol3, INPUT);
  pinMode(tombol4, INPUT);
  pinMode(tombol5, INPUT);
}

void loop()
{
  if (digitalRead(tombol1) == HIGH) // jika tombol 1 di pencet maka
    {     
      myDFPlayer.play(6);  //play file 006 yang rekamannya “ tombol yang di tekan adalah”
      delay(3000);                 // tunggu 3 detik atau di set sendiri. Maksudnya sampai file 006 selesai di putar.
      myDFPlayer.play(1);  // kemudian play file 001 yang isi rekamannya “satu”
      delay(1000);                  // tunda 1 detik
    }
  if (digitalRead(tombol2) == HIGH// keterangannya sama dengan di atas hanya yang di play adalah file 002 yang isi rekamannya “dua”. Begitu selanjutnya
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(2); 
      delay(1000);
    }

  if (digitalRead(tombol3) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(3); 
      delay(1000);
    }

  if (digitalRead(tombol4) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(4); 
      delay(1000);
    }

  if (digitalRead(tombol5) == HIGH)
    {     
      myDFPlayer.play(6); 
      delay(3000);
      myDFPlayer.play(5); 
      delay(1000);
    }
  delay(10);
}

Begitulah penggunaan modul MP3 yang lebih tepat guna pada arduino(aduh bahasamu Udaaaa... xixixixi).

baca juga: Menggabungkan Beberapa Sketch Program Arduino 2

Sekiranya ada pertanyaan atau pun saran bisa diisi dikolom komentar deh. Jika ada pertanyaan seputar modul MP3 dan kendalanya juga boleh kok isi di kolom komentar, Uda pasti dengan senang hati membantu