Modul Belajar Arduino
Modul Belajar Arduino
Arduino
Disusun Oleh :
Rausan Fikri, S.Si
Herjuno Aji Prayogo, S.Kom
1
Modul 1
Pertemuan
Materi Deskripsi Materi
ke-
1 Mengenal Mikrokontroller Mikrokontroler dan Kegunaannya
Perbedaan antara Mikrokontroler
dengan Mikroprosesor
CISC & RISC
2 Arduino Apa Itu Arduino
Jenis-jenis Board Arduino
Teori Arduino Nano ATmega328
1 Konfigurasi Pin Arduino Nano
3 Pengenalan Bahasa C Struktur Penulisan Pemograman C
4 Penjelasan kaki led Anoda dan katoda pada LED
Penggunaan breadboard agar rangkaian
5 Penjelasan Jalur Breadboard berjalan dengan baik dan tidak terjadi
korslet.
1 Input Output Blinking Led
Praktik
Variabel, Tipe Data & #define
Teori
1. Mengenal Mikrokontroller
1.1. Mikrokontroler dan Kegunaannya
Menurut Wikipedia yang namanya Mikrokontroler atau biasa disingkat MCU (Microcontroller
Unit) merupakan sebuah komputer kecil yang dikemas dalam satu IC (Integrated Circuit) berisikan
sebuah prosesor, memory dan peripherals Input/Output yang terprogram.
Penggunaan teknologi mikrokontroler dapat kita temui pada peralatan elektronik dirumah
seperti remote televisi, telepon digital, mesin cuci dll. Pengaplikasian teknologi mikrokontroler
dapat digunakan pada bidang otomatisasi industri, akuisi data, telekomunikasi dll.
2. Arduino
2.1. Arduino dan Jenis Board
Arduino merupakan Open Board elektronik atau bisa disebut sebagai sistem minimum board
dari sebuah mikrokontroler yang sudah memiliki bootloader sehingga pemrogramannya tidak
menggunakan chip programer lagi melainkan hanya melalui komunikasi serial. Arduino menjadi
populer karena sangat mudah digunakan bagi mereka yang tidak memiliki pengetahuan yang kuat
tentang pemrograman karena arduino sudah memiliki library yang banyak dan bersifat open source
sehingga sangat mudah digunakan.
Ada beberapa jenis produk development board & modul yang dikembangkan oleh Arduino.
Produk yang diberi nama Arduino dijual di USA saja sedangkan untuk diluar USA diberi nama
Genuino. Jenis produk Arduino dibedakan dalam beberapa kategori yaitu Kategori Entry level,
Enhanced Features, IoT (internet of Things), Wearable & Retired.
Kategori Entry level Product diperuntukan bagi mereka yang ingin mulai belajar pemrograman,
mudah digunakan dan sangat cocok untuk project pertama anda. Untuk kamu yang ingin
melakukan project yang lebih complex dan memerlukan board yang memiliki advanced
functionalities dan performa yang cepat bisa memilih kategori Enhanced features Product.
Sedangkan bagi kamu yang ingin yang ingin mengebangkan teknologi berbasis IoT bisa memilih IoT
product. Info lebih lanjut tentang produk Arduino bisa diliat disitus resminya (arduino.cc).
Setiap jenis Board arduino tidak memiliki mikrokontroler yang sama. Contohnya pada Arduino
Uno menggunakan chip ATmega328 yg merupakan mikrokontroler keluaran ATMEL sedangkan
pada Aduino 101 menggunakan chip Intel Curie besutan Intel.
Spesifikasi dari Arduino Nano 3.0 dapat dilihat pada tabel 1 dibawah ini (sumber :arduino.cc).
Tabel 1. spesifikasi Arduino Nano 3.0
Microcontroller ATmega328
Operating Voltage (logic
5V
level)
Input Voltage
7-12 V
(recommended)
Input Voltage (limits) 6-20 V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 8
DC Current per I/O Pin 40 mA
32 KB (ATmega328) of which 2 KB used by
Flash Memory
bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
Dimensions 0.73" x 1.70"
Length 45 mm
Width 18 mm
Weigth 5g
fungsi. Sebuah fungsi dibuat dengan beberapa pernyataan yang tujuannya untuk melaksanakan
sebuah tugas dan ada biasanya sebuah fungsi juga ada yang tidak mengandung pernyataan.
i. Pre-processor
Merupakan bagian dari program dalam bahasa c yang selalu dijalankan pertama kali.
Bagian ini juga melakukan proses tertentu. Banyak sekali syntax dalam pre-processor. Namun
setidaknya ada dua syntax yang akan sering kita gunakan dalam latihan programming dasar,
yaitu syntax #include dan #define.
#include: proses yang pertama kali dijalankan untuk memanggil library/prototype fungsi yang
ada di dalam header file.
#include <servo.h>
Berarti meng-include file servo.h. Dengan demikian berarti kita mempersiapkan, fungsi-fungsi
dan instruksi-instruksi yang dapat digunakan untuk mengontrol servo seperti attach, detach,
dan write.
#define: proses yang pertama kali dijalankan untuk mendefinisikan konstanta dan macro. Nilai
dari konstanta tidak akan berubah selama program berlangsung.
#define pinServo 9
#define pinPotensio 0
Kita dapat juga membuat sebuah objek dan mendefinisikan variabel pada pre-processor
Servo myservo;
int val;
myservo merupakan objek dari ‘Servo’, sedangkan val merupakan variabel yang tipe datanya
integer.
ii. Fungsi Utama
Jika kita ingin menggunakan fasilitas atau fitur tertentu sebuah mikrokontroler maka kode
program yang dituliskan diletakkan pada fungsi utama.
void(setup){
myservo.attach(pinServo);
}
void(loop){
val = analogRead(pinPotensio);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}
LED (Light Emitting Diode) memiliki dua kaki, yaitu anoda dan katoda. Anoda adalah kutub positif dan
katoda adalah kutub negatif. Anoda biasanya yang berkaki panjang, dan kepalanya yang kecil.
5. Penjelasan Penggunaan Breadboard
PRAKTIKUM 1
Job 1
Skema
Cathode
Anode
Anode
Cathode
ARDUINO LED
D13 - Resistor 220 ohm - Anoda
GND - Katoda
Logika Program :
Lampu hidup selama 1 detik, lalu mati selama 1 detik, tulis di
void loop agar lampu menjadi kelap kelip.
Kode Program
void setup() {
pinMode(13, OUTPUT); // menginstruksikan mode pin 13 sebagai OUTPUT
}
void loop() {
digitalWrite(13, HIGH); // menghidupkan LED, pin 13 diberi nilai HIGH
delay(1000); // delay 1 detik atau 1000 milisekon
digitalWrite(13, LOW); // mematikan LED, pin 13 diberi nilai LOW
delay(1000);
}
Job 2
Schematic
TASK :
Rangkai 3 led
Hidup dan matikan 3 led secara bersamaan dengan delay 1 detik setiap hidup dan mati
Hidup dan matikan 3 led secara bergantian dengan delay 500 milisekon
Gunakan #define atau tipe data integer untuk mendefinisikan pin
Modul 2
Pertemuan
Materi Deskripsi Materi
ke-
Membandingkan dua nilai untuk
1 Operator Relasi
mengambil keputusan
Untuk menggabungkan banyak kondisi
2 Operator Logika
logika.
3 Pernyataan If Penjelasan dan penggunaan If
4 Pernyataan If - else Penjelasan dan penggunaan If - else
Teori
Pernyataan Nested If (if di Penjelasan dan penggunaan If di dalam
5
dalam if) if
2 Penjelasan dan penggunaan If - else if -
6 Pernyataan If - else if - else
else
Penjelasan dan penggunaan komunikasi
7 Komunikasi Serial
serial
Menghidupkan dan mematikan lampu
1 Digital Input Pull-Up
menggunakan pushbutton
Praktik Menghidupkan dan mematikan 2 lampu
2 Kendali 2 lampu secara bergantian menggunakan 1
pushbutton
Pengambilan Keputusan
1. OPERATOR RELASI
Untuk membandingkan dua buah nilai kita bisa menggunakan operator relasi. Adapun operator
relasi dalam bahasa C dapat dilihat pada Tabel 1.
Contoh :
X adalah bernilai 2
X == 2 --> TRUE
X != 2 --> FALSE
X>1 --> TRUE
X<1 --> FALSE
X <= 2 --> TRUE
X != 5 --> TRUE
2. Operator Logika
Operator logika digunakan untuk menggabungkan banyak kondisi logika yaitu kondisi TRUE dan
kondisi FALSE. Operator logika dapat digunakan di dalam if jika menggunakan 2 kondisi atau lebih.
Contoh :
TRUE && TRUE --> TRUE
TRUE && FALSE --> FALSE
TRUE || FALSE --> TRUE
!(TRUE && TRUE) --> FALSE
FALSE || FALSE --> FALSE
3. Pernyataan if
int val = 51;
If (val > 50){ // kondisi terpenuhi, perintah di dalam if di eksekusi
digitalWrite(12,HIGH);
}
If digunakan dalam pengambilan keputusan, jika kondisi yang diinginkan terpenuhi maka perintah
yang berada di dalam kurung kurawal akan dieksekusi. Pada contoh diatas jika nilai dalam variabel
val lebih besar daripada 50, maka pin D12 menjadi HIGH
4. Pernyataan if-else
int val = 49;
if (val > 50){ //kondisi tidak terpenuhi
digitalWrite(12,HIGH);
}
else { // perintah di dalam else di eksekusi
digitalWrite(12,LOW);
}
If - else digunakan bila ada kondisi selain dari if, misalnya pada contoh diatas, jika nilai dalam
variabel val lebih besar daripada 50 makan pin D12 menjadi HIGH, lalu untuk elsenya adalah kondisi
selain if, jika nilai dalam variabel value lebih kecil atau sama dengan 50 makan pin D12 menjadi
LOW.
If di dalam if digunakan bila untuk mengecek / validasi berganda, atau untuk mencapai 2 kondisi
yang berbeda secara bertahap.
Contoh diatas adalah jika variabel val bernilai lebih dari 50, lalu melakukan if lagi, jika val2 bernilai
kurang dari 90, maka pin D12 menjadi HIGH. Jika kondisinya tidak tepenuhi maka eksekusi else
yaitu pin D12 menjadi LOW.
}
else if (val < 50 && val > 0){
digitalWrite(13,HIGH)
}
else {
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
If - else if - else digunakan jika terdapat banyak kondisi. Pada contoh diatas jika val bernilai 50
sampai 100 maka pin 12 bernilai HIGH, jika val bernilai 1 sampai 49 maka pin 13 bernilai HIGH, pada
kondisi selain dari itu maka pin 12 dan 13 bernilai LOW.
7. Komunikasi Serial
Komunikasi serial digunakan untuk berkomunikasi dengan mikrokontroler, komunikasi serial sangat
berguna untuk memberikan informasi apa yang sedang dikerjakan oleh mikrokontroler. Lewat
komunikasi serial kita juga dapat memberikan perintah kepada mikrokontroler pada saat
beroperasi. Berikut contoh komunikasi serial.
void setup() {
// memulai komunikasi serial dengan baud rate 9600
Serial.begin(9600);
Serial.print(“Booting Arduino”);
Serial.print(“...............”);
delay(1000);
Serial.println(“booting selesai”);
void loop() {
Serial.println(“looping”);
delay(1000);
}
Penjelasan :
Serial.begin(9600) : memulai komunikasi serial dengan baud rate 9600
Serial.print : print / cetak tulisan yang diinginkan
Serial.println : cetak tulisan sekaligus cetak enter setelah menulis tulisan
Setelah mengupload sketch diatas, buka serial monitor, icon pada pojok kanan atas arduino IDE
Setelah terbuka, pastikan baud ratenya sesuai dengan yang ada di sketch yang diupload
Praktikum
Job 1
Digital Input Pullup
Schematic
Algoritma program 1a :
Lampu menjadi hidup bila tombol ditekan, dan mati ketika tombol
tidak ditekan
KODE PROGRAM 1a
void setup() {
void loop() {
int tombol= digitalRead(2);
delay(50);
//INPUT_PULLUP menjadikan kondisi awal pin menjadi HIGH
// jika tombol di tekan maka kondisi pin D2 menjadi LOW
if (tombol== LOW) { //jika tombol ditekan, lampu menjadi hidup
digitalWrite(13, HIGH);
} else { //jika tombol dilepas, lampu menjadi mati
digitalWrite(13, LOW);
}
}
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP); // setting sebagai pull up resistor
pinMode(13, OUTPUT);
void loop() {
Algoritma Program 1b
Tekan tombol untuk menghidupkan lampu, tekan lagi untuk
mematikannya
Kode PROGRAM 1b
int led1 = 13;
int val = 0;
void setup() {
//mulai komunikasi serial
Serial.begin(9600);
void loop() {
//baca nilai pushbutton
int tombol = digitalRead(2);
//set delay agar tombol bisa dideteksi dengan sempurna
delay(150);
if (tombol == LOW) {
if (val == 0){
digitalWrite(led1, HIGH);
Serial.println(“lampu hidup”);
}else if (val == 1){
digitalWrite(led1, LOW);
Serial.println(“lampu mati”);
}
val = val + 1;
if (val > 1) {
val = 0;
}
}
}
Job 2
Kendali 2 lampu
Skema
D5 - R1 - LED1 -GND
D6 - R2 - LED2 - GND
Algoritma Program 2:
Tekan tombol untuk menghidupkan lampu 1, tekan lagi untuk
menghidupkan lampu 2, tekan lagi untuk mematikan kedua
lampu.
Kode PROGRAM 2
int led1 = 5;
int led2 = 6;
int val = 0;
void setup() {
//mulai komunikasi serial
Serial.begin(9600);
void loop() {
//baca nilai pushbutton
int tombol = digitalRead(2);
//set delay agar tombol bisa dideteksi dengan sempurna
delay(150);
if (tombol == LOW) {
if (val == 0) {
digitalWrite(led1, HIGH);
Serial.println(“lampu 1 hidup”);
} else if (val == 1) {
digitalWrite(led2, HIGH);
Serial.println(“lampu 2 hidup”);
}
else if (val == 2) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
Serial.println(“lampu mati”);
}
val = val + 1;
if (val > 2) {
val = 0;
}
}
}
Tugas :
Modul 3
Pertemuan
Materi Deskripsi Materi
ke-
Analog Vs Digital
Analog Vs Digital, ADC dan
1 ADC (Analog Digital Converter)
PWM
Teori PWM (Pulse Width Modulation)
Looping For
3 2 Perulangan (Looping)
Looping While
1 ADC Memonitor nilai dari potensiometer
Praktik Mengontrol nyala led menggunakan
2 PWM
PWM, bisa terang, dan redup, atau mati
Pada sinyal digital hanya ada 2 keadaan yaitu HIGH dan LOW atau 5v dan 0v, tetapi dengan
menggunakan analog kita dapat mengatur tegangan yang keluar seperti 1v, 2.2v, 4.5v, dsb.
1.2. Analog Digital Converter (ADC)
Analog Digital Converter (ADC) merupakan sistem pengubahan sinyal analog menjadi sinyal
digital. 2 karakter prinsip yang dimiliki ADC yaitu kecepatan sampling dan kecepatan resolusi. pada
Arduino Nano 3.0 yang menggunakan mikrokontroler ATmega328 keluaran Atmel bisa
menggunakan resolusi ADC 10 bit .
Cara konversi perhitungan nilai input tegangan ke bilangan biner dapat kita gunakan
persamaan 1.1 sebagai berikut :
Vin
x R (1.1)
Vref
dimana :
x=nilai input pin ADC yang terbaca
Vin = tegangan input
Vref = tegangan referensi
R= nilai resolusi dari ADC
Sebagai contoh kita ingin mengetahui berapa nilai input pin adc yang terbaca jika Vin sebesar 3 v
dengan tegangan referensi sebesar 5 v dan nilai resolusi ADC 1023 (10bit).
Diketahui : Vin = 3v
Vref= 5v
R=1023
Nilai input pin ADC yang terbaca (x)?
Vin
x R
Vref
3
x x1023
5
x 614
Jika kita ingin mengubah nilai 614 (yang merupakan nilai desimal) menjadi nilai biner maka cara
perhitungannya.
614
307 sisa 0
2
307
153 sisa 1
2
153
76 sisa 1
2
76
38 sisa 0
2
38
19 sisa 0
2
19
9 sisa 1
2
9
4 sisa 1
2
4
2 sisa 0
2
2
1 sisa 0
2
1
0 sisa 1
2
Jadi bilangan binernya 1001 1001 10
Sedangkan untuk mencari nilai dari Duty Cycle kita bisa menggunakan persamaan 1.2 dibawah
ini
tHIGH
D 100% (1.2)
ttotal
Keterangan:
D = Duty cycle
tHIGH = waktu pada saat keadaan HIGH (lebar pulsa)
Ttotal = total waktu dalam satu gelombang (periode)
Untuk memahami lagi tentang duty cycle bisa kita lihat pada Gambar 2 dibawah ini :
0
1
2
3
4
5
6
7
8
9
while (kondisi){
Statement;
}
int i = 0;
while (i<10){
Serial.println(i);
i++;
}
Pertama variabel i diberi nilai 0, lalu while akan terus mengulang dengan kondisi i < 10. jika i telah =
10 maka while akan berhenti. Output dari contoh kode while adalah
0
1
2
3
4
5
6
7
8
9
Job 1_ADC
Schematic
PINOUT POTENSIOMETER
Algortima Program 1:
Menampilkan nilai pontesiometer lewat komunikasi serial
Kode Program 1
int analogPin = 0;
int nilai = 0;
void setup(){
Serial.begin(9600);
}
void loop()
{
nilai = analogRead(analogPin);
Serial.println(nilai);
delay(500);
}
Job 2 PWM
Schematic
Anode
Cathode
Kode Program
} } }
Task :
- Gabungkan dengan potensiometer sehingga ketika potensiometer di putar maka akan mengontrol nyala LED.
- kontrol PWM dengan menggunakan looping for & while
Modul 4
Pertemuan
Materi Deskripsi Materi
ke-
1 Module Driver Motor L298N Fungsi dan pinout dari L298N
Teori
2 Modul Relay Fungsi dan cara kerja Relay
Menghidupkan dan mematikan lampu
4 1 L298N
menggunakan pushbutton
Praktik Menghidupkan dan mematikan 2 lampu
2 Relay secara bergantian menggunakan 1
pushbutton
Output 1 Output 4
Output 3
Output 2
Vin
GND 5V
2. Modul Relay
Bagaimana cara kita untuk mengontrol sebuah perangkat yang menggunakan arus listrik AC
(Alternate current) dengan mikrokontroler. Seperti yang kita ketahui Output arus dari
mikrokontroler menggunakan DC dan arusnya juga tidak besar sehingga untuk mengontrol
perangkat yang menggunakan Arus AC kita mesti menggunakan sebuah saklar yang dapat dikontrol
oleh mikrokontroler. Menurut wikipdia Relai adalah suatu peranti yang
menggunakan elektromagnet untuk mengoperasikan seperangkat kontak sakelar.
Job 1
Skema
Konfigurasi pin:
in1 hubungkan ke pin D2
In2 hubungkan ke pin D3
EnA hubungkan ke D9
Kode Program
Contoh 1
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(9, HIGH);
}
Contoh 2
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
}
Contoh 3
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, LOW);
}
TASK
Gunakan teknik pwm untuk mengatur kecepatan motor
Gunakan potensiometer untuk mengatur kecepatan motor dc
Job 2 Relay
Skema
D2 - IN
5v - VCC
GND - GND
Task
1. Hidupkan LAMPU 220V (set pin D2 menjadi LOW)
2. Matikan LAMPU 220v (set pin D2 menjadi HIGH)
Modul 5
Pertemuan
Materi Deskripsi Materi
ke-
Penjelasan Singkat tentang sensor
1 Sensor Ultrasonik
ultrasonik
Teori 2 LCD Penjelasan singkat LCD
Real Time Clock, modul jam untuk
3 RTC
arduino
5 Mendeteksi jarak menggunakan
1 Ultrasonik HC-SR04, ditampilkan pada serial
monitor
Praktik
2 LCD Menampilkan tulisan pada LCD
Mengambil data jam dari RTC,
3 RTC
ditampilkan pada serial monitor
1. Sensor Ultrasonik
Sensor Ultrasonik adalah alat elektronika yang kemampuannya bisa mengubah dari energy
listrik menjadi energy mekanik dalam bentuk gelombang suara ultrasonik. Sensor ini terdiri dari
rangkaian pemancar Ultrasonik yang dinamakan transmitter dan penerima ultrasonik yang disebut
receiver. Alat ini digunakan untuk mengukur gelombang ultrasonik.
Pada sensor ultrasonik HC-sr04 dapat dilihat transmitter (bulatan kiri) dan receiver (bulatan
kanan), terdapat juga 4 pin, yaitu untuk daya dan komunikasi dengan mikrokontroler.
2. LCD (Liquid Crystal Display)
LCD 16x2 adalah salah satu lcd yang sering digunakan dalam berbagai project arduino, karena
mudah didapat dan mudah untuk diprogram dengan arduino. Library untuk lcd ini juga sudah ada di
arduino.
3. Real Time Clock (RTC)
Real time clock (RTC) adalah modul yang dibuat untuk menyimpan data waktu secara real time.
Data waktu yang tersimpan dari detik sampai dengan tahun. Modul ini sangat berguna untuk
berbagai project, terutama yang membutuhkan untuk menjalankan perintah berdasarkan waktu.
Misalnya kontrol lampu hidup pada jam enam sore, dan mati pada jam 6 pagi. Mikrokontroler
sebenarnya bisa menyimpan waktu, tapi ketika dimatikan maka waktunya akan mulai dari awal
alias tidak tersimpan atau tidak berjalan ketika si mikrokontroler dalam keadaan mati, sedangkan
dengan modul RTC waktu akan tersimpan walau mikrokontroler mati karena RTC memiliki baterai
sendiri.
Praktikum
Job 1
Ultrasonik
Kode
Masukkan dulu library NewPingMaster pada masing-masing folder library arduino. Defaultnya
di folder Documents > Arduino > library.
#include <NewPing.h>
void loop() {
delay(50); //tunggu 50 ms untuk mendeteksi jarak, minimal delay 29 ms
Serial.print("Ping: ");
// Kirim sinyal dan dapatkan jarak, bila 0 berarti diluar jarak maksimal atau eror
Serial.print(sonar.ping_cm());
Serial.println("cm");
}
Job 2
LCD (Liquid Crystal Display)
Skema
Rangkaian LCD
LCD RS pin ke digital pin 12
LCD Enable pin ke digital pin 11
LCD D4 pin ke digital pin 5
LCD D5 pin ke digital pin 4
LCD D6 pin ke digital pin 3
LCD D7 pin ke digital pin 2
LCD R/W pin ke ground
VDD pin ke 5v
VSS pin ke ground
V pin ke resistor ke 5v (power backlight)
K pin ke ground (gnd backlight)
Rangkaian 10K resistor:
Vcc ke 5v
Gnd ke gnd
Wiper/sinyal ke LCD VO pin (kecerahan lcd)
Kode
#include <LiquidCrystal.h>
void setup() {
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Kedai Techno");
lcd.setCursor(0, 1);
lcd.print("Arduino Nano v3");
}
void loop() {
}
Job 3
RTC (Real Time Clock)
Rangkaian
VCC ke 5v
GND ke GND
SCL ke A5
SDA ke A4
Program
Pada Arduino IDE, buka example
File > Example > RTClib > ds3231
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
void setup () {
#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
Task :
1. Tampilkan jarak dari sensor ultrasonik ke LCD
2. Tampilkan jam dari rtc ke LCD
3. Tampilkan jarak dan jam ke LCD
Modul 6
Pertemuan
Materi Deskripsi Materi
ke-
1 Interupsi Interupsi pada arduino
Teori 2 Komunikasi I2C I2C pada arduino
3 Array Array pada pemrograman Arduino (C)
3 Interupsi eksternal menggunakan
1 Interupsi
pushbutton
Praktik Mengkomunikasikan 2 arduino, 1
2 Komunikasi I2C
menjadi slave, 1 menjadi master
3 Array Contoh penggunaaan array
1. Interupsi (Interrupts)
Pada tingkat sederhana, interupsi adalah sebuah sinyal yang mengiterupsi proses yang sedang
berlangsung pada prosesor. Interupsi dapat dipicu oleh perubahan faktor eksternal (seperti
perubahan status pada pin input) atau juga faktor internal (seperti timer atau juga software signal).
Pada saat dipicu, interupsi menghentikan sementara proses yang sedang berlangsung dan
menyebabkan program untuk mengeksekusi perintah atau fungsi lain. Pada saat fungsinya selesai
dilakukan, maka program akan kembali bekerja seperti semula.
Pada Arduino Uno, Nano, Mini atau yang berbasis atmega328 pin interupsi terdapat pada pin 2
dan 3. Untuk arduino yang lain, dapat kita lihat pada tabel berikut.
Board Pin Interupsi
Uno, Nano, Mini, dan 328-based 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, dan 32u4-based 0, 1, 2, 3, 7
Zero semua pin digital, kecuali 4
MKR1000 Rev.1 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due Semua pin digital
101 Semua pin digital
Inter-Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah
menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem
I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data
antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C Bus dapat
dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C
Bus dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyal Stop, dan
membangkitkan sinyal clock. Slave adalah piranti yang dialamati master.
Sinyal Start merupakan sinyal untuk memulai semua perintah, didefinisikan sebagai perubahan
tegangan SDA dari “1” menjadi “0” pada saat SCL “1”. Sinyal Stop merupakan sinyal untuk
mengakhiri semua perintah, didefinisikan sebagai perubahan tegangan SDA dari “0” menjadi “1”
pada saat SCL “1”.
Sinyal dasar yang lain dalam I2C Bus adalah sinyal acknowledge yang disimbolkan dengan ACK
Setelah transfer data oleh master berhasil diterima slave, slave akan menjawabnya dengan
mengirim sinyal acknowledge, yaitu dengan membuat SDA menjadi “0” selama siklus clock ke 9. Ini
menunjukkan bahwa Slave telah menerima 8 bit data dari Master.
Pada arduino, komunikasi I2C telah dibuat library nya, yaitu “Wire Library”. Library ini mampu
membuat arduino berkomunikasi dengan perangkat I2C. Pada arduino Uno dan Nano, pin I2C
terdapat pada A4 (SDA) dan A5 (SCL)
3. Array
Array (larik) merupakan suatu variabel yang merepresentasikan daftar (list) atau kumpulan
data yang memiliki tipe data sama. Array merupakan konsep yang penting dalam pemrograman,
karna array memungkinkan kita untuk menyimpan data dalam jumlah banyak dan terindeks.
Misalkan ada kumpulan data bertipe int yaitu angka 1, 2, 3, 4, dan 5. Kumpulan data ini dapat
disajikan dalam bentuk Array karena memiliki tipe data yang sama yaitu Int. Misal kumpulan data
tadi kita beri nama Angka sehingga jika disajikan dalam bentuk array akan menjadi Int Angka[]={1, 2,
3, 4, 5} atau Int Angka[5]={1, 2, 3, 4, 5}. Pada sebuah array, index array dimulai dari indeks ke-0,
sehingga pada array Angka[], angka 1 berada di indeks ke-0 (Array[0]), angka 2 berada di indeks
ke-1 (Array[1]), dan seterusnya. Sedangkan pada pendeklarasian Array, Int Angka [5] berarti
Array Angka dapat menampung 5 masukan nilai Int.
Praktikum
JOB 1 - Interupsi
Skema
Kode Program
void setup() {
pinMode(ledPin, OUTPUT);
// mode input pullup, pada saat terbuka (tombol tidak ditekan), bernilai HIGH,
pinMode(interruptPin, INPUT_PULLUP);
// pasang interup pada pin 2,
// pemicunya CHANGE yaitu perubahan nilai LOW/HIGH pada pin/tombol
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
Task :
1. Ubah CHANGE menjadi FALLING, dan RISING
2. Tambahkan komunikasi serial, lalu berikan keterangan state lewat serial pada saat state
berubah
JOB 2 - I2C
Skema
JOB 3 - ARRAY
int angka[5] = {1, 2, 3, 4, 5};
int i = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if (i < 5) {
Serial.print("Variabel angka indeks ke ");
Serial.print(i);
Serial.print(" adalah ");
Serial.println(angka[i]);
i++;
}
if (i == 5) {
i = 0;
}
delay(1000);
}
Task :
1. panggil urutan array secara berurutan mulai dari yang terbesar (indeks ke 4) ke yang paling
kecil (indeks 0)