Langsung ke konten utama

Project Arduino Uno: Alat Ukur Tandon Air dan Otomatis Pompa

Deskripsi Singkat:

Proyek ini menggunakan Arduino Uno untuk mengukur volume air di tandon atau tangki dengan sensor ultrasonik. Informasi tentang volume air ditampilkan di layar LCD 20x4. Proyek ini juga mengotomatiskan kendali pompa air menggunakan servo motor, yang aktif atau mati berdasarkan tingkat ketinggian air yang terdeteksi.

Tujuan:

  • Mengukur ketinggian air di tandon/tangki menggunakan sensor ultrasonik.
  • Menampilkan volume air di LCD dalam bentuk angka dan grafik bar.
  • Mengontrol pompa air secara otomatis menggunakan servo motor berdasarkan ketinggian air di tandon.

Komponen yang Digunakan:

  1. Arduino Uno - Sebagai pusat pemrosesan data.
  2. Sensor Ultrasonik HC-SR04 - Mengukur ketinggian air dengan menghitung waktu pantulan gelombang suara.
    • Pin Echo: Digunakan untuk menerima pantulan.
    • Pin Trig: Digunakan untuk mengirim sinyal ultrasonik.
  3. LCD 20x4 dengan I2C Module - Menampilkan informasi volume air dan status pompa.
    • I2C_ADDR: Alamat I2C dari LCD (0x27).
  4. Servo Motor - Mengontrol katup pompa air secara otomatis.
  5. Pompa Air - Diatur oleh servo motor untuk mengisi atau menghentikan aliran air berdasarkan ketinggian air yang terukur.

Penjelasan Program:

  1. Library yang Digunakan:
    • LiquidCrystal_I2C: Untuk mengontrol LCD melalui protokol I2C.
    • Servo: Untuk mengontrol pergerakan servo motor.
  2. Inisialisasi Pin dan Variabel:
    • I2C_ADDR: Alamat komunikasi I2C untuk LCD adalah 0x27.
    • TRIG_PIN dan ECHO_PIN: Pin untuk mengirim dan menerima sinyal ultrasonik.
    • pinser: Pin 9 untuk mengontrol servo motor.
    • rotasi: Variabel untuk menyimpan posisi servo motor.
  3. Karakter Custom: Karakter custom digunakan untuk membuat bar volume di LCD. Karakter ini terdiri dari 5x8 pixel yang ditampilkan sebagai indikator tingkat volume air (bar penuh dan kosong).
  4. Fungsi setup():
    • Inisialisasi LCD dan sensor: Mengaktifkan LCD dan menampilkan data ke layar.
    • Servo Motor: Dikalibrasi pada posisi 0 derajat untuk memulai dalam keadaan mati.
    • Pembuatan karakter custom: Karakter khusus untuk grafik bar ditampilkan di LCD.
  5. Fungsi bacasensor(): Fungsi ini bertugas membaca data dari sensor ultrasonik, menghitung waktu pantulan, dan mengonversinya ke jarak dalam cm. Jarak ini digunakan untuk menghitung volume air.
  6. Fungsi loop():
    • Baca Sensor dan Hitung Volume Air: Jarak yang terbaca dari sensor ultrasonik diubah menjadi volume air dengan menggunakan fungsi map().
    • Tampilkan Volume di LCD: Volume air ditampilkan di LCD dalam liter dan juga dalam bentuk bar.
    • Mengontrol Servo Motor:
      • Jika volume air kurang dari 10% (volume ≤ 10), servo bergerak ke posisi 180 derajat, yang menunjukkan bahwa pompa air menyala.
      • Jika volume air lebih dari 10%, pompa tetap hidup.
      • Jika volume air mencapai 100%, pompa mati, dan servo kembali ke posisi 0 derajat.
  7. Logika Pengendalian Pompa:
    • Ketika air di bawah level 10%, pompa air menyala dan mulai mengisi air (servo bergerak ke 180°).
    • Ketika air mencapai 100%, pompa air mati (servo kembali ke 0°).
    • Sistem ini membantu mengotomatisasi proses pengisian air, sehingga air tidak meluap atau habis.

Kesimpulan:

Proyek ini memanfaatkan sensor ultrasonik untuk mengukur ketinggian air di tandon dan mengontrol pompa air secara otomatis. Dengan menggunakan servo motor untuk mengatur pompa dan menampilkan volume air di LCD, sistem ini dapat menjaga tandon tetap penuh secara efisien dan menghemat energi dengan mematikan pompa secara otomatis saat tandon penuh.

Keunggulan Proyek:

  • Pengukuran Otomatis: Tidak perlu pengukuran manual karena sensor ultrasonik akan memantau ketinggian air secara otomatis.
  • Kontrol Otomatis Pompa: Pompa dikontrol secara otomatis oleh Arduino berdasarkan tingkat ketinggian air.
  • Tampilan Informasi: Informasi volume air ditampilkan secara real-time di layar LCD, sehingga mudah untuk dipantau.
Flowchart:





Hasil Rakit alat dan program :

1. Air Tandon penuh



2. Air tandon kurang dari 10



3. Pompa menyala otomatis








Program :

#include <LiquidCrystal_I2C.h> //library LCD
#define I2C_ADDR    0x27 // untuk alamat I2C
#define LCD_COLUMNS 20 // untuk jumlah kolom
#define LCD_LINES   4 // untuk jumblah baris
// Inisialisasi LCD dengan alamat I2C 0x27, ukuran 20x4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

#define ECHO_PIN 2 // definisi pin echo sensor ultrasonic
#define TRIG_PIN 3 //definisi pin triger sensor ultrasonic

#define pinser 9 //pin servo
#include <Servo.h>  // Menambahkan library Servo
Servo myservo;  // Membuat objek Servo
int rotasi=0; //membuat nilai rotasi

// Definisikan karakter custom (8x5 pixel grid)
byte habis1[8] = {
  B11111,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B11111
};

byte habis2[8] = {
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111
};

byte habis3[8] = {
  B11111,
  B00001,
  B00001,
  B00001,
  B00001,
  B00001,
  B00001,
  B11111
};

byte penuh1[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
};

void setup() {
  Serial.begin(9600);
  // Init
  lcd.init(); // untuk inisiasi LCD (menyalakan)
  lcd.backlight(); // untuk menyalakan lampu backlight LCD
  lcd.clear(); // untuk clear LCD jika ada karakter 

  // Membuat custom karakter di lokasi memori LCD (0-7)
  lcd.createChar(0, habis1);  // Menyimpan habis1 di lokasi memori 0
  lcd.createChar(1, habis2);   // Menyimpan habis2 di lokasi memori 1
  lcd.createChar(2, habis3); // Menyimpan habis3 di lokasi memori 2
  lcd.createChar(3, penuh1); // Menyimpan penuh1 di lokasi memori 3

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  myservo.attach(pinser);  // Menghubungkan servo ke pin digital 9 Arduino
  myservo.write(0); // agar servo ke 0 derajat (kalibrasi)
}

// untuk membaca sensor ultrasonik
float bacasensor() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  unsigned int duration = pulseIn(ECHO_PIN, HIGH);
  return duration * 0.034 / 2;
}

