Menampilkan output dari Arduino dengan LCD 1602 I2C

Menampilkan output dari Arduino dengan LCD 1602 I2C

Sebelumnya kita sudah mempelajari bagaimana membaca kondisi suhu dan kelembaban lingkungan sekitar dengan menggunakan sensor DHT 11 – https://helmydx.my.id/2024/02/09/antarmuka-sensor-dht-11-dengan-menggunakan-arduino. Pada artikel tersebut, hasil pembacaan sensor DHT 11 hanya ditampilkan lewat serial monitor saja sehingga Arduino harus selalu terhubung ke komputer atau laptop kita.

Tutorial ini akan membahas bagaimana cara menampilkan output berupa teks dari Arduino ke LCD 1602 dan diakhir tutorial ini, kita akan mampu menggunakan LCD 1602 sebagai output dan menggunakannya untuk project kita selanjutnya.

LCD 1602 I2C

LCD 1602 I2C adalah sejenis LCD (liquid Crystal Display) yang dapat menampilkan karakter berupa angka dan huruf. LCD ini terdiri dari 16 baris dan 2 kolom sehingga disebut dengan LCD 1602. Untuk koneksi ke Arduino, LCD ini sudah dilengkapi dengan modul I2C (Inter Integrated Circuit) yang hanya membutuhkan 2 pin untuk komunikasi dan 2 pin power saja sehingga menghemat penggunaan pin pada Arduino.

Inter Integrated Circuit (I2C)

Inter Integrated Circuit atau biasa disingkat I2C adalah standar komunikasi serial 2 arah untuk mengirimkan dan menerima data dengan menggunakan 2 saluran khusus. Sistem I2C terdiri dari 2 saluran yaitu SDA (Serial Data) dan SCL (Serial Clock). SDA berfungsi untuk mengirimkan dan menerima data sedangkan SCL berfungsi sebagai clock untuk mengatur aliran data dari dan ke microcontroller. Salah satu pengaplikasian sistem I2C ini sering kita temui pada modul LCD 1602, modul RTC (Real Time Clock) dan beberapa jenis modul lainnya.

Pinout pada LCD 1602 I2C

Seperti dijelaskan sebelumnya, pinout pada LCD 1602 I2C hanya terdiri dari 2 pin untuk komunikasi yaitu pin SDA dan SCL dan 2 pin power VCC dan GND.

Rangkaian Modul LCD 1602 dengan menggunakan Arduino

Merakit modul LCD 1602 dengan Arduino relatif mudah karena modul LCD nya hanya terdiri dari 4 buah pin saja.

LCD 1602 I2CArduino
VCC5V
GNDGND
SCLpin SCL atau pin A5
SDApin SDA atau pin A4

Atau bisa juga seperti skema dibawah ini

Library LCD I2C

pemrograman LCD 1602 I2C membutuhkan library tambahan untuk mempermudah penulisan dan kontrol terhadap perangkat LCD, untuk menginstal library nya ikuti langkah-langkah sesuai gambar berikut.

Pastikan output pada Arduino IDE sudah seperti ini:

Program / Sketch

Setelah rangkaian dan library terinstal, maka langkah selanjutnya adalah memprogram Arduino agar dapat menampilkan tulisan di layar LCD. Ketikkan program dibawah ini pada halaman kerja Arduino IDE.

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  lcd.init();
  lcd.clear();         
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("MAN 1 LANGKAT");
  lcd.setCursor(0,1);
  lcd.print("Tutorial LCD");
}

void loop() {
}

Upload program ke dalam Arduino dan perhatikan hasilnya.

Penjelasan Program

#include <LiquidCrystal_I2C.h>

Menambahan / include library LCD I2C yang sebelumnya kita instal ke dalam program

LiquidCrystal_I2C lcd(0x27,16,2);

menentukan object lcd dengan parameter (0x27, 16, 2). Dimana 0x27 adalah alamat I2C pada LCD (jika alamat ini tidak berfungsi, coba gunakan alamat 0x3F), 16 adalah jumlah baris pada LCD dan 2 adalah jumlah kolom LCD.

lcd.init();

lcd.init() berfungsi untuk mengaktifkan kontrol LCD

lcd.clear();

lcd.clear() berfungsi untuk mengosongkan tampilan pada layar LCD agar teks tidak saling timpa antara teks sebelumnya dengan teks yang akan tampil

lcd.backlight();

lcd.bcaklight() akan mengaktifkan lampu layar pada LCD, jika fungsi ini tidak dimasukkan, maka LCD akan menjadi gelap

lcd.setCursor(0,0);

lcd.setCursor(0, 0) berfungsi untuk mengatur tata letak huruf yang akan tampil pada layar. fungsi ini memiliki 2 parameter dengan syntax lcd.setCursor(nomor_baris, nomor_kolom). nomor_baris digunakan untuk mengatur posisi awal huruf pertama dari teks yang akan kita buat. Penomoran susunan baris pada LCD 1602 dimulai dari angka 0. Supaya huruf tampil agak ketengah, kita tuliskan lcd.setCursor (2, 0) atau lcd.setCursor (3, 0) sesuai tata letak yang kita inginkan.

Sedangkan parameter nomor_kolom digunakan untuk menentukan posisi teks berada diatas atau dibawah layar. Seperti yang telah kita ketahui, LCD 1602 memiliki 2 kolom dimana kolom yang atas diberi notasi 0 dan kolom yang bawah diberi notasi 1. jadi jika kita ingin menampilkan suatu teks di kolom bagian atas, maka kita ketikkan lcd.setCursor(0, 0); sedangkan jika ingin teks tampil dibagian bawah LCD maka ketikkan lcd.setCursor(0, 1);

lcd.print("MAN 1 LKT");

