Description

10. Proyek Kendali Jarak jauh dengan Arduino

10. PROYEK KENDALI JARAK JAUH DENGAN ARDUINO

Dengan Arduino memungkinkan kita untuk mengendalikan alat secara jarak (remote control) jauh melalui berbagai media transmisi baik dengan kabel maupun tanpa kabel (wireless). Contohnya: infrared, bluetooth, SMS, TCP/IP kabel LAN dan Iain-lain.

Media transmisi tergolong menjadi dua, yaitu:

  • Media Wireless, artinya untuk menghubungkan antara pengendali dan microcontroller menggunakan media tanpa kabel. Contohnya adalah media gelombang radio (bluetooth, SMS, GPS, WiFi), infrared (remote IR, kartu RFID), gelombang suara (voice detection).
  • Media Kabel, artinya untuk menghubungkan antara pengendali dan microcontroller menggunakan media kabel baik secara serial maupun paralel.

Gambar 10.1 Blok Kendali Jarak Jauh pada MCV Arduino

Dari blok Gambar 10.1 tampak bahwa MCU (Micro Controller Unit) Arduino merupakan pusat dari input (pembacaan sensor), pemrosesan, dan output berupa tampilan ke layar (LCD, OLED) atau bentuk aktifitas mekanik seperti kendali motor.

Pada proyek-proyek sebelumnya kita sudah bisa mengendalikan sebuah alat dengan tombol saklar, sensor dan lain-lain yang posisinya berdekatan dengan microcontroller Arduino itu sendiri. Kemudian bagaimana jika alat tersebut dikendalikan secara jarak jauh? jawabnya adalah bisa, asalkan disisi Arduino ditambahkan modul penerima (receiver) dan atau pengirim (transmitter) dengan jenis media transmisi dan protocol-nya dipilih sesuai kebutuhan. Intinya adalah bisa saling bertukar data antara perangkat satu dengan lainnya.

Pada bagian ini akan dibuat beberapa proyek sederhana yang memanfaatkan kontrol jarak jauh dengan menggunakan berbagai jenis media dan protocol yang berbeda

10.1 Membaca Kode Alamat Tombol Remote IR (Infrared)

Sebelum memanfaatkan Remote Infrared sebagai pengendali jarak jauh, Arduino terlebih dahulu harus memahami kode setiap tombol remote. Oleh karena itu setiap tombol remote IR harus dipetakan terlebih dahulu oleh Arduino untuk digunakan sesuai kebutuhan. Setiap jenis remote IR memiliki kode tombol berbeda-beda meskipun fungsinya sama.

Proyek ini membutuhkan sebuah Remote IR sebagai pengirim kode tombol remote seperti tampak pada gambar 10.4 dan sensor IR Receiver seri TL1838 atau VS1838B sebagai penerima seperti tampak pada Gambar 10.2 dan Gambar 10.3

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
Sensor penerima (IR Photodiode) 1 pcs TCI 838 / vsn 838B
Remote IR: Remote STB UseeTV Indiehome. Anda dapat menggunakan remote jenis lain bebas 1 pcs

Diagram Sketch

Sensor IR mendapat tegangan 3,3volt, signal IR dihubungkan ke pin D2 Arduino. Proyek remote IR membutuhkan library IRemote.h yang dapat di https://github.com/z3t0/Arduino-Irremote/archive/master.zip. Kemudian install library Arduino-lrremote-master.zip dari menu Sketch -> Include Library -> Add .zip Library

Kode Program

#include <IRremote.h>

int pinIR = 2; // Sensor Penerima IR

IRrecv PenerimaIR(pinIR);

decode_results hasil;

void setup() {

Serial.begin(9600);

// Mulai menerima signal

PenerimaIR.enableIRIn();

}

void loop() {

if (PenerimaIR,decode(&hasil)){

Serial.print(“Kode =“);

Serial.println(hasil.value); // Tampilkan kode alamat tombol

PenerimaIR.resume();

}

delay(100);

}

}

Selanjutnya jalankan aplikasinya, kemudian buka Serial Monitor di menu Tools -> Serial Monitor.

Gambar 10.5 Menu Serial Monitor

Petakan setiap kode tombol remote dengan cara menembakkan remote IR ke sensor penerima IR. Sambil menekan setiap tombol pada remote IR, Anda mencatat kode tombol yang tertera pada serial Monitor, Seperti tampak pada Gambar 10.6

Gambar 10.6 Hasil Pembacaan Tombol Remote IR UseeTV

Khusus remote IR UseeTV yang menjadi bahan percobaan diperoleh pemetaan kode tombol seperti tampak pada Tabel 10.1. Sedangkan untuk remote yang berbeda akan dihasilkan pembacaan kode berbeda pula.

10.2 Kendali LED Dengan Remote IR & Menampilkan Jenis Tombol Ke LCD 12C

Berdasarkan proyek pembacaan kode tombol remote IR sebelumnya, selanjutnya kita kembangkan menjadi lebih kompleks, yaitu menghidupkan LED melalui remote IR dengan skenario sebagai berikut:

  • Jika ditekan tombol angka 1 pada remote maka LED I akan menyala,
  • Jika menekan tombol angka 2 pada remote maka LED I, LED 2 menyala begitu seterusnya.
  • Jika ditekan tombol Power maka semua LED akan mati.
  • Semua jenis tombol yang di tekan pada remote akan ditampilkan pada layer lCD I2C

Kebutuhan Bahan

Diagram Sketch

Perhatikan bahwa VCC sensor IR mendapat tegangan 3.3volt dari Arduino bukan 5volt. Jika Anda salah mengubungkan akan menyebabkan kerusakan pada sensor IR TL1838/VS1838B.

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <IRremote.h>

// set alamat LCD ke 0x27 untuk ukuran tampilan 16 karakter 2 baris

Liquidcrystal_I2C lcd(0x27, 16, 2);

int pinIR = 8; // Sensor Penerima IR – Pin Arduino no 8

int LED1 =2, LED2 = 3, LED3 = 4, LED4 = 5, LED5 = 6,LED6=7;

IRrecv PenerimaIR(pinIR);

decode_results hasil;

void setup(){

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(LED3, OUTPUT);

pinMode(LED4, OUTPUT);

pinMode(LED5, OUTPUT);

pinMode(LED6, OUTPUT);

lcd.init(); // inisialisasi LCD

lcd.backlight(); // aktifkan backlight dan siap tampilkan pesan

lcd.setCursor(0,0);

lcd.print(“Proyek Remote”);

lcd.setCursor(0,1);

lcd.print(“Tekan Tombol”);

// Mulai menerima signal

PenerimaIR.enableIRIn();

}

void TampilLCD(String kode, String jenis){

lcd.clear();

lcd.setCursor(ø, 0);

lcd.print(“Kode“ + kode);

lcd.setCursor(0, 1);

lcd.print(jenis);

}

