Sepertinya banyak yang pengen tau nih
cara gabungin sketch program arduino. Baru contoh Menggabungkan Beberapa Sketch Program Arduino 1 ya. Kayaknya contohnya masih kurang deh. Nih
uda kasih lagi contoh yang ke dua. Misalnya uda punya dua sensor nih, satu nya
sensor PIR satunya lagi sensor temperatur. Langsung aja kita ambil dari contoh
yang pernah uda bikin.
Yang pertama untuk sensor PIR deh.
Berikut sketchnya...
const int PIRSensor =
A0;
int nilaiPIRSensor
= 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
nilaiPIRSensor = digitalRead(PIRSensor);
Serial.print(“nilaiPIRSensor:”);
Serial.println(nilaiPIRSensor);
}
Yang kedua kita ambil dari examplenya
librarynya arduino untuk sensor DHT11 yang populer. Uda punya library DHT11 yang
dapat di download disini. Kali aja ada yang belum tau cara nambahin library di
arduino IDE ya. Lain kali Uda bikini bahasan khusunya deh. Simplenya aja ya
bagi yang belum tau, buka Arduino IDE nya, klik sketch, dibawahnya
ada include library, disampingnya ada add .ZIP library. Nantinya bakal keluar
jendela baru, pilih deh file ZIP librarynya. Tinggal klik Open jadi deh. Ups... lanjut....
Nih contoh dari library
#include < SimpleDHT.h >
//variables for storing values
int
pinDHT11 = 2;
SimpleDHT11
dht11;
{
Serial.begin(115200);
}
void
loop()
{
// start working...
Serial.println("=================================");
Serial.println("Sample DHT11...");
// read without samples.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature,
&humidity, NULL))
!= SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print("Sample
OK: ");
Serial.print((int)temperature);
Serial.print(" *C,
");
Serial.print((int)humidity);
Serial.println("
H");
// DHT11 sampling rate is 1HZ.
delay(1500);
}
Sebenarnya dari
sample diatas ada sedikit masalah tentang variable nilai temperaturnya dan
kelembabannya. Variable tersebut di tarok di looping program. Lha apa lagi sih
Uda.... jadi variabel yang Uda maksud adalah penamaan register biar kitanya
tidak bingung nantinya... Aduuuhhh tambah bingung Udaaaaa... jadi variable
tersebut untuk menyimpan nilai atau angka dari pembacaan temperatur dan
kelembabannya. Kalau kita Cuma pakai untuk menampilkan nilai yang dibaca ini
melalui “Serial Monitor” dari arduino IDE nya. Kalau kita mau gabungin untuk
menyalakan kipas ya harusnya kita tarok penamaan variabelnya di pernyataan atau
deklarasi program. Jadi programnya kita robah sedikit ya menjadi.
#include < SimpleDHT.h >
SimpleDHT11
dht11;
//variables for storing values
int
pinDHT11 = 2;
int temperature = 0;
int humidity = 0;
{
Serial.begin(115200);
}
void
loop()
{
// start working...
Serial.println("=================================");
Serial.println("Sample DHT11...");
// read without samples.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature,
&humidity, NULL))
!= SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print("Sample
OK: ");
Serial.print(temperature);
Serial.print("
*C, ");
Serial.print(humidity);
Serial.println(" H");
// DHT11 sampling rate is 1HZ.
delay(1500);
}
Kita ambil examplenya LiquidCrystal lagi ya. Yang paling
familiar aja deh “HelloWord” wusshhhh....
#include <LiquidCrystal.h>
// initialize the
library by associating any needed LCD interface pin
// with the arduino
pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 =
4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,
en, d4, d5, d6, d7);
void setup()
{
// set up the LCD's number of columns and
rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop()
{
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since
counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}
Lanjuuuuttt....
Sekarang kita asumsiin kita punya LCD 20x4 harus robah yang mana
ya dari contoh library diatas?
Coba tukar di bagian “void setup()” pada “lcd.begin(16, 2);” menjadi “lcd.begin(20, 4);”
Sekarang kita mau nyalain kipas angin setelah temperatur terbaca
32°C. Berarti kita butuh satu modul lagi nih. Modul relay deh pada tau dong
relay itu buat apaan... buat nyambungin antara arduino dengan kipas angin
220VAC. Gitu deh kira2..
Modul relay tersebut aktif
malah kalau di kasih logika LOW, freak kata anak2 jaman now. Xixixix...
Cara
nyalainnya gimana Uda? Ya seperti contoh sketch blink yang ada di arduino, yuk
intip.
void
setup() {
// initialize digital pin LED_BUILTIN as an
output.
pinMode(LED_BUILTIN, OUTPUT);
}
//
the loop function runs over and over again forever
void
loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is
the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the
voltage LOW
delay(1000); // wait for a second
}
Maksudnya
gimana Uda...???
Jadi
LED_BUILTIN yang tercantum dalam UU.... eh terpasang pada pin 13 akan nyala
jika dikasih HIGH, dan mati jika dikasih LOW. Kita asumsiin sama lah dengan modul relay yang
akan kita tambahin di rangkaian kita nantinya. Bedanya pin kita tarok dimana
dan aktifnya kalau dikasih LOW.
Tapi
uda bermaksud lain. Bagaimana kalau program tersebut kita play di MP3 player.
Sepertinya MP3 player arduino yang banyak beredar di pasaran adalah
DFPlayerMini, yang librarynya dapat kita download di https://github.com/DFRobot/DFRobotDFPlayerMini. kita ambil ya sample programnya.
#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;
}
}
Ini
uda ambil dari example get started nya library DFRobotDFplayerMini. Mau kita apakan ya example-example yang kita
ambil???
Gini
deh... bagaimana kalau setelah temperatur tercapai di atas 30°C. Kipasnya
nyala. sekalian Mp3 menyebut (play) “kipas nyala om...”, dan jika temperatur di
bawah 30 kipas mati dan MP3 juga memplay file kipas mati. Sensor di sketch
paling atas adalah sensor PIR. Jika terdeteksi gerakan, maka modul MP3 memplay
file “temperatur sekarang adalah:”, “angka temperaturnya” dan “status kipas”.
Semuanya juga di tampilkan di LCD 20x4.
Yuk
mulai...
Pertama
kita ambil semua inisialisasi dari setiap example program. Bagi yang belum tau.
Inisialisasi adalah pernyataan atau deklarasi program supaya gampang dalam
pendefinisiannya.... aaaaahhhhh ribet amat. Kita g perlu teori cuy. Kita butuh
langsung praktek aja. Yuuuuukkkkk.............
Yang
pertama mengkopi bagian library dari setiap modulnya.
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
#include
"Arduino.h"
#include
"SoftwareSerial.h"
#include
"DFRobotDFPlayerMini.h"
Ok
siap. Selanjutnya deklarasi variable yang di gunakan. Langsung Uda gabung sama
librarynya ya biar jelas apa yang udah kita gabungin
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
#include
"Arduino.h"
#include
"SoftwareSerial.h"
#include
"DFRobotDFPlayerMini.h"
SimpleDHT11
dht11;
const int PIRSensor =
A0;
int nilaiPIRSensor
= 0;
int
pinDHT11 = 2;
int temperature = 0;
int humidity = 0;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,
en, d4, d5, d6, d7);
SoftwareSerial
mySoftwareSerial(9, 10); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void
printDetail(uint8_t
type, int value);
sip, ready.. sekarang penggabungan
bagian setup program
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
#include
"Arduino.h"
#include
"SoftwareSerial.h"
#include
"DFRobotDFPlayerMini.h"
SimpleDHT11
dht11;
const int PIRSensor =
A0;
int nilaiPIRSensor
= 0;
int
pinDHT11 = 6;
//pin
2 terpakai untuk LCD kita pindah ke pin 6 ya
int temperature = 0;
int humidity = 0;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,
en, d4, d5, d6, d7);
SoftwareSerial
mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void
printDetail(uint8_t
type, int value);
void setup()
{
Serial.begin(9600);
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.print("hello, world!"); // ganti aja isinya sama yang kita suka aja misalnya
”tamperatur kontrol”
mySoftwareSerial.begin(9600);
Serial.begin(115200); //pengaktifan
serial yang ini kita hapus ya, biar g bentrok ama yang atas. Kita butuhnya
cuman 1 kok (di penyempurnaan di bawah)
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
}
Penyempurnaan
tulisan pada setup biar cocok
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
#include
"Arduino.h"
#include
"SoftwareSerial.h"
#include
"DFRobotDFPlayerMini.h"
SimpleDHT11
dht11;
const int PIRSensor =
A0;
int nilaiPIRSensor
= 0;
int
pinDHT11 = 2;
int temperature = 0;
int humidity = 0;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,
en, d4, d5, d6, d7);
SoftwareSerial
mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void
printDetail(uint8_t
type, int value);
void setup()
{
Serial.begin(9600);
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.print("hello, world!"); // ganti aja isinya sama yang kita suka aja misalnya
”tamperatur kontrol”
lcd.print(" Temperatur kontrol "); // ganti aja isinya sama yang kita suka aja misalnya ”tamperatur
kontrol”
lcd.setCursor(0,
1); //
tambahin tulisannya di baris kedua
lcd.print(" kipas angin
bro ”);
lcd.setCursor(0, 2); // tambahin tulisannya di baris
ketiga
lcd.print(" bikinan ”);
lcd.setCursor(0, 3); // tambahin tulisannya di baris
ketiga
lcd.print(" sendiri
lhoo... ”);
mySoftwareSerial.begin(9600);
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
delay(3000); // biar tampil tulisan LCD nya
agak lamaan dikit
}
Selanjutnya kita gabungin looping
programnya...
Tapi kali ini kita tidak
memperbaikinya lagi, kita hanya ambil inti dari program tersebut. Soalnya jadi
kepanjangan bahasnnya... xixixixi....
#include <SimpleDHT.h>
#include <LiquidCrystal.h>
#include
"Arduino.h"
#include
"SoftwareSerial.h"
#include
"DFRobotDFPlayerMini.h"
SimpleDHT11
dht11;
const int PIRSensor =
A0;
const
int pinDHT11
= 2;
const
int pinKipas
= 7;
int nilaiPIRSensor
= 0;
int temperature = 0;
int temperatur = 0;
int humidity = 0;
int mp3Kipas = 0;
String statusKipas = “”;
//penambahan
variable untuk penulisan status kipas di LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,
en, d4, d5, d6, d7);
SoftwareSerial
mySoftwareSerial(9, 10); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void
printDetail(uint8_t
type, int value);
void setup()
{
Serial.begin(9600);
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.print("hello, world!"); // ganti aja isinya sama yang kita suka aja misalnya
”tamperatur kontrol”
lcd.print(" Temperatur kontrol "); // ganti aja isinya sama yang kita suka aja misalnya ”tamperatur
kontrol”
lcd.setCursor(0,
1); //
tambahin tulisannya di baris kedua
lcd.print(" kipas angin
bro ”);
lcd.setCursor(0, 2); // tambahin tulisannya di baris
ketiga
lcd.print(" bikinan ”);
lcd.setCursor(0, 3); // tambahin tulisannya di baris
ketiga
lcd.print(" sendiri
lhoo... ”);
mySoftwareSerial.begin(9600);
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(20); //Set volume value. From 0 to 30
myDFPlayer.play(93); //Play the first mp3
delay(3000); // biar tampil tulisan LCD nya
agak lamaan dikit
}
void loop()
{
//pertama kita
atur dulu tampilan di LCDnya
lcd.clear(); //untuk membersihkan tulisan sebelumnya yang melekat pada LCD
lcd.setCursor(0, 0);
lcd.print(“Kipas Kontrol”);
lcd.setCursor(0, 1);
lcd.print(“temperatur: ”);
lcd.print(temperature);
lcd.setCursor(0, 2);
lcd.print(“kelembaban: ”);
lcd.print(humidity);
lcd.setCursor(0, 3);
lcd.print(“kipas: ”);
lcd.print(statusKipas);
nilaiPIRSensor = digitalRead(PIRSensor);
Serial.print(“nilaiPIRSensor:”);
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature,
&humidity, NULL))
!= SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print("Sample
OK: ");
Serial.print(temperature);
Serial.print("
*C, ");
Serial.print(humidity);
Serial.println(" H");
temperatur
= temperature; //kita masukkan isi variable temperature ke variabel
temperatur
if (temperatur > 30) //logika pengaturan kipas angin
dengan aktif low
{
digitalWrite (pinKipas, LOW);
statusKipas = “nyala”;
mp3Kipas
= 91;
}
else
{
digitalWrite (pinKipas, HIGH);
statusKipas = “mati”;
mp3Kipas
= 92;
}
if(nilaiPIRSensor == 1)
{
myDFPlayer.play(94);
myDFPlayer.play(temperatur);
myDFPlayer.play(mp3Kipas);
}
}
Sekarang
rekam suara per file. “satu” simpan di file 001 dengan format mp3, selanjutnya “dua”
dan simpan di file 002, dan selanjutnya sampai 50. Dengan asumsi temperatur tertinggi
hanya sampai 50. Atau sekiranya bro dan bray betah silahkan sampai 90. File 091
isi dengan suara “kipas nyala”, file 092 isi dengan suara “kipas mati”, dan
file 093 dengan suara “mesin pengatur kipas otomatis”. Satu lagi, rekam juga MP3 dengan suara "temperatur sekarang adalah" dan simpan di file 094.
Masukkan
ke memory dan rangkai sesuai dengan program yang kita buat. Sayang Uda tidak
punya program gambar rangkaian di laptop. Lain kali kita update ya gambar
rangkaiannya.
Pin
yang kita pakai pada arduino yaitu
Pin
A0 ke PIR Sensor
Pin
2 ke LCD D7
Pin
3 ke LCD D6
Pin
4 ke LCD D5
Pin
5 ke LCD D4
Pin
6 ke DHT11. Silahkan googling dulu deh mengenai cara pemasangannya. Tutornya nyusul
ya bray
Pin
9 ke DFPlayer mini TX
Pin
10 ke DFPlayer mini RX
Pin
11 ke LCD E
Pin
12 ke LCD RS
Satu
lagi hal penting nih. Kalau bro dan sis ngopiin koding di atas di jamin error
deh. Jadi harus di modif dikit soal penulisan tanda kutip dua (“). Di hapus
trus di ketik ulang lagi, atau bisa download di disini Semoga berhasil yaaa.....
Seandainya masih kurang, klik lagi link ini deh brai untuk contoh ke 3
Sekiranya
ada kendala dalam rangkaian atau programnya bisa tanya langsung deh di kolom
komentar. Uda pasti denga senang hati menjawabnya.