Tutorial Arduino Kalibrasi Sensor Line Follower Multiplexer CD-45051

Pada kesempatan kali ini saya akan menulis artikel tenang Cara Kalibrasi Sensor Garis dengan Arduino dan disimpan pada EEPROM.

kalibrasi sensor sangat penting apalagi untuk membuat sebuah pengendalian, pada kesempaan kali ini saya akan membua contoh kalibrasi sensor garis yang biasa digunakan pada robot line follower
sebelumnya saya sudah menulis artikel tentang Cara membaca Sensor Garis Multiplexer IC 5051 Arduino, dan artikel ini merupakan kelanjutan dari artikel tersebut.

Keyword :
arduino sensor garis, cara kalibrasi sensor garis, kalibrasi sensor garis, menyimpan data di EEPROM, eeprom sensor garis, arduino EEPROM, tutorial line follower, membuat line follower

jika belum membuat rangkaian simulasinya silahkan dibuat terlebih dahulu, dan kamu bisa lihat gambar berikut untuk membuat rangkaianya.

cara kerja kalibrasi ini adalah sebagai berikut :

terdapat sebuah tombol yang apa bila ditekan satu kali maka akan melakukan kalibrasi sedangkan Serial monitor secara realtime akan terus menampilkan nilai sensor yang sebenarnya, dan LCD akan menampilkan data biner dari Sensor.

Skematic Line Follower Arduino Nano | Eagle
Skematik Line Follower Atemga16/32  | Eagle

untuk membuat project tersebut silahkan upload program berikut berupa file.hex nya ke simulasi arduino proteus

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define kendaliLed1 12
#define kendaliLed2 13
#define kendaliTombol 2
unsigned int sensor[8], nilaiMin[8], nilaiMax[8], nilaiRef[8];
int i, x=0;
boolean biner[8];
void KendaliSelector(int c, int b, int a){
  digitalWrite (A1, a);
  digitalWrite (A2, b);
  digitalWrite (A3, c);
}
void KendaliBacasensor (){
  KendaliSelector (0,0,0);
  sensor[0] = analogRead (A0)/4;
  KendaliSelector (0,0,1);
  sensor[1] = analogRead (A0)/4;
  KendaliSelector (0,1,0);
  sensor[2] = analogRead (A0)/4;
  KendaliSelector (0,1,1);
  sensor[3] = analogRead (A0)/4;
  KendaliSelector (1,0,0);
  sensor[4] = analogRead (A0)/4;
  KendaliSelector (1,0,1);
  sensor[5] = analogRead (A0)/4;
  KendaliSelector (1,1,0);
  sensor[6] = analogRead (A0)/4;
  KendaliSelector (1,1,1);
  sensor[7] = analogRead (A0)/4;
}
void KendaliTampilsensor (){
  bacaSensorbiner();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(biner[0]);
  lcd.setCursor(1,0);
  lcd.print(biner[1]);
  lcd.setCursor(2,0);
  lcd.print(biner[2]);
  lcd.setCursor(3,0);
  lcd.print(biner[3]);
  lcd.setCursor(4,0);
  lcd.print(biner[4]);
  lcd.setCursor(5,0);
  lcd.print(biner[5]);
  lcd.setCursor(6,0);
  lcd.print(biner[6]);
  lcd.setCursor(7,0);
  lcd.print(biner[7]);
  lcd.setCursor (1,1);
  lcd.print ("Sensor Biner");
}
void setup() {
pinMode (A1, OUTPUT);
pinMode (A2, OUTPUT);
pinMode (A3, OUTPUT);
pinMode (kendaliLed1, OUTPUT);
pinMode (kendaliLed2, OUTPUT);
pinMode (kendaliTombol, INPUT);
digitalWrite(kendaliTombol, HIGH);
Serial.begin(9600);
lcd.begin();
dataSensor();
}
void loop() {
tampilDatasensor();
if (digitalRead(kendaliTombol)==LOW){
  while (digitalRead(kendaliTombol)==LOW){
  }
  kalibrasi();
}

 KendaliTampilsensor ();
}
void kalibrasi (){
  lcd.clear();
  lcd.print ("kalibrasi on !");
  Serial.println ("kalibrasi on !");
 for (i=0; i<8; i++){
  nilaiMin[i] = 1023;
  nilaiMax[i] = 0;
 }
 delay(100);
 while (digitalRead(kendaliTombol) == HIGH){
  digitalWrite (12, HIGH);
  digitalWrite (13, LOW);
  delay(100);
  KendaliBacasensor();
  for(i=0;i<8;i++){
    if(sensor[i] > nilaiMax[i]) nilaiMax[i] = sensor[i];
    if(sensor[i] < nilaiMin[i]) nilaiMin[i] = sensor[i];
  }
  digitalWrite (12, LOW);
  digitalWrite (13, HIGH);
  delay(100);
 }
 lcd.clear();
 lcd.print("Kalibrasi DONE!!");
 Serial.println("Kalibrasi DONE!!");
 digitalWrite (12, HIGH);
 digitalWrite (13, HIGH);
 for(i=0;i<8;i++){
  nilaiRef[i] = (nilaiMax[i] + nilaiMin[i])/2.1;
  EEPROM.write(i,nilaiRef[i]);
 }
 delay(500);
}
void bacaSensorbiner(){
  KendaliBacasensor();
  if (sensor[0] > nilaiRef[0]){
    biner[0] = 0;
  }
  else {
    biner[0] = 1;
  }
    if (sensor[1] > nilaiRef[1]){
    biner[1] = 0;
  }
  else {
    biner[1] = 1;
  }
    if (sensor[2] > nilaiRef[2]){
    biner[2] = 0;
  }
  else {
    biner[2] = 1;
  }
    if (sensor[3] > nilaiRef[3]){
    biner[3] = 0;
  }
  else {
    biner[3] = 1;
  }
    if (sensor[4] > nilaiRef[4]){
    biner[4] = 0;
  }
  else {
    biner[4] = 1;
  }
    if (sensor[5] > nilaiRef[5]){
    biner[5] = 0;
  }
  else {
    biner[5] = 1;
  }
    if (sensor[6] > nilaiRef[6]){
    biner[6] = 0;
  }
  else {
    biner[6] = 1;
  }
    if (sensor[7] > nilaiRef[7]){
    biner[7] = 0;
  }
  else {
    biner[7] = 1;
  }
}
void tampilDatasensor(){
  for(i=0;i<8;i++){
    Serial.print(sensor[i]);
    Serial.print("  ");
  }
  Serial.println(" ");
  delay(100);
}
void dataSensor(){
  for(i=0;i<8;i++){
    nilaiRef[i]=EEPROM.read(i);
  }
}