void loop(){

if (PenerimaIR.decode(&hasil)){

String KodeTombol=String(hasil.value);

if(KodeTombol ==“1303526340″) {

TampilLCD(KodeTombol,“Power”);

//matikan semua LED

digitalwrite(LED1,LOW);

digitalwrite(LED2,LOW);

digitalwrite(LED3,LOW);

digitalwrite(LED4,LOW);

digitalwrite(LED5,LOW);

digitalwrite(LED6,LOW);

} else if (KodeTombol == “1303525830”) {

TampilLCD(KodeTombol,“Mute”);

} else if (KodeTombol ==“1303511550”){

TampilLCD(KodeTombol,“Volume Naik”);

} else if (KodeTombol ==“1303554390”){

TampilLCD(KodeTombol,“Play/Pause”);

} else if (KodeTombol ==“1303544190”) {

TampilLCD(KodeTombol,“Volume Turun”);

} else if (KodeTombol ==“1303540620”) {

TampilLCD(KodeTombol,“OK”);

}else if (KodeTombol ==“1303532460”) {

TampilLCD(KodeTombol,“Panah Atas”);

} else if (KodeTombol ==“1303530420”) {

TampilLCD(KodeTombol,“Panah Bawah”);

} else if (KodeTombol ==“1303550310”){

TampilLCD(KodeTombol,“Panah Kiri”);

} else if (KodeTombol ==“1303544700”) {

TampilLCD(KodeTombol,“Panah Kanan”);

} else if (KodeTombol ==“1303552860”) {

TampilLCD(KodeTombol,“Return”);

} else if (KodeTombol ==“1303515630”) {

TampilLCD(KodeTombol,“Menu”);

} else if (KodeTombol ==“1303527870”) {

TampilLCD(KodeTombol,“Home”);

} else if (KodeTombol ==“1303529910”) {

TampilLCD(KodeTombol,“Angka 1”);

digitalwrite(LED1,HIGH);

} else if (KodeTombol ==“1303562550”){

TampilLCD(KodeTombol,“Angka 2”);

//hidupkan dua LED

digitalwrite(LED1,HIGH);

digitalwrite(LED2,HIGH);

} else if (KodeTombol ==“1303524300”){

TampilLCD(KodeTombol,“Angka 3”);

//hidupkan tiga LED

digitalwrite(LED1,HIGH);

digitalwrite(LED2, HIGH);

digitalwrite(LED3,HIGH);

} else if (KodeTombol == “1303540110”) {

TampilLCD(KodeTombol,“Angka 4”);

//hidupkan empat LED

digitalwrite(LED1, HIGH);

digitalwrite(LED2, HIGH);

digitalwrite(LED3, HIGH);

digitalwrite(LED4, HIGH);

} else if (KodeTombol == “1303572750”) {

TampilLCD(KodeTombol,“Angka 5”);

//hidupkan lima LED digitalwrite(LED1, HIGH);

digitalwrite(LED2, HIGH);

digitalwrite(LED3, HIGH);

digitalwrite(LED4, HIGH);

digitalwrite(LED5, HIGH);

} else if (KodeTombol == “1303516140”) {

TampilLCD(KodeTombol, “Angka 6”);

//hidupkan keenam LED

digitalwrite(LED1, HIGH);

digitalwrite(LED2, HIGH);

digitalwrite(LED3, HIGH);

digitalwrite(LED4, HIGH);

digitalwrite(LED5, HIGH);

digitalwrite(LED6, HIGH);

} else if (KodeTombol ==“1303531950”) {

TampilLCD(KodeTombol, “Angka 7”);

} else if (KodeTombol ==“1303564590”) {

TampilLCD(KodeTombol, “Angka 8”);

} else if (KodeTombol == “1303520220”) {

TampilLCD(KodeTombol, “Angka 9”);

} else if (KodeTombol == “1303542660”) {

TampilLCD(KodeTombol, “Titik.”);

} else if (KodeTombol == “1303568670”) {

TampilLCD(KodeTombol, “Angka 0”);

} else if (KodeTombol ==“1303575300”) {

TampilLCD(KodeTombol, “Back Space”);

}

PenerimaIR.resume(); }

delay(100);

}

10.3 Sistem Keamanan Dengan Kartu RFID Menggunakan Sensor MFRC522

Kartu RFID (Radio Frequency Identification) berfungsi sebagai kunci digital karena setiap kartu RFID memiliki identifikasi unik yang disebut dengan TAG. RFID menggunakan sistem identifikasi melalui tranmisi gelombang radio.

Untuk itu dibutuhkan minimal dua buah perangkat, yaitu yang disebut TAG dan READER. Saat pemindaian data, READER membaca sinyal yang diberikan oleh RAD TAG.

REID TAG adalah sebuah alat yang melekat pada obyek, berbentuk kartu atay key chain seperti pada gambar 10.7 dan gambar 10.8 yang akan diidentifiköSl oleh REID READER. REID TAG dapat berupa perangkat pasif atau aktif TAG artinya tanpa battery dan TAG aktif artinya menggunakan battery. TAG lebih banyak digunakan karena murah dan mempunyai ukuran lebih kecil. TAG dapat berupa perangkat read-only yang berarti hanya dapat dibaca atau perangkat read-write yang berarti dapat dibaca dan ditulis ulang update.

Terdapat dua jenis frekwensi kerja RFID yang banyak tersedia, yaitu 13,S6MHz dan 125Khz sehingga perlu diperhatikan kesesuaian frekwensi antara RFID TAG dan RFID Reader-nya.

Skenario proyek yang akan dirancang adalah sebagai berikut:

  • Membaca TAG kartu REID yang akan ditampilkan pada Serial Monitor.
  • Kode TAG yang telah dibaca kemudian disimpan ke variabel melalui program•
  • Untuk pengujian keabsahan TAG maka akan digunakan kartu REID yang belurn tercatat.
  • Kartu REID / Key Chain didekatkan dengan modul RFID Reader (Module MFRCb22).
  • Jika TAG pada kartu sesuai maka LED Hijau akan menyala dan pada LCD muncul pesan “Password Benar!”
  • Jika TAG pada kartu tidak sesuai maka LED Merah akan menyala, buzzer speaker berbunyi dan pada LCD muncul pesan “Password Salah!”

Kebutuhan Bahan

Berikut hubungan antara pin sensor MFRC522 RFID Reader dan pin Arduino UNO :

Module MFRC522 Arduino UNO

SS/SDA/RX -> 10

SCK -> Pin 13 SCK

MOSI -> Pin 1 1 MOSI

MISOSCUTX -> Pin 12 MISO

IRO -> Tidak Terhubung

GND -> Pin GND

RST -> Pin 9

VCC -> Pin 3 ov

Pada Gambar 10.12. dibutuhkan pula library LiquidCrystal_I2C.h dengan cara instalasi yang sama.

Kode Program

Kode Program

#include <SPI.h>

#include <MFRC522.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define pinLEDMerah 2

#define pinLEDHijau 3

#define pinBuzzer 4

#define pinReset 9 // Reset rfid

#define pinss 10 // SS/SDA rfid

// Set alamat LCD ke 0x27 untuk ukuran tampilan 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27,16,2);

MFRC522 mfrc522(pinss, pinReset);

String PasswordBenar[] = {“84206dcf”, “Password2”, “Password3″};

void setup(){

pinMode(pinLEDMerah, OUTPUT) ;

pinMode ( pinLEDHijau, OUTPUT) ;

Serial.begin(9600);

SPI.begin();

mfrc522.PCD_Init();

lcd.init(); // inisialisasi LCD

lcd.backlight(); // aktifkan backlight dan siap tampilkan pesan

lcd.setCursor(0,0);

lcd.print(“ Masukkan “);

lcd.setCursor(0,1);

lcd.print(“ Password “);

}

void loop() {

if(! mfrc522.PICC_IsNewCardPresent()|| ! mfrc522.PICC_ReadCardSerial())

{

delay(50);

return;

}

String content=“”;

for(byte i=0; i < mfrc522.uid.size; i++)

{

content.concat(String(mfrc522.uid.uidByte[i] < 0x10?“θ”:“”)); content.concat(String(mfrc522.uid.uidByte[i],HEX));

}

if (content !=“”)

{

//cek pembacaan TAG ID di serial monitor

//kemudian catat sebagai password

Serial.println(“TAG ID :“ + content);

boolean statusPassword = false;

// Cek keabsahan password

for (int i = 0; i < sizeof(PasswordBenar) – 1; i++) {

if (PasswordBenar[i] == content)

{

//jika kartu RFID benar TAG 84206dcf

lcd.clear();

lcd.setCursor(0,0);

lcd.print(” Selamat “);

lcd.setCursor(0, 1);

lcd.print(“ Password Benar “);

digitalWrite(pinLEDHijau, HIGH);

digitalWrite(pinLEDMerah, LOW);

//ganti status password menjadi true

statusPassword = true;

// jika password ditemukan maka hentikan perulangan

// tidak perlu meneruskan pencarian password

break;

}else

{

statusPassword = false;

}

}

// beri pesan kesalahan sekali saja

// sehingga harus dikeluarkan dari loop

if (statusPassword == false) {

//jika kartu RFID selain TAG 84206dcf

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“ Password Anda “);

lcd.setCursor(0,1);

lcd.print(“ SALAH!!!”);

digitalwrite(pinLEDHijau, LOW);

digitalwrite(pinLEDMerah, HIGH);

tone(pinBuzzer, 200, 300);

}

//tunda 4 detik

delay(4000);

//beri pesan baru

lcd.clear();

lcd.setCursor(ø, θ);

lcd.print(“Tempelkan Kartu”);

lcd.setCursor(ø, 1);

lcd.print(“ RFID Anda “);

//matikan semua LED

digitalwrite(pinLEDMerah, LOW);

digitalwrite(pinLEDHijau,LOW);

}

}

Untuk menentukan TAG/UID RFID mana saja yang valid maka Anda harus membaca terlebih dahulu kartu RFID atau key chain yang Anda miliki. Misalnya ada tiga kartu RFID yang valid, maka satu per satu dari kartu RFID didekatkan ke sensor RFID Reader untuk dibaca, sambil membuka Serial Monitor dan mencatatnya.

Gambar 10.13 Hasil Pembacaan TAG RFID Dengan Serial Monitor

Adapun ilustrasi hasil akhir proyek tampak seperti pada Gambar 10.14

Gambar 10.14 Hasil pengujian kartu RFID

10.4 Kendali Melalui Socket TCP/IP Dengan Modul ESP8266

Proyek kali ini adalah untuk mengkomunikasikan dua perangkat, misalnya Smartphone atau komputer dengan Arduino. Mentransmisikan data string dari komputer/smartphone ke Arduino dengan protokol TCP/IP secara wireless atau tanpa kabel.

Modul ESP8266 adalah salah satu modul wireless TCP/IP yang sering dipasangkan dengan Arduino. Terdapat beberapa seri modul ESP8266 seperti tampak pada gambar 10.15. Semua modul memiliki cara kerja yang sama, perbedaanya adalah pada jumlah pin GPIO (general-purpose input/output), memori, plat logam penutup IC untuk mengurangi interferensi gelombang radio dan socket antena eksternal.

ESP-01 ESP-02 ESP-03 ESP-04 ESP-05

ESP-06 ESP-07 ESP-OS ESP-09 ESP-10

ESP-11 ESP-12 ESP-13 ESP-14

Pada dasarnya pengoperasian ESP8266 menggunakan perintah”AT+Command”,

dimana detil perintah AT Command dapat dipelajari di:

Kelengkapan layanan AT Command tergantung dari firmware (software yang tertanam pada chip) yang terinstal dalam chip ESP8266, sehingga disarankan agar pembaca membeli modul ESP8266 versi terbaru agar memperoleh firmware terbaru.

Tabel 10.1 adalah sebagian contoh perintah AT Command pada ESP8266.

Perintah AT Dasar Lapisan WiFi (Jaringan Fisik) Lapisan TCP/IP (Koneksi & Data0
AT

(uji perintah AT)

AT+CWMODE

(mode WIFI)

AT+CIPSTATUS

(informasi koneksi)

AT+RST

(restart module)

AT+CWJAP

(koneksi AP)

AT+CIF)START

(membangun koneksi TCP atau UDP port dan memulai sebuah koneksi)

AT+GMR

(info versi)

AT+CWLAP

(daftar AP yang tersedia)

AT+CIPSEND

(mengirim data)

AT+GSLP

(mode deep-sleep)

AT+CWQAP

(memutuskan diri dari AP)

AT+CIPCLOSE

(menutup koneksi TCP atau

UDP)

ATE

(enable disable echo)

AT+CWSAP

(konfigurasi mode SoftAP)

AT+CIFSR

(mendapatkan IP address lokal)

AT+CWLIF

(daftar client yang terhubung ke ESP8266 softAP)

AT+CIPMUX

(Enable multiple koneksi atau tidak)

AT+CWDHCP

(Enable/Disable DHCP)

AT+CIPSERVER

(konfigurasi sebagai server)

AT+CIF)STAMAC

(Set MAC address ESP8266 sebagai station)

AT+CIPMODE

(set mode transfer)

AT+CIPAPMAC

(Set MAC address ESP8266 sebagai softAP)

AT+CIPSTO

(set timeout server)

AT+CIPSTA

(Set IP address ESP8266 sebagai station)

AT+CIUPDATE

(update firmware melalui network)

AT+CIF)AP

(Set ip address ESP8266 sebagai softAP)

(menerima data network)

Secara infrastruktur jaringan ESP8266 dapat diposisikan menjadi 2 model arsitektur, anatra lain :

  • Sebagai Station/CIient

Jika ESP8266 terhubung dengan jaringan Wi-Fi Access Point yang sudah ada. Kelas station memiliki beberapa fitur untuk memudahkan manajemen koneksi Wi-Fi. Jika koneksi terputus maka ESP8266 akan secara otomatis terhubung kembali ke Access Point terakhir yang digunakan, setelah jaringan WiFi tersedia lagi.

  • Sebagai Soft Access Point

ESP8266 diposisikan sebagai Access Point atau sebagai penyedia jaringan WiFi bagi station. ESP8266 menyediakan fungsi serupa dengan Access Point pada umumnya kecuali ia tidak memiliki antarmuka ke jaringan kabel. Mode operasi semacam ini disebut soft access point (soft-AP). Jumlah maksimum station yang dapat dihubungkan ke soft-AP secara bersamaan dapat diatur dari 0 hingga 8, tetapi default-nya adalah 4.

  • Sebagai Station+SoftAP

ESP8266 dapat beroperasi sebagai station yang terhubung ke jaringan Wi-Fi, sekaligus juga dapat beroperasi sebagai Access Point (Soft-AP) untuk membangun jaringan Wi-Fi sendiri. Oleh karena itu kita dapat menghubungkan station lain ke modul ESP tersebut.

Umumnya terdapat dua teknik pendekatan pengembangan aplikasi socket TCP/ iP yang dapat diterapkan pada ESP8266, yaitu:

  • Teknik Web Server & Website

Teknik ini mengkomunikasikan antar perangkat komputer/smartphone dengan ESP8266 atau sebaliknya dengan menggunakan web server dan browser internet (internet explorer, chrome, firefox dan lain-lain). pada umumnya ESP8266 diposisikan sebagai web server sedangkan browser internet diposisikan sebagai client. Sebenarnya teknik ini tidak memerlukan Arduino sama sekali, cukup menggunakan ESP8266 saja sebagai web server sudah bisa beroperasi. Alur kerjanya tampak seperti pada Gambar 10.20.

Pada seri ESP8266-01 hanya memiliki 2 GPIO yang dapat difungsikan sebagai input atau output, sehingga bila proyek Anda membutuhkan lebih dari 2 GPIO untuk dioperasikan, maka sebaikanya gunakan seri ESP8266 yang lebih tinggi atau gunakan modul NodeMCU yang lebih praktis penggunaannya karena di dalam modul NodeMCU disertai antarmuka TTL USB untuk berkomunikasi dengan USB komputer saat proses pengembangan program. Gambar 10.21 adalah contoh modul NodeMCU.

Gambar 10.21 Module NodeMCU dengan ESP8266-12

Oleh karena pendektan teknik web server pada ESP8266 tidak berhubungan secara

langsung dengan Arduino, maka kali ini kita tidak membahasnya lebih lanjut. Disarankan pembaca untuk membaca dan mempelajari ESP8266NodeMCU yang difungsikan sebagai web server pada situs yang lainnya. Teknik TCP/IP Socket Server

Teknik ini memungkinkan Anda untuk membangun aplikasi Socket Server dengan ESP8266 dan Arduino sebagai penyedia layanan dan aplikasi client secara custom sesuai kebutuhan Anda tanpa bergantung pada aplikasi browser internet (internet explorer, chrome, firefox dan lain-lain). Alur kerjanya tampak seperti pada Gambar 10.22.

Proyek yang akan dibuat menggunakan pendekatan teknik TCP/IP Socket Srever, dimana modul yang digunakan adalah Arduino dan ESP8266 seri 01, terdiri dari 2 pin GPIO, pin TX, pin RX, pin VCC, pin GND dan pin Reset. Kita tidak akan menggunakan dua pin GPIO tersebut, sebagai penggantinya digunakan pin input dan output dari Arduino itu sendiri.

