Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Komponen dan Perlengkapan

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
Arduino UNO
× 1
Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
PHPoC WiFi Shield for Arduino
× 1
Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
Resistor 100k ohm
× 1
Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
Resistor 1M ohm
× 1
Kabel jumper
× 1

Tentang Proyek Ini

Demonstrasi

Jika Anda baru dengan Arduino, Anda dapat memulai dengan Tutorial Arduino untuk pemula.

Cara Kerja

Kita dapat menggunakan pin input analog Arduino untuk mengukur tegangan. Namun, tegangan maksimum yang dapat diukur adalah 5V.

Untuk meningkatkan tegangan yang dapat diukur, kita perlu menggunakan pembagi tegangan

Teori

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Kita punya:

V_measure = (R1 + R2) / R2 * V_in

ratio = (R1 + R2) / R2

=> V_measure = ratio * V_in

Jika kita memilih R1 = 10 * R2, kita punya:

V_measure = 11 * V_in

Karena maksimum V_in yang diizinkan adalah 5V => Tegangan maksimum yang dapat diukur adalah 55V

Untuk membatasi arus yang mengalir melalui pin Arduino, yang dapat menyebabkan kerusakan pada Arduino, kita perlu memilih nilai resistor sebesar mungkin.

Saya memilih R1 = 1 Mohm, R2 = 100Kohm

Dalam Praktik

Ada beberapa masalah dalam praktik

Masalah-masalah ini diatasi pada bagian Kalibrasi

Kalibrasi

1. Ukur nilai nyata dari (R1 + R2) / R2

Ini hanya perlu dilakukan satu kali untuk mendapatkan rasio

Pemasangan seperti gambar di bawah:

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

ratio = (R1 + R2) / R2 = V_measure / V_in = A1_read_value / A0_read_value

ratio = A1_read_value / A0_read_value

Kode untuk kalibrasi ini => lihat ResisterCalibration.ino di bagian kode

2. Ketidakstabilan Sumber Daya

Ketidakstabilan sumber daya menyebabkan ketidakstabilan dalam referensi tegangan pin analog. Itu menyebabkan pengukuran yang salah dalam perhitungan tegangan.

Untuk mengatasinya, kita perlu mengukur referensi tegangan secara sering.

Bagaimana cara mengukur referensi tegangan?

Hubungkan 3.3V ke pin A1

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Referensi tegangan diukur secara tidak langsung berdasarkan nilai di A1:

V_reference= 1023 * 3.3 / A1_value

Bagaimana cara menghitung V_measure:

V_in = mapFloat(A0_value, 0, 1023, 0, V_reference);V_measure = ratio * V_in;

Pemasangan utama:

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Cara Melakukannya

Anda dapat melihat tegangan di ponsel pintar seperti ini:

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Tips Pemasangan:

Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Kit Starter Arduino Terbaik untuk Pemula

Lihat Kit Arduino Terbaik untuk Pemula

Kode

