Minggu, 27 September 2026

Pengukuran Level Ketinggian Air dengan Potensiometer


Disusun Oleh:

Risqi Prasdika24051204008
Rahmat Ari Setyarto24051204010
Carmelio Sivandra Ameliano24051204116
Rifqi Syawal24051204198
Azzam Ghifari24051204178

BAB I

PENDAHULUAN

1.1 Latar Belakang

Ketinggian air perlu dipantau pada banyak sistem, mulai dari tandon rumah tangga sampai kolam dan bak penampungan industri. Cara manual masih umum dipakai: orang mengecek langsung dengan melihat atau mencolok permukaan air. Cara ini punya masalah jelas. Pengecekan sering telat, terutama saat tandon terisi cepat atau justru mengering tanpa disadari penghuni rumah.

Arduino Uno menyediakan pin analog yang bisa membaca tegangan dan mengubahnya jadi nilai digital lewat ADC 10-bit, dengan rentang 0 sampai 1023. Kemampuan ini membuka jalan untuk membuat sistem pemantauan otomatis yang murah dan sederhana. Potensiometer dipakai dalam laporan ini sebagai pengganti sensor ketinggian air sungguhan, karena keduanya sama-sama menghasilkan perubahan tegangan yang bisa dibaca ADC. Prinsip kerja yang didapat dari simulasi ini bisa diterapkan langsung ke sensor ultrasonik atau sensor pelampung di implementasi nyata.

Kelompok kami merancang sistem yang membaca nilai ADC dari potensiometer, mengubahnya jadi persentase level air, lalu menampilkan hasilnya di LCD 16x2 sekaligus menyalakan LED sesuai kategori level. Empat warna LED dipakai untuk empat kondisi: merah untuk LOW, kuning untuk MEDIUM, putih untuk HIGH, dan biru untuk FULL.

1.2 Rumusan Masalah

Berdasarkan latar belakang yang telah dijelaskan, rumusan masalah dalam laporan ini adalah:

  • Bagaimana Arduino Uno membaca perubahan posisi potensiometer dan mengubahnya menjadi nilai ADC ?
  • Bagaimana nilai ADC 0-1023 dikonversi menjadi persentase level ketinggian air 0-100% ?
  • Bagaimana sistem menentukan kategori level air (LOW, MEDIUM, HIGH, FULL) dari nilai persentase yang didapat ?
  • Bagaimana LED dan LCD 16x2 menampilkan status level air secara real-time kepada pengguna ?

1.3 Tujuan Laporan

  • Mengetahui cara Arduino Uno membaca perubahan posisi potensiometer dan mengubahnya menjadi nilai ADC.
  • Menjelaskan proses konversi nilai ADC 0-1023 menjadi persentase level ketinggian air 0-100%.
  • Mengetahui cara sistem menentukan kategori level air (LOW, MEDIUM, HIGH, FULL) dari nilai persentase yang didapat.
  • Menjelaskan cara LED dan LCD 16x2 menampilkan status level air secara real-time kepada pengguna.

1.4 Manfaat Penulisan

  • Bagi penulis, laporan ini menjadi sarana untuk memahami penerapan input analog dan ADC 10-bit pada Arduino Uno secara langsung lewat simulasi di Wokwi.
  • Bagi pembaca, laporan ini bisa menjadi panduan untuk merakit dan menjalankan simulasi pengukur level ketinggian air, baik di Wokwi maupun di Visual Studio Code.
  • Bagi pengembangan selanjutnya, rancangan sistem ini bisa menjadi dasar untuk membuat alat pemantau ketinggian air sungguhan dengan mengganti potensiometer menggunakan sensor ultrasonik atau sensor pelampung.

BAB II

TINJAUAN PUSTAKA

2.1 Dasar Teori

Sistem pengukur level ketinggian air ini bekerja lewat rangkaian proses yang saling terhubung, mulai dari pembacaan sinyal analog sampai penampilan hasil ke pengguna. Potensiometer memutar posisi wiper pada elemen resistifnya setiap kali porosnya digerakkan, dan pergeseran ini langsung mengubah tegangan yang keluar dari pin SIG (Raja, 2015). Dalam praktikum ini, potensiometer menggantikan sensor ketinggian air sungguhan seperti HC-SR04 atau sensor pelampung yang dipakai pada sistem monitoring banjir di lapangan (Darmi et al., 2023; Mujiono & Heryanto, 2018). Memutar potensiometer ke kanan menaikkan tegangan keluaran, seolah air di tandon sedang naik; memutar ke kiri menurunkannya, seolah air sedang surut.