Sebelumnya hubungakan modul Wi-Fi ESP8266-01 dan Arduino seperti tampak pada Gambar 10.23. Disini modul ESP8266-01 akan diposisikan sebagai Access Point (SoftAP) dan Arduino sebagai pengendalinya.

Gambar 10.23 Pengkabelan Antara ESP8266 & Arduino

Arduino ESP8266

3,3V -> vcc

GND -> GND

TX -> TX / TXD

RX -> RX / RXD

3,3V -> CH_PD / EN

Buat proyek Arduino baru dengan kondisi kode program default, seperti pada gambar 10.24, kemudian jalankan programnya (lakukan proses write ke Arduino). Hal ini untuk mencegah terjadinya kegagalan konfigurasi ESP8266 disebabkan Arduino pernah tertanam program sebelumnya.

Selanjutnya buka window Serial Monitor Arduino daro menu Tools -> Serial Monnitor, Kemudia ketikkan perintah AT+Command sebagai berikut :

AT

Testing apakah AT Command telah siap

Konfigurasi Access Point nama SSID= “APKU”, Password =”AP_123456” (minimal 8 karakter), Channel =1, Metode enkripsi = WPA_PSK

AT+CIPAP_DEF=”192.168.4.1”

Konfigurasi alamat IP = “192.168.4.1”

AT+ CIFSR

MELIHAT IP Access Point

Konfigurasi DNCH, set sebagai SoftAP (Access POint), DHCP = enabled

Konfigurasi jenis koneksi, set sebagai multiple connection

Konfigurasi TCP Server, Menciptakan TCP Server set mode = 1. Port =16375

Konfigurasi UART (transmisi TX/RX) dengan baudrate=9600, databits=8, stopbits=l, parity=(), flow control=0.

Disini baudrate diturunkan, semula 115200 menjadi 9600. Karena nanti akan digunakan fitur software serial yang kemampuan transmisi datanya terbatas pada kisaran 9600.

Jika semua perintah AT sukses dilaksankan maka akan muncul perangkat Access Point ESP8266-01 baru pada daftar Wi-Fi Access Point windows seperti tampak pada Gambar 10.25.

Setelah komputer terhubung dengan Access Point ESP8266, selanjutnya uji dengan perintah ipconfig dan ping dari command prompt windows, seperti tampak pada Gambar 10.26 dan Gambar 10.27.

Sekarang kita menuju ke inti proyek, yaitu bagaimana menerima data string dari smartphone Android ke ESP8266. Dari data string tersebut akan memerintahkan Arduino untuk menghidupkan atau mematikan speaker buzzzer, sekaligus menampilkan data string ke layar OLED. Jika data string yang diterima adalah “LEDI ON” atau “LEDI OFF” maka akan menghidupkan atau mematikan LE D l‘ jika data string yang diterima adalah “LED2 ON” atau “LED2 OFF” maka akan menghidupkan dan mematikan LED 2.

Kebutuhan Bahan

Diagram Sketch

Karena pemrograman AT Command ESP8266 cukup sulit dan rentan terhadap kesalahan, maka sebaiknya gunakan library ESP8266 yang sudah teruji, agar kita lebih mudah mengoperasikan ATCommand ESP8266.LibraryESP8266.hdapatdi-download di https://github.com/itead/lTEADLlB_Arduino_WeeESP8266. Kemudian install library ITEADLlB_Arduino_WeeESP8266-master.zip pada menu Sketch<lnclude Library4Add .zip Library seperti cara sebelumnya.

Pada proyek ini tidak digunakan Hardware Serial (pin TX/RX atau pin DO dan pin DI Arduino), melainkan menggunakan Software Serial dengan pin TX/RX bebas dipilih sebagai antarmuka komunikasi antara ESP8266 dan Arduino. Oleh karena itu kita harus mengubah kode program pada file C:\Users\NamaUser\Documents\Arduino\libraries\ITEADLIB_Arduino_WeeESP8266-master\ ESP8266.h di baris ke-27 seperti berikut:

// #define ESP8266 USE SOFTWARE SERIAL

Menjadi

#define ESP8266 USE SOFTWARE SERIAL

Untuk mengubah kode program dapat digunakan aplikasi Notepad++ (https://notepad-plus-plus.org/downlqad/v7.6.6.html) atau yang serupa dengan itu. Selanjutnya buat program baru Arduino, ketikkan kode program berikut ini:

Kode Program

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <ESP8266.h>

#include <SoftwareSerial.h>

#define port 16375 // port server

#define buff 128 // jumlah karakter diterima oleh esp8266

#define OLED_RESET 7

#define pinBuzzer 4 // pin speaker buzzer

#define pinLED1 5 //pin LED 1

#define pinLED2 6 //pin LED 2

Adaruit_SSD1306 display(OLED_RESET);

//Arduiono ESP8266

//Pin 2 (RX) —-> Pin TX

//Pin 3 (TX) —-> Pin RX(gunakan resistor divider)

SoftwareSerial SerialESP(2, 3); // RX, TX

ESP8266 wifi(SerialESP);

char pesan[buff];// buffer string diterima

int8_t kounting=0;

void setup() {

pinMode(pinLED1, OUTPUT);

pinMode(pinLED2, OUTPUT);

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C(for the 128×32)

display.clearDisplay();

display.setTextSize(1);

display. setTextColor(WHITE);

display.setCursor(23, 12);

display.println(“Proyek ESP8266”);

display.display();

delay(5000);

display.clearDisplay();

TCPServer(); // Membangun TCP Server

}

void loop()

{

uint8_t buffer[buff]={Ø};

uint8_t mux_id;

uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 10000);

if(len >0)

{

display.clearDisplay();

kounting=0;

for (uint8_t í = 0; i < sizeof(pesan);++i)

{

// kosongkan semua karakter yang pernah tersimpan

pesan[i] = (char)0;

}

for (uint8_t 1=0; i< ken; i++)

{

// pindahkan karakter yang diterima ke variable pesan

pesan[i]=(char)buffer[i];

}

// konversi dari karakter ke string String str(pesan);

// proses jika string diterima tidak kosong

if(str!=“”){

if (str ==“LED1 ON”) {

// nyalakan LED 1 jika string = LED1 ON

digitalwrite(pinLED1, HIGH);

} else if (str == “LED2 ON”) {

// nyalakan LED 2 jika string = LED2 ON

digitalwrite(pinLED2, HIGH);

} else if (str ==“LED1 OFF”) {

// matikan LED 1 jika string =LED1 OFF

digitalwrite(pinLED1,LOW);

} else if (str ==“LED2 OFF”) {

// matikan LED 2 jika string = LED2 OFF

digitalwrite(pinLED2, LOW);

}

}

// aktifkan speaker buzzer jika string diterima

tone(pinBuzzer, 200,200);

// tampilkan string ke layar OLED cetak(str);

// putuskan koneksi dengan client

wifi.releaseTCP(mux_id);

}

}

void cetak(String str)

{

// function mencetak string ke OLED

// maksimal 4 baris

if (kounting >3)

{

kounting=0;

display.clearDisplay();

}

display.setCursor(ø, kounting * 8);

display.println(str);

display.display();

kounting++;

}

void TCPServer()

{

// pengujian dan setup ESP8266

(wifi.setoprToSoftAP())? cetak(“Access Point ….. OK”) : cetak(“Access Point ..ERROR”);

(wifi.enableMUX()) ? cetak(“Connection …….OK”) : cetak(“Connection···· ERROR”);

(wif.startTCPServer(port))? cetak(“Server Start…..OK”) : cetak(“Server Start.. ERROR”);

(wiñ.setTCPServerTimeout(10)) ? cetak(“Timeout 10 sec … oK”) : cetak(“Time-out…….ERROR”);

}

Jalankan Arduino dan ESP8266. Bila SoftAP ESP8266 dan TCP Server dalam kondisi siap atau kondisi Listening maka tampilannya seperti tampak pada Gambar 10.30, sebaliknya jika gagal maka akan muncul pesan “ERROR”.

