Anda di halaman 1dari 27

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 1

BAB I
PENGENALAN DASAR ARDUINO SEBAGAI
MIKROKONTROLER

1. Definisi Mikrokontroler

Mikrokontroler memiliki arti pengendali mikro. Disebut sebagai pengendali mikro


karena mikrokontroler secara fisik adalah sebuah keping kecil yang merupakan
komponen elektronika terintegrasi, dan dalam aplikasinya mikrokontroler
berfungsi untuk mengendalikan sebuah pekerjaan tertentu secara terprogram.
Mikrokontroler adalah single chip komputer yang memiliki kemampuan untuk
diprogram dan digunakan untuk tugas-tugas yang berorientasi kendali.
Mikrokontroler muncul dengan dua alasan utama, yaitu kebutuhan pasar dan
perkembangan teknologi baru . Yang dimaksud dengan kebutuhan pasar adalah
kebutuhan yang luas dari produk-produk elektronik akan perangkat pintar sebagai
pengendali dan pemroses data. Sedangkan yang dimaksud dengan perkembangan
teknologi baru adalah perkembangan teknologi semikonduktor yang
memungkinkan pembuatan chip dengan kemampuan komputasi yang sangat cepat,
bentuk yang semakin kecil, dan harga yang semakin murah.

Gambar 1.1 Berbagai Jenis Gambar 1.2 Berbagai jenis Arduino


Mikrokontroler
2. Arduino sebagai Mikrokontroler

Arduino merupakan perangkat kit mikrokontroler yang sudah dipasang pada


board I/O. Arduino memudahkan pengguna dalam menggunakan mikrokontroler
tidak hanya pada sisi hardware namun juga pada sisi software. Ardunio terdiri
dari beberapa jens, namun yg membedakan hanya fitur-fiturnya saja sedangkan
dari segi pemrograman sama saja. beberapa type tersebut antara lain : Arduino
Uno, Nano, Pro mini, Arduino Leonardo, Arduino Due dan lain-lain.
Kelebihan Arduino antara lain :
- Mudah digunakan , cocok sekali untuk pemula maupun Mahir
- Fungsi Library ( code program tinggal pakai) untuk mengakses hardware sangat
banyak. Hardware-hardware tersebut antara lain bluetooth, berbagai macam sensor,
GSM board, GPS , dan lain-lain.

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 2


Gambar 1.3 Arduino Uno Board [1]
Dari gambar diatas dapat dilihat bahwa Arduino merupakan sebuah mikrokontroler yang
dipasang pada sebuah board dengan fungsi tambahan berupa Power Regulator, I/O Pin
Blackhousing, USB Port Serial Communication, Tombol reset, dan ISP pin.

3. Dasar Pemrograman Pada Arduino

Yang di butuhkan dalam memprogram arduino uno :


- Compiler / IDE Arduino (wajib)
- Menggambar board Aplikasi (option)

a) Memulai pogram dasar arduino


Arduino memiliki struktur utama yaitu terdiri dari dua baris fungsi yaitu fungsi setup
dan fungsi loop

void setup(){
//semua kode didalam fungsi ini akan dieksekusi sekali oleh arduino
yaitu ketika startup atau ketika perangkat baru dinyalakan
}

void loop (){


//semua kode didalam fungsi ini akan dieksekusi berulang kali(terus
menerus) oleh arduino
}

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 3


Semua kode program yang ada dalam void setup akan dibaca sekali oleh Arduino.
Biasanya isinya berupa kode perintah untuk menentukan fungsi pada sebuah pin.

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.

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 4


if(kondisi_1)
{
Rutin_A ;
}
else if(kondisi_2)
{
Rutin_B ;
}
else {
Rutin_C ;
}

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.

f) Penentuan Pin Arduino sebagai Input Output (I/O)


Digunakan untuk pemrograman yang menggunakan Pin Digital pada Arduino. Input pada
Arduino menyatakan pin tersebut akan berfungsi sebagai masukan, masukan pada
arduino dapat berupa digital maupun Analog. Sedangkan jika diset sebagai output, maka
pin Arduino tersebut akan berfungsi sebagai keluaran digital yang bernilai 0 dan 1. Untuk
mengatur pin arduino sebagai input atau output, maka dalam pemrograman digunakan
kode sebagai berikut :
pinMode(pin, mode);
Kode diatas digunakan untuk seting mode pin. Pin adalah nomer pin yang akan
digunakan, pada Arduino Uno pin Digitalnya dari 0-13. dan mode sendiri bisa berupa
INPUT atau OUTPUT.

Contoh kodenya seperti:

pinMode(13,OUTPUT); //menentukan pin 13 sebagai OUTPUT


pinMode(13,INPUT); //menentukan pin 13 sebagai INPUT

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 5


Gambar 1.4 Arduino Uno Pinout [1]

g) Mengatur nilai luaran digital dari suatu pin

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 :

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 6


h) Membaca nilai input digital pada suatu pin
Arduino memiliki fungsi dasar membaca input digital, artinya arduino memiliki
kemampuan untuk membaca input berupa high dan low. Contoh sederhana dari fungsi
ini adalah membaca masukan berupa push button, dengan rangkaian sebagai berikut :

Gambar 1.6 Rangkaian dengan Push Button pada pin D7


Pada gambar 1.6 terlihat sebuah push button yang dihubungkan dengan ground (GND)
pada satu sisi nya, dan dihubungkan dengan pin D7 pada sisi lainnya. Sehingga ketika
push button ditekan maka akan menghubungkan pin D7 dengan GND. Hal ini
menyatakan bahwa arduino pin D7 memperoleh input berupa LOW.
pinMode (7,INPUT); // menentukan pin 12 sebagai OUTPUT
digitalRead(7); // membaca nilai pin D7

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);

a) Membaca nilai Analog


Arduino tidak hanya memiliki fungsi dasar I/O Digital, tetapi juga pin Analog to Digital
Converter, pin ini digunakan untuk mengubah nilai besaran analog yang berada pada
rentang 0-5v (atau Gnd – Vcc). Untuk penggunaan fitur ADC ini, maka setiap perangkat
wajib dihubungkan dengan pin Analog pada arduino yaitu pin A0-A5, Khusus pin A4-
A5 tidak dapat digunakan jika device IIC sudah dihubungkan dengan pin SDA SCL,
karena pin A4-A5 memilik fungsi ganda yaitu dapat sebagai pin I2C atau pin ADC.
Untuk membaca nilai analog, maka cukup dengan mengetikan kode berikut
analogRead(A0);

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 7


BAB II
SERVER, KOMUNIKASI DAN AKTUATOR

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.

: Contoh Tampilan : Cara Kerja :

Fitur :

1. MATLAB Analyze dan viasualisasi


2. Thingspeak App. Thingspeak App berfungsi untuk menyertakan code tambahan sesuai
kebutuhan IoT yang ingin dikembangkan seperti menambahkan sebuah fungsi atau prosedur
kedalam mikrokontroler yang terhubung.
3. Chart & Channel API yang interaktif untuk menampilkan hasil analisis data
4. Banyak referensi

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

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 8


terdapat 4 jenis api request yang meliputi Write a Channel Feed, Read a Channel Feed, Read
a Channel Field, Read Channel Status Updates. Setiap data yang masuk, maka akan disimpan
di server thingspeak, data tersebut dapat di export kedalam format microsoft excel dan juga
dapat dilihat dalam bentuk tampilan bermacam-macam grafik seperti pada gambar berikut :

Gambar 2.1 Tampilan Grafik Thingspeak.


2.2 Komunikasi Serial
Komunikasi serial atau yang disebut juga sebagai USART (Universal Synchronous
Asynchronous Receiver Transmiter) ialah komunikasi digital yang berkomunikasi secara bit
per bit (seri atau bergantian). komunikasi serial merupakan komunikasi yang paling sering
digunakan di arduino, hal ini karena komunikasi ini dapat dihubungkan dengan usb pada
komputer dan banyak perangkat baik sensor dan sistem transmisi menggunakan komunikasi
USART ini.

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 9


Gambar 2.1 Berbagai nilai baudrate dan kecepatan transmisi
Komunikasi USART dapat menggunakan kecepatan pengiriman yang bervariasi seperti yang
ditunjukan pada gambar 2.1, umum nya yang paling banyak digunakan di arduino dimulai dari
9600 – 115200 bps, kecepatan pengiriman serial ini disebut juga sebagai bitrate ataupun
baudrate dengan satuan bps (bit per second). Untuk dapat menggunakan komunikasi serial
maka dalam program arduino harus ada script berikut ini:
void setup() {
Serial.begin(9600);
}

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>

SoftwareSerial mySerial(3, 4); // RX, TX

void setup() {
Serial.begin(9600);
mySerial.begin(19200);
}

void loop() {
Serial.print("ABC");
mySerial.print("HELLO");
}

SoftwareSerial mySerial(3, 4) merupakan perintah untuk mengatur pin 3 sebagai Rx (receiver)