Arduino Uno menangkap perubahan tegangan itu lewat pin A0, yang terhubung ke modul ADC 10-bit pada ATmega328P. Modul ini mengonversi tegangan 0-5V menjadi bilangan digital antara 0 dan 1023 memakai metode successive approximation, dengan setiap langkah mewakili kenaikan tegangan sekitar 4,9 mV (Milivojević & Nešić, 2020). Nilai mentah ini lalu diproses program lewat fungsi map(), yang memetakan rentang 0-1023 ke persentase 0-100, dan fungsi constrain(), yang menahan hasil pemetaan agar tidak keluar dari batas wajar akibat noise sinyal atau pembulatan.

Persentase yang didapat menentukan LED mana yang menyala. Arduino tidak menyalakan LED secara langsung dari pin digital, melainkan memakai transistor sebagai saklar elektronik: sinyal HIGH dari pin digital mengalirkan arus ke basis transistor, transistor kemudian membuka jalur arus dari LED ke ground, dan LED menyala (Widharma et al., 2016). Pendekatan ini melindungi pin Arduino dari beban arus berlebih sekaligus memungkinkan LED menyala dan mati secara stabil mengikuti perubahan level air. Resistor 220 ohm yang dipasang seri pada tiap LED membatasi arus supaya LED tidak rusak akibat arus berlebih.

Bersamaan dengan pengendalian LED, program mengirim data persentase dan status ke LCD 16x2 lewat library LiquidCrystal.h yang beroperasi dalam mode 4-bit, memakai pin RS, E, D4, D5, D6, dan D7. Mode 4-bit ini menghemat jumlah pin Arduino yang terpakai dibanding mode 8-bit, sehingga pin lain masih tersedia untuk mengendalikan empat LED (Raja, 2015). Kombinasi LCD dan LED sebagai media output sejalan dengan pendekatan pada riset pemantauan level air lain, yang juga menampilkan status ketinggian air secara real-time ke pengguna lewat LCD (Mujiono & Heryanto, 2018).

Keseluruhan proses ini berulang setiap 500 milidetik, sehingga perubahan posisi potensiometer langsung tercermin pada tampilan LCD dan LED tanpa jeda yang terasa oleh pengguna.

2.2 Komponen

NoKomponen / Software
14 x resistor 220 ohm
24 x LED dengan warna yang berbeda
3LCD 16 x 2
4Arduino Uno
5Potensiometer

BAB III

PEMBAHASAN

3.1 Penjelasan Simulasi

  1. Sambungkan pin pin berikut dengan kabel di wokwi :
ARDUINO UNO : GND.1 → LCD1:K
LCD1:A → ARDUINO UNO:5V
LCD1:D7 → ARDUINO UNO: 7
LCD1:D6 → ARDUINO UNO: 8
LCD1:D5 → ARDUINO UNO: 9
LCD1:D4 → ARDUINO UNO: 10
LCD1:E → ARDUINO UNO: 11
LCD1:RW → ARDUINO UNO: GND.1
LCD1:RS → ARDUINO UNO: 12
LCD1:VDD → ARDUINO UNO: 5V
LCD1:VSS → ARDUINO UNO: GND.1
POTENSIOMETER:VCC → ARDUINO UNO:5V
POTENSIOMETER:SIG → ARDUINO UNO:A0
POTENSIOMETER:GND → ARDUINO UNO:GND.1
LED MERAH (KATODA) → ARDUINO UNO:GND.1
LED MERAH (ANODA) → TRANSISTOR 1:2 (SISI KANAN)
TRANSISTOR 1:1 (SISI KIRI) → ARDUINO UNO: 6
LED KUNING (KATODA) → ARDUINO UNO:GND.1
LED KUNING (ANODA) → TRANSISTOR 2:2 (SISI KANAN)
TRANSISTOR 2:1 (SISI KIRI) → ARDUINO UNO: 5
LED PUTIH (KATODA) → ARDUINO UNO:GND.1
LED PUTIH (ANODA) → TRANSISTOR 3:2 (SISI KANAN)
TRANSISTOR 3:1 (SISI KIRI) → ARDUINO UNO: 4
LED BIRU (KATODA) → ARDUINO UNO:GND.1
LED BIRU (ANODA) → TRANSISTOR 4:2 (SISI KANAN)
TRANSISTOR 4:1 (SISI KIRI) → ARDUINO UNO: 3