Pastikan perangkat Android Anda telah terkoneksi dengan SoftAP ESP8266 dengan cara memilih Wi-Fi Access Point menjadi ‘APKU” dan ketikkan Password SSID sesuai dengan konfigurasi ESP8266 diawal pembahasan.

Selanjutnya buka aplikasi Socket Android, kirim pesan teks dari Socket Client Android ke Socket Server ESP8266. Langkah-langkahnya seperti tampak pada gambar di bawah ini.

10.5 Kendali LED Melalui Komunikasi Bluetooth HC-05/HC-06 Dan Android

Proyek kali ini kita akan memanfaatkan media transmisi bluetooth untuk mengendalikan hidup dan matinya LED pada Arduino dengan modul bluetooth HC-05/HC-06 (slave bluetooth) dan sebagai pengendalinya adalah smartphone Android (master bluetooth).

Kita tidak akan membahas bagaimana membuat aplikasi Android yang memanfaatkan bluetooth sebagai media transmisi data karena akan panjang penjelasannya, oleh karena itu kita akan menginstal aplikasi bluetooth yang banyak tersedia di Google Playstore.

Gambar 10.36 Module Bluetooth HC-06

Cara kerja program yang akan dibuat sederhana, yaitu:

  • Bluetooth HC-05/HC-06 disisi Arduino dan bluetooth di Sisi smartphone Android dalam kondisi aktif.
  • Pada Android lakukan pemindaian perangkat bluetooth lainnya, sampai menemukan daftar bluetooth yang aktif, termasuk HC-05/HC-06.
  • Jika bluetooth telah ditemukan, selanjutnya pilih bluetooth HC-05/HC-06 untuk dilakukkan proses pairing connection untuk sinkronisasi. Password secara umum adalah “1234”.
  • Setelah terbentuk komunikasi antar dua perangkat bluetooth tersebut maka kirimkan karakter ‘R’ sebagai penanda LED merah, kareakter ‘G’ sebagai penanda LED hijau dan karakter ‘Y’ sebagai penanda LED kuning dari Android ke Arduino.
  • Jika karakter diterima oleh bluetooth HC-05/HC-06 maka data dikirimkan ke Arduino untuk dilakukan proses lanjutan.
  • Jika ditemukan salah satu karakter dari tiga karakter di atas maka aktifkan pin LED Arduino dengan logika HIGH sesuai karakter yang diterima.

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
Module Bluetooth HC-05 1 pcs
Resistor 3 pcs 1 K Ohm
Resistor 3 pcs 220 Ohm
LED 5MM 3 pcs warna hijau, kuning dan hijau

Diagram Sketch

Kode Program

#include <SoftwareSerial.h>

const int LEDMerah=2;

const int LEDHijau =3;

const int LEDKuning = 4;

// Bluetooth RX -> Arduino TX pin 5

// Bluetooth TX -> Arduino RX pin 6

SoftwareSerial Bluetooth(6, 5); // RX, TX

int state=0;

void setup(){

// Hardware Serial

Serial.begin(9600);

// Software Serial

Bluetooth.begin(9600);

// Semua LED Pin Mode sebagai Output

pinMode(LEDMerah, OUTPUT);

pinMode(LEDHijau, OUTPUT);

pinMode(LEDKuning, OUTPUT);

}

void loop() {

if (Bluetooth.available() > θ)

{

// Jika Serial Bluetooth menerima byte data dari serial port

// Nilai state adalah angka tabel ascii contoh angka 65=’A’

state = Bluetooth.read();

// Menampilkan byte data ke serial monitor

Serial.println(“State =“ + state);

if (state ==’R’){

digitalwrite(LEDMerah, HIGH);

state =0; // Kembalikan ke state=0

} else if (state ==’G’){

// Hidupkan LED merah

digitalwrite(LEDHijau, HIGH);

state = 0; // Kembalikan ke state=0

} else if(state ==’Y’) {

// Hidupkan LED kuning

digitalWrite(LEDKuning, HIGH);

state=0; // Kembalikan ke state=0

else if (state ==“A”) {

// Matikan semua LED

digitalwrite(LEDMerah, LOW);

digitalwrite(LEDHijau, LOW);

digitalwrite(LEDKuning, LOW);

state=0; // Kembalikan ke state=0

}

}

}

Install terlebih dahulu aplikasi bluetooth pada Android dari Google Playstore, contohnya adalah aplikasi ‘Arduino bluetooth controller”, seperti tampak pada Gambar 10.35.

Gambar 10.37 Instalasi Aplikasi Bluetooth Android

Jalankan aplikasi Arduino, jika LED bluetooth HC-05/HC-06 terus berkedip, artinya bluetooth HC-05/HC-06 belum dilakukan pairing. Selanjutnya aktifkan perangkat bluetooth Android dan lakukan pairing untuk sinkronisasi koneksi antara bluetooth Arduino dan bluetooth HC-05/HC-06 Arduino dengan langkah-langkah berikut ini:

Jalankan aplikasi Bluetooth Android “Bluetooth Arduino COntroller” dengan ilustrasi berikut ini

10.6 Pengendali Alat Melalui Pesan SMS Dengan Modul slM800L

Modem GSM adalah jenis modem khusus yang menerima kartu SIM dan mengoperasikan langganan ke operator seluler, seperti telepon seluler. Modem GSM mendukung satu atau lebih protokol dalam keluarga evolusi GSM, termasuk teknologi 2.5G GPRS dan EDGE, serta 3G teknologi WCDMA, UMTS, HSDPA dan HSUPA. Terdapat beberapa jenis modul GSM yang mendukung antarmuka Arduino, antara lain modul modul GSM yang terpisah dari Arduino seperti tampak pada gambar 10.42 dan ada pula modul GSM yang terintegrasi dengan Arduino UNO atau model shield stack, tersusun bertumpuk seperti tampak pada Gambar 10.43.

Gambar 10.42 Modem GSM Model Tanpa Shield

Gambar 10.43. Modem GSM Mode/ Shield

Proyek kali ini kita akan menggunakan modem GSM SIM800L (Gambar 10.44) sebagai bahan percobaan karena harganya yang terjangkau dan banyak tersedia, sayangnya modul ini rental rusak.

Gambar 10.44 Modul GSM800L Tampak Bawah dan Atos

Untuk mengoperasikan modem GSM digunakan perintah AT (AT Command). Banyak jenis-jenis AT Command yang dapat dioperasikan, tergantung dari tujuan penggunaannya. Untuk lebih mudah memahami AT Command. Silahkan baca datasheet AT Command modem tipe SIM800 yang dapat di download di https://www.elecrow.com/download/SIM800%20Series_AT%20Command%20Manual_V1.09.pdf.

Skenario proyek yang akan dibuat adalah bagaimana menghidupkan dan mematikan 4 LED berbeda melalui pesan SMS, sekaligus menampilkan pesan SMS ke layar LCD1602 12C. Anda dapat mengembangkan proyek ini lebih luas, misalnya untuk menghidupkan lampu ruang tamu dengan relay, membuka atau mengunci Pintu rumah dengan solenoid seperti yang sudah dijelaskan pada bagian sebelumnya.

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
LED 5MM 4 pcs Warna beda
Resistor 4 pcs 220 Ohm Resistor LED
Resistor 1 pcs 3,3K Ohm Resistor RI pembagi tegangan
Resistor 1 pcs 10K Ohm Resistor R2 pembagi tegangan
Module Regulator

Stepdown LM2596

1 pcs
Modul LCD Unit
Modul Modem SIM800L Unit

Sketch Diagram

Module modem GSM SIM800L bekerja antara 3,4v 4,4v dengan kebutuhan yang cukup besar, sehingga kurang layak jika tegangan tersebut disuplai tegangan USB komputec Untuk kesetabilan tegangan dan arus sebaiknya dari power supply eksternal, misalnya 9 volt yang bersumber dari kemudian tegangan diturunkan/stepdown menjadi 3,7volt (ambil tengah antara 3,4 – 4,4 volt) menggunakan modul stepdown regulator tegangan DC ke DC LM2596, seperti tampak pada Gambar 10.45. Pastikan untuk melakukan justifikasi tegangan menjadi 3,7 volt sebelum modul modem GSM SIM800L terpasang.

Contoh program pada proyek ini akan menerapakan “AT Command” untuk menerima pesan SMS. Namunjika dirasa sulit, maka saya sarankan meggunakan library SIM800L agar lebih mudah pengoperasian pada Arduino. Salah satu library SIM800L yang bisa didownload adalah https://github.com/VittorioEsposito/Sim800L-Arduino-Library-revised.

Logika programnya cukup sederhana, yaitu ketika SIM800L menerima pesan SMS melalui software serial, maka Arduino akan membaca pesan SMS per karakter, sehingga perlu dibuat buffer untuk menampung sennua karakter yang selanjutnya akan digabungkan menjadi string. Dari string tersebut dibuat kondisi, jika ditemukan salah satu string sesuai dengan tabel di bawah ini, maka Arduino akan mengaktifkan atau mematikan LEI), sekaligus menampilkan pesan ke LCD dan Serial Monitor.

