Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
BAB I
PENGENALAN DASAR ARDUINO SEBAGAI
MIKROKONTROLER
1. Definisi Mikrokontroler
void setup(){
//semua kode didalam fungsi ini akan dieksekusi sekali oleh arduino
yaitu ketika startup atau ketika perangkat baru dinyalakan
}
Semua kode program yang ada di void loop akan dibaca setelah void setup dan akan
dibaca terus menerus oleh Arduino. Isinya berupa kode-kode perintah kepada pin
INPUT dan OUTPUT pada Arduino. Contoh kodenya seperti:
digitalWrite(13,HIGH); //untuk memberikan 5V(nyala)kepada pin 13
digitalWrite(13,LOW); //untuk memberikan 0V (mati) kepada pin 13
Untuk membuat catatan pada program dan tidak akan dibaca oleh Arduino, dengan cara
mengetikan garis miring dua kali ( // ) kemudian mengetikan catatannya, seperti:
void loop() {
// catatan pada baris ini tidak akan dibaca oleh program
}
Tapi pemakaian tanda // hanya berfungsi untuk catatan satu baris saja, jika anda ingin
membuat catatan yang panjang yaitu berupa paragraf. Maka pertama anda ketikan /*
lalu ketikan akhir catatan anda, dan jika sudah selesai tutup dengan kode */ . Contohnya
seperti:
void loop() {
/* apapun yang anda mau ketikan disini tidak akan dibaca oleh
program sepanjang apapun anda mengetiknya
*/
}
b) Kurung Kurawal {}
Digunakan untuk menentukan awal dan akhir dari program. Karena seperti bahasa
pemrograman pada umumnya, Arduino membaca mulai dari atas hingga kebawah.
void loop() {
.... program
.... program
.... program
}
c) Titik Koma ;
Setiap baris kode pada Arduino harus diakhiri dengan tanda ;
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
digitalWrite(13, HIGH);
}
d) Logika Kondisi
Program yang digunakan untuk menentukan sebuah kondisi, dan jika kondisinya
sudah terpenuhi maka akan melaksanakan perintah yang sudah ditentukan. Dan saat
tidak memenuhi kondisinya juga ada perintah yang dilaksanakan oleh Arduino.
Pertama Arduino akan lihat Kondisi 1. Jika terpenuhi, maka akan melaksanakan
Rutin_A . Tapi jika TIDAK, Arduino akan lihat Kondisi 2. Jika terpenuhi, maka
akan melaksanakan Rutin_B .Tapi jika TIDAK juga, maka Arduino akan
melaksanakan Rutin_C
e) Perulangan
Perulangan pada arduino meliputi for, dan while.
for(int i = 0; i < #repeats; i++)
{
Rutin_berulang;
}
Kode diatas digunakan saat kita ingin mengulangi kode atau nilai dalam beberapa kali.
Penjelasan detailnya nanti akan dibahas ketika mencoba membuat projek, agar lebih
mudah dipahami.
Fungsi dasar dari setiap pin pada arduino adalah berupa digital I/O, untuk mengatur luaran
pin sebagai High dan Low adalah dengan menggunakan kode program berikut ini :
pinMode (12,OUTPUT); // menentukan pin 12 sebagai OUTPUT
digitalWrite(12,HIGH); //untuk memberikan 5V(nyala)kepada pin 12
digitalWrite(12,LOW); //untuk memberikan 0V (mati) kepada pin 12
Dalam elektronika digital, nilai High menyatakan nilai tegangan dc positif, dan pada
arduino nilai tegangan adalah +5V. Sehingga ketika kita atur nilai luaran suatu pin
Arduino sebagai High, maka ketika kita ukur tegangan pada pin tersebut akan bernilai
5V. Sedangkan Low menyatakan nilai dc yang bernilai 0v. Sehingga jika kita ukur
tegangan pada pin yang kita atur luarannya sebagai Low maka tegangan pada pin tersebut
akan terukur 0 volt. Oleh karena itu sebuah LED akan menyala jika kita hubungkan LED
dengan pin D12 Arduino Uno yang diatur High seperti pada rangkaian sebagai berikut :
Namun bagaimana jika push button tidak ditekan? Maka yang terjadi adalah tidak adanya
tegangan yang masuk pada pin D7, hal ini biasa nya disebut sebagai High Impedance
Input dan nilai tegangan pada pin D7 biasanya tidak stabil antara high dan low akibat
pengaruh dari internal mikrokontroler. Sehingga hal ini dapat mengganggu eksekusi
program. Oleh karena nya, kita perlu memastikan kondisi ketika dilepas adalah high.
Arduino memiliki fitur yang disebut sebagai Internal Pull UP, fitur ini berfungsi untuk
membuat kondisi floating menjadi high. untuk mengaktifkannya, dapat digunakan
perintah berikut ini :
pinMode (7,INPUT_PULLUP);
2.1 Server
ThingSpeak adalah platform open source Internet of Things (IOT) aplikasi dan API untuk
menyimpan dan mengambil data dari hal menggunakan protokol HTTP melalui Internet atau
melalui Local Area Network. ThingSpeak memungkinkan pembuatan aplikasi sensor logging,
aplikasi lokasi pelacakan, dan jaringan sosial hal dengan update status. ThingSpeak awalnya
diluncurkan oleh ioBridge pada tahun 2010 sebagai layanan untuk mendukung aplikasi IOT.
ThingSpeak telah terintegrasi dukungan dari numerik komputasi perangkat lunak MATLAB
dari MathWorks.
Fitur :
Untuk menggunakan Thingspeak, maka pengguna harus mendaftar terlebih dahulu, yang
kemudian melakukan pembuatan channel, dari channel tersebut pengguna akan memperoleh
API KEY. Api Key ini digunakan untuk dapat berkomunikasi antara hardware IoT dengan
thingspeak melalui jalur http, yaitu dengan mengakses url seperti berikut :
http://api.thingspeak.com/channels/470920/status.json?api_key=QM6K6_API_KEY_KV
void loop() {
Serial.print("ABC");
Serial.println("OK");
}
Serial.begin(baudrate) adalah perintah untuk mengkonfigurasi komunikasi serial yang
digunakan menggunakan baudrate seperti yang terdapat pada gambar 2.1. sedangkan pada
Arduino Uno, pin yang digunakan untuk Serial adalah pin Tx Rx atau pin Digital 0 dan 1. Pin
Tx Rx ini juga terhubung dengan IC serial to USB, sehingga ketika kita menggunakan
komunikasi serial ini pada pin Tx Rx, maka dapat mengganggu komunikasi antara PC dengan
Arduino yang juga termasuk proses flashing program komputer. Untuk mengatasi hal tersebut,
mikrokontroler dapat membangkitkan pin digital I/O menjadi pin serial, konsep ini disebut juga
sebagai software serial. Untuk mengaktifkan software serial maka :
#include <SoftwareSerial.h>
void setup() {
Serial.begin(9600);
mySerial.begin(19200);
}
void loop() {
Serial.print("ABC");
mySerial.print("HELLO");
}
Untuk dapat bekerja menuju sudut putar tertentu, servo diatur oleh arduino dengan
menggunakan sinyal PWM (Pulse Width Modulation), yaitu sinyal yang berubah-ubah lebar
pulsa nya. Lebar pulsa High motor servo adalah antara 900-2100 ms yang terdiri dari High
dan Low seperti yang ditunjukan pada gambar 2.6, Sedangkan pada pemrograman Arduino,
untuk memutar motor servo menggunakan kode program sebagai berikut :
#include <Servo.h>
Servo myservo;
void setup()
{
// motor servo menggunakan pin 9
myservo.attach(9);
}
void loop()
{ // servo berputar pada sudut 90,
int sudut = 90;
myservo.write(sudut);
delay(15);
} Gambar 2.6 Sinyal motor servo
DHT11 merupakan salah satu sensor yang dapat mengukur dua parameter yaitu suhu dan
kelembaban udara (humidity). Dalam sensor DHT11 terdapat sebuah thermistor tipe NTC
(Negative Temperature Coefficient) untuk mengukur suhu, sebuah sensor kelembaban tipe
resisitif dan sebuah mikrokontroller 8-bit yang mengolah kedua sensor tersebut dan mengirim
hasilnya ke pin output dengan format single-wire bi-directional. Ada beberapa jenis sensor
variant DHT11 yang umum dikenal, diantaranya sensor DHT21 atau DHT22. Nama lain dari
sensor ini adalah AM2302 (untuk DHT22) dan AM2301(untuk DHT21).
Kelembaban Temperatur
-Resolusi pengukuran: 16Bit -Resolusi pengukuran: 16 Bit
-Repeatability: ±1% RH -Repeatability: ±0.2℃
-Akurasi pengukuran: 25℃ ±5% RH -Range: At 25℃ ±2℃
-Interchangeability: fully interchangeable -Waktu Respon: 1 / e (63%) 10 detik
-Waktu respon: 1 / e (63%) of 25℃ 6 detik
-Histeresis: <± 0.3% RH
-Long-term stability: <± 0.5% RH / yr in
Setelah diketahui pin out DHT11 selanjutnya yaitu menghubungkan arduino dengan sensor
DHT11 dengan konfigurasi kabel seperti yang ditunjukan pada gambar berikut:
#include <SoftwareSerial.h>
void setup() {
Serial.begin(9600);
esp.begin(9600);
dht.begin();
connect_wifi();
}
void loop() {
// Baca kelembaban
float h = dht.readHumidity();
// Baca temperatur dalam celcius
float t = dht.readTemperature();
//tampilkan pada serial monitor
Serial.print("Kelembaban: ");
Serial.print(h);
Serial.print(" Suhu: ");
Serial.println(t);
// kirim data ke esp
send_iot(h,t);
//delay sesaat sebelum pembacaan selanjutnya
delay(1000);
}
void send_iot(float sensor, float sensor2) {
esp.print("~");
esp.print("/update?api_key=API_KEY_THINGSPEAK&field1=");
esp.print(sensor);
esp.print("&field2=");
esp.println(sensor2);
}
void connect_wifi(){
esp.println("~wifi_ssid");
delay(100);
esp.println("~workshop");
}
Sensor MQ-2 adalah sensor yang digunakan untuk mendeteksi gas LPG, i-butana, propana,
metana, alkohol, hidrogen dan asap. Inti dari MQ-2 adalah material yang sensitif terhadap
konsentrasi gas yang tersusun dari senyawa SnO2 atau dalam istilah kita disebut Timah (IV)
Oksida. Material ini memiliki karakteristik akan berubah konduktivitasnya seiring dengan
perubahan konsentrasi gas di sekitarnya.
Grafik hubungan nilai PPM – Rs/Ro dengan jenis gas dapat dilihat pada gambar kurva berikut
ini
MQ2 mq2(pin);
void setup(){
Serial.begin(9600);
esp.begin(9600);
connect_wifi();
mq2.begin();
}
void loop(){
send_iot(s1,s2,s3);
delay(1000);
}
void send_iot(int s1, int s2, int s3) {
esp.print("~");
esp.print("/update?api_key=API_KEY_THINGSPEAK&field1=");
esp.print(s1);
esp.print("&field2=");
esp.print(s2);
esp.print("&field3=");
esp.println(s3);
}
void connect_wifi(){
esp.println("~wifi_ssid");
delay(100);
esp.println("~workshop");
}
Untuk pembuatan aplikasi ini maka user dapat memulai dengan memilih menu create
app kemudian login dengan menggunakan akun Google. Selanjutnya pengguna akan
diarahkan ke halaman app development tool.
Pada gambar di atas merupakan respon jika web browser berhasil menerima data dan
kondisi saat error, hal ini dapat dilihat dengan kode respon internet yang jika nilainya 200,
artinya sukses mengakses url. Berikut kode lengkap untuk tampilan pada gambar 4.3
boolean stringComplete;
String inputString;
void setup() {
Serial.begin(9600);
delay(10);
if (stringComplete) {
Serial.print(inputString);
value = inputString;
inputString = "";
stringComplete = false;
}
char userx[10];
value.toCharArray(userx, sizeof(userx));
Serial.println();
Serial.println();
Serial.print("Insert Password ssid ");
while (!stringComplete)
serialEvent();
if (stringComplete) {
Serial.print(inputString);
pswd = inputString;
inputString = "";
stringComplete = false;
}
char pass[20];
pswd.toCharArray(pass, sizeof(pass));
WiFi.begin(userx, pass);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("**");
void loop() {
serialEvent();
if (stringComplete) {
Serial.print(inputString);
value = inputString;
inputString = "";
stringComplete = false;
sendGet = 1;
}
if (sendGet == 1) {
sendGet = 0;
Serial.print("connecting to Host:");
Serial.println(host);
// Read all the lines of the reply from server and print them
while (client.available()) {
Serial.println();
Serial.println("closing connection");
}
#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo;
#include "DHT.h"
#define DHTPIN 7
// RX, TX
long previousMillis = 0; // will store last time LED was
updated
long previousMillis2 = 0;
long interval = 10000; // interval at which to blink
(milliseconds)
long interval2 = 5000; // interval at which to blink
(milliseconds)
boolean stringComplete;
String inputString;
SoftwareSerial esp(3, 4);
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
esp.begin(9600);
connect_wifi();
dht.begin();
myservo.attach(9);
}
void loop() {
float h = dht.readHumidity();
// Baca temperatur dalam celcius
float t = dht.readTemperature();
}
serialEventx();
if (stringComplete) {
value = inputString;
if (value == 1){
pinMode(LED_BUILTIN,OUTPUT);
digitalWrite(LED_BUILTIN,HIGH);
}
else {
digitalWrite(LED_BUILTIN,HIGH);
}
void serialEventx() {
while (esp.available()) {
char inChar = (char)esp.read();
//Serial.println(inChar);
if (inChar == 126) { //~ erases string
inputString = "";
}
if (inChar != 13 && inChar != 126) { // add it to the
inputString: