3 DIGITAL I/O
Arduino sebagai komponen pengolah dapat diperkaya dengan menambahkan komponen sensor, kontrol,
aktuator ataupun antarmuka dengan tetap memperhatikan batasan kelistrikan di Arduino. Komponen yang
memiliki luaran/masukan digital dapat difungsikan lewat pin-pin yang tersedia baik pin digital i/o ataupun pin
khusus lainnya. Komponen ini seperti sensor arus, sensor tegangan, sensor cahaya, tombol, LCD, motor dan lain
sebagainya.
Untuk mempermudah pemula dalam pengoperasian, umumnya, untuk komponen digital i/o tersedia pustaka
yang berisikan kode-kode siap guna beserta dengan contoh penggunaan sederhananya. Pustaka ini dapat
diunduh bebas lewat jaringan sehingga, pengguna hanya perlu melakukan sedikit penyesuaian. Pada komponen
tertentu memungkinkan untuk diberikan daya tambahan selain dari Arduino baik lewat papan PCB komponen
tersebut ataupun lewat masukan daya Arduino.
3.1 TUJUAN
Dengan praktikum ini diharapkan mampu menguasai beberapa kompetensi khusus yang berhubungan dengan
mikroprosesor berbasis Arduino. Beberapa kompetensi khusus tersebut antara lain :
Menjelaskan rangkaian digital I/O, khususnya 7 segment. decoder dan keypad encoder
Melakukan pemrograman LCD menggunakan pustaka
Melakukan pemrograman digital output untuk menyalakan LED 7 segment.
Melakukan pemrograman digital input untuk menerima masukan dari keypad
Untuk praktikum ini diperlukan alat dan bahan seperti pada tabel 3.1. Peserta diharapkan dapat menjaga kehati-
hatian dengan memperhatikan panduan praktikum dan petunjuk dari dosen serta asisten praktikum.
Tabel 3.1 Alat dan Bahan
TF2206/Modul-3/1
3.3 PANDUAN TEKNIS
Pada modul praktikum ini akan digunakan Arduino NANO dengan inti mikroprosesor ATmega328P, yang telah
dipasang pada kit Human Machine Interface (HMI) . Beberapa spesifikasi adalah sebagai berikut.
Pada gambar di atas dapat dilihat bawah Arduino Nano ini memiliki 13 blok pin digital, D0-D13, yang dapat
difungsikan sebagai INPUT dan OUTPUT dengan fungsi pinMode(), digitalWrite(), dan
digitalRead(). Masing-masing digital pin ini bisa bekerja dengan dua level sinyal yaitu HIGH (sekitar 3 – 5
Volt) atau LOW (sekitar 0 - 2 Volt). Beberapa pin memiliki fungsi antara lain:
• UART (serial interface) untuk komunikasi serial receive (RX) and transmit (TX), khusus pin D0 (RX) dan
D1 (TX).
• Interrupt, adalah masukan yang dapat memicu perubahan jalannya program secara langsung, berguna
untuk masukan yang sifatnya penting dan mendesak, misalnya sinyal alarm. Pin yang bisa menerima
interupsi adalah pin D2 dan D3.
• PWM (Pulse Width Modulation) output, adalah luaran berupa pulsa periodik dengan lebar pulsa yang
bisa diatur. Hanya ada 6 pin yang sanggup untuk PWM yaitu D3, D5, D6, D9, D10 dan D11.
• SPI (Serial Parallel Interface) pada pin D10 (SS), D11 (MOSI), D12 (MISO) dan D13 (SCK), untuk
komunikasi dengan piranti serial.
TF2206/Modul-3/2
• Digital output, misalnya untuk luaran ke LED. Dalam hal ini pin D13 sudah memiliki LED.
• Digital input, misalnya untuk menerima masukan dari tombol.
Selain itu Arduino Nano juga memiliki 8 blok pin Analog A0 - A7 dengan yang dapat difungsikan antara lain
sebagai :
• Analog Input, untuk menerima masukan sinyal yang harganya antara 0 – 5 Volt, dan akan dikonversi
menjadi angka 0 – 1023 (10 bit).
• I2C pada pin A4 (SDA) dan A5 (SCL), bisa digunakan untuk komunikasi antar Arduino.
No Komponen Fungsi
1 Arduino Nano Mikroprosesor kit ini
2 LED (4 buah) LED yang menampilkan 4 bit luaran digital
3 BCD to 7 segmen decoder IC mengubah sinyal 4 bit menjadi sinyal untuk menyalakan 7
segment.
4 LED 7 segment. LED menampilkan angka 0 – 9
5 Shift register Chip untuk mengontrol LCD berdasar luaran dari mikroprosesor
6 LCD Tampilan teks 2x16
7 Keypad Jajaran tombol untuk masukan angka dan beberapa huruf
8 Keypad encoder Chip untuk mengodekan sinyal keypad menjadi 4 bit masukan
9 Potensiometer Potensiometer geser untuk masukan analog
10 Tombol hijau (START) Tombol yang dapat ditekan untuk masukan analog (START)
11 Tombol merah (CANCEL) Tombol yang dapat ditekan untuk masukan digital (CANCEL)
12 Konektor DIP 10 Konektor untuk memberi daya / menyambung ke kit lain
TF2206/Modul-3/3
Gambar 3.2 Bagian-bagian kit HMI
Komponen-komponen tersebut terhubung ke pin Arduino seperti terlihat pada table 3.3. Pemetaan ini penting
diperhatikan sebagai panduan menyusun ataupun memperbaiki kode pada praktikum.
SPI I2C
DIGITAL ANALOG
MODUL KOMPONEN 0 1 2 3 4 5 6 7 8 9 10 11 12 13 A0 A1 A2 A3 A4 A5 A6 A7
HMI LCD (x8) (SPI master) 1 1 1
BCDto7S 1 1 1 1
BCDto7S-Latch enable 1
LED (x4) 1 1 1 1
LED enable 1
Keypad-data 1 1 1 1
Keypad-ready 1
Potensiometer 1
Switch Green 1
Switch Red 1
Komunikasi (I2C slave) 1 1
TOTAL 1 1 2 2 2 2 1 1 1 1 0 1 1 1 1 1 1 1 1 1
TF2206/Modul-3/4
3.3.3 SKEMA KIT HMI – LED & 7 SEGMENT.
Koneksi Arduino ke 4 LED dan 7 segment. menggunakan IC BCD to 7 segment. Decoder 4511. Dapat diperhatikan
bahwa transistor T1 difungsikan sebagai jembatan antara LED dan GN lewat pin D9 Arduino.
Chip 4511 digunakan sebagai decoder untuk menerjemahkan luaran 4 bit BCD, menjadi 7 bit kode 7 segment. .
TF2206/Modul-3/5
3.3.4 SKEMA KIT HMI – KEYPAD
Koneksi Arduino dari masukan keypad, menggunakan keypad encoder 74C922
Diagram pewaktuan
TF2206/Modul-3/6
3.3.5 SKEMA KIT HMI – LCD SCREEN
Koneksi Arduino ke Liquid Cristal Display (LCD) LCD 2x16 menggunakan IC shift register 74LS595.
Untuk menghemat pin, LCD ini dinyalakan dengan IC shift register yang menerima sinyal Serial Pheriperal
Interface(SPI). Namun hal ini akan dipelajari kemudian pada topik sistem sekuensi. Untuk kali ini, akses
menggunakan pustaka siap pakai.
TF2206/Modul-3/7
3.3.7 KESELAMATAN KIT HMI
Tindakan berikut akan merusak kit HMI, JANGAN dilakukan.
1. Terbalik memasang konektor DIP10, karena itu sama saja dengan memasang catu daya (Vcc dan Gnd)
secara terbalik ke kit, akan menyebabkan Arduino maupun chip-chip lainnya rusak.
2. Lupa memasang konektor DIP10, dan hanya memakai daya dari USB yang terkoneksi ke Arduino. Ketika
semua perangkat (LED, 7 segment. , LCD, dll) dihidupkan, arus yang ditarik akan melebihi 200mA, dan
menyebabkan Arduino rusak.
3. Melepas / pasang komponen ke kit saat daya maupun kabel USB masih terhubung ke kit.
Berlatihlah di rumah dengan simulator Arduino, buat kode sumbernya agar siap digunakan saat praktikum.
TF2206/Modul-3/8
Coba ketik dan lengkapi kode sumber 3.1 berikut.
1 /* File : C1_7s_counting.ino
2 Deskripsi:
3 NIM/Nama:
4 */
5
6 // konstanta pin
7 #define PIN_LED 4
8 #define PIN_LED_ENABLE 9
9 #define PIN_7S_ENABLE 8
10 #define PIN_BUTTON1 2
11 #define PIN_BUTTON2 A0
12
13 void setup()
14 {
15 // Atur mode pin OUTPUT
16 pinMode(PIN_LED, OUTPUT);
17 . . .
18
19 // Atur mode pin INPUT
20 pinMode(PIN_BUTTON1, INPUT);
21 . . .
22
23 // Enable LED dan 7S
24 digitalWrite(PIN_LED_ENABLE, HIGH);
25 digitalWrite(PIN_7S_ENABLE, HIGH);
26 }
27
28 void loop()
29 {
30 // variabel
31 int count;
32 int btn1, btn2;
33 int bit;
34
35 // proses counting 0 - 9
36 for (count = 0; count<10; count++) {
37
38 // periksa button1, jika ditekan disable 7S
39 btn1 = digitalRead(PIN_BUTTON1);
40 digitalWrite(PIN_7S_ENABLE, . . .);
41
42 // perika button2, jika ditekan pause
43 do {
44 btn2 = digitalRead(PIN_BUTTON2);
45 } while (btn2 == . . .);
46
TF2206/Modul-3/9
47 // keluarkan count ke LED4
48 for (int i=0; i<4; i++) {
// hitung bit memakai shift left dan
49
aritmatik and
50 bit = (count & (0x01<<pin-4));
51 digitalWrite(. . ., bit);
52 }
53
54 delay(1000);
55 }
56 }
Tampilan LED4 (dalam biner) bersesuaian dengan tampilan angka (dalam desimal).
Penekanan tombol 1 akan mengubah CS* dan mempengaruhi nyala 7S
Mengapa digunakan loop for untuk proses counting dan mengelarkan output ke LED4, sementara
digunakan loop do-while untuk memeriksa button2 dan berhenti.
Key_code 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D
Masukan 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Pada blok PUSH 2, atur pin ke 3, mode pull-down (jika ditekan akan HIGH). Tombol ini menyimulasikan
masukan KEY_DA (data available)
Pada blok R=1K pertama, atur pin ke A0; blok kedua ke pin A1, blok ketiga ke pin A2, blok keempat ke
pin A3. Keempat blok ini akan menyimulasikan masukan KEY_DATA.
TF2206/Modul-3/10
Gambar 3.10 Keypad Encoder pada UnoArduSim
1 /* File : C2_keypad_encoder.ino
2 Deskripsi:
3 NIM/Nama:
4 */
5
6 // konstanta pin
7 #define PIN_KEY A0
8 #define PIN_KEY_DA 3
9
10 void setup()
11 {
12 // Siapkan serial
13 Serial.begin(9600);
14 Serial.println("Keypad Encoder");
15
16 // Atur mode pin
17 pinMode(PIN_KEY, INPUT);
18 . . .
19 }
20
// definisikan array translasi masukan biner (0000 -
21
1111)
22 // ke key code (huruf sesuai label pada keypad)
23 char key_code[] = {
24 '1', '2', '3', 'A',
TF2206/Modul-3/11
25 '4', '5', '6', 'B',
26 '7', '8', '9', 'C',
27 '*', '0', '#', 'D'
28 };
29
30 void loop()
31 {
32 // variabel
33 int key_da, key, data;
34
35 // periksa apakah data available
36 key_da = digitalRead(...);
37 if (key_da == HIGH) {
38 key = 0;
39 for (int i = 0; i<4; i++) {
40 data = digitalRead(. . .);
41 // gabung data ke key pakai operasi shift dan or
42 key = key | (data << i);
43 }
44
45 // tampilkan hasil bacaan
46 Serial.print("Key ");
47 Serial.print(key);
48 Serial.print("=");
49 Serial.println(key_code[key]);
50
51 delay(200); // beri waktu sejenak
52 }
53 }
Gunakan menu “Windows – Serial Monitor” untuk mengeluarkan layar Serial monitor. Setelah itu cobalah
sebagai berikut:
Atur empat blok R=1K untuk angka biner tertentu (misal 0000)
Tekan tombol 2 sejenak.
Lihat hasil masukan key (dalam biner) dan hasil kode hurufnya
Tombol Fungsi
0-9 Angka
# Mengakhiri angka (masuk stack)
A Operasi Tambah
TF2206/Modul-3/12
B Operasi Kurang
C Operasi Kali
D Operasi Bagi
* Reset
Sederhananya pembuatan kalkulator ini membaca input angka atau operator kemudian mengolah luaran keypad
tersebut. Seperti terlihat pada bagan 3.1, mulanya mendefinisikan pin/konstanta sesuai dengan skematis yang
telah diberikan sebelumnya. Pada bagian inisialisasi juga ditentukan jenis data untuk angka ataupun operator
sehingga tidak melebihi karakter di LCD. Angka kemudian diolah sesuai dengan operator yang diberikan
kemudian menampilkan ke LCD.
Untuk mempermudah praktikum, buatlah draft kode sehingga pada saat praktikum hanya dilakukan sedikit
penyesuaian dengan spesifikasi modul HMI.
TF2206/Modul-3/13
3.4.4 PERSIAPAN JURNAL
Siapkan jurnal praktikum, isilah semua kolom “Yang diharapkan”.
TF2206/Modul-3/14
3.5 PRAKTIKUM
Cobalah memodifikasi kode sumber yang sudah Anda siapkan pada tugas awal 1, antara lain dengan mengingat:
Tombol hijau terhubung ke A6, yang hanya dapat menerima masukan analog.
Untuk debugging, coba tambahkan baris-baris menampilkan info ke LCD atau Monitor Serial.
Setelah sesuai, ujilah program ini sesuai skenario pada jurnal, dan buat catatan pemahaman baru yang Anda
pelajari pada percobaan ini.
Gunakan kode sumber yag sudah anda siapkan di tugas awal 2, modifikasi sedikit jika diperlukan.
Setelah sesuai, ujilah program ini sesuai skenario pada jurnal, dan buat catatan pemahaman baru yang Anda
pelajari pada percobaan ini.
3.5.3 LCD
Liquid Cristal Display (LCD) adalah komponen untuk menampilkan karakter (huruf). Pada kit HMI ini tersedia LCD
dengan ukuran 2x16 (2 baris 16 huruf). Untuk memrogram LCD ini, akan digunakan pustaka siap pakai. Untuk
itu, unduh pustakanya (tersedia di LMS) lalu pasang sebagai berikut:
TF2206/Modul-3/15
2. Dalam folder itu, cari folder “lib”.
3. Ekstraksi pustaka unduhan ke folder tersebut.
Setelah itu cobalah membuat program berikut dengan memperhatikan tabel di jurnal praktkum.
1 /* File : C06_cetak_lcd.ino
2 * Deskripsi : Menampilkan di LCD
3 * Oleh : NIM / NAMA
4 */
5 #include <Wire.h>
6 #include <LiquidCrystal_SR.h>
LiquidCrystal_SR lcd(11, 13, 10); // Pin 11 - Data Enable/ SER, Pin
7
13 - Clock/SCL, Pin 10 -SCK
8 byte angka = 123;
9 char huruf[] ="A";
10 char str1[4]="123ABC";
11 char str2[4]="123";
12 char str3[1]="ABC";
13
14 void setup()
15 {
16 lcd.begin(16,2);
17 lcd.home ();
18 }
19
20 void loop()
21 {
22
23 //angka 123
24 lcd.setCursor(0,0); //kotak ke-1, baris pertama
25 lcd.print(angka); //cetak ke lcd
26 delay(2000);
27 lcd.clear(); //bersihkan lcd
28 ...
29 // huruf A
3.7 LAPORAN
TF2206/Modul-3/16
3.7.1 7S DECODER
Pada kit ini digunakan IC BCD to 7 segment. decoder 4511. Jelaskan :
3.8 PUSTAKA
Jazi Eko Istiyanto, Pengantar Elektronika & Instrumentasi, Pendekatan Project Arduino, 2014
http://arduino.cc/
TF2206/Modul-3/17
4 JURNAL PRAKTIKUM
Tanggal : Asisten :
Nama :
NIM :
Nomor Kit :
Kondisi Kit :
4.1 7S DECODER
Catatan:
TF2206/Modul-3/18
7 Tekan tombol ‘6’
8 Tekan tombol ‘B’
9 Tekan tombol ‘7’
10 Tekan tombol ‘8’
11 Tekan tombol ‘9’
12 Tekan tombol ‘C’
13 Tekan tombol ‘*’
14 Tekan tombol ‘0’
15 Tekan tombol ‘#’
16 Tekan tombol ‘D’
Catatan:
4.3 LCD
Catatan:
TF2206/Modul-3/19
4.4 KALKULATOR
1 Penjumlahan
2 Pengurangan
3 Pembagian
4 Perkalian
5 Reset
Catatan:
TF2206/Modul-3/20
TF2206/Modul-3/21