No string SMS Perintah Arduino
1 “MON” Hidupkan LED Merah
2 “OON” Hidupkan LED Orange
3 “KON” Hidupkan LED Kuning
4 “HON” Hidupkan LED Hijau
5 “MOFF” Matikan LED Merah
6 “OOFF” Matikan LED Orange
7 “KOFF” Matikan LED Kuning
8 “HOFF” Matikan LED Hijau

Kode Program

#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>

#define pinLedMerah 8

#define pinLedorange 7

#define pinLedKuning 6

#define pinLedHijau 5

#define RX 10 // pin 10 Arduino

#define TX 11 // pin 11 Arduino

// SIM800L >>> ARDUINO UNO

//

// GND >>> GND

// TX >>> RX pin 10

// RX (voltage divier) >>> TX pin 11

// RST >>> pin 9

//

SoftwareSerial GSMSerial(RX, TX);

// Set alamat LCD ke 0x27 untuk ukuran tampilan 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

char incomingByte;

String incomingData;

bool atCommand w true;

int index – 0;

String number=“”;

String message » “”;

void setup()

{

serial.begin(9600);

GSMSerial.begin(9600);

lcd.init(); // Inisialisasi LCD

lcd.backlight();

lcd.setCursor(0, 0);

lcd.print(“MODEM GSM SIM800”);

lcd.setCursor(0,1);

lcd.print(“ KONTROL SMS “);

pinMode(pinLedMerah, OUTPUT) ;

pinMode(pinLedOrange, OUTPUT);

pinMode(pinLedKuning, OUTPUT);

pinMode(pinLedHijau, OUTPUT);

//Cek apakah jaringan GSM telah terhubung dengan SIM800L

while (!GSMSerial.available()) {

GSMSerial.println(“AT”);

delay(1000);

Serial.println(“Connecting….”);

}

Serial.println(“Connected. .”);

//Set SMS Text Mode

GSMSerial. println(“AT+CMGF=1”);

delay(1000);

//Prosedur bagaimana menerima pesan dari jaringan

GSMSerial.println(“AT+CNMI=1,2,0,0,θ”);

delay(1000);

//Baca pesan yang belum terbaca

GSMSerial.println(“AT+CMGL=\”REC UNREAD\””);

Serial.println(“Ready to received Commands..”);

}

void loop()

{

if (GSMSerial.available()) {

delay(100);

{

// Serial buffer

while (GSMSerial.available()){

incomingByte = GSMSerial.read();

incomíngData += incomingByte;

}

delay(10);

if (atCommand == false) {

receivedMessage(incomingData);

} else {

atCommand = false;

}

//Hapus pesan untuk menghemat memori

if (íncomingData.indexof(“OK”)==-1){

GSMSerial.println(“AT+CMGDA=\”DEL ALL\””);

delay(1000);

atCommand=true;

}

incomingData =“”;

}

}

void receivedMessage(String inputString) {

//Mendapatkan nomer pengirim pesan

index = inputString. index0f(“”’) + 1;

inputString = inputString. substring(index);

index = inputString. index0f(‘”’);

number = inputString, substring(θ, index);

Serial.println(“Number: “ + number);

//Mendapatkan pesan yang diterima

index = inputString.index0f(“\n”)+1;

message = inputString.substring(index);

message.trim();

Serial.println(“Message: “ + message);

// Menjadikan uppercase pesan yang diterima message.toUpperCase();

//Menjadikan LED ON atau OFF

if (message.indexof(“MON”)>-1) {

//Jika ditemui pesan string = MON, LED merah ON

digitalwrite(pinLedMerah, HIGH);

TampilLCD(“Perintah:”,“LED Merah Hidup”);

Serial.println(“Command: LED Merah Hidup.”);

} else if (message.indexof(“OON”)>-1){

//Jika ditemui pesan string = OON, LED orange ON

digitalwrite(pinLedorange,HIGH);

TampilLCD(“Perintah:”, “LED orange Hidup”);

serial.printin(“Command: LED Orange Hidup.”) ;

} else if (message.indexof(“KON”) > -1) {

//jika ditemui pesan string = KON, LED kuning oN

digitalwrite(pinLedKuning, HIGH);

TampilLCD(“Perintah:”,“LED Kuning Hidup”);

Serial.print1n(“Command: LED Kuning Hidup.”);

} else if (message.indexof(“HON”)>-1) {

//Jika ditemui pesan string = HON, LED hijau ON

digitalWrite(pinLedHijau, HIGH);

TampilLCD(“Perintah:”,“LED Hijau Hidup”);

Serial.println(“Command:LED Hijau Hidup.”);

} if (message.index0f(“MOFF”) > -1) {

//Jika ditemui pesan string = MOFF, LED merah OFF

digitalwrite(pinLedMerah, LOW);

TampilLCD(“Perintah:”,“LED Merah Mati”);

Serial.print1n(“Command: LED Merah Mati.”);

} else if (message.indexOf(“OOFF”) > -1) {

//Jika ditemui pesan string = 00FF, LED orange OFF

digitalwrite(pinLedorange, LOW);

TampilLCD(“Perintah:”, “LED Orange Mati”);

Serial.print1n(“Command: LED Orange Mati.”);

} else if (message.indexof(“KOFF”)>-1){

//Jika ditemui pesan string = KOFF, LED kuning OFF

digitalwrite(pinLedKuning, LOW);

TampilLCD(“Perintah:”,“LED Kuning Mati”);

Serial.println(“Command: LED Kuning Mati.”);

} else if (message.indexof(“HOFF”) > -1) {

//Jika ditemui pesan string = HOFF, LED hijau OFF

digitalwrite(pinLedHijau, LOW);

TampilLCD(“Perintah:”, “LED Hijau Mati”);

Serial.println(“Command: LED Hijau Mati.”);

}

delay(50);

}

void TampilLCD(String Baris1, String Baris2){

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“SMS:” + Baris1);

lcd.setCursor(0,1);

lcd.print(Baris2);

}

Cara menguji projeknya adalah dengan mengirimkan SMS ke nomer SIM yang terpasang pada modem SIM800L. Dimana pesan SMS yang bisa dicoba antara lain: “YON I‘, “MON”, “MOFF” dan lain-lain. Anda masih bisa mengembangkan aplikasł SMS client Anda sendiri dengan Android, membungkus isi pesan SM; menjadl tombol ON/OFF, sehingga pengoperasiannya menjadi leblh praktłs karena tidak perlu menuliskan pesan SMS berulang-ulang.

10.7 Membaca Koordinat Permukaan Bumi Dengan Sensor GPS (Global Positioning System) NE06M

GPS singkatan dari Global Positioning System adalah sistem navigasi satelit yang memungkinkan pengguna mengetahui posisi geografis (lintang, bujur) dan ketinggian di atas permukaan laut. Untuk akurasi lokasi koordinat bumi disarankan penggunaan GPS sebaiknya di tempat terbuka. Penggunaan GPS di dalam ruangan atau terhalang dari arah satelit akan menyebabkan GPS tidak bekerja secara maksimal. Contoh penerapan aplikasi GPS dapat diterapkan pada sistem pertahanan militer, sistem navigasi, sistem informasi geografis, sistem pelacakan kendaraan dan lain sebagainya.

