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
//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 "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 <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 <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, TXDFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
sip, ready.. sekarang penggabungan
bagian setup program
#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 yaint 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, TXDFRobotDFPlayerMini 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”
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 <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, TXDFRobotDFPlayerMini 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... ”);
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 <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, TXDFRobotDFPlayerMini 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... ”);
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(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
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.
14 komentar:
Mantap gan,bisa contohin 3 relay,2 sensor pir,2 sensor Ultrasonic
ok sip mas, di tunggu deh. mas sendiri mau rencana bikin apa nih... tas berjalan ya... xixixixi...
kira2 tengah bulan depan kita update deh, dah lama juga nggak update.
Boleh bertanya nggak soal program
Boleh kok mas... Mengenai apa ya.?
Mantep gan ilmunya. Ane boleh tanya gan utk menggabungkan kontrol relay dengan bluetooth dan remot ir dan juga bisa utk kontrol tv itu gmna ya gan ane coba gagal trus mhn bimbingannya gan... Trims
Kalau kontrol relay dengan bluetooth masih mungkin om. Tapi kalau IR TV bergantung mereknya om. Lain TV lain pulsa dan frekwemsi yg di gunakan.
mas mau tanya, g mna cara menggabungkan sensor PH, TDS, dan suhu biar bisa tampil bersamaan di lcd? sy sdh coba tpi error terus.mksh sblmnya
OK. pertama kita ambil pembacaan sensor masing2 pada inisialisasi program.
kemudian kita ambil juga masing2 pada bagian setup() program. lanjut ke bagian looping() program.
pada bagian inisialisasi program perhatikan pin yang di pakai. jangan sampai memakai pin yang sama untuk setiap sensornya.
aktifkan sensor tersebut di bagian setup() program
pada bagian looping() program hilangin dulu semua yang berbau LCD.
nah pada bagian terakhir program baru deh atur bagian LCD. di kolom dan baris ke berapa kita menampilkan nilai sensornya.
maaf, g sempat nulis banyak... :D
Mas bantu buatin program sensor ultrasonic debgan sensor vibration.. gk paham2 gabungin 2 sketch programnya
Lengkap banget brayyy :v.. thangkyu. bisa jadi referensi nih
@Nasakun Tengkiu bro...
saya mau tanya mas,saya membuat charger solar pwm terus saya mau saya kasih alarm gmn ya mas soalnya udah coba berkali2 koq belum berhasil
min boleh nanya ? ada kontak yang aktif ?
mas boleh minta tolong,, gmn cara buat coding 2 alat,, fungsinya Running text dan LED.. miniatur lampu lalu lintas yang sekalian pake Running text juga, mohon dibantu Guru ^_^
Posting Komentar