atau kalian bisa copy kode diagram.json di 3.2 Program dan paste ke diagram.json

  1. copy sketch.ino dan paste ke sketch.ino milik kalian.
  2. download project dalam bentuk zip
  1. extract semua folder zip tadi
  2. buka visual studio code
  3. install extension wokwi simulator
  1. download arduino-cli di sini
  2. extract folder arduino-cli
  3. jalankan perintah berikut di powershell/cmd :
.\path\to\arduino-cli.exe core update-index
.\path\to\arduino-cli.exe core install arduino:avr
  1. rename sketch.ino → project.ino
  2. jalankan perintah berikut di powershell/cmd :
cd path\to\arduino\project
mv arduino-cli.exe path\to\arduino\project
.\arduino-cli.exe lib update-index
.\arduino-cli.exe lib install "LiquidCrystal"
.\arduino-cli.exe lib list
.\arduino-cli.exe compile --fqbn arduino:avr:uno --output-dir build .
  1. buat file wokwi.toml di dalam folder project arduino tadi, isi dengan kode berikut :
[wokwi]
version = 1
firmware = "build/project.ino.hex"
elf = "build/project.ino.elf"
  1. buka file diagram.json di vscode
  2. ketik ctrl + shift + windows untuk membuka command pallette di vscode
  3. masukkan keyword “wokwi: start simulator” dan klik enter
  4. akan muncul tampilan seperti ini :
  1. jalankan simulasi dengan klik tombol segitiga
  2. saat garis potensiometer berputar ke kanan

maka lcd akan menampilkan level air dengan ketentuan sebagai berikut :

Nilai ADCLevel AirIndikatorLAMPU
0-2550-25%LOWMERAH
256-51126-50%MEDIUMKUNING
512-76751-75%HIGHPUTIH
768-102376-100%FULLBIRU
  1. tutorial lengkap setup wokwi di vs code https://docs.wokwi.com/vscode/getting-started

3.2 Program

Berikut adalah kode program yang digunakan pada sistem ini:

A. diagram.json

{
  "version": 1,
  "author": "008_Risqi Prasdika TIA",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-uno", "id": "uno", "top": 0.6, "left": -0.6, "attrs": {} },
    {
      "type": "wokwi-led",
      "id": "led1",
      "top": -128.4,
      "left": 282.2,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led2",
      "top": -118.8,
      "left": 435.8,
      "attrs": { "color": "yellow" }
    },
    {
      "type": "wokwi-led",
      "id": "led3",
      "top": -61.2,
      "left": 541.4,
      "attrs": { "color": "white" }
    },
    { "type": "wokwi-led", "id": "led4", "top": -90, "left": 618.2, "attrs": { "color": "blue" } },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": -54.2,
      "left": 325.55,
      "rotate": 270,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r2",
      "top": 23.15,
      "left": 480,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r3",
      "top": 71.15,
      "left": 518.4,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r4",
      "top": 109.55,
      "left": 528,
      "attrs": { "value": "220" }
    },
    { "type": "wokwi-lcd1602", "id": "lcd1", "top": -303.77, "left": 121.6, "attrs": {} },
    { "type": "wokwi-potentiometer", "id": "pot1", "top": -145.3, "left": 28.6, "attrs": {} }
  ],
  "connections": [
    [ "pot1:GND", "uno:GND.1", "black", [ "v28.8", "h-0.3" ] ],
    [ "pot1:SIG", "uno:A0", "black", [ "v38.4", "h-154", "v278.4", "h293.8" ] ],
    [ "pot1:VCC", "uno:5V", "black", [ "v19.2", "h-173.6", "v278.4", "h255.4" ] ],
    [ "uno:6", "r1:1", "red", [ "v0" ] ],
    [ "r1:2", "led1:A", "red", [ "v0" ] ],
    [ "led1:C", "uno:GND.1", "red", [ "v57.6", "h-182", "v38.4" ] ],
    [ "uno:5", "r2:1", "yellow", [ "v76.8", "h176.6" ] ],
    [ "r2:2", "led2:A", "yellow", [ "v0" ] ],
    [ "led2:C", "uno:GND.1", "yellow", [ "v28.8", "h-335.9" ] ],
    [ "uno:4", "r3:1", "white", [ "v0" ] ],
    [ "r3:2", "led3:A", "white", [ "h18", "v-86.4" ] ],
    [ "led3:C", "uno:GND.1", "white", [ "v-86.4", "h-441.5" ] ],
    [ "uno:3", "r4:1", "blue", [ "v0" ] ],
    [ "r4:2", "led4:A", "blue", [ "v0" ] ],
    [ "led4:C", "uno:GND.1", "blue", [ "v38.4", "h-518.3" ] ],
    [ "lcd1:VSS", "uno:GND.1", "green", [ "h-38.4", "v182.4" ] ],
    [ "lcd1:VDD", "uno:5V", "green", [ "v19.2", "h-201.5", "v384", "h197.8" ] ],
    [ "lcd1:RW", "uno:GND.1", "green", [ "v48", "h-0.1" ] ],
    [ "lcd1:A", "uno:5V", "green", [ "h-9.7", "v403.2", "h-119" ] ],
    [ "lcd1:K", "uno:GND.1", "green", [ "h19.2", "v38.4", "h-307.2", "v124.8", "h105.3" ] ],
    [ "lcd1:RS", "uno:12", "green", [ "v105.6", "h-48.2" ] ],
    [ "lcd1:E", "uno:11", "green", [ "v115.2", "h-58.2" ] ],
    [ "lcd1:D4", "uno:10", "green", [ "h-9.6", "v134.4", "h-87.1" ] ],
    [ "lcd1:D5", "uno:9", "green", [ "h-9.5", "v76.8", "h-87.2" ] ],
    [ "lcd1:D6", "uno:8", "green", [ "h-9.4", "v96", "h-86.8" ] ],
    [ "lcd1:D7", "uno:7", "green", [ "h-9.3", "v105.6", "h-80.4" ] ]
  ],
  "dependencies": {}
}

B. sketch.ino

#include <LiquidCrystal.h>

// ================================
// PIN POTENSIOMETER
// ================================
const int potPin = A0;

// ================================
// PIN LED
// ================================
const int ledMerah  = 6;  // LOW
const int ledKuning = 5;  // MEDIUM
const int ledPutih  = 4;  // HIGH
const int ledBiru   = 3;  // FULL

// ================================
// PIN LCD 16x2
// RS, E, D4, D5, D6, D7
// ================================
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

void setup() {
  // Serial Monitor
  Serial.begin(9600);

  // Atur pin LED sebagai OUTPUT
  pinMode(ledMerah, OUTPUT);
  pinMode(ledKuning, OUTPUT);
  pinMode(ledPutih, OUTPUT);
  pinMode(ledBiru, OUTPUT);

  // Matikan semua LED saat awal
  digitalWrite(ledMerah, LOW);
  digitalWrite(ledKuning, LOW);
  digitalWrite(ledPutih, LOW);
  digitalWrite(ledBiru, LOW);

  // Inisialisasi LCD
  lcd.begin(16, 2);

  // Tampilan awal
  lcd.setCursor(0, 0);
  lcd.print("PENGUKUR AIR");

  lcd.setCursor(0, 1);
  lcd.print("Memulai...");

  delay(2000);

  // Bersihkan LCD
  lcd.clear();
}