dan pin 4 sebagai Tx (atau transmiter) yang baru. Sehingga dengan metode ini maka perangkat
yang menggunakan komunikasi serial tidak
mengganggu proses flashing PC ke arduino. Untuk
menghubungkan sebuah perangkat (sensor, ataupun
aktuator) ke pin USART, maka harus bersilangan
seperti yang ditunjukan pada gambar disamping,
Koneksi antar GND wajib dilakukan untuk
menghubungkan tegangan.

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 10


2.3 Modul Komunikasi WiFi - ESP8266
Pada Modul ini, untuk komunikasi IoT akan digunakan
modul komunikasi WI-FI ESP8266, perangkat ESP8266
merupakan device yang mampu mengkoneksikan ke akses
point WIFI dan menggunakan jalur komunikasi internet
melalui akses point tersebut. Modul ini dapat di flashing
agar dapat beroperasi, pada dasar nya modul ini dapat
berjalan tanpa arduino, namun modul ini hanya memiliki
2 GPIO (General Purpose I/O ) pin, sehingga pengguna
tidak dapat menggunakan fungsi tambahan lain seperti
ADC, I2C dan lain-lain. Agar dapat bisa terhubung dengan
arduino maka menggunakan komunikasi serial USART, maka konfigurasi Pin antara dua
device tersebut dapat dilihat seperti pada gambar 2.4.

Sebelum dihubungkan dengan


rangkaian tersebut, ESP8266
perlu diflashing terlebih dahulu
dengan kode program seperti
pada Lampiran-source 1 .

Setelah dihubungkan antara dua


perangkat, selanjutnya arduino
hanya perlu mengirimkan data
serial ke ESP8266 agar dapat
berkomunikasi dengan server
IoT untuk menyipan data yang
dalam modul ini digunakan
thinspeak.com. Data yang perlu
dikirimkan ke ESP8266 berupa
data sensor sesuai dengan format
thinspeak. Gambar 2.4 Koneksi Arduino – ESP8266
#include <SoftwareSerial.h> void send_iot(int s1,intservo
s2) {
// RX, TX esp.print("~");
SoftwareSerial esp(3, 4); esp.print("/update?api_key=API_KEY_ANDA
void setup() { &field1=");
Serial.begin(9600); esp.print(s1);
esp.begin(9600); esp.print("&field2=");
connect_wifi(); esp.println(s2);
} }
void connect_wifi(){
void loop() { esp.println("~wifi_ssid");
send_iot(50,100); delay(100);
delay(1000); esp.println("~password");
} }

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 11


2.4 Aktuator motor Servo
Motor servo adalah jenis motor dc yang dapat diatur sudut putarannya, dengan menggunakan
motor servo ini, maka pengguna dapat mengatur posisi sudut dari lengan servo ini. Motor
Servo merupakan jenis motor dc, dengan sistem kendali didalamnya dan beberapa mekanikal
gear untuk mengatur sudut putar dan kekuatan torsi nya

Gambar 2.5 Mekanisme kerja servo

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

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 12


BAB III
SENSOR DAN PEMROGRAMANYA
Arduino memiliki port digital Input dan output, namun setiap port ini memiliki fungsi lain
seperti ADC, IIC, SPI, USART, Timer, Interrupt dll. Untuk komunikasi dengan sensor, dapat
menggunakan komunikasi USART, IIC , SPI dan juga dapat menggunakan ADC. Terdapat
anyak sensor yang dapat digunakan dengan arduino sebagai contoh DHT11 yang merupakan
sensor humiditas dan temperatur, GPS yang dapat dikatakan sebagai sensor posisi, MQ-2 yang
merupakan sensor Gas LPG dan CO. Pada Modul ini sensor yang akan digunakan untuk latihan
IoT adalah DHT11 dan MQ-2.

1. Sensor Kelembaban dan suhu (DHT11)

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).

Gambar Sensor DHT11 dan Pin Out

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

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 13


-Power supply: DC 3.5 – 5.5V
-Konsumsi arus: 0.3mA, standby 60μ A

Setelah diketahui pin out DHT11 selanjutnya yaitu menghubungkan arduino dengan sensor
DHT11 dengan konfigurasi kabel seperti yang ditunjukan pada gambar berikut:

Dari Gambar tersebut terlihat Pin


VCC GND sensor dihubungkan
dengan pin Digital 2. Penggunaan
pin untuk komunikasi dengan
DHT11 dapat menggunakan pin
berapapun, sebaiknya penggunaan
pin ini tidak menggunakan pin yang
memiliki fungsi khusus, contoh pin
Tx, Rx, SDA, SCL, karena sewaktu-
waktu kita membutuhkan pin
tersebut.