Gambar 10.46 Modul GPS NE06MV2 Gambar 10.47 Modul GPS NE06MV2

Gambar 10.48 Modul GPS NE06MV2 Gambar 10.49 Modul GPS NE06MV2

Proyek berikut ini adalah bagaimana cara untuk memperoleh informasi ordinat bumi berdasarkan posisi bujur dan posisi lintang pada permukaan bumi meggunakan sensor GPS GY-NEO6, kemudian menampilkan koordinat tersebut pada layar LCD.

Anda dapat mengembangkannya menjadi sebuah aplikasi pemetaan dengan memanfaatkan layanan google map berdasarkan koordinat bujur dan lintang permukaan bumi yang diperoleh dari GPS. Misalnya mengirim koordinat ke smartphone atau laptop untuk dipetakan Google Map dengan memanfaatkan API Ggoogle Map. Namun kali ini kita hanya menampilkan koordinat bujur dan lintang pada layar LCD saja.

Kebutuhan Bahan

Modul GPS terkadang mempunyai urutan pin berbeda antara merk satu dengan lainnya. Oleh karena itu perhatikan pin VCC, GND, TX dan RX yang akan dihubungkan ke pin Arduino. Sesuaikan hubungan keempat pin tersebut ke Arduino secara hati-hati, jika salah memposisikan pin tersebut dapat menyebabkan kerusakan modul.

Modul GPS GY-NE06MV2 Arduino UNO

Vcc -> Pin

RX -> Pin 8

TX -> Pin 9

GND -> Pin GND

Modul GPS GY-NE06MV2 menggunakan antarmuka IJART (Universal Asynchrounus Receiver Transmitter) sebagai komunikasi data. Umumnya ditandai dengan penggunaan pin TX (Transmitter) dan RX (Reciever) untuk mengirim dan menerima data. Secara hardware, Arduino menugaskan antarmuka UART pada pin DO dan pin DI dengan baud rate (keceptan transfer data) mencapai 115200bps (bit per detik).

Penggunaan antarmuka IJART secara hardware terkadang menyebabkan konflik alamat saat kita menggunakan Serial Monitor sebagai output program. Oleh karena itu kita akan memanfaatkan antarmuka UART secara software dengan kelemahan transmisi data yang terbatas (maksimum 38400bps, idealnya gunakan 9600bps). Dalam hal ini library yang digunakan adalah Softserial.h.

Pada proyek GPS ini juga membutuhkan library TinyGPS++.h yang bisa didownload di https://github.com/mikalhart[TinyGPSPlus, selanjutlanya instal file TinyGPSPIusmaster.zip dari menu Sketch-> lnclude Library-> Add .zip Library seperti cara sebelumnya.

Gambar 10.50 menambahkan Library pada Arduino

Gambar 10.51 Memilih Library Untuk Diinstal Dalam Arduino

Kode Program

#include <TinyGPS++.h>

#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>

#define RX_Arduino 8

#define TX_Arduino 9

// GPS — Arduino

// pin TX –> pin 8 (RX_Arduino)

// pin RX <– pin 9(TX_Arduino)

SoftwareSerial UART_GPS(RX_Arduino, TX_Arduino);

TinyGPSPlus gps;

// Set alamat LCD ke 0x27 untuk ukuran tampilan 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16,2);

}

void setup(){

Serial.begin(9600);

UART_GPS.begin(9600); //inisialisasi GPS

lcd.init();

lcd.backlight();

lcd.setCursor(ø,0);

lcd.print(“Proyek GPS”);

lcd.setCursor(0, 1);

lcd.print(“KOORDINAT BUMI”);

//delay(3000); // Tunda 3 detik

//lcd.clear(); // Bersihkan layer

}

double lat_lama = 0;

double long_lama = 0;

void loop(){

while (UART_GPS.available()>θ) {

gps.encode(UART_GPS. read());

if (gps.location.isUpdated()) {

double latitude = gps.location. 1at();

double longitude = gps.location.1ng();

saja.

// Tampilkan koordinat pada layar LCD saat terjadi perubahan koordinat

// Perbedaan koordinat diambil sampai pada 4 digit di belakang koma agar tidak terlalu flicker pada LCD

if (String(lat_lama, 4) != String(latitude, 4) || String(long_1ama,4)!= String(longitude,4))

{

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“LINT. : “ + String(latitude,6));

lcd.setCursor(0, 1);

lcd.print(“BUJUR: “ + String(longitude, 6));

// Menampilkan koordinat pada google map. Copy paste ke browser

String link = “http://www.google.com/maps/place/”+ String(latitude,6)+ “,”+String(1ongitude, 6) ;

Serial.print(“Link Google Maps :“);

Serial.println(link);

lat_lama = latitude;

long_lama = longitude;

// Serial monitor tetap ditampilkan sampai 6 digit dibelakang koma sehingga terus berubah karena lebih presisi

Serial.print(“Jumlah Satellite :“);

Serial.println(gps.satellites.value());

Serial.print(“Lintang : “);

Serial.println(latitude, 6);

Serial.print(“Bujur :“);

Serial.print1n(longitude, 6);

Serial.print(“Kecepatan MPH : “);

Serial.println(gps.speed.mph());

Serial.print(“Ketinggian : “);

Serial.println(gps.altitude.feet());

Serial.println(“”);

}

}

}

Dri hasil percobaan diperoleh hasil sebagai berikut :

Jika dilihat dari Serial Monitor akan tampak seperti berikut :

10.8 Komunikasi TCP/IP Melalui Ethernet LAN Dengan Modul ENC28J60

Mungkin pembaca ada yang bertanya, bagaimana cara mengkomunikasikan data antara Arduino dan komputer bila menggunakan antarmuka ethernet kabel RJ45 yang biasa ditemui pada LAN (local area network)?. Prinsip kerjanya sama dengan pembahasan Bab 10.4 tentang ESP8266 yaitu menggunakan protocol TCP/IP, bedanya media transmisi yang digunakan bukan lagi WiFi, melainkan kabel RJ45.

Terdapat banyak jenis modul ethernet yang bisa diterapkan pada Arduino, namun yang sering digunakan adalah seperti tampak pada Gambar 10.57 dan Gambar 10.58.

Gambar 10.57. Gambar 10.58.

Arduino Ethernet Shield (Wiznet W5100) Arduino Ehternet Modul ENC28J60

Karena antarmuka Ethernet/ NIC (Network Interface Card) menggunakan protocol TCP/IP maka Anda harus mengerti bagaimana cara pengalamatan IP, misalnya IP broadcast, IP network, IP subnetting termasuk bagaimana cara kerjanya. Jika sudah memahami konsep IP, maka selanjutnya Anda perlu memahami model arsitektur LAN. Berikut ini contoh model LAN yang memungkinkan diterapkan pada Arduino:

Arsitektur jaringan pada Gambar 10.59 terjadi jika modul ethernet terhubung langsung dengan komputer/laptop dan tidak terhubung dengan yang lainnya. Ini terjadi jika Anda membuat pengendali secara remote atau jarakjauh oleh satu komputer saja. Syaratnya IP pada komputer (192.168.1.1) dan IP pada modul ethernet Arduino (192.168.1.2) harus se-network (192.168.1.0/24). Sedangkan komunikasi antara modul ethernet Arduino dan Arduino sendiri pada umunya menggunakan antarmuka UART (TX/RX).

Arsitektur pada Gambar 10.60 serupa dengan arsitektur pada Gambar 10.59, bedanya semua ethernet terhubung dengan switch terlebih dahulu sebagai pool. Antara PC (192.168.1.1), Laptop (192.168.1.3) dan modul ethernet Arduino (192.168.1.2) berada dalam satu network (192.168.1.0/24), sehingga ketiga perangkat tersebut bisa berhubungan satu sama lain. Hal terjadi jika aplikasi pengendali berada di lebih dari satu perangkat, pada kasus ini diasumsikan aplikasi pengendali Arduino berada di PC dan laptop.