void loop() {

  // ================================
  // MEMBACA POTENSIOMETER
  // ================================
  int nilaiPot = analogRead(potPin);

  // Konversi nilai ADC 0-1023 menjadi 0-100%
  int levelAir = map(nilaiPot, 0, 1023, 0, 100);

  // Pastikan nilai tetap berada pada 0-100
  levelAir = constrain(levelAir, 0, 100);

  // ================================
  // MATIKAN SEMUA LED TERLEBIH DAHULU
  // ================================
  digitalWrite(ledMerah, LOW);
  digitalWrite(ledKuning, LOW);
  digitalWrite(ledPutih, LOW);
  digitalWrite(ledBiru, LOW);

  // ================================
  // MENENTUKAN LEVEL AIR
  // ================================

  if (levelAir <= 25) {

    // LOW
    digitalWrite(ledMerah, HIGH);

    lcd.setCursor(0, 0);
    lcd.print("Level: ");
    lcd.print(levelAir);
    lcd.print("%   ");

    lcd.setCursor(0, 1);
    lcd.print("Status: LOW     ");

    Serial.print("Level Air: ");
    Serial.print(levelAir);
    Serial.println("% - LOW");
  }

  else if (levelAir <= 50) {
    // MEDIUM
    digitalWrite(ledKuning, HIGH);

    lcd.setCursor(0, 0);
    lcd.print("Level: ");
    lcd.print(levelAir);
    lcd.print("%   ");

    lcd.setCursor(0, 1);
    lcd.print("Status: MEDIUM  ");

    Serial.print("Level Air: ");
    Serial.print(levelAir);
    Serial.println("% - MEDIUM");
  }

  else if (levelAir <= 75) {

    // HIGH
    digitalWrite(ledPutih, HIGH);

    lcd.setCursor(0, 0);
    lcd.print("Level: ");
    lcd.print(levelAir);
    lcd.print("%   ");

    lcd.setCursor(0, 1);
    lcd.print("Status: HIGH    ");

    Serial.print("Level Air: ");
    Serial.print(levelAir);
    Serial.println("% - HIGH");
  }

  else {
    // FULL
    digitalWrite(ledBiru, HIGH);

    lcd.setCursor(0, 0);
    lcd.print("Level: ");
    lcd.print(levelAir);
    lcd.print("%   ");

    lcd.setCursor(0, 1);
    lcd.print("Status: FULL    ");

    Serial.print("Level Air: ");
    Serial.print(levelAir);
    Serial.println("% - FULL");
  }
  // Update setiap 500 ms
  delay(500);
}

BAB IV

PENUTUP

4.1 Kesimpulan

Berdasarkan perancangan dan simulasi proyek Pengukur Level Ketinggian Air dengan Potensiometer, dapat disimpulkan bahwa Arduino Uno dapat digunakan untuk membaca input analog melalui pin A0 dengan memanfaatkan ADC 10-bit. Potensiometer digunakan sebagai simulasi sensor ketinggian air, di mana perubahan posisi potensiometer menghasilkan perubahan nilai tegangan yang kemudian dikonversi oleh ADC menjadi nilai digital pada rentang 0–1023.

Nilai ADC yang diperoleh kemudian diproses oleh program untuk menentukan persentase level ketinggian air. Level tersebut dibagi menjadi empat kondisi, yaitu LOW, MEDIUM, HIGH, dan FULL, yang masing-masing ditunjukkan menggunakan LED merah, kuning, putih, dan biru. LCD 16×2 digunakan sebagai media untuk menampilkan informasi nilai ADC dan level ketinggian air secara langsung.

Dengan demikian, proyek ini dapat menjadi penerapan sederhana dari konsep analog input dan ADC 10-bit pada Arduino Uno. Simulasi juga menunjukkan bagaimana data dari input analog dapat diproses menjadi informasi yang lebih mudah dipahami melalui perangkat output berupa LED dan LCD.

4.2 Saran

Proyek ini masih berupa simulasi sederhana, sehingga masih ada beberapa hal yang bisa dikembangkan pada praktikum atau penelitian selanjutnya. Pertama, potensiometer sebaiknya diganti dengan sensor ketinggian air sungguhan, seperti sensor ultrasonik HC-SR04 atau sensor pelampung, lalu dikalibrasi agar persentase yang ditampilkan sesuai dengan ketinggian air sebenarnya. Kedua, sistem dapat ditambahkan modul WiFi seperti ESP32 atau ESP8266 agar data level air bisa dikirim ke platform IoT, misalnya Blynk atau ThingSpeak, dan dipantau dari jarak jauh lewat smartphone, sesuai dengan konsep Internet of Things.

Selain itu, sistem juga dapat dilengkapi buzzer sebagai alarm saat level air berada pada kondisi LOW atau FULL, serta relay untuk menyalakan pompa air secara otomatis saat level LOW dan mematikannya saat level FULL. Terakhir, program sebaiknya menerapkan rata-rata beberapa kali pembacaan ADC atau histeresis agar status tidak berganti-ganti ketika nilai level air berada tepat di batas antar kategori, misalnya di sekitar 25% atau 50%.

BAB V

DAFTAR PUSTAKA

wokwi for vs code

arduino-cli

BAB VI

LAMPIRAN

Video Demo: https://drive.google.com/file/d/1mO1FUW-D_Rza8f1O1NEpwLYYitjv4FNS/view?usp=sharing

Tidak ada komentar:

Posting Komentar