- Bahan yang Dibutuhkan untuk Pengukur Daya ESP32
- Pengukur Efisiensi Berbasis Arduino dan ESP32 - Diagram Sirkuit
- Desain PCB untuk Pengukur Efisiensi Berbasis Arduino dan ESP32
- Pengukur Efisiensi Berbasis Arduino dan ESP32 - Kode
- Menguji Pengukur Efisiensi Berbasis Arduino dan ESP32
- Peningkatan Lebih Lanjut
Kita semua mengetahui voltmeter dasar, amperemeter, dan wattmeter, tiga hal dasar yang Anda butuhkan untuk mengukur nilai pada proyek atau sirkuit elektronik apa pun. Mengukur tegangan dan arus dengan bantuan multimeter bisa menjadi cara yang baik untuk memulai, tetapi salah satu masalah terbesar yang saya hadapi saat menguji rangkaian adalah, mengukur efisiensi daya. Jadi, hari ini kita akan menyelesaikan masalah itu dengan membangun pengukur efisiensi berbasis Arduino dan ESP32 yang dapat mengukur tegangan input, arus input, tegangan output, dan arus keluaran. Oleh karena itu, ia dapat mengukur daya masukan dan daya keluaran pada saat yang sama, dan dengan nilai-nilai ini, efisiensi dapat diukur dengan mudah. Sebelumnya, kami juga telah melakukan sesuatu yang sangat mirip dalam proyek Wattmeter Berbasis Arduino kami, tetapi di sini kami akan mengukur daya input dan daya output untuk menghitung efisiensi daya.
Daripada membeli empat meter untuk pekerjaan itu, kami akan dapat menyelesaikan masalah ini dengan menggabungkan kemampuan keempat meter menjadi satu. Membangun pengukur digital Anda tidak hanya mengurangi biaya tetapi juga memberi Anda ruang gerak untuk peningkatan dan peningkatan. Karena kami menggunakan ESP32 untuk membangun proyek ini, kami dapat dengan mudah mengaktifkan IoT pengukur ini dan mencatat data melalui web, yang merupakan topik untuk proyek mendatang. Dengan semua hal mendasar yang telah diselesaikan, mari kita mulai.
Catatan: Pengukur daya ini dirancang untuk sirkuit DC. Jika Anda ingin mengukur arus AC untuk menghitung efisiensi daya AC, Anda dapat melihat Proyek Pengukur Energi Listrik dan Pengukur Energi Prabayar berbasis IoT.
Bahan yang Dibutuhkan untuk Pengukur Daya ESP32
Gambar di bawah ini menunjukkan bahan yang digunakan untuk membangun sirkuit. Karena ini dibuat dengan komponen yang sangat umum, Anda seharusnya bisa menemukan semua bahan yang terdaftar di toko hobi lokal Anda.
Saya juga telah membuat daftar komponen di bawah ini bersama dengan jumlah yang dibutuhkan. Jika Anda membuat sirkuit sendiri, sangat disarankan untuk mendapatkan semua bahan dari daftar di bawah ini.
- Papan ESP32 - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC Barrel Jack - 1
- Kapasitor 100uF - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6,8K, 1% - 2
Pengukur Efisiensi Berbasis Arduino dan ESP32 - Diagram Sirkuit
Skema untuk Pengukur Efisiensi Berbasis Arduino dan ESP32 ditunjukkan di bawah ini. Membuat sirkuit ini sangat sederhana dan menggunakan komponen generik.
Pengoperasian rangkaian sangat sederhana. Kami akan mengukur tegangan dan arus dalam proyek ini tetapi dengan cara yang unik. Kami mengukur tegangan dan arus untuk input dan output, sehingga kami dapat melihat efisiensi rangkaian. Ini sangat berguna untuk beberapa proyek. Contohnya bisa menjadi konverter DC ke DC di mana pengukuran efisiensi menjadi wajib. Cara kerja rangkaian ini dijelaskan di bawah ini.
IC Sensor Arus ACS712:
Seperti yang Anda lihat pada gambar di atas, kami menggunakan IC Sensor Arus ACS712 untuk mengukur arus. Ini adalah IC yang sangat menarik karena menggunakan efek Hall untuk mengukur arus, ada tiga varian IC ini yang dapat ditemukan di pasar f (atau 5A, 20A, dan 30A). Kami menggunakan varian 20A ini dan diberi label sebagai ACS712-20.
Lembar data ACS712 merekomendasikan rentang tegangan 4,5 - 5,5 untuk beroperasi dengan lancar. Dan karena kita akan mengukur arus dengan ESP32, itu hanya toleran 3.3V, itulah sebabnya saya telah menggunakan pembagi tegangan dengan dua resistor 10K untuk menurunkan tegangan output dari IC ACS712. Ketika tidak ada arus yang mengalir melalui IC, ia mengeluarkan 2.5V, dan ketika sejumlah arus mengalir melalui IC, itu akan menurunkan tegangan atau meningkatkan tegangan tergantung pada arah aliran arus. Kami telah menggunakan dua IC ini untuk mengukur arus masukan dan keluaran. Lihat proyek kami sebelumnya (di bawah) di mana kami menggunakan Sensor ACS712 ini.
- Pengukur Energi Listrik Berbasis IoT menggunakan modul Wi-Fi Arduino dan ESP8266
- Rangkaian Ammeter Digital menggunakan Mikrokontroler PIC dan ACS712
Dimana kita membahas cara kerja sensor tersebut secara detail. Anda dapat memeriksanya jika Anda ingin tahu lebih banyak tentang sensor ini.
Pembagi Tegangan:
Untuk mengukur tegangan input dan output, kami memiliki dua pembagi tegangan di sisi input dan output rangkaian. Tegangan maksimum yang dapat diukur rangkaian adalah 35V, tetapi dapat dengan mudah diubah dengan mengubah nilai resistor untuk pembagi tegangan.
Regulator Tegangan:
Regulator tegangan LM7805 generik digunakan untuk memberi daya pada IC ESP32, OLED, dan ACS712. Karena kami menyalakannya dengan daya yang cukup bersih, tidak ada kapasitor decoupling yang digunakan, tetapi kami telah menggunakan kapasitor 100uF pada input dan output untuk menstabilkan IC.
IC ESP32 dan Layar OLED:
Kami telah menggunakan ESP32 sebagai prosesor utama, yang bertanggung jawab atas semua pembacaan, penghitungan, masukan, dan keluaran. Selain itu, kami telah menggunakan layar OLED 128X64 untuk mengetahui nilainya.
Desain PCB untuk Pengukur Efisiensi Berbasis Arduino dan ESP32
PCB untuk Pengukur Efisiensi Berbasis Arduino dan ESP32 kami dirancang pada papan satu sisi. Saya telah menggunakan Eagle untuk mendesain PCB saya, tetapi Anda dapat menggunakan perangkat lunak desain pilihan Anda. Gambar 2D dari desain papan saya ditunjukkan di bawah ini.
Jejak arde yang memadai digunakan untuk membuat sambungan arde yang tepat di antara semua komponen. Selain itu, kami memastikan untuk menggunakan jejak 5V dan 3,3V yang tepat untuk mengurangi kebisingan dan meningkatkan efisiensi.
- Unduh Desain PCB dan file GERBER Arduino dan pengukur Efisiensi Berbasis ESP32
PCB buatan tangan:
Untuk kenyamanan dan pengujian, saya membuat versi buatan tangan dari PCB dan ditunjukkan di bawah ini. Pada versi pertama, saya membuat beberapa kesalahan, yang saya perbaiki menggunakan beberapa kabel jumper. Tetapi di versi final, saya memperbaikinya, Anda cukup mengunduh file dan menggunakannya.
Pengukur Efisiensi Berbasis Arduino dan ESP32 - Kode
Sekarang, setelah kita memiliki pemahaman yang baik tentang sisi perangkat keras, kita dapat membuka Arduino IDE dan memulai pengkodean kita. Tujuan dari kode ini adalah untuk membaca tegangan analog dari pin 35 dan 33 papan ESP32. Juga, kita membaca tegangan dari 32, dan 34 pin yang merupakan nilai arus. Setelah kita melakukan ini, kita dapat mengalikannya untuk mendapatkan daya input dan daya output, dan memasukkannya ke rumus efisiensi, kita bisa mendapatkan efisiensi.
Terakhir, kami menampilkannya di layar LCD. Program lengkap untuk melakukan hal yang sama diberikan di bagian akhir, yang dapat digunakan untuk perangkat keras yang dibahas di atas. Selanjutnya, kode tersebut dibagi menjadi potongan-potongan kecil dan dijelaskan.
Karena kami menggunakan layar OLED 128X64, kami memerlukan pustaka Adafruit_GFX dan pustaka Adafruit_SSD1306 untuk berkomunikasi dengan tampilan. Anda dapat mengunduh keduanya dari terminal pengelola papan default Arduino; jika Anda mengalami masalah apa pun dengan bagian pengelola papan, Anda juga dapat mengunduh dan menyertakan perpustakaan dari repositori GitHub terkait, yang diberikan di bawah ini.
- Unduh perpustakaan Adafruit_GFX
- Unduh perpustakaan Adafruit_SSD1306
Seperti biasa, kami memulai kode kami dengan memasukkan semua pustaka yang diperlukan. Kemudian kami menentukan semua pin dan variabel yang diperlukan yang semuanya ditampilkan di bawah ini.
#include
The SCREEN_WIDTH & SCREEN_HEIGHT definisi yang digunakan untuk menentukan ukuran layar. Selanjutnya kami telah menentukan semua pin yang diperlukan, di mana kami akan mengukur tegangan dan arus. Selanjutnya, kami telah menentukan nilai resistor yang digunakan di perangkat keras seperti yang Anda lihat dari skema. Jika Anda tidak memiliki nilai-nilai ini atau jika Anda ingin mengubah kisaran meteran, Anda dapat mengubah nilai-nilai tersebut, kode akan berfungsi dengan baik.
Karena kami menggunakan ACS712 untuk mengukur arus, kami memerlukan nilai mVperAmp untuk menghitung arus dari tegangan. Karena saya menggunakan modul 20A ACS712, nilai mV / A adalah 100 seperti yang diberikan dalam lembar data. Tetapi karena kami menggunakan ESP32 dan pembagi tegangan, kami akan memiliki setengah nilainya yaitu 50, dan itulah sebabnya kami memasukkan nilai mV / AMP.
ACSoffset adalah offset yang diperlukan untuk menghitung arus dari tegangan. Karena IC ACS712 diberi daya dari 5V, tegangan offsetnya adalah 2.5V. Tetapi karena kami menggunakan pembagi tegangan, itu turun menjadi 1.25V. Anda mungkin sudah mengetahui ADC jelek dari ESP32, jadi saya harus menggunakan nilai 1136. Jika Anda mengalami masalah kalibrasi, Anda dapat mengubah nilai dan mengimbangi ADC.
Terakhir, kita menyelesaikan bagian ini dengan membuat objek tampilan kelas Adafruit_SSD1306 dan meneruskan lebar layar, tinggi, konfigurasi I 2 C, dan parameter -1 terakhir digunakan untuk menentukan fungsionalitas reset. Jika tampilan Anda tidak memiliki pin reset eksternal (yang tentunya untuk tampilan saya), maka Anda harus menggunakan -1 untuk argumen terakhir.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Alamat 0x3D untuk 128x64 Serial.println (F ("alokasi SSD1306 gagal")); untuk (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); penundaan (100); }
Selanjutnya, kami memiliki bagian setup () kami . Di bagian ini, kami mengaktifkan serial untuk debugging, kami memeriksa apakah layar I 2 C tersedia atau tidak dengan bantuan metode awal dari objek tampilan. Juga, kami menetapkan alamat I 2 C. Selanjutnya, kami menghapus tampilan dengan metode clearDisplay () . Juga, kami memutar layar dengan metode setRotation , itu karena saya telah mengacaukan desain PCB saya. Selanjutnya, kami menempatkan penundaan 100 ms agar fungsi dapat diterapkan. Setelah selesai, sekarang kita dapat melanjutkan ke fungsi loop. Namun sebelum melanjutkan ke fungsi loop, kita perlu membahas dua fungsi lainnya yaitu return_voltage_value () , dan return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; ADCVoltage ganda = 0; inputVoltage ganda = 0; rata-rata ganda = 0; untuk (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } rata-rata = tmp / 150; ADCVoltage = ((rata-rata * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // rumus untuk menghitung tegangan di yaitu GND return inputVoltage; }
Fungsi return_voltage_value () digunakan untuk mengukur tegangan yang masuk ke ADC, dan menggunakan pin_no sebagai argumen. Dalam fungsi ini, kita mulai dengan mendeklarasikan beberapa variabel, yaitu tmp, ADCVoltage, inputVoltage, dan avg. Variabel tmp digunakan untuk menyimpan nilai ADC sementara yang kita dapatkan dari fungsi analogRead (), kemudian kita rata-rata 150 kali dalam perulangan for, dan kita menyimpan nilainya ke variabel yang disebut avg. Kami kemudian menghitung ADCVoltage dari rumus yang diberikan, akhirnya, kami menghitung tegangan input dan mengembalikan nilainya. Nilai +0.138 yang Anda lihat adalah nilai kalibrasi yang saya gunakan untuk mengkalibrasi level voltase, bermain-main dengan nilai ini jika Anda mendapatkan kesalahan.
double return_current_value (int pin_no) {double tmp = 0; rata-rata ganda = 0; ADCVoltage ganda = 0; ganda Amps = 0; untuk (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } rata-rata = tmp / 150; ADCVoltage = ((rata-rata / 4095,0) * 3300); // Memberi Anda mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp); mengembalikan Amps; }
Selanjutnya, kita memiliki fungsi return_current_value () . Fungsi ini juga menggunakan pin_no sebagai argumen. Dalam fungsi ini juga kami memiliki empat variabel yaitu. tmp, avg, ADCVoltage, dan Amps
Selanjutnya, kita membaca pin dengan fungsi analogRead () dan rata-rata 150 kali, selanjutnya kita menggunakan rumus untuk menghitung ADCvoltage, dengan itu kita menghitung arus dan mengembalikan nilainya. Dengan itu, kita bisa pindah ke bagian loop.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0,025; Serial.print ("Tegangan Input:"); Serial.print (input_voltage); Serial.print ("- Arus Input:"); Serial.print (input_current); Serial.print ("- Tegangan Output:"); Serial.print (tegangan_luaran); Serial.print ("- Arus Keluaran:"); Serial.println (output_current); penundaan (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); layar.cetak ("V"); }
Kami memulai bagian loop dengan mendeklarasikan dan mendefinisikan beberapa variabel float, di keempat variabel. Kami memanggil fungsi masing-masing, meneruskan pin_no sebagai argumen, karena modul ACS712 dapat mengembalikan nilai saat ini dalam negatif. Kami menggunakan fungsi abs () dari perpustakaan matematika untuk membuat nilai negatif menjadi positif. Selanjutnya, kami mencetak serial semua nilai untuk debugging. Selanjutnya, kami menghapus tampilan, mengatur kursor, dan mencetak nilainya. Kami melakukan ini untuk semua karakter yang ditampilkan di layar. Yang menandai akhir dari fungsi loop dan program.
Menguji Pengukur Efisiensi Berbasis Arduino dan ESP32
Seperti yang Anda lihat pengaturan pengujian saya pada gambar di atas. Saya memiliki trafo 30V sebagai input, dan meteran saya terhubung ke papan uji. Saya menggunakan papan konverter uang berbasis LM2596 dan untuk beban dan saya menggunakan tiga resistor 10 Ohm, secara paralel.
Seperti yang Anda lihat pada gambar di atas, saya telah menghubungkan ke multi-meter untuk memeriksa tegangan input dan output. Trafo menghasilkan hampir 32V dan output dari konverter uang adalah 3,95V.
Gambar di sini menunjukkan arus keluaran yang diukur dengan meteran efisiensi saya dan multimeter. Seperti yang Anda lihat, multimeter menunjukkan 0,97 Amps, dan jika Anda memperbesar sedikit, itu menunjukkan 1,0A, itu sedikit mati karena non-linearitas hadir dalam modul ACS712 tetapi ini melayani tujuan kami. Untuk penjelasan rinci dan pengujian, Anda dapat melihat video di bagian video kami.
Peningkatan Lebih Lanjut
Untuk demonstrasi ini, sirkuit dibuat di atas PCB buatan tangan tetapi sirkuit dapat dengan mudah dibuat dengan PCB berkualitas baik. Dalam percobaan saya, ukuran PCB sangat besar karena ukuran komponennya, tetapi dalam lingkungan produksi, dapat dikurangi dengan menggunakan komponen SMD yang murah. Sirkuit ini juga tidak memiliki fitur proteksi built-in, jadi memasukkan sirkuit proteksi akan meningkatkan aspek keselamatan sirkuit secara keseluruhan. Juga, saat menulis kode, saya perhatikan ADC ESP32 tidak terlalu bagus. Menyertakan ADC eksternal seperti modul ADS1115 akan meningkatkan stabilitas dan akurasi secara keseluruhan.
Saya harap Anda menyukai artikel ini dan mempelajari sesuatu yang baru darinya. Jika Anda ragu, Anda dapat bertanya di komentar di bawah atau dapat menggunakan forum kami untuk diskusi terperinci.