Arsitektur pada Gambar 10.61 serupa dengan arsitektur pada Gambar 10.60, beda nya terdapat tambahan perangkat router. Router sendiri berfungsi sebagai penghubung antar jaringan LAN yang berbeda network. Pada contoh di atas terdapat dua network berbeda, yaitu 192168.1.0/24 dan Arsitektur ini terjadi bila modul ethernet Arduino hendak yang berada di luar dari network lokal (IP public) seperti mengakses com atau server cloud IOT.

Sebagai bahan percobaan akan digunakan arsitektur pertama karena mudah penerapannya, yaitu menghubungkan laptop/PC dengan modul ethernet Arduino ENC28J60. Bila ditinjau dari pemrograman Socket maka modul ethernet ENC28J60 diposisikan sebagai TCP Server yang statusnya listening, sedangkan komputer diposisikan sebagai TCP Client yang meminta layanan ke server.

Skenarionya adalah mengirim data string dari komputer ke modul ENC28J60, kemudian diteruskan oleh Arduino untuk ditampilkan pada layar LCD, sekaligus jika data string yang diterima adalah ”merah” maka akan menghidupkan LED merah, data string ”hijau” berarti menghidupkan LED hijau dan data string ”kuning” berarti menghidupkan LED kuning.

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
LED 5MM 3 pcs Warna beda
Resistor 3 pcs 220 Ohm Resistor LED
Resistor 3 pcs 2K Ohm Pembagi tegangan 5v ke 3,3v
Resistor 3 pcs 1 K Ohm Pembagi tegangan 5v ke 3,3v
Modul Ethernet ENC28j60 1 pcs
Modul LCDI 602 1 pcs

Diagram Sketch

Gambar 10.62 menunjukkan label pin header modul ENC28J60 dan label yang ditandai huruf tebal adalah pin yang dihubungkan dengan Arduino.

Gambar 10.62. Pin Header Modul ENC28J60

Modul ethernet ENC28J60 menggunakan antarmuka SPI (Serial Pheriperal

Interface) dengan arsitektur jalur BUS-nya tampak seperti pada Gambar 10.63.

SPI Master diwakili oleh Arduino, sebaliknya SPI Slave diwakili oleh ENC28J60. Anda dapat menggunakan lebih dari satu Slave untuk terhubung dengan Master dengan cara memaralel jalur pin SCK, MOSI, MISO, sedangkan SS terhubung ke setiap Slave yang berbeda.

Karena antara SPI Master (Arduino) dan SPI Slave (ENC28J60) mempunyai tegangan kerja berbeda maka sebaiknya digunakan pembagi tegangan, terutama jalur yang berasal dari Arduino menuju ke ENC28J60, antara lain SCK, MOSI dan SS.

 

ENC28J60 Arduino UNO Keterangan

VCC VCC 3,3V
GND GND
SCK Pin 13 Melalui rangkaian pembagi tegangan
SO / MISO Pin 12
Sl / ST / MOSI Pin 11 Melalui rangkaian pembagi tegangan
cs / SS Pin 10 Melalui rangkaian pembagi tegangan

Proyek ini membutuhkan library UlPEthernet.h yang dapat di-download di https:/l github.com/UlPEthernet/UlPEthernet, kemudian install file UlPEthernet-master.zip dari menu IDE Arduino Sketchelnclude Library-> Add .zip Library.

Kode Program

#include <UIPEthernet.h>

#include <LiquidCrystal_I2C.h>

#define LEDMerah 9

#define LEDHijau 8

#define LEDKuning 7

#define port 16375 // port server

#define buff 50 // jumlah karakter yang diterima oleh ENC28J60

// ENC28J60 Arduino

//———————————————–

// VCC 3,3V VCC 3,3V

// GND GND

// SCK 13 divider

OSIW/OS // 12

// ST/SI/MOSI 11 divider

// CS/SS 10 divider

//———————————————–

byte ip[4] = {192, 168, 4, 1}; // Sesuaikan dengan IP pada Komputer, misalnya 192.168.4.2

byte mac[6] = {0x74, 0x69, 0x69, 0x2D, 0x30, 0x31}; // MAC address random

uint8_t myMASK[4] = {255, 255, 255,0};// IP Netmask

uint8_t myDNS[4] = {192, 168, 4, 1}; // IP DNS (jika perlu)

uint8_t myGW[4] = {192, 168,4,1}; // IP Gateway (jika perlu)

char pesan[buff];

EthernetServer server = EthernetServer(port);

// Atur alamat LCD pada -x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()

{

pinMode(LEDMerah, OUTPUT);

pinMode(LEDHijau, OUTPUT);

pinMode(LEDKuning, OUTPUT);

lcd.init(); // Inisialisasi LCD

lcd.backlight();// Menghidupkan backlight

lcd.setCursor(0, 0);

lcd.print(“ Komunikasi TCP”);

lcd.setCursor(0, 1);

lcd.print(“ LAN Ethernet”);

Ethernet.begin(mac, ip,myDNS, myGW,myMASK);

server.begin();

}

void loop()

size_t size;

if (EthernetClient client = server.available())

{

if ((size = client.available()) > 0)

{

uint8_t* msg=(uint8_t*)malloc(size +1);

memset(msg,0,size+1);

size = client.read(msg, size);

for(uint8_t i=0; i < sizeof(pesan); ++i)

{

pesan[i] =(char)0;

}

for(uint8_ti=0;i< size; i++)

{

pesan[i]=(char)msg[i];

}

free(msg);

String str(pesan);

str.toUpperCase();

if (str.index0f(“MERAHON”) > -1) {

// string “MERAHON”= led merah menyala

digitalWrite(LEDMerah, HIGH);

TampilLCD(“Data: “ + str, “LED MERAH”);

} else if (str.indexOf(“HIJAUON”) > -1) {

// string “HIJAUON” = led hijau menyala

digitalwrite(LEDHijau, HIGH);

TampilLCD(“Data: “ + str, “LED HIJAU”);

} else if (str.index0f(“KUNINGON”) > -1) {

// string “KUNINGON” = 1ed kuning menyala

digitalwrite(LEDKuning, HIGH);

TampilLCD(“Data: “ + str, “LED KUNING”);

} else if (str.indexOf(“MERAHOFF”) >-1){

// string “MERAHOFF”= led merah mati

digitalwrite(LEDMerah, LOW);

lcd.clear();

} else if (str.index0f(“HIJAUOFF”)>-1){

// string “HIJAUOFF” = 1ed hijau mati

digitalwrite(LEDHijau, LOW);

lcd.clear();

} else if (str.index0f(“KUNINGOFF”)>-1){

// string “KUNINGOFF”= led kuning mati

digitalwrite(LEDKuning, LOW);

lcd.clear();

// Koneksi TCP dengan Komputer diputus

client.stop();

}

}

}

void TampilLCD(String Baris1, String Baris2){

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(Baris1);

lcd.setCursor(0,1);

lcd.print(Baris2);

}

Sebelum dilakukan pengujian koneksi, lakukan konfigurasi alamat IP pada komputer agar IP menjadi satu network dengan ENC28J60 (IP: 192.168.4.1), misalnya IP 192.168.4.2, seperti tampak pada Gambar 10.64.

Gambar 10.64. Konfigurasi Alamat IP Komputer

Kemudian buka Command Prompt untuk dilakukan pengujian koneksi dengan perintah ping 192.168.4.1 -t seperti tampak pada Gambar 10.65. Pernyataan “Reply

from 192 .168 .4 .1 : bytes=32 time=lms TTL=128″ menandakan bahwa komputer dan modul ENC28J60 sukses terhubung.

Gambar 10.65. Pengujian Koneksi Dengan Perintah PING

Tahap selanjutnya adalah pengujian dengan mengirimkan data string dari komputer ke ENC28J60. Untuk mengujinya dibutuhkan aplikasi socket client yang dapat Anda buat sendiri sesuai kebutuhan dengan bahasa pemrograman C#, Java dan lain-lain. Namun untuk mudahnya silahkan download aplikasi TCP Socket Test yang dapat di-download di https://sourceforge.net/projects/ sockettest/.

Gambar 10.66. Arduino Aktif Pertamakali

Description

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.