lcd.print() berfungsi untuk menampilkan tulisan pada layar. Tulisan yang akan ditampilkan adalah teks atau nilai variabel yang berada didalam kurung. Pada baris program diatas, lcd.print() akan menampilkan teks bertuliskan MAN 1 LKT pada layar. Posisi teks sudah diatur pada baris program diatasnya yaitu teks ada dibagian kiri atas layar LCD karena fungsi lcd.setCursor(0, 0).

Selanjutnya, silahkan mengekplorasi lebih jauh tentang penggunaan LCD ini dengan cara memanipulasi perintah-perintah yang sudah dijelaskan diatas. Sampai disini dulu tutorial nya sampai jumpa di tutorial berikutnya.

Selamat belajar.

Variabel dan tipe data nya

Untuk beberapa sesi kedepan, kita akan mempelajari dasar-dasar pemrograman agar nantinya dapat dengan mudah diaplikasikan ketika membuat proyek dengan menggunakan Arduino.

Segmen pemrograman ini kita mulai dengan mempelajari tentang variabel dan tipe data nya.

Variabel

Istilah variabel adalah istilah yang sering kita gunakan di pelajaran matematika dan fisika. Biasanya variabel dilambangkan dengan simbol huruf lalu diikuti oleh tanda sama dengan (=) dan berisi data berupa angka. Misalnya : X = 5 atau Z = 10. Variabel dalam pemrograman komputer juga mempunyai fungsi yang sama dengan variabel yang kita kenal di matematika dan fisika.

Secara sederhana, variabel dapat kita artikan sebagai tempat penyimpanan data, dimana data tersebut dapat kita gunakan pada baris-baris program dengan cara memanggil nama variabelnya saja. Data yang ada didalam sebuah variabel juga dapat diolah sedemikian rupa sehingga isi nya bisa berubah.

variabel dalam pemrograman Arduino biasanya dituliskan seperti ini :

int x = 0;

Dimana:

  • int adalah tipe data (data type) dari sebuah variabel.
  • x adalah nama dari sebuah variabel.
  • Tanda “=” adalah tanda assignment yang bisa dimaknai sebagai “adalah”
  • nilai 0 adalah nilai atau data default/awal yang terdapat didalam variabel

Tipe data variabel

pada contoh variabel diatas, kita telah mengenal salah satu tipe data yang biasa digunakan dalam pemrograman Arduino yaitu tipe data int. int adalah singkatan dari “integer”. tipe data integer adalah tipe data untuk variabel yang memiliki data berbentuk bilangan bulat. Selain int, terdapat pula tipe data lainnya misalnya “float” yang datanya berupa bilangan desimal. Berikut ini adalah daftar lengkap tipe data variabel yang biasa digunakan dalam pemrograman Arduino.

Tipe dataPenjelasancontoh penulisan
inttipe data angka biasa / bilangan bulatint x = 12;
int A = 300;
int kecepatan = 100;
floattipe bilangan desimalfloat pi = 3.14;
float setengah = 0.5;
bytetipe data angka dengan nilai antara 0 – 255byte x = 20;
byte y = 254;
booleantipe data dengan nilai true/false. Tipe data ini hanya menghasilkan 2 nilai saja yaitu True atau Falsebool x = 1;
bool x = 0;

Penamaan variabel

Pemberian nama variabel dalam pemrograman Arduino harus mengikuti beberapa kaidah penulisan dibawah ini:

Nama variabel bisa menggunakan huruf besar dari A sampai Z dan huruf kecil dari a sampai z. misalnya:

int C = 100;
int c = 150;

Nama variabel tidak boleh memiliki spasi misalnya “nama variabel”, namun boleh menggunakan underscore misalnya “nama_variabel” atau menggunakan metode penulisan camelCase misalnya “namaVariabel” atau “NamaVariabel “. Contohnya:

int suhu_udara = 30;
int SuhuUdara = 30;
int suhuUdara = 30;

Tidak boleh dimulai dengan angka namun bisa ditambahkan angka diakhir. Contoh:

//benar:
int ledPin1 = 3;
// Salah :
int 3ledpin = 5;

Pemanggilan variabel didalam pemrograman

Perhatikan contoh dibawah ini:

int x = 20;
int y = 10;

void setup () {
	Serial.begin(9600);
	Serial.print("Nilai dari variabel x adalah: ");
	Serial.println(x);
	Serial.print("Nilai dari variabel y adalah: ");
	Serial.println(y);
}

void loop (){

}

Pada program diatas, terdapat 2 buah variabel dengan nilai masing-masing x=20 dan y = 10.

Di baris ke 5, terdapat fungsi Serial.begin dengan baud rate 9600. Fungsi Serial ini berguna untuk menampilkan output secara langsung pada menu serial monitor.

Pada baris ke-6, kita menggunakan Serial.print untuk mencetak atau menampilkan teks dilayar monitor komputer /laptop kita.

Pada ke-7, kita menampilkan nilai dari variabel x di layar dan memindahkan teks setelahnya ke baris berikutnya dengan fungsi Serial.println.

Jika kita mengupload program diatas ke dalam Arduino, maka pada serial monitor akan terlihat hasil seperti dibawah ini:

Nilai dari variabel x adalah : 20
Nilai dari variabel y adalah : 10

Operator Aritmatika

Data pada variabel dapat kita manipulasi dengan menggunakan operator aritmatika. kita bisa menjumlahkan, mengurangkan, membagi dan mengalikan nilai suatu variabel. Perhatikan contoh dibawah ini:

int x = 20;
int y = 10;

void setup () {
	Serial.begin(9600);
	Serial.print("Nilai dari variabel x adalah: ");
	Serial.println(x);
	Serial.print("Nilai dari variabel y adalah: ");
	Serial.println(y);
	int A = x + y;
	Serial.println("Penjumlahan");
	Serial.print("x ditambah y = ");
	Serial.println(A);
	int B = x - y;
	Serial.println("pengurangan");
	Serial.print("x dikurang y = ");
	Serial.println(B);
}

void loop (){

}

Kalau kita perhatikan program diatas, kita akan menemukan dua variabel baru yaitu variabel A dan B. Nilai variabel A adalah nilai x + y sedangkan Nilai variabel adalah nilai x – y. Apabila program dijalankan maka serial monitor akan menampilkan hasil penjumlahan dan pengurangan antara x dan y

Antarmuka sensor DHT-11 dengan menggunakan Arduino

Antarmuka sensor DHT-11 dengan menggunakan Arduino

DHT 11

DHT 11 adalah sejenis sensor yang memiliki kemampuan untuk mengukur suhu dan kelembaban ruangan. Sensor ini sangat mudah digunakan bersama Arduino dan memiliki kemampuan membaca suhu antara 0 s/d 50 derajat Celcius. Berikut ini adalah spesifikasi lengkap dari sensor ini:

Tegangan kerja3-5 Volt DC
Arus maksimal2.5 mA
rentang pengukuran suhu0-50 °C toleransi +- 2 °C
Rentang pengukuran kelembaban20-80% toleransi 5%

Pinout pada DHT 11

Modul DHT 11 terdiri dari 3 pin yaitu seperti gambar dibawah ini:

pin VCC digunakan untuk memberi supply listrik untuk sensor. Sesuai spesifikasi sensor, DHT 11 dapat disupply dengan menggunakan tegangan antara 3.3 – 5 volt. pemberian supply bisa langsung dari pin 5V pada Arduino atau menggunakan sumber tenaga lain seperti baterai dan powerbank.

pin OUT digunakan untuk mengirimkan sinyal ke Arduino. Sinyal dari pin ini akan diproses oleh Arduino yang outputnya berupa pembacaan suhu dan kelembaban ruangan.

pin GND adalah pin ground

Rangkaian Sensor DHT 11 dengan Arduino

Untuk dapat membaca suhu dan kelembaban, maka sensor DHT 11 harus dihubungkan ke microcontroller Arduino. Rangkaian sensor ini dengan DHT 11 relatif sangat mudah, perhatikan tabel dan gambar dibawah ini

DHT 11Arduino
pin VCCpin 5V
pin OUTpin 8
pin GNDpin GND

Menginstal Library DHT

Untuk dapat mengendalikan sensor DHT 11 dengan baik, kita perlu menginstal library DHT kedalam aplikasi Arduino IDE. Penggunaan library ini akan mempermudah kita dalam memprogram sensor DHT 11.

Langkah-langkat instalasi library DHT ikuti langkah-langkah berikut:

Program / Sketch

Setelah library berhasil diinstal, langkah berikutnya adalah menulis dan mengupload program ke dalam Arduino. Program dibawah ini akan menampikan hasil pembacaan sensor pada serial monitor. S

#include "DHT.h"

#define DHTPIN 8
#define DHTTYPE DHT11


DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("Antarmuka DHT 11"));

  dht.begin();
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");
}

Setelah program selesai ditulis, hubungkan Arduino dengan PC atau laptop, pastikan board dan port sudah disetting dengan benar sebelum mengupload. Bukalah Serial monitor dan perhatikan hasil pembacaan sensor. Jika pada layar serial monitor tampil tulisan “Gagal membaca sensor”, Periksalah kembali sambungan kabel antara Arduino dengan sensor DHT 11.

Penjelasan program

#include "DHT.h"

menambahkan (include) library DHT yang kita instal sebelumnya

#define DHTPIN 8
#define DHTTYPE DHT11

#define DHTPIN 8 : mendefinisikan pin 8 Arduino sebagai pin yang terhubung dengan DHT 11

#define DHTTYPE DHT11 : mendefinisikan jenis sensor DHT yang dipakai, dalam hal ini kita menggunakan DHT 11. Apabila sensor yang digunakan adalah sensor DHT22, maka diganti menjadi #define DHTTYPE DHT22.

dht.begin()

mengaktifkan sensor DHT11

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

mendeklarasikan variabel dengan tipe data float (desimal) untuk menyimpan data pembacaan sensor. variabel h akan menyimpan hasil pembacaan kelembaban, t akan menyimpan data suhu dalam Celcius, f akan menyimpan data suhu dalam Fahrenheit.

if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

Arduino akan menjalalankan fungsi if dengan logika jika hasil pembacaan sensor yang tersimpan di salah satu variabel h, t atau f bukan berupa angka (isnan = is not a number) maka Arduino akan menampilkan teks “Gagal membaca sensor” di layar serial monitor.

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");

Menampilkan hasil pembacaan sensor ke layar serial monitor. Hasil pembacaan sensor yang tampil di layar adalah kelembaban, suhu dalam celcius, dan suhu dalam Fahrenheit.

kode line follower 3

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;


//jika pergerakan robot terbalik antara kiri dan kanan, tukar A1 dan A0 
#define irLeft A1
#define irRight A0

//speed 4 motor gerak maju
int speedMaju = 100;
//speed 2 motor gerak gerak maju saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMaju = 100; 
//speed 2 motor gerak mundur saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMundur = 80;


//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    Stop();
    delay(20);
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    Stop();
    delay(20);
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedMaju);
  motor2.run(FORWARD);
  motor2.setSpeed(speedMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedMaju);
  motor4.run(FORWARD);
  motor4.setSpeed(speedMaju);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor1.setSpeed(speedBelokMundur);
  motor2.run(FORWARD);
  motor2.setSpeed(speedBelokMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedBelokMaju);
  motor4.run(BACKWARD);
  motor4.setSpeed(speedBelokMundur);
  
}
void moveLeft() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedBelokMaju);
  motor2.run(BACKWARD);
  motor2.setSpeed(speedBelokMundur);
  motor3.run(BACKWARD);
  motor3.setSpeed(speedBelokMundur);
  motor4.run(FORWARD);
  motor4.setSpeed(speedBelokMaju);
}

Kode line follower 2

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;


//jika pergerakan robot terbalik antara kiri dan kanan, tukar A1 dan A0 
#define irLeft A1
#define irRight A0

//speed 4 motor gerak maju
int speedMaju = 100;
//speed 2 motor gerak gerak maju saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMaju = 100; 
//speed 2 motor gerak mundur saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMundur = 80;


//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    Stop();
    delay(20);
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    Stop();
    delay(20);
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    Serial.println("Stop");
    delay(100);
    if (rightDistance <= leftDistance) {
      //left
      object = true;
      turn();
      Serial.println("moveLeft");
    } else {
      //right
      object = false;
      turn();
      Serial.println("moveRight");
    }
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedMaju);
  motor2.run(FORWARD);
  motor2.setSpeed(speedMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedMaju);
  motor4.run(FORWARD);
  motor4.setSpeed(speedMaju);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor1.setSpeed(speedBelokMundur);
  motor2.run(FORWARD);
  motor2.setSpeed(speedBelokMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedBelokMaju);
  motor4.run(BACKWARD);
  motor4.setSpeed(speedBelokMundur);
  
}
void moveLeft() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedBelokMaju);
  motor2.run(BACKWARD);
  motor2.setSpeed(speedBelokMundur);
  motor3.run(BACKWARD);
  motor3.setSpeed(speedBelokMundur);
  motor4.run(FORWARD);
  motor4.setSpeed(speedBelokMaju);
}

kode line follower

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;

//ir sensor
#define irLeft A0
#define irRight A1

//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

  motor1.setSpeed(120);
  motor2.setSpeed(120);
  motor3.setSpeed(120);
  motor4.setSpeed(120);
}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    Serial.println("Stop");

    lookLeft();
    lookRight();
    delay(100);
    if (rightDistance <= leftDistance) {
      //left
      object = true;
      turn();
      Serial.println("moveLeft");
    } else {
      //right
      object = false;
      turn();
      Serial.println("moveRight");
    }
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
}
void moveLeft() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);
}

Ringkasan Materi Informatika Semester 1 & 2

Ringkasan Materi Informatika Semester 1 & 2

Informatika

  1. Informatika, secara sederhana, adalah ilmu yang berkaitan dengan pengolahan, pengelolaan, dan pemanfaatan informasi menggunakan teknologi komputer. Bidang ini meliputi aspek pemrograman, analisis data, kecerdasan buatan (AI), keamanan cyber, jaringan komputer, dan berbagai topik lainnya yang terkait dengan teknologi informasi.
  2. Informatika memiliki peran besar di kehidupan modern seperti saat ini, hampir seluruh aspek kehidupan kita dipermudah dengan berkembangnya ilmu informatika.
  3. Informatika memainkan peran kunci dalam pengembangan teknologi komunikasi seperti internet, email, dan media sosial. teknologi ini memungkinkan orang untuk berkomunikasi secara instan dan efisien di seluruh dunia tanpa terkendala jarak dan waktu.
  4. Informatika telah mengubah cara kita belajar dan mengakses informasi. Adanya platform pembelajaran online, sumber daya digital, dan perangkat lunak pembelajaran membantu meningkatkan aksesibilitas pendidikan. Selain itu, kita juga memiliki akses ke sumber informasi dari berbagai belahan dunia dengan cepat dengan adanya mesin pencari.
  5. Dalam dunia bisnis, Informatika juga memainkan peran yang besar. Sistem manajemen bisnis, analisis data, e-commerce, dan perangkat lunak keuangan semuanya bergantung pada konsep-konsep informatika.
  6. Di bidang kesehatan, informatika digunakan untuk manajemen data pasien, pengembangan perangkat lunak medis, analisis genom, dan penelitian medis. Teknologi seperti telemedicine juga mengandalkan konsep informatika.
  7. Informatika adalah landasan dari pengembangan perangkat lunak. Dengan konsep-konsep seperti pemrograman komputer, pengujian perangkat lunak, dan pengelolaan proyek, informatika memungkinkan pembuatan berbagai jenis perangkat lunak.