void loop() {

  float hasil = bacasensor();
  if (hasil>=110) {hasil=110;} //agar hasil tidak lebih dari 110 yg bisa menyebabkan - pada volume
  float volume = map(hasil,110,0,0,110); // merubah nilai 0 menjadi 100 dan sebaliknya menggunakan maping
  Serial.print("volume Air: ");
  Serial.println(volume);
  
  //menampilkan tulisan volume air dan L
  lcd.setCursor(0, 0); 
  lcd.print("Volume Air :");
  lcd.setCursor(19, 0);
  lcd.print("L");
  lcd.setCursor(14, 3);
  lcd.print("%");

  // membuat bar volume air dengan costume karakter
  int maxbar = map(volume,0,100,0,10); // merubah nilai volume ke maxbar menggunakan maping
  if (maxbar >= 10){maxbar=10;}
  for (int i = 0; i < maxbar; i++){
  lcd.setCursor(i, 3);
  lcd.write(byte(3));  //bar penuh
  }  
  for (int j = 9; j >= maxbar; j--){
  lcd.setCursor(j, 3);
    if (j==0){lcd.write(byte(0)); }
    if (j==9){lcd.write(byte(2)); }
    else {lcd.write(byte(1));}  // bar kosong
  }  

  // membuat persentase bar tampil di lcd
  int perbar = volume;
  if (perbar >=100){perbar=100;}
  if (perbar < 10){
  lcd.setCursor(11, 3);
  lcd.print("  ");
  lcd.setCursor(13, 3);
  lcd.print(perbar);
  lcd.setCursor(16, 3);
  lcd.print("    ");
}
if (volume >= 10 && volume <100){
  lcd.setCursor(11, 3);
  lcd.print(" ");
  lcd.setCursor(12, 3);
  lcd.print(perbar);
  lcd.setCursor(16, 3);
  lcd.print("    ");
}
if (volume >= 100){
  lcd.setCursor(11, 3);
  lcd.print(perbar);
  lcd.setCursor(16, 3);
  lcd.print("FULL");
}

// membuat volume tampil di lcd
if (volume < 10){
  lcd.setCursor(12, 0);
  lcd.print("  ");
  lcd.setCursor(14, 0);
  lcd.print(volume);
}
if (volume >= 10 && volume <100){
  lcd.setCursor(12, 0);
  lcd.print(" ");
  lcd.setCursor(13, 0);
  lcd.print(volume);
}
if (volume >= 100){
  lcd.setCursor(12, 0);
  lcd.print(volume);
}

//menggerakkan motor servo
if (volume <= 10.00 && rotasi == 0){
  myservo.write(180); //servo bergerak ke 180
  lcd.setCursor(0, 1);
  lcd.print("Pompa Air Hidup");
  delay(50);
}
if (volume > 10.00 && rotasi == 180){
  myservo.write(180); //servo bergerak ke 180
  lcd.setCursor(0, 1);
  lcd.print("Pompa Air Hidup");
  delay(50);
}
// jika volume kurang dari, maka servo nyala
if (volume >= 100){ 
  myservo.write(0); //servo bergerak ke 0
  lcd.setCursor(0, 1);
  lcd.print("Pompa Air Mati ");
  delay(50);
} 
}

Postingan populer dari blog ini

Plants Into Pets Menggunakan ESP32 Berbasis IoT

Plants Into Pets Menggunakan ESP32 Berbasis IoT "Plants into Pet" adalah proyek inovatif yang mengintegrasikan teknologi IoT untuk meningkatkan interaksi antara pemilik dan tanaman hias. Menggunakan ESP32 sebagai pusat sistem, proyek ini dilengkapi empat sensor: sentuh, getaran, cahaya, dan kelembaban tanah. Sensor-sensor ini memungkinkan tanaman "berkomunikasi" melalui layar OLED yang menampilkan emoji responsif sesuai kondisi, seperti saat membutuhkan penyiraman atau pencahayaan. Data juga dapat dipantau secara real-time melalui aplikasi Blynk, memberikan umpan balik langsung. Proyek ini tidak hanya menawarkan solusi praktis untuk perawatan tanaman tetapi juga menciptakan hubungan emosional yang lebih mendalam, menjadikan pengalaman merawat tanaman lebih interaktif dan bermakna. Tujuan     Proyek ini bertujuan untuk: Meningkatkan Interaksi dengan Tanaman Hias Menghadirkan pengalaman interaktif dengan memungkinkan tanaman "berkomunikasi" melalui emoji re...

Project Bluetooth Light : Kontrol Relay Menggunakan Arduino dan Bluetooth HC-05

Project Bluetooth Light : Kontrol Relay Menggunakan Arduino dan Bluetooth HC-05 1. Judul Proyek: Kontrol Relay Menggunakan Arduino dan Bluetooth HC-05 2. Tujuan Proyek: Proyek ini bertujuan untuk mengontrol relay menggunakan komunikasi Bluetooth. Relay akan dikendalikan dengan perintah yang dikirim dari smartphone melalui modul Bluetooth HC-05 , di mana perintah '1' akan menyalakan relay, dan perintah '0' akan mematikan relay. 3. Alat dan Bahan: Arduino Uno atau sejenisnya. Modul Bluetooth HC-05 . Relay 5V . Smartphone dengan aplikasi Bluetooth (misalnya Bluetooth Terminal ). Kabel jumper . Power supply untuk relay (jika diperlukan). 4. Skema Koneksi: Modul Bluetooth HC-05: VCC ke 5V Arduino. GND ke GND Arduino. TX ke Pin 10 Arduino (karena menggunakan SoftwareSerial ).   RX ke Pin 11 Arduino (dengan pembagi tegangan untuk menurunkan tegangan ke 3.3V...