ResistorCalibration.inoArduino
- Pemasangan seperti yang dijelaskan di bagian Kalibrasi
- Jalankan kode ini satu kali
- Buka Serial Plotter
- Salin nilai rasio
- Ganti nilai ini di baris 5 Voltmeter.ino
double ratio; int analogReadAverage(int pin, int read_time) { unsigned long read_value = 0; // baca nilai analog in read_time kali: for(int i = 0; i < read_time; i++) { read_value += analogRead(pin); delay(2); } // Dapatkan rata-rata read_value /= read_time; return read_value; } double resistorCalibration() { double _ratio; double A0_read_value; double A1_read_value; A0_read_value = analogReadAverage(A0, 20); A1_read_value = analogReadAverage(A1, 20); _ratio = A1_read_value / A0_read_value; return _ratio; } void setup() { // inisialisasi komunikasi serial pada 9600 bps: Serial.begin(9600); } void loop() { ratio = resistorCalibration(); Serial.print("ratio:"); Serial.println(ratio); delay(200); } 
Voltmeter.inoArduino
Ini adalah kode utama. Sebelum mengunggah kode ini, kita perlu :
- unggah ResistorCalibration.ino
- buka Serial Monitor
- salin nilai rasio dan ganti nilai di baris 5 dari kode ini
double V_measure; double V_in; double V_reference; double ratio = 11.59; double mapFloat(double x, double in_min, double in_max, double out_min, double out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } int analogReadAverage(int pin, int read_time) { unsigned long read_value = 0; for(int i = 0; i < read_time; i++) { read_value += analogRead(pin); delay(2); } // dapatkan rata-rata read_value /= read_time; return read_value; } double getVoltageReference() { double A1_value = analogReadAverage(A1, 20); // A1 terhubung ke 3.3v double V_REF = 1023 * 3.3 / A1_value; return V_REF; } void setup() { Serial.begin(9600); } void loop() { // perbarui referensi tegangan V_reference = getVoltageReference(); double A0_value = analogReadAverage(A0, 20); // peta ke kisaran output analog: V_in = mapFloat(A0_value, 0, 1023, 0, V_reference); V_measure = ratio * V_in; // cetak hasil ke Serial Monitor: Serial.println(V_measure); delay(200); } 
voltmeter.phpPHP
File ini adalah Antarmuka Pengguna Web. Ini perlu diunggah ke PHPoC Shield bersama dengan gambar latar belakang voltmeter_body.jpg
<!DOCTYPE html> <html> <head> <title>PHPoC Shield - VOLTMETER</title> <meta name="viewport" content="width=device-width, initial-scale=0.7"> <link rel="stylesheet" media="screen" href="https://fontlibrary.org/face/segment7" type="text/css"/> <style> html {height: 100%;} body {width: 100%; height: 100%;; text-align: center;} .container {width: 100%; min-height: 99%; max-height: 100%;} canvas { background: url(voltmeter_body.jpg); background-size:contain; font-family: 'Segment7Standard'; font-weight: bold; font-style: italic; } </style> <script> var COLOR_LCD_TEXT = "#000000"; var COLOR_LCD_BGR = "#00FFFF"; var IMG_WIDTH = 583; var IMG_HEIGHT = 1235; var METER_WIDTH, METER_HEIGHT; var ws; var canvas; var ctx; var buffer = ""; var voltage = 0; function init() { canvas = document.getElementById("graph"); ctx = canvas.getContext("2d"); canvas_resize(); update_view(voltage); var ws_host_addr = "<?php echo _SERVER("HTTP_HOST")?>"; if((navigator.platform.indexOf("Win") != -1) && (ws_host_addr.charAt(0) == "[")) { // konversi identifier sumber daya jaringan ke nama jalur UNC ws_host_addr = ws_host_addr.replace(/[\[\]]/g, ''); ws_host_addr = ws_host_addr.replace(/:/g, "-"); ws_host_addr += ".ipv6-literal.net"; } ws = new WebSocket("ws://" + ws_host_addr + "/serial_monitor", "uint8.phpoc"); ws.onopen = ws_onopen; ws.onclose = ws_onclose; ws.onmessage = ws_onmessage; ws.binaryType = "arraybuffer"; } function ws_onopen() { } function ws_onclose() { alert("Tidak dapat terhubung ke Arduino!"); ws.onopen = null; ws.onclose = null; ws.onmessage = null; ws = null; } function ws_onmessage(e_msg) { e_msg = e_msg || window.event; // MessageEvent var u8view = new Uint8Array(e_msg.data); buffer += String.fromCharCode.apply(null, u8view); buffer = buffer.replace(/\r\n/g, "\n"); buffer = buffer.replace(/\r/g, "\n"); while(buffer.indexOf("\n") == 0) buffer = buffer.substr(1); if(buffer.indexOf("\n") <= 0) return; var pos = buffer.lastIndexOf("\n"); var str = buffer.substr(0, pos); var arr = str.split("\n"); buffer = buffer.substr(pos + 1); if(arr.length) { voltage = parseFloat(arr[arr.length - 1]); update_view(voltage); } } function update_view(voltage) { ctx.clearRect(0, 0, METER_WIDTH, METER_HEIGHT); var top = METER_HEIGHT * 0.125; // 12.5% var left = METER_WIDTH * 0.2; // 2% var width = METER_WIDTH * 0.6; // 6% var height = METER_HEIGHT * 0.12; // 12% ctx.fillStyle = COLOR_LCD_BGR; ctx.rect(left, top, width, height); ctx.fill(); ctx.font = "italic 75px Segment7Standard"; ctx.textBaseline = "middle"; ctx.textAlign = "end"; ctx.fillStyle = COLOR_LCD_TEXT; ctx.fillText(voltage.toFixed(2), left + width - 50, top + height / 1.8); ctx.font = "18px Arial"; ctx.textBaseline = "middle"; ctx.textAlign = "center"; ctx.fillText("VDC", left + width - 25, top + height / 2); ctx.font = "bold 32px Arial"; ctx.shadowBlur = 5; ctx.shadowColor = "white"; ctx.fillStyle = "#00FFFF"; ctx.fillText("ARDUINO", METER_WIDTH / 2, METER_HEIGHT * 0.5); ctx.fillText("WEB VOLTMETER", METER_WIDTH / 2, METER_HEIGHT * 0.55); } function canvas_resize() { canvas.width = 0; // untuk menghindari ukuran layar yang salah canvas.height = 0; var container = document.getElementById("container"); var height = container.clientHeight; var ratio = height / IMG_HEIGHT; var width = ratio * IMG_WIDTH; METER_WIDTH = width; METER_HEIGHT = height; canvas.width = METER_WIDTH; canvas.height = METER_HEIGHT; update_view(voltage); } window.onload = init; </script> </head> <body onresize="canvas_resize()"> <div class="container" id="container"> <canvas id="graph"></canvas> </div> </body> </html> 

Skematik

Ini perlu diunggah ke PHPoC ShieldBuat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah

Proses manufaktur

  1. Buat Konsol Kontrol Photoshop DIY dengan Arduino Nano RP2040
  2. Sistem Absensi RFID berbasis Arduino yang Andalkan dengan Python
  3. Membuat Remote Android Universal dengan Arduino, 1Sheeld & Kontrol IR
  4. Bangun Sensor Detak Jantung Inframerah Andalan dengan Arduino: Panduan Langkah demi Langkah
  5. Pengukuran Frekuensi & Siklus Kerja Akurat dengan Arduino UNO
  6. Buat Voltmeter DIY dengan Arduino dan Layar Nokia 5110 – Panduan Langkah demi Langkah
  7. Pengukuran Jarak Real-Time dengan Sonar Arduino & Visualisasi Processing
  8. MobBob: Buat Robot Arduino Sendiri, Dikontrol dengan Mulus melalui Smartphone Android
  9. Pengendalian Kecerahan LED Lancar Menggunakan Bolt IoT dan Arduino UNO
  10. Buat Lengan Robotik Arduino Pintar: Tutorial DIY Mudah