Cara berfikir komputasional

  1. Berfikir komputasional adalah suatu pendekatan dalam menyelesaikan masalah atau memahami suatu konsep dengan cara yang mirip dengan cara/proses berpikir komputer. Konsep berfikir ini mencakup pemahaman algoritma, pemodelan data, pemecahan masalah sistematis, dan kemampuan untuk menerapkan konsep-konsep ini dalam situasi nyata.
  2. Keempat konsep utama dalam berfikir komputasional – dekomposisi, abstraksi, pola, dan algoritma – membentuk dasar untuk memecahkan masalah dengan pendekatan yang sistematis dan komputasional.
  3. Dekomposisi melibatkan pembagian masalah besar menjadi sub-masalah yang lebih kecil dan lebih mudah dikelola. Dengan memecah masalah kompleks menjadi bagian-bagian yang lebih kecil, kita dapat fokus pada setiap submasalah secara terpisah, membuat pemecahan masalah menjadi lebih efisien.
  4. Abstraksi adalah proses menyederhanakan kompleksitas atau kerumitan suatu masalah dengan mengabaikan detail atau bagian-bagian yang tidak relevan. cara memungkinkan kita untuk fokus pada aspek-aspek penting dari suatu masalah tanpa terjebak dalam kompleksitas yang tidak perlu. Dalam konteks berfikir komputasional, abstraksi dapat melibatkan penyederhanaan struktur data atau proses untuk memudahkan pemahaman dan implementasi.
  5. Mengidentifikasi pola melibatkan pemahaman tentang hubungan dan struktur dalam data atau masalah. Pola membantu kita memprediksi hasil, membuat generalisasi, dan memahami lebih baik cara suatu sistem bekerja.
  6. Algoritma adalah langkah-langkah terstruktur yang dirancang untuk menyelesaikan suatu masalah atau tugas. Algoritma bisa juga disebut sebagai panduan atau resep yang menunjukkan langkah-langkah yang harus diambil untuk mencapai hasil tertentu. Dalam berfikir komputasional, kemampuan untuk merancang algoritma yang efektif menjadi kunci. Algoritma harus efisien, dapat diulang, dan dapat diandalkan dalam menyelesaikan masalah tertentu.
  7. keempat konsep dalam berfikir komputasional dapat di integrasikan atau digabungkan agar penyelesaian masalah menjadi lebih cepat dan terstruktur.
    • a. Dekomposisi & Abstraksi: Saat mendekomposisi masalah, abstraksi membantu menyederhanakan setiap submasalah sehingga dapat dipecahkan dengan lebih mudah.
    • b. Dekomposisi & Algoritma: Submasalah yang dihasilkan dari dekomposisi dapat dipecahkan menggunakan algoritma yang sesuai untuk mencapai solusi keseluruhan.
    • c. Abstraksi & Pola: Abstraksi membantu dalam mengidentifikasi pola umum, memungkinkan kita untuk membuat generalisasi yang dapat diterapkan pada masalah serupa.
    • d. Pola & Algoritma: Identifikasi pola dapat membantu dalam merancang algoritma yang memanfaatkan pola tersebut untuk meningkatkan efisiensi dan akurasi solusi.

Arduino

  1. Arduino adalah platform perangkat keras dan perangkat lunak open-source yang dirancang untuk membuat prototipe dan mengembangkan proyek elektronika. Platform ini menyediakan berbagai papan mikrokontroler yang dapat diprogram untuk melakukan berbagai tugas. Papan mikrokontroler Arduino memiliki input dan output yang dapat digunakan untuk berinteraksi dengan berbagai sensor, aktuator, dan perangkat lainnya.
  2. Arduino memiliki karakteristik antara lain:
    • a. Open Source: Desain perangkat keras dan perangkat lunak Arduino bersifat open-source, yang berarti bahwa semua informasi yang diperlukan untuk membuat dan mengembangkan proyek Arduino dapat diakses secara bebas. Pengguna dapat memodifikasi dan menyesuaikan perangkat keras dan perangkat lunak sesuai kebutuhan mereka.
    • b. Mikrokontroler: Papan Arduino dilengkapi dengan mikrokontroler yang berfungsi sebagai otak dari sistem. Mikrokontroler ini dapat diprogram untuk melakukan berbagai tugas sesuai dengan kebutuhan proyek.
    • c. Integrated Development Environment (IDE): Arduino IDE adalah lingkungan pengembangan terpadu yang digunakan untuk menulis, mengunggah, dan menjalankan kode pada papan Arduino. IDE menyederhanakan proses pengembangan dengan menyediakan berbagai fitur dan alat bantu.
    • d. Soket Input/Output (I/O): Arduino memiliki pin input/output yang dapat digunakan untuk menghubungkan sensor, aktuator, dan perangkat lainnya. Ini memungkinkan pengguna untuk berinteraksi dengan lingkungan sekitar.
    • e. Kemudahan Penggunaan: Arduino didesain agar mudah digunakan, bahkan bagi pemula dalam bidang elektronika dan pemrograman. Ada banyak sumber daya dan tutorial online yang mendukung pengguna dalam memahami dan menggunakan Arduino.
  3. Arduino memiliki banyak konektor-konektor yang disebut dengan “pin”. Pin-pin ini dapat dihubungkan ke berbagai sensor, aktuator dan komponen-komponen elektronika lainnya.
  4. Berikut adalah beberapa kelompok utama pin pada Arduino Uno:
    • Pin Digital (D0-D13):
      • D0-D13 digunakan sebagai pin digital input atau output.
      • D2 dan D3 dapat mendukung fungsi interrupt.
      • D3, D5, D6, D9, D10, dan D11 dapat digunakan untuk menghasilkan sinyal PWM.
    • Pin Analog (A0-A5):
      • A0-A5 digunakan sebagai pin input analog untuk membaca tegangan antara 0 hingga 5 volt.
      • A4 dan A5 juga digunakan sebagai pin I2C (Inter-Integrated Circuit).
    • Port Serial (RX, TX):
      • RX dan TX digunakan untuk komunikasi serial dengan perangkat eksternal.
    • Port USB:
      • Digunakan untuk menghubungkan Arduino ke komputer atau perangkat USB lainnya.
    • Port Catu Daya:
      • Vin: Tegangan input eksternal.
      • 5V: Tegangan output dari regulator.
      • 3.3V: Tegangan output tetap 3.3 volt.
      • GND: Ground atau negatif.
    • Port I2C (SDA, SCL):
      • Digunakan untuk komunikasi I2C.
    • Port SPI (MISO, MOSI, SCK, SS):
      • Digunakan untuk komunikasi SPI.
    • Sampai pada materi ini, kita sudah mengenal pin digital (pin 0-13) dan pin GND.

Pemrograman Arduino

  1. Arduino memliki 2 struktur program yang terdiri dari 2 fungsi utama yaitu : setup() dan loop().
  2. Fungsi setup() dieksekusi hanya sekali saat program dimulai, dan biasanya digunakan untuk mengaktifkan pin, dan perangkat lain yang terhubung ke Arduino agar bisa di program.
  3. Fungsi loop() dieksekusi secara terus-menerus setelah setup(), dan berisi kode utama program yang akan dijalankan berulang kali. Proses pengendalian utama suatu mesin / komponen elektronika yang terhubung ke Arduino hampir sepenuhnya dilakukan disini.
  1. Perintah-perintah dasar yang bisa digunakan adalah :

pinMode()

Deskripsi

pinMode berfungsi untuk mengkonfigurasikan atau mengaktifkan pin sebagai output ataupun input.

Syntax

pinMode(pin, mode);

Parameter
pinnomor pin pada Arduino, atau variabel yang berisi nomor pin
modemode pengaturan pin : OUTPUT, INPUT, INPUT_PULLUP
Contoh Penggunaan
pinMode(4, INPUT);Mengaktifkan pin 4 sebagai input (biasanya digunakan untuk membaca sensor)
pinMode(4, OUTPUT);Mengaktifkan pin 4 sebagai output
int ledPin = 4;
pinMode(ledPin, OUTPUT);
Mengaktifkan ledPin (pin 4) sebagai output)
pinMode(4, INPUT_PULLUP);mengaktifkan 4 sebagai input dengan pull up resistor internal

digitalWrite()

Deskripsi

Memberi nilai berupa HIGH atau LOW pada pin digital. Pin yang diberi nilai sebelumnya harus telah diaktifkan sebagai OUTPUT dengan pinMode. Nilai HIGH dan LOW bisa disamakan artinya dengan “on” dan “off”, “1” atau “0”, “hidup” dan “mati”.

Syntax

digitalWrite(pin, value);

Parameter
pinnomor pin pada Arduino, atau variabel yang berisi nomor pin
valueHIGH untuk membuat pin menjadi “on”
LOW untuk membuat pin menjadi “off”
Contoh Penggunaan
digitalWrite(4, HIGH);Perintah pin 4 “on”
digitalWrite(4,LOW);Perintah pin 4 “off”
int ledPin = 4;
digitalWrite (ledPin, HIGH);
perintah variabel ledPin (pin 4) “on”

Delay

Deskripsi

Menghentikan program sementara selama x milidetik (ms)

Syntax

delay(ms)

Parameter
msDiisi dengan nilai waktu dalam milidetik, misalnya 1000 = 1 detik, 500 = 1/2 detik, 2000 = 2 detik
Contoh Penggunaan
delay(1000);menghentikan pembacaan program selama 1 detik
delay(500);menghentikan pembacaan program selama 1/2 detik

Variabel

Penjelasan tentang variabel bisa dibaca pada tulisan dibawah ini:

JudulLink Bacaan
Menggunakan Variabelhttps://helmydx.my.id/2023/11/19/menggunakan-variabel/
Variabel dan Operator matematikahttps://helmydx.my.id/2023/11/23/variabel-dan-operator-aritmatika/

Fungsi Logika dan Perulangan

JudulLink Bacaan
Logika IF, IF-ELSE, ELSEhttps://helmydx.my.id/2023/11/24/logika-if/
Perulangan FOR dan Whilehttps://helmydx.my.id/2023/11/26/perulangan-for-dan-while/

KISI-KISI dan CONTOH SOAL dapat kalian download pada link dibawah ini:

https://docs.google.com/document/d/1d9mOmrlIFWuFzNB7_1PuiyntWD7tbq0Q/edit?usp=sharing&ouid=104727008984896572320&rtpof=true&sd=true

Selamat melaksanakan ujian

Perulangan FOR dan WHILE

Perulangan FOR dan WHILE

Kalau sebelumnya kita sudah mengetahui cara menggunakan fungsi logika IF da ELSE, maka kali ini kita akan mempelajari bagaimana caranya agar Arduino bisa melakukan kendali lebih dalam lagi dan menyederhanakan program kita buat. Pada akhir tulisan ini, kita akan bisa membuat animasi lampu LED seperti pada video yang ada dibawah ini:

Dari video diatas, secara sederhana kita bisa membuatnya dengan program seperti dibawah ini:

void loop () {
   digitalWrite(8, HIGH);
   delay(100);
   digitalWrite(8, LOW);
   delay (100);
// diketik ulang sampai 10 kali

   digitalWrite(9, HIGH);
   delay(100);
   digitalWrite(9, LOW);
   delay (100);
//diketik ulang sampai 10 kali

   digitalWrite(10, HIGH);
   delay(100);
   digitalWrite(10, LOW);
   delay (100);
//diketik ulang sampai 10 kali
}
  

Jika jumlah lampu LED yang digunakan hanya 2 atau 3 buah saja tentu akan sangat mudah, namun, bagaimana jika lampu LED yang kita gunakan berjumlah lebih dari 10? Tentu saja program yang akan kita ketik akan sangat panjang.

Untuk itu kita akan mempelajari cara melakukan perulangan pembacaan program dengan fungsi FOR agar program yang kita ketik akan lebih pendek dan sederhana.

FOR


FOR adalah salah satu jenis perulangan (loop) dalam pemrograman yang digunakan untuk mengulangi blok kode secara berulang.

Secara umum fungsi FOR akan dituliskan sebagai berikut:

  • Nilai awal adalah nilai permulaan hitungan perulangan, biasanya dituliskan dalam bentuk variabel angka (integer). Nilai awal ini digunakan sebagai titik awal perulangan. dalam hal ini nilai awal adalah: int i = 0; yang bisa diartikan sebagai “nilai awal adalah 0”
  • Kondisi yang akan diperiksa adalah kondisi yang akan terus dievaluasi setiap kali program diulang, jika kondisi ini masih “benar” atau “true” maka perulangan akan terjadi dan program akan dibaca oleh Arduino dan sebaliknya jika kondisi “false” atau “salah” maka perulangan akan berhenti dan Arduino aka melanjutkan pembacaan program ke baris berikutnya. kondisi yang akan dievaluasi dari contoh diatas adalah: i<10; yang bermakna “jika nilai i lebih dari 10”
  • Penambahan pada bagian akhir loop ditulis i++, yang artinya “nilai i ditambah 1”. nilai i akan bertambah 1 setiap kali perulangan sampai akhir nya nilai i < 10
  • perulangan program akan terus terjadi jika nilai i kurang dari 10, ketika nilai i sudah lebih dari 10 maka Arduino akan keluar dari perulangan dan baris berikutnya

Perhatikan contoh dibawah ini

for(int i = 0; i<10; i++) {
    digitalWrite(8, HIGH);
    delay(300);
    digitalWrite(8,LOW);
    delay(300);
}
delay(2000);

Program diatas akan mengedipkan lampu LED pada pin 8 sebanyak 10 kali lalu berhenti selama 2 detik dengan perulangan sebagai berikut:

  • pada putaran pertama nilai i adalah 0, program akan membaca barisan yang ada didalam blok sehingga LED akan berkedip hidup dan mati sekali dengan delay 300 setelah itu nilai i bertambah 1 sehingga i=1
  • pada putaran kedua fungsi for akan mengevaluasi kondisi variabel i apakah bernilai < 10, jika iya, program akan membaca barisan yang ada didalam blok sehingga LED akan berkedip hidup dan mati lagi dengan delay 300 dan nilai i akan bertambah lagi 1 sehingga i =2
  • putaran ketiga dan selanjutnya sama dengan putaran yang kedua, jika nilai i masih kurang dari 10, LED akan berkedip dan i ditambah satu.
  • Akhirnya pada putaran ke 11 nilai i sudah lebih dari 10, maka program akan keluar dari perulangan dan membaca baris berikutnya yaitu delay(2000);

perhatikan output nya pada video berikut

Jadi untuk menghidupkan 3 lampu secara bergantian dimana setiap lampu berkedip-kedip sebanyak 10 kali, program yang harus kita tulis adalah:

  for(int a=0; a<=10; a++){
    digitalWrite(8,HIGH);
    delay(200);
    digitalWrite(8,LOW);
    delay(200);
  }
  for(int b=0; b<=10; b++){
    digitalWrite(9,HIGH);
    delay(200);
    digitalWrite(9,LOW);
    delay(200);
  }
  for(int c=0; c<=10; c++){
    digitalWrite(10,HIGH);
    delay(200);
    digitalWrite(10,LOW);
    delay(200);
  }

delay(2000);

dan hasilnya akan terlihat seperti ini:

WHILE

Selain menggunakan FOR, kita bisa menggunakan fungsi WHILE untuk melakukan perulangan kondisional.

//WHILE

int a = 0;
while(a<20){
   digitalWrite(8, HIGH);
   delay(200);
   digitalWrite(8, LOW);
   delay(200);
   a++;
}

dan hasilnya sama dengan menggunakan FOR:

Logika IF, ELSE IF dan ELSE

white and green computer parts beside laptop

Program yang telah kita buat sebelumnya akan dibaca dan dilaksanakan oleh Arduino baris perbaris secara berurutan dan ketika program sudah sampai ke baris yang paling bawah maka Arduino akan membaca program dari atas kembali, perhatikan kembali program mengedipkan lampu dibawah ini:

int waktu = 100;
int Pin = 3;

void setup () {
   pinMode(Pin, OUTPUT); 
}

void loop () {
   digitalWrite(Pin, HIGH); 
   delay(waktu); 
   digitalWrite(Pin, LOW);
   delay(waktu);
   waktu=waktu + 50;
}

Pada program diatas digitalWrite(Pin, HIGH) akan pertama kali dibaca oleh Arduino lalu dilanjutkan ke baris berikutnya yakni delay(waktu). Begitu seterusnya sampai baris terakhir, lalu program akan membaca ulang dari atas kembali.

Waktu delay secara otomatis dan bertahap akan bertambah dengan penambahan nilai 50 setiap kali perulangan program yang mengakibatkan lama-kelamaan lampu akan kedipan lampu akan melambat seperti pada video dibawah ini:

Program diatas memiliki 1 kelemahan, yaitu nilai variabel “waktu” akan bertambah terus sampai akhirnya lampu LED tidak berkedip lagi. Pada tulisan ini, kita akan mencoba untuk menambah beberapa baris program agar nilai variabel “waktu” akan kembali ke nilai awal ketika mencapai kondisi tertentu.

Perhatikan program berikut ini:

int waktu = 100;
int Pin = 3;

void setup () {
   pinMode(Pin, OUTPUT); 
}

void loop () {
   digitalWrite(Pin, HIGH); 
   delay(waktu); 
   digitalWrite(Pin, LOW); 
   delay(waktu); 
   waktu=waktu + 50; 

   if(waktu == 1000){
     waktu = 100; 
   }  
}

Penjelasan

Pada baris ke 13, nilai variabel “waktu” saat ini ditambah 50, sehingga setiap kali perulangan nilai “waktu” akan bertambah 50 menjadi 150, 200, 250 dst.

Pada baris ke 15 kita tambahkan fungsi logika IF:

if(waktu == 1000) {
   waktu = 100;
}

fungsi logika diatas bermakna “jika nilai variabel waktu sama dengan 1000, maka nilai variabel waktu kembali ke 100”. Dengan cara ini setiap kali nilai variabel “waktu” yang digunakan oleh delay mencapai nilai 1000, maka pada perulangan berikutnya akan kembali ke nilai 100 sehingga lampu LED berkedip cepat kembali. perhatikan video berikut ini:

Logika IF ini bisa diaplikasikan ke berbagai project seperti mengendalikan output berdasarkan hasil pembacaan sensor. Kita juga dapat membuat beberapa kondisi bertingkat dengan menambahkan ELSE. Sebagai contoh, kita bisa mengendalikan sebuah buah kipas angin dan sebuah AC berdasarkan kondisi suhu yang dirasakan sensor saat ini. perhatikan contoh dibawah ini.

if(suhu>=30){
  hidupkanAC;
  matikanKipas;
}
else {
  hidupkanKipas;
  matikanAC;
}

Jika (if) suhu ruangan lebih besar atau sama dengan 30 derajat celcius, maka hidupkan AC dan matikan kipas angin, jika lain daripada itu (else) hidupkan kipas angin dan matikan AC.

fungsi logika IF juga bisa terdiri dari banyak kondisi, misalnya kita akan mengendalikan kecepatan sebuah kipas angin berdasarkan jumlah orang yang masuk kedalam ruangan. Perhatikan lagi contoh program dibawah ini:

if (orang==1){
   kipasSpeed1;
}
else if (orang <=3) {
   kipasSpeed2;
}
else if (orang > 5) {
   kipasSpeed3;
}
else {
   matikanKipas;
}

Jika orang didalam ruangan berjumlah sama dengan 1 maka hidupkan kipas dengan kecepatan 1, jika orang kurang dari atau sama dengan 3 orang, maka kipas kecepatan 2, jika orang lebih dari 5, maka hidupkan kipas kecepatan 3, selain daripada itu matikan kipas.

Pada program diatas, kita menggunakan operator sama dengan (==), lebih kecil dari atau sama dengan (<=) dan lebih besar dari (>). Lambang lengkap dari operator-operator diatas beserta fungsinya bisa kita lihat pada tabel dibawah ini

OperatorArtiContohHasil
<Kurang dari7 < 8
8 > 7
true
false
>Lebih dari8 > 7
7 > 8
true
false
<=Kurang dari sama dengan8 <= 7
7 <=7
true
true
>=lebih dari sama dengan7 >= 7
8 >= 7
true
true
==Sama dengan8 == 8
8 == 9
True
False
!=tidak sama dengan8 != 8
8 != 9
false
true

Jadi, dengan logika IF, ELSE IF, dan ELSE kita bisa membuat sistem kendali Arduino dengan berbagai kondisi atau syarat sesuai keinginan kita atau sesuai pembacaan sensor.

Demikian tulisan ini, sampai jumpa di materi berikutnya yang akan membahas tentang fungsi perulangan for dan while.

Variabel dan Operator Aritmatika

Variabel dan Operator Aritmatika

Sebelumnya kita telah mengenal apa itu variabel dan cara menggunakannya untuk mengganti nilai delay() seperti pada program dibawah ini:

Pada program diatas, kita hanya butuh mengganti nilai variabel “waktu” dengan nilai angka yang kita ingikan. jika kita tuliskan int waktu = 100; maka secara otomatis nilai “waktu” yang terdapat didalam delay akan berubah menjadi 100 juga.

Selain itu, kita juga dapat memanipulasi data yang ada didalam variabel secara otomatis dengan cara melakukan operasi aritmatika didalam void loop. Perhatikan contoh berikut.

int waktu = 100;
int Pin = 3

void setup () {
   pinMode(Pin, OUTPUT);
}

void loop () {
   digitalWrite(Pin, HIGH);
   delay(waktu);
   digitalWrite(Pin, LOW);
   delay(waktu);
   waktu = waktu + 50;
}

Penjelasan

Pada baris pertama dan kedua kita deklarasikan variabel bernama waktu dan pin, dimana variabel waktu memiliki data angka bernilai 100 dan variabel pin bernilai 3. nilai pada variabel waktu akan kita gunakan sebagai nilai untuk parameter delay dan nilai pada varibel Pin akan kita gunakan untuk mendefinisikan nomor pin.

int waktu = 100;
int Pin = 3

Pada baris ke-5 kita tidak lagi menuliskan pinMode(3, OUTPUT), melainkan pinMode(Pin, OUTPUT). Begitu juga pada garis ke-9 dan 11 tidak lagi dituliskan sebagai digitalWrite(3, HIGH) atau digitalWrite(3, LOW), melainkan digitalWrite(Pin, LOW).

digitalWrite(Pin, HIGH);

Fungsi delay juga sudah menggunakan nilai variabel “waktu” sebagai nilai parameternya sehingga ditulis

delay(waktu);

Berikutnya pada baris ke-13, kita menemukan instruksi

waktu = waktu + 50;

Baris ini bermakna “nilai variabel waktu adalah sama dengan nilai saat ini ditambah 50” sehingga variabel “waktu” akan berubah nilainya secara otomatis dari yang awalnya bernilai 100 menjadi 150 (waktu + 50) dan karena operasi aritmatika digunakan di dalam void loop() maka setiap kali perulangan program terjadi nilai delay() akan bertambah 50, sehingga lama kelamaan LED akan berkedip lebih lambat dari sebelumnya. Perhatikan video berikut:

Selain penjumlahan, kita juga bisa menggunakan operator aritmatika lainnya yaitu:

OperatorLambang
Penjumlahan+
Pengurangan
Perkalian*
Pembagian/
Modulus / Sisa bagi%

Akhirnya, semoga tulisan ini dapat dipahami dan menjadi sumber pengetahuan bagi kita semua. Pada tulisan berikutnya kita akan pengendalian dengan menggunakan logika dan algoritma perulangan dan mengimplementasikannya ke pengendalian LED.