Untuk memprogram DHT11, Kita


dapat menggunakan library yang
sudah disediakan oleh pengembang,
untuk dapat menggunakan library
tersebut dapat menggunakan cara
seperti yang ditunjukan pada gambar
berikut yang diperoleh dengan cara klik menu Tools → manage libraries

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 14


Selanjutnya, ketiklah contoh program berikut. Lihatlah hasilnya melalui serial monitor.

#include <SoftwareSerial.h>

SoftwareSerial esp(3, 4); // RX, TX


#include "DHT.h"

// pin digital yang digunakan


#define DHTPIN 2

// saat ini saya pakai sensor DHT11.


// uncomment sensor yang diinginkan

#define DHTTYPE DHT11


//#define DHTTYPE DHT22
//#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

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");
}

Kemudian monitor hasil pengukuran tersebut diserial monitor dan thinkspeak

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 15


Kelembaban: 62.40 Suhu: 30.80
Kelembaban: 64.80 Suhu: 30.60

2. Sensor Gas MQ-2

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.

Gambar 3.2 Sensor Gas MQ-2


Spesifikasi sensor gas MQ-2
Tegangan kerja (Vcc) : 5V
Lingkungan kerja :
– suhu : 20℃±2℃
– Kelembaban udara: 65%±5%
Range konsentrasi gas yang dapat diukur:
– LPG dan propana : 200ppm-5000ppm
– butana : 300ppm-5000ppm
– metana : 5000ppm-20000ppm
– Hidrogen : 300ppm-5000ppm
– Alkohol : 100ppm-2000ppm

Grafik hubungan nilai PPM – Rs/Ro dengan jenis gas dapat dilihat pada gambar kurva berikut
ini

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 16


Gambar 3.5 Kurva Jenis gas
Untuk membaca nilai gas yang dideteksi, pin yang digunakan adalah pin Analog output (s pin)
dari sensor tersebut. Kemudian dihubungkan dengan pin Analog untuk dapat diubah ke nilai
Digital melalui ADC. Nilai ADC yang diperoleh tidak dapat langsung digunakan untuk
menentukan jenis gas, namun jika untuk menentukan apakah ada asap atau tidak maka dapat
langsung menggunakan nilai ADC yang terbaca dengan batas bawah 50. Kita dapat
menggunakan library yang sudah disediakan yang dapat di unduh di alamat berikut ini
https://github.com/labay11/MQ-2-sensor-library/archive/master.zip

Gambar 3.6 Rangkaian Arduino dan MQ-2


Untuk mengkoneksikan antara MQ-2 gas sensor dengan arduino, maka dapat menggunakan
skema rangkaian diatas. Kode agar dapat dipantau dengan thingspeak maka dapat
menggunakan kode berikut ini:

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 17


#include <MQ2.h>
#include <SoftwareSerial.h>

SoftwareSerial esp(3, 4); // RX, TX


//change this with the pin that you use
int pin = A2;
int lpg, co, smoke;

MQ2 mq2(pin);

void setup(){
Serial.begin(9600);
esp.begin(9600);
connect_wifi();
mq2.begin();
}

void loop(){

/*read the values from the sensor, it returns


*an array which contains 3 values.
* 1 = LPG in ppm
* 2 = CO in ppm
* 3 = SMOKE in ppm
*/
float* values= mq2.read(true); //set it false if you don't want to
print the values in the Serial

lpg = mq2.readLPG(); //lpg = values[0];


co = mq2.readCO(); //co = values[1];
smoke = mq2.readSmoke(); //smoke = values[2];

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");
}

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 18


BAB IV
PEMBUATAN IOT ANDROID APP DENGAN
MIT APP INVENTOR

1. MIT App Inventor


Merupakan sebuah platform yang menyediakan layanan pembuatan aplikasi android
secara online, cepat dan mudah digunakan. Aplikasi ini memberikan kemudahan
kepada penggunanya dalam membuat aplikasi android dengan fungsi fungsi dasar
melalui fitur drag and drop komponen web. MIT App inventor dapat dikunjungi
melalui laman https://appinventor.mit.edu

Gambar 4.1 Halaman situs web MIT APP Inventor

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.

Gambar 4.2 MIT App Inventor Laman App Development Tool

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 19


2. Membangun Aplikasi dengan MIT app Inventor (MIT AI)
Untuk membangun sebuah aplikasi dengan MIT AI, kita dapat memulai dengan
menyusun komponen-komponen pada halaman utama.

