Buat Voltmeter DIY dengan Arduino dan Layar Nokia 5110 – Panduan Langkah demi Langkah
Komponen dan Perlengkapan
- Arduino UNO × 1
- Sensor tegangan (generik) × 1
- Layar LCD Nokia 5110 × 1
- Papan roti (generik) × 1
- Kabel jumper (generik) × 1
Aplikasi dan Layanan Online
Tentang Proyek Ini
Dalam tutorial ini, saya akan menunjukkan kepada Anda cara membuat Voltmeter dengan layar LCD Nokia 5110 yang besar menggunakan Arduino.
Membuat voltmeter adalah pengalaman belajar yang hebat. Setelah menyelesaikan proyek ini, Anda akan lebih memahami cara kerja voltmeter, menyegarkan pengetahuan Anda tentang hukum Ohm, dan melihat langsung sekuat apa platform Arduino dapat bekerja. Dengan proyek ini sebagai dasar dan pengalaman yang diperoleh, Anda akan dapat dengan mudah membangun proyek yang lebih kompleks di masa depan.
Anda dapat menggunakan proyek ini untuk mengukur tegangan DC dari berbagai rangkaian elektronik atau memantau status baterai proyek Arduino Anda dengan mudah. Selain itu, dengan pengetahuan yang diperoleh, Anda dapat dengan mudah membuat sensor tegangan sendiri untuk menciptakan voltmeter kustom yang sesuai dengan kebutuhan Anda.
Tanpa jeda lagi, mari kita mulai!
Langkah 1: Dapatkan Semua Komponen
Komponen yang diperlukan untuk membangun proyek ini adalah sebagai berikut:
- Arduino Uno
- Sensor Tegangan
- Layar LCD Nokia 5110
- Papan Roti Kecil
- Beberapa kabel
Biaya proyek sangat rendah, sekitar 10$.
Langkah 2: Modul Sensor Tegangan
Mari kita lihat bagaimana modul sensor ini bekerja. Sensor tegangan ini sangat sederhana dan dapat mengukur tegangan DC dari 0-25V. Ini terdiri dari hanya dua resistor! Anda dapat membuatnya sendiri jika ingin, atau membeli modul sensor ini dengan kurang dari satu dolar jika ingin sesuatu yang sudah jadi. Ini cara kerjanya. Sensor ini sebenarnya adalah pembagi tegangan. Rangkaian pembagi tegangan adalah rangkaian yang sangat umum yang mengambil tegangan lebih tinggi dan mengubahnya menjadi yang lebih rendah dengan menggunakan pasang resistor. Rumus untuk menghitung tegangan keluaran didasarkan pada hukum Ohm. Silakan periksa gambar yang dilampirkan.
Dalam modul ini, R1 adalah 30.000 Ohm, dan R2 adalah 7500 Ohm. Jika kita memberikan 25V pada input dan melakukan perhitungan, kita mendapatkan 5V pada output! Dan itu adalah tegangan maksimum yang dapat ditangani oleh pin analog Arduino. Jadi, jika kita melebihi 25V pada input, kita akan membakar pin analog Arduino. Jika kita memberikan 0 volt pada input, kita mendapatkan 0V pada output. Jadi, jika kita memberikan tegangan dari 0-25V pada input, kita akan mendapatkan tegangan dari 0-5V pada output.
Arduino Uno memiliki ADC 10bit, jadi resolusi yang dapat kita capai menggunakan sensor ini adalah 25mV. Jika kita menggunakan Arduino Due, kita dapat mencapai resolusi yang lebih baik karena memiliki ADC 12bit. Namun, tentu saja, kita perlu membuat sensor tegangan sendiri, karena papan Arduino Due menggunakan level logika 3.3V, dan tegangan di atas itu akan merusak pin analognya.
Langkah 3: LCD Nokia 5110
Nokia 5110 adalah layar favorit saya untuk proyek Arduino.
Nokia 5110 adalah layar LCD grafik dasar yang awalnya ditujukan untuk layar ponsel. Ini menggunakan pengontrol PCD8544 yang merupakan pengontrol/driver LCD CMOS daya rendah. Karena itulah, layar ini memiliki konsumsi daya yang mengesankan. Ini hanya menggunakan 0,4mA saat menyala tetapi lampu belakang dinonaktifkan. Ini menggunakan kurang dari 0,06mA saat dalam mode tidur! Itu salah satu alasan yang membuat layar ini menjadi favorit saya.
PCD8544 berinterface dengan mikrokontroler melalui antarmuka bus serial. Itu membuat layar sangat mudah digunakan dengan Arduino. Anda hanya perlu menghubungkan 8 kabel dan menggunakan perpustakaan berikut: https://www.rinkydinkelectronics.com/library.php?id=47
Perpustakaan mengesankan ini dikembangkan oleh Henning Karlsen, yang telah berusaha besar untuk membantu komunitas Arduino maju dengan perpustakaannya.
Saya telah menyiapkan tutorial terperinci tentang cara menggunakan layar LCD Nokia 5110 dengan Arduino. Saya melampirkan video tersebut dalam tutorial ini, yang akan memberikan informasi berguna tentang layar, jadi saya mendorong Anda untuk menontonnya dengan seksama.
Sekarang, mari kita lanjutkan!
Langkah 4: Membangun Voltmeter
Sekarang kita menghubungkan semua komponen bersama-sama.
Pertama kita menghubungkan sensor tegangan. Ini hanya memiliki 3 pin. Dari itu, kita hanya perlu menghubungkan 2.
Menghubungkan Sensor Tegangan
- - Pin terhubung ke GND Arduino
- + Pin tidak terhubung
- S Pin terhubung ke Pin Analog 0
Langkah berikutnya adalah menghubungkan layar LCD Nokia 5110.
Menghubungkan Layar LCD Nokia 5110
- RST terhubung ke Pin Digital 12 Arduino
- CE terhubung ke Pin Digital 11 Arduino
- DC terhubung ke Pin Digital 10 Arduino
- DIN terhubung ke Pin Digital 9 Arduino
- CLK terhubung ke Pin Digital 8 Arduino
- VCC terhubung ke 3.3V Arduino
- LIGHT terhubung ke GND Arduino (lampu belakang menyala)
- GND terhubung ke GND Arduino
Sekarang setelah semua komponen terhubung, yang kita lakukan hanyalah memuat kode. Layar sambutan ditampilkan selama beberapa detik dan kemudian kita dapat mulai mengukur tegangan.
Langkah 5: Kode Proyek
Kode proyek terdiri dari 2 berkas:
Kode ui.c - Grafik untuk Proyek Kita
Pada berkas pertama ui.c, terdapat nilai biner dari 2 ikon yang ditampilkan pada layar LCD Nokia 5110. Terdapat ikon sambutan dan Antarmuka Pengguna untuk voltmeter yang muncul setelahnya. Silakan tonton video yang telah saya siapkan untuk melihat cara memuat grafik kustom ke proyek Arduino Anda.
Kode VoltMeter.ino - Program Utama
Kode utama proyek ini sangat sederhana. Kita perlu menyertakan perpustakaan Nokia 5110. Selanjutnya kita mendeklarasikan beberapa variabel. Kita menginisialisasi layar dan menampilkan layar sambutan selama 3 detik. Setelah itu, kita mencetak ikon ui sekali, dan membaca nilai analog dari sensor setiap detik.
Semua keajaiban terjadi pada fungsi berikut:
float readVoltage(){ sensorValue = analogRead(sensorPin); vout = (sensorValue * 5.0) / 1024.0; vin = vout / (R2/(R1+R2)); return vin;}
Metode di atas membaca nilai dari sensor dan mengubahnya menjadi tegangan dari 0 hingga 25V. Jika Anda menggunakan sensor tegangan buatan sendiri, Anda harus mengubah variabel R1 dan R2 untuk mencerminkan nilai resistor sensor Anda.
Setelah membaca nilai dari sensor, kode mengubah nilai menjadi String dan menampilkannya pada layar.
Saya telah melampirkan kode ke tutorial ini. Untuk mengunduh versi terbaru kode, Anda dapat mengunjungi halaman proyek: educ8s.tv/arduino-voltmeter-project/
F4FWJORIRXTXQG8.c
FY005LHIRXTXQG9.ino
Langkah 6: Menguji Proyek
Sekarang kode telah dimuat, kita dapat menguji voltmeter dengan beberapa baterai. Saya mengujinya dengan baterai AA rechargeable, baterai 18650, dan baterai alarm 12V besar.
Seperti yang Anda lihat pada gambar yang dilampirkan, Voltmeter bekerja dengan baik. Untuk perbandingan, saya juga menggunakan multimeter. Pembacaan Voltmeter "buatan tangan" kami sangat dekat dengan pembacaan Multimeter profesional. Hebat, bukan?
Seperti yang Anda lihat, proyek ini adalah demonstrasi hebat dari apa yang dapat dilakukan oleh perangkat keras dan perangkat lunak open source. Dalam beberapa menit seseorang dapat membangun proyek yang mengesankan ini! Proyek ini ideal untuk pemula dan seperti yang saya katakan di awal, proyek ini adalah pengalaman belajar yang hebat.
Saya akan senang mendengar pendapat Anda tentang proyek ini. Apakah Anda menemukannya berguna? Apakah ada perbaikan yang dapat diterapkan pada proyek ini? Silakan posting komentar atau ide Anda di bagian komentar di bawah!
Kode
Voltmeter.inoC/C++
////////////////////////////////////////////// // Arduino Voltmeter Project // // with NOKIA 5110 LCD // // https://www.educ8s.tv // ///////////////////////////////////////////// #include <LCD5110_Graph.h> // THE LIBRARY I AM USING IS THIS: https://www.rinkydinkelectronics.com/library.php?id=47 LCD5110 lcd(8,9,10,12,11); extern unsigned char BigNumbers[]; extern uint8_t ui[]; extern uint8_t startScreen[]; float voltage = 0.0; int sensorPin = A0; float sensorValue = 0.0f; String voltageString ="0.0"; int stringLength = 0; float vout = 0.0; float vin = 0.0; float R1 = 30000.0; float R2 = 7500.0; void setup() { Serial.begin(9600); lcd.InitLCD(); lcd.drawBitmap(0, 0, startScreen, 84, 48); lcd.update(); delay(3000); lcd.setFont(BigNumbers); delay(1000); } void loop() { lcd.clrScr(); lcd.drawBitmap(0, 0, ui, 84, 48); voltage = readVoltage(); Serial.println(voltage); voltageString = String(voltage,1); stringLength = voltageString.length(); displayVoltage(stringLength); lcd.update(); delay(1000); } float readVoltage() { sensorValue = analogRead(sensorPin); vout = (sensorValue * 5.0) / 1024.0; vin = vout / (R2/(R1+R2)); return vin; } void displayVoltage(int length) { switch(length) { case 3: lcd.print(voltageString,14,19); break; case 4: lcd.print(voltageString,2,19); break; default: lcd.print(voltageString,2,19); break; } } ui.cC/C++
Data Antarmuka Pengguna
#include <avr/pgmspace.h> const unsigned char ui []PROGMEM = { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0x31, 0xF1, 0xD1, 0x01, 0x01, 0x81, 0xF1, 0x11, 0x11, 0xC1, 0xE1, 0x11, 0x11, 0x11, 0x31, 0xE1, 0xC1, 0x01, 0x01, 0x11, 0xF1, 0xF1, 0x11, 0x01, 0x01, 0x01, 0x31, 0x11, 0x11, 0xF1, 0xF1, 0x11, 0x11, 0x31, 0x01, 0x01, 0x01, 0x01, 0x81, 0x61, 0x31, 0xF1, 0xC1, 0x01, 0x01, 0x01, 0xC1, 0xE1, 0x21, 0x11, 0x11, 0x11, 0x31, 0x31, 0x01, 0x11, 0xF1, 0xF1, 0x91, 0x91, 0x91, 0x31, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3, 0xCF, 0xCC, 0xC3, 0xC0, 0xC0, 0xC0, 0xC3, 0xC7, 0xCC, 0xC8, 0xC8, 0xC8, 0xC7, 0xC3, 0xC0, 0xC0, 0xC8, 0xCF, 0xCF, 0xC8, 0xC8, 0xC8, 0xCC, 0xC0, 0xC0, 0xC8, 0xCF, 0xCF, 0xC8, 0xC0, 0xC0, 0xC0, 0xC0, 0xC8, 0xCC, 0xCB, 0xC1, 0xC1, 0xC1, 0xCF, 0xCE, 0xC8, 0xC0, 0xC3, 0xC7, 0xCC, 0xC8, 0xC8, 0xC9, 0xCF, 0xC7, 0xC1, 0xC8, 0xCF, 0xCF, 0xC8, 0xC8, 0xC8, 0xCC, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0xE0, 0xE0, 0xE0, 0x60, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xFE, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x3F, 0xFF, 0xFF, 0xFC, 0xF0, 0xFE, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, }; const unsigned char startScreen []PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x7C, 0x1C, 0x04, 0x00, 0x20, 0xE0, 0xE0, 0x20, 0x00, 0x00, 0x20, 0xE0, 0x20, 0x80, 0xC0, 0x60, 0x20, 0x20, 0x20, 0x60, 0xC0, 0x80, 0x20, 0xE0, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x60, 0x20, 0xE0, 0xE0, 0x20, 0x60, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x20, 0x20, 0x20, 0x60, 0xE0, 0x00, 0x20, 0xE0, 0xE0, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3F, 0x38, 0x38, 0x07, 0x00, 0x00, 0x0F, 0x1F, 0x30, 0x20, 0x20, 0x20, 0x30, 0x1F, 0x0F, 0x20, 0x3F, 0x3F, 0x20, 0x20, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x38, 0x27, 0x04, 0x04, 0x27, 0x3F, 0x3C, 0x20, 0x0F, 0x1F, 0x30, 0x20, 0x20, 0x24, 0x3C, 0x3C, 0x04, 0x20, 0x3F, 0x3F, 0x22, 0x22, 0x22, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0x3F, 0x0F, 0x83, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF8, 0x18, 0xF8, 0xE0, 0x00, 0xE0, 0x18, 0xF8, 0xF8, 0x08, 0x08, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00, 0x38, 0x18, 0x08, 0xF8, 0xF8, 0x08, 0x18, 0x38, 0x08, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00, 0x08, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7C, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1E, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0xC3, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x08, 0x00, 0x07, 0x07, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x01, 0x03, 0x06, 0x0C, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x80, 0xE0, 0xFE, 0x7F, 0x9F, 0x87, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7F, 0x7F, 0x3F, 0x1F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };