Contents
Tegangan (dan arus) merupakan parameter dasar dalam dunia elektro baik digital maupun analog. Tegangan ini merupakan besaran analog, jadi dalam elektro analog, tegangan dapat langsung diolah, diproses atau dikonversi dalam bentuk atau level lainnya. Sedangkan dalam dunia digital, tegangan akan dikonversi versi diskritnya dengan ADC (Analog to Digital Converter) atau jika dibalik dari digital ke tegangan analog harus menggunakan teknik DAC (Digital to Analog Converter).
[AdSense-A]
Interfacing Dunia Analog ke Arduino
Demikian juga dengan Arduino. Pada dasarnya Arduino adalah sebuah pusat kendali digital berbasis mikrokontroller AVR ATmega keluaran Intel. Arduino bekerja dalam level tegangan digital dengan range 0V untuk tegangan logika ‘0’ dan 5V untuk tegangan logika ‘1’. Semua parameter analog jika mau di-interfacing-kan dengan Arduino harus diubah ke digital menggunakan ADC. Dan sebaliknya jika ingin mengeluarkan tegangan analog dari Arduino harus menggunakan DAC (dalam Arduino menggunakan metode PWM/Pulse Width Modulation). Beruntunglah kita karena secara internal, Arduino sudah mendukung keduanya. Kita tidak perlu menambahkan IC ADC/DAC terpisah untuk melakukan interfacing dengan dunia analog.
Membaca Sensor Tegangan dengan Arduino
Sensor adalah transducer (pengubah/pendeteksi) parameter lingkungan menjadi besaran analog representasinya. Biasanya, apapun tipe sensor pasti akan dikonversi ke tegangan agar dapat diolah untuk proses selanjutnya. Demikian juga dengan Arduino. Untuk membaca sensor dengan output tegangan analog, Arduino menggunakan pin analog di A0-A5 sebagai ‘jembatan’ penghubung ke pusat kontrolnya. Pin analog A0-A5 terhubung dengan sebuah ADC dengan resolusi 10 bit yang akan menghasilkan angka digital 0 – 1023 sebagai representasi tegangan analog 0 – 5V. Sebagai ilustrasi, berikut ini adalah sampel data yang menunjukkan tegangan analog dan nilai digital yang terbaca di Arduino
Tegangan Analog | Nilai yang terbaca Arduino |
0 V | 0 |
3,3 V | 675 |
5 V | 1023 |
Catatan : Tegangan analog yang dapat diterima pin analog Arduino maksimal adalah 5 VDC. Hati-hati, tegangan di atas batas ini akan merusak Arduino Anda.
Mengubah Tegangan DC agar ‘ramah’ terhadap Arduino
Seperti yang saya sebutkan di atas, batas maksimal tegangan analog yang dapat diterima Arduino adalah 5 VDC. Bagaimana dengan tegangan di atas 5V? Kita harus mengubahnya menjadi maksimal 5 V. Contoh: kita ingin mengukur tegangan aki yang berada pada rentang tegangan 9V – 15V. Perhatikan bahwa tegangan ini jauh di atas 5V. Oleh karena itu kita harus mengubahnya agar dapat dibaca Arduino tanpa merusaknya. Bagaimana caranya? Ternyata sangat mudah. Cukup menggunakan rangkaian pembagi tegangan yang hanya membutuhkan dua resistor saja. Begini contoh untuk case di atas.
Perhatikan titik ‘o’ di atas. Rumus tegangan di titik ‘o’ (Vo) adalah
Titik ‘o’ (Vo) di ataslah yang kemudian dihubungkan dengan pin Analog Arduino, bukan tegangan dari aki secara langsung. Agar pada saat tegangan 15V (tegangan maksimal aki) nilai di Vo ini bernilai 5V (batas tegangan yang dapat diterima Arduino) maka resistor-resistor yang digunakan adalah 2K (R1) dan 1K (R2).
Catatan : berhubung resistor yang tersedia pasaran tidak akurat nilai resistansinya (memiliki toleransi 1-5%) maka sebaiknya Anda menggunakan potensiometer/trimpot untuk R2
Dengan demikian akan di dapat tegangan output representasi dari tegangan sebenarnya (tegangan aki) menggunakan sensor tegangan di atas. Jika kita buat tabelnya, hasilnya adalah sebagai berikut:
Tegangan aki | Tegangan output sensor (pembagi tegangan) |
0 V | 0 V |
9 V | 3 V |
15 V | 5 V |
Bagaimana sisi Arduino membacanya? Sesuai dengan tabel pertama, tegangan dari titik ‘o’ di atas (Vo) akan dikonversi ADC internal Arduino dengan resolusi 10 bit. Sebagai gambaran, saya catat di tabel di bawah, mulai dari tegangan aki (tegangan sebenarnya yang akan diukur), tegangan output sensor tegangan (rangkaian pembagi tegangan), dan nilai digital yang terbaca di Arduino
Tegangan aki | Tegangan output sensor (pembagi tegangan) | Nilai yang terbaca Arduino |
0 V | 0 V | 0 |
9 V | 3 V | 613 |
15 V | 5 V | 1023 |
Di sisi Arduino Anda harus menambahkan script yang digunakan untuk membaca tegangan analog di pin analog yang tehubung dengan sensor. Katakanlah sensor tegangan analog (rangkaian pembagi tegangan) di atas terhubung ke pin A0 Arduino, maka script yang harus digunakan adalah
int sensor = analogRead(A0);
Dengan demikian, nilai digital representasi sensor akan disimpan sementara di variabel ‘sensor’ bertipe integer di atas. Bagaimana mendapatkan nilai tegangan aki yang sebenarnya? Anda tinggal bagi saja variabel ‘sensor’ ini dengan angka 68,2. Angka ini didapat dengan membagi 1023 (angka maksimal nilai digital yang terbaca Arduino) dengan 15 (angka maksimal tegangan yang diukur/tegangan aki).
float tegangan_aki = sensor / 68.2;
Berikutnya variabel ‘tegangan_aki’ di atas dapat Anda proses ke tampilan display, entah menggunakan seven segment, LCD atau yang lain.
Demikian sedikit tutorial cara mengukur tegangan analog di Arduino, semoga dapat bermanfaat. Jika ada pertanyaan silahkan tulis komentar di bawah
[AdSense-A]
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Mas Aji,bagus artikelnya saya jadi tertarik untuk bertanya ini mas,gimana klu kita mau buat tengangan input max sebesar 53vdc, dan tegangan input min 44vdc dengan indicator klu tegangan input max terbaca maka lampu LED akan mati, apabila tegangan input min terbaca maka lampu LED akan hidup. terima kasih mas ajie
mudah itu mas, pake rangkaian pembagi tegangan aja (voltage divider). Outputnya masukkan ke arduino kemudian diprogram sesuai kebutuhan
Dear author,
Saya ingin membuat project monitoring backup power dengan rangkaian PLN–> UPS –> baterai –> arduino project. Kondisi : ketika PLN on, baterai charging. Ketika PLN off tidak charging. Bagaimana arduino membaca ketika posisi charging/tidak? Rencana mau saya kombinasikan dengan ethernet Shield untuk remot jarak jauh.
Thanks before.
kalo mau mendeteksi charging atau tidak bisa pake sensor arus. Tapi menurut saya, lebih baik mendeteksi tegangan PLN daripada mendeteksi kondisi charging atau tidak. Karena charging itu kan dalam case ini adalah ‘reaksi’ dari ‘aksi’ PLN on/off. Lebih baik kita mendeteksi ‘aksi’ daripada mengukur ‘reaksi’
Kalo masih bingung tentang ‘aksi’ – ‘reaksi’. Contohnya gini:
if (‘aksi’) then ‘reaksi’ –> ini artinya jika terjadi ‘aksi’ maka lakukan ‘reaksi’
mau nanya ni mas itu di catatan dibilang : gunakan potensio meter atau pot meter sebagai r2 . ini maksudnya gak usah pakai resistornya lagi ya? jadi rangkaiannya
Aki -> pot (r2) -> resistor(1k) -> arduino gitu ya mas?
trus kira2 itu pot yang gimana ya ada contoh gambarnya?
trus satu lagi , kalau mau buat spt powerbank yang digitalnya ngukur berapa % sisa baterainya itu gimana ya scriptnya? terimakasih artikelnya sangat membantu 🙂
Q: Aki -> pot (r2) -> resistor(1k) -> arduino gitu ya mas?
A: Aki — potensiometer — resistor(r2) – gnd atau
Aki — resistor(r1) — potensiometer — gnd
Q: trus kira2 itu pot yang gimana ya ada contoh gambarnya?
A: googling aja mas, pasti akan langsung ketemu gambarnya (keyword: potensiometer atau potontiometer atau trimpot)
Q: kalau mau buat spt powerbank yang digitalnya ngukur berapa % sisa baterainya itu gimana ya scriptnya?
A: kurang lebih gini:
float teg_terukur=analogRead(A0)/204.6;
float sisa_batt=(teg_terukur/5)*100;
Mas mau tanya kalo buat sensor tegangan untuk 110V DC biar bisa dibaca oleh arduino gimana ya .? Kalo jual sensor tegangan 24vdc ada tpi 110v gak ada saya cari Kalau 110v dc gmna mas ya buatnya?
pake rangkaian pembagi tegangan aja mas. Pake resistor aja kayak gambar di atas. Kalo pengin mudah tinggal pesan saya 🙂
mas itu yg sensor tegangan aki = sensor * 68.2
sepertinya dibagi mas bukan dikali
coba dicek lagi mas.
oh iya mas, terima kasih atas koreksinya
Kalau mengukur 2 tegangan berbeda dalam 1 arduino bagaimana caranya ?
konek ke pin analog yg berbeda,kmd baca datanya pake analogRead (no_pin_analog)
Klo inputnya frekuensi digital….trs pengin dpt output frekuensi analog …caranya gimana mas
pake metode PWM (Pulse Width Modulation) mas
Mas.. kalau sensor itu kan vcc nya dari pwer suppy adaptor.. cara nyambungin 10 sensor ke powes supply itu gmn caranya mas ?
tinggal tarik aja kabel ke masing2 sensor
Pak. Apakah bapak tau spek sensor cahaya yang baik yang digunakan untuk pembangkit listdik tenaga surya. ?
yg ditanyakan sensor cahaya atau fotovoltaik/solar cell-nya?
kalo sensor cahaya (ldr, fotodioda) digunakan untuk mengubah cahaya menjadi resistansi/arus
sedangkan fotovoltaik/solar cell mengubah energi cahaya menjadi listrik
jadi sensor cahaya tidak bisa digunakan untuk pembangkit lstrik tenaga surya
sangat bagus sekali mas, kalu untuk mengukur arus dan tegangan bisa ga mas dengan metode pembagi arus dan tegangan ? kalau bisa, tolong dijelaskan disini bisa kira2 mas, karena saya sangat butuh untuk keperluan PA saya mas, terimakasih mas 🙂
kalo tegangan bisa, kalo arus ga bisa mas. Untuk mengukur arus bisa pake metode r-shunt atau hall effect
Berapa tegangan terkecil yang bisa dibaca modul ini?
orde milivolt mas, kalo mau beli yg udah jadi https://www.tokopedia.com/raftech/voltage-sensor-module-sensor-tegangan-for-arduino
Mas Ajie,bagus artikelnya saya jadi tertarik untuk bertanya….
gini mas gimana kalau kita mau membuat sebuat sistem charger aki lead acid automatic menggunakan Arduino uno,voltage sensor dan MOSFET…..
Sistem ini digunakan di photovoltaic(stand-alone)….
prinsip kerja
jika aki kosong ( 40%-0%) maka sensor mengdetksi dan pada saat itu juga MOSFET on
dalam 45%- 95% masi dalam proses charge dan pada titik 100% sensor mendeteksi dan MOSFET OFF.
Masalahnya gimana dengan program arduino bisa bekerja sesuai rencana…????
sebaiknya bikin flow chart dulu mas
Rinci mas, tapi enggak ada gambaran rabgkaiannya kah
ada
Terima kasih Buat Tutorialnya…
Sangat membantub
sama-sama mas
mau tanya : saya membuat kode ini : float Volt1; float Volt; Volt1 = analogRead (A0); Volt = ((Volt1 * 0.00489)*5); Serial.print (“Voltage: “); delay (1); if (Volt >=2.40) { digitalWrite (relay1A, LOW); digitalWrite (relay1B. HIGH); } else { digitalWrite (relay1B, LOW); digitalWrite (relay1A, HIGH); } codding bisa ini berjalan tapi tidak sesuai harapan akibat pembacaan voltage sensornya naik turun. yang saya harapkan adalah,, jika pembacaan sudah masuk pertama kali menunjukkan angka 2.40, dia langsung bekerja dan tidak membaca lagi. istilahnya yang saya inginkan adalah membaca 1 kali.. saya sudah nulis di Void loop, tapi selalu error. mungkin ada codding… Read more »
tambahkan pengujian logic yang kedua di baris if (Volt >=2.40). Misal if ((Volt >=2.40)&&(baca==1)). Jadi (baca==1) di sini sebagai pengujian logic untuk syarat yang kedua
Mau bertanya kak, apakah arduino dapat membaca tegangan yang rendah (dibawah 5v) dengan menggunakan sensor zmpt101b yang dikonversi menjadi analog to digital converter, yang mana diketahui kalo sensor tersebut sensor tegangan ac