Gambar 4.3 Tampilan rancangan Android


Pada modul ini, akan diberikan contoh android yang
membaca 2 buah sensor yang diperoleh dari sensor
DHT11 yaitu humiditas, dan suhu. Kemudian untuk
aktuator akan digunakan mini servo yang diatur
derajat putarannya dengan aplikasi android. Untuk
Gambar 4.4
merancang desain diatas, maka atur setiap komponen seperti pada gambar 4.4.
Komponen yang digunakan terdiri dari Label, Button, web, timer dan Layout.
Pada MIT app Inventor juga terdapat pemrograman, hanya saja pemrogramannya
lebih mudah. Yaitu pengguna hanya perlu drag and drop saja blok-blok yang tersedia
di sisi sebelah kiri. Kemudian pengguna tinggal menambahkan variabel, teks, atau
nilai-nilai yang diperlukan pada program yang akan dibuat.
Untuk membuat program dengan tampilan diatas, maka dapat dibuat dengan
menggunakan blok-blok berikut ini

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 20


Pada gambar diatas dapat dilihat kita perlu mendeklarasikan variabel-variabel yang
dibutuhkan, dalam hal ini variabel ditas terdapat url_write dan url_read serta field.
Kemudian pemrograman dapat dilakukan dengan aksi Jika Maka, yaitu ketika button1 di klik,
maka web browser akan menggabungkan string url_write dengan field dan juga dilengkapi
dengan string “1” . kemudian hasil gabungan teks tersebut dipanggil dengan fungsi call.

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

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 21


© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 22
LAMPIRAN

Source 1. Sketch Kode program ESP8266


#include <ESP8266WiFi.h>
IPAddress ip(192, 168, 0, 177);

const char* host = "api.thingspeak.com";

boolean stringComplete;
String inputString;

String value = "";


int sendGet = 0;
String pswd = "";

void setup() {
Serial.begin(9600);
delay(10);

// We start by connecting to a WiFi network


while (!stringComplete)
serialEvent();

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);

while (WiFi.status() != WL_CONNECTED) {

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 23


delay(10);
Serial.print("Hubung Wifi: ");
// Serial.println(userx);
// Serial.println(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);

// Use WiFiClient class to create TCP connections


WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
Serial.println(F("Connected"));
String url = "/update?";
url += value;
Serial.print("Requesting URL: ");
Serial.println(url);

client.print(String("GET ") + url + " HTTP/1.1\r\n" +


"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 1000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}

// Read all the lines of the reply from server and print them
while (client.available()) {

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 24


String line = client.readStringUntil('\r');
Serial.print(line);
}

Serial.println();
Serial.println("closing connection");
}

// format data yang diperbolehkan diawali dengan ~ dan diakhiri dengan


// garis baru atau bs dengan menggunakan println
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
//Serial.println(inChar);
if (inChar == 126) { //~ erases string
inputString = "";
}
if (inChar != 13 && inChar != 126) {
inputString += inChar;
}
if (inChar == 13) { //13 is ASCI carriage return
stringComplete = true;
}
}
}

#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();

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 25


Serial.print("Kelembaban: ");
Serial.print(h);
Serial.print(" Suhu: ");
Serial.println(t);

unsigned long currentMillis = millis();


if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
send_iot(random(h,t),random(50,100));
}
if(currentMillis - previousMillis2 > interval2) {
previousMillis2 = currentMillis;
request();

}
serialEventx();

if (stringComplete) {

value = inputString;
if (value == 1){
pinMode(LED_BUILTIN,OUTPUT);
digitalWrite(LED_BUILTIN,HIGH);

}
else {
digitalWrite(LED_BUILTIN,HIGH);
}

void send_iot(int s1,int s2) {


esp.print("~");
esp.print("/update?api_key=XP5DBZ8YHP8TCWJ9&field1=");
esp.print(s1);
esp.print("&field2=");
esp.println(s2);
}
void request() {
esp.print("~");
esp.println("/channels/470920/fields/1/last.txt?api_key=QM6K6I
DWZPTGP1IV");
}
void connect_wifi(){
esp.println("~asd");
delay(100);
esp.println("~qwerty31");
}

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:

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 26


inputString += inChar;
}

if (inChar == 13) { //13 is ASCI carriage return


stringComplete = true;
Serial.print(inputString);
//myservo.write(inputString.toInt());
}
}
}

© UPT TIK INSTITUT TEKNOLOGI SUMATERA-2019 27

Anda mungkin juga menyukai