berikut adalah Demo video hasil dari program diatas :

chaerul

Recent Posts

Panduan Lengkap: Cara Menyiapkan Klaster Kubernetes pada Ubuntu 22.04 LTS

Pendahuluan Dalam dunia pengembangan perangkat lunak yang terus berkembang, Kubernetes telah muncul sebagai alat kunci dalam orkestrasi…

1 week ago

AplikasiAkademik.com: Solusi Terbaik untuk Manajemen Sekolah yang Efisien

Mengelola sebuah sekolah atau lembaga pendidikan adalah tugas yang kompleks dan penuh tantangan. Dengan berbagai…

7 months ago

Cara Mudah Menginstal OpenVPN Server di Ubuntu 20.04 di Huaweicloud Panduan Langkah demi Langkah

Selamat datang di artikel kami tentang cara menginstal OpenVPN server di Ubuntu 20.04 di HuaweiCloud!…

12 months ago

Install Docker Portainer dan Nginx Proxy Manager Ubuntu Server

Dalam dunia pengembangan aplikasi, salah satu hal yang menjadi penting adalah mengelola dan memonitor kontainer…

1 year ago

Tutorial led blinking lengkap, Wiring & Code

Tutorial led blinking. LED (Light Emitting Diode) merupakan salah satu komponen elektronik yang paling umum…

1 year ago

Tutorial LCD Display Lengkap dengan wiring & code untuk pemula

Tutorial LCD Display, ini merupakan salah satu komponen yang sering digunakan dalam project elektronika sebagai…

1 year ago