- Bahan yang Diperlukan untuk Meter Daya ESP32
- Arduino dan ESP32 Efficiency Meter - Circuit Diagram
- Reka Bentuk PCB untuk Arduino dan ESP32 Efficiency Meter
- Meter Kecekapan Berasaskan Arduino dan ESP32 - Kod
- Menguji Meter Kecekapan Berasaskan Arduino dan ESP32
- Penambahbaikan Lebih Lanjut
Kita semua menyedari voltmeter, ammeter, dan wattmeters asas, tiga perkara asas yang anda perlukan untuk mengukur nilai pada mana-mana projek atau litar elektronik. Mengukur voltan dan arus dengan bantuan multimeter boleh menjadi cara yang baik untuk memulakan, tetapi salah satu masalah terbesar yang saya hadapi semasa menguji litar adalah, mengukur kecekapan kuasa. Jadi, hari ini kita akan menyelesaikan masalah itu dengan membina meter kecekapan berasaskan Arduino dan ESP32 yang dapat mengukur voltan masukan, arus masukan, voltan keluaran, dan arus keluaran. Oleh itu, ia dapat mengukur daya input dan daya output pada masa yang sama, dan dengan nilai-nilai ini, kita dapat mengukur kecekapan dengan mudah. Sebelum ini, kami juga pernah melakukan sesuatu yang sangat serupa dalam projek Arduino Based Wattmeter kami, tetapi di sini kami akan mengukur kedua-dua kuasa input dan kuasa output untuk hitung kecekapan kuasa.
Daripada membeli empat meter untuk pekerjaan itu, kita akan dapat menyelesaikan masalah ini dengan memasukkan kemampuan keempat-empat meter menjadi satu. Membina meter digital anda bukan sahaja dapat mengurangkan kos tetapi juga memberi anda ruang goyangan untuk peningkatan dan penambahbaikan. Oleh kerana kita menggunakan ESP32 untuk membina projek ini, kita dapat menjadikan IoT meter ini diaktifkan dan log data melalui web, yang merupakan topik untuk projek masa depan. Dengan semua asas dibersihkan, mari masuk ke dalamnya.
Catatan: Meter kuasa ini direka untuk litar DC. Sekiranya anda ingin mengukur arus AC hingga kecekapan kuasa AC yang dikira, anda boleh melihat Projek Meter Tenaga Elektrik dan Prabayar Tenaga Meter berasaskan IoT.
Bahan yang Diperlukan untuk Meter Daya ESP32
Gambar di bawah menunjukkan bahan yang digunakan untuk membina litar. Oleh kerana ini dibuat dengan komponen yang sangat generik, anda pasti dapat mencari semua bahan yang disenaraikan di kedai hobi tempatan anda.
Saya juga telah menyenaraikan komponen di bawah beserta kuantiti yang diperlukan. Sekiranya anda membina litar sendiri, sangat disyorkan untuk mendapatkan semua bahan dari senarai di bawah.
- Papan ESP32 - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- Jack Barrel DC - 1
- Kapasitor 100uF - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6.8K, 1% - 2
Arduino dan ESP32 Efficiency Meter - Circuit Diagram
Skema untuk Arduino dan ESP32 Efficiency Meter ditunjukkan di bawah. Membuat litar ini sangat mudah dan menggunakan komponen generik.
Operasi litar sangat mudah. Kami akan mengukur voltan dan arus dalam projek ini tetapi dengan cara yang unik. Kami mengukur voltan dan arus untuk input dan output, oleh itu kami dapat melihat kecekapan litar. Ini sangat berguna untuk beberapa projek. Contohnya ialah penukar DC ke DC di mana pengukuran kecekapan menjadi wajib. Cara kerja litar ini dijelaskan di bawah.
IC Sensor Semasa ACS712:
Seperti yang anda lihat dalam gambar di atas, kami menggunakan IC Sensor Semasa ACS712 untuk mengukur arus. Ini adalah IC yang sangat menarik kerana menggunakan Hall-effect untuk mengukur arus, terdapat tiga varian IC ini yang boleh didapati di pasaran f (atau 5A, 20A, dan 30A). Kami menggunakan varian 20A ini dan dilabelkan sebagai ACS712-20.
Lembar data ACS712 mengesyorkan julat voltan 4.5 - 5.5 untuk beroperasi dengan lancar. Dan kerana kita akan mengukur arus dengan ESP32, hanya toleran 3.3V, sebab itulah saya menggunakan pembahagi voltan dengan dua perintang 10K untuk menurunkan voltan output IC ACS712. Apabila tidak ada arus yang mengalir melalui IC, ia akan mengeluarkan 2.5V, dan ketika sejumlah arus mengalir melalui IC, ia akan menurunkan voltan atau meningkatkan voltan bergantung pada arah aliran arus. Kami telah menggunakan dua IC ini untuk mengukur arus input dan output. Lihat projek kami sebelumnya (di bawah) di mana kami menggunakan Sensor ACS712 ini.
- Meter Tenaga Elektrik Berasaskan IoT menggunakan modul Wi-Fi Arduino dan ESP8266
- Litar Ammeter Digital menggunakan PIC Microcontroller dan ACS712
Di mana kita membincangkan cara kerja sensor ini secara terperinci. Anda boleh melihatnya jika anda ingin mengetahui lebih lanjut mengenai sensor ini.
Pembahagi Voltan:
Untuk mengukur voltan input dan output, kita mempunyai dua pembahagi voltan pada input dan sisi output litar. Voltan maksimum yang dapat diukur oleh litar ialah 35V, tetapi dapat diubah dengan mudah dengan menukar nilai perintang untuk pembahagi voltan.
Pengatur Voltan:
Pengatur voltan LM7805 generik digunakan untuk memberi kuasa kepada ESP32, OLED, dan ACS712. Ketika kami mengaktifkannya dengan daya yang cukup bersih, tidak ada kapasitor pemisah yang digunakan, tetapi kami telah menggunakan kapasitor 100uF pada input dan output untuk menstabilkan IC.
IC ESP32 dan Paparan OLED:
Kami telah menggunakan ESP32 sebagai pemproses utama, yang bertanggungjawab untuk semua pembacaan, pengiraan, input, dan output. Juga, kami telah menggunakan paparan OLED 128X64 untuk mengetahui nilainya.
Reka Bentuk PCB untuk Arduino dan ESP32 Efficiency Meter
PCB untuk Arduino dan ESP32 Efficiency Meter kami direka pada papan satu sisi. Saya telah menggunakan Eagle untuk merancang PCB saya tetapi anda boleh menggunakan perisian reka bentuk pilihan anda. Gambar 2D reka bentuk papan saya ditunjukkan di bawah.
Jejak tanah yang mencukupi digunakan untuk membuat sambungan tanah yang betul di antara semua komponen. Kami juga memastikan untuk menggunakan jejak 5V dan 3.3V yang betul untuk mengurangkan bunyi dan meningkatkan kecekapan.
- Muat turun fail Reka Bentuk PCB dan GERBER Arduino dan ESP32 Efficiency meter
PCB buatan tangan:
Untuk kemudahan dan ujian, saya membuat PCB versi buatan tangan saya dan ditunjukkan di bawah. Pada versi pertama, saya membuat beberapa kesalahan, yang saya perbaiki menggunakan beberapa kabel jumper. Tetapi pada versi terakhir, saya memperbaikinya, anda boleh memuat turun fail dan menggunakannya.
Meter Kecekapan Berasaskan Arduino dan ESP32 - Kod
Sekarang, bahawa kita mempunyai pemahaman yang baik mengenai aspek perkakasan, kita dapat membuka Arduino IDE dan memulakan pengekodan kita. Tujuan kod ini adalah untuk membaca voltan analog dari pin 35 dan 33 pada papan ESP32. Juga, kita membaca voltan dari 32, dan 34 pin yang merupakan nilai semasa. Setelah kita melakukan ini, kita dapat melipatgandakannya untuk mendapatkan daya input dan kuasa output, dan memasukkannya ke formula kecekapan, kita dapat memperoleh efisiensi.
Akhirnya, kami memaparkannya di skrin LCD. Program lengkap untuk melakukan perkara yang sama diberikan pada akhir, yang boleh digunakan untuk perkakasan yang dibincangkan di atas. Selanjutnya, kod tersebut dibahagikan kepada potongan kecil dan dijelaskan.
Oleh kerana kami menggunakan paparan OLED 128X64, kami memerlukan perpustakaan Adafruit_GFX dan perpustakaan Adafruit_SSD1306 untuk berkomunikasi dengan paparan. Anda boleh memuat turun kedua-duanya dari terminal pengurus papan lalai Arduino; jika anda menghadapi masalah dengan bahagian pengurus dewan, anda juga boleh memuat turun dan memasukkan perpustakaan dari repositori GitHub yang berkaitan, yang diberikan di bawah.
- Muat turun perpustakaan Adafruit_GFX
- Muat turun perpustakaan Adafruit_SSD1306
Seperti biasa, kami memulakan kod kami dengan memasukkan semua perpustakaan yang diperlukan. Kemudian kami menentukan semua pin dan pemboleh ubah yang diperlukan semuanya ditunjukkan di bawah.
#sertakan
The SCREEN_WIDTH & SCREEN_HEIGHT definisi yang digunakan untuk menentukan saiz skrin. Seterusnya kita telah menentukan semua pin yang diperlukan, di mana kita akan mengukur voltan dan arus. Seterusnya, kami telah menentukan nilai perintang yang digunakan dalam perkakasan seperti yang anda dapat lihat dari skema. Sekiranya anda tidak mempunyai nilai-nilai ini atau jika anda ingin mengubah jarak meter, anda boleh mengubah nilai-nilai tersebut, kodnya akan berfungsi dengan baik.
Oleh kerana kita menggunakan ACS712 untuk mengukur arus, kita memerlukan nilai mVperAmp untuk mengira arus dari voltan. Oleh kerana saya menggunakan modul 20A ACS712, nilai mV / A adalah 100 seperti yang diberikan dalam lembar data. Tetapi kerana kita menggunakan ESP32 dan pembahagi voltan, kita akan mempunyai separuh nilainya iaitu 50, dan itulah sebabnya kita memasukkan nilai mV / AMP.
ACSoffset adalah ofset yang diperlukan untuk mengira arus dari voltan. Oleh kerana IC ACS712 dikuasakan dari 5V, voltan mengimbangi adalah 2.5V. Tetapi ketika kita menggunakan pembahagi voltan, ia turun menjadi 1.25V. Anda mungkin sudah mengetahui ADC yang jelek pada ESP32, jadi saya harus menggunakan nilai 1136. Sekiranya anda menghadapi masalah penentukuran, anda boleh mengubah nilai dan mengimbangi ADC.
Akhirnya, kami menyelesaikan bahagian ini dengan membuat objek paparan kelas Adafruit_SSD1306 dan melewati lebar layar, tinggi, konfigurasi I 2 C, dan parameter -1 terakhir digunakan untuk menentukan fungsi tetapan semula. Sekiranya paparan anda tidak mempunyai pin tetapan semula luaran (yang pasti untuk paparan saya), maka anda harus menggunakan -1 untuk argumen terakhir.
persediaan tidak sah () {Serial.begin (115200); jika (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Alamat 0x3D untuk 128x64 Serial.println (F ("Peruntukan SSD1306 gagal")); untuk (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); kelewatan (100); }
Seterusnya, kita ada bahagian persediaan () . Di bahagian ini, kami mengaktifkan siri untuk debugging, kami memeriksa apakah paparan I 2 C tersedia atau tidak dengan bantuan kaedah permulaan objek paparan. Juga, kami menetapkan alamat I 2 C. Seterusnya, kami membersihkan paparan dengan kaedah clearDisplay () . Kami juga memutar paparan dengan kaedah setRotation , ini kerana saya telah merosakkan reka bentuk PCB saya. Seterusnya, kami meletakkan kelewatan 100 ms agar fungsi tersebut dapat dilaksanakan. Setelah selesai, kita sekarang dapat beralih ke fungsi gelung. Tetapi sebelum meneruskan ke fungsi gelung, kita perlu membincangkan dua fungsi lain iaitu return_voltage_value () , dan return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; double ADCVoltage = 0; double inputVoltage = 0; dua kali ganda = 0; untuk (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; Tegangan ADC = ((purata * 3.3) / (4095)) + 0.138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // formula untuk mengira voltan iaitu GND return inputVoltage; }
Fungsi return_voltage_value () digunakan untuk mengukur voltan yang masuk ke ADC, dan ia memerlukan pin_no sebagai argumen. Dalam fungsi ini, kita mulakan dengan menyatakan beberapa pemboleh ubah, yaitu tmp, ADCVoltage, inputVoltage, dan avg. Pemboleh ubah tmp digunakan untuk menyimpan nilai ADC sementara yang kami dapat dari fungsi analogRead (), kemudian kami mengira rata-rata 150 kali dalam gelung untuk, dan kami menyimpan nilainya ke pemboleh ubah yang disebut avg Kami kemudian mengira tegangan ADC dari formula yang diberikan, akhirnya, kami mengira voltan masukan dan mengembalikan nilai. Nilai +0.138 yang anda lihat adalah nilai penentukuran yang saya gunakan untuk menentukur tahap voltan, bermain-main dengan nilai ini jika anda mendapat sebarang kesalahan.
double return_current_value (int pin_no) {double tmp = 0; berganda avg = 0; double ADCVoltage = 0; dua kali ganda Amps = 0; untuk (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((purata / 4095.0) * 3300); // Mendapatkan anda mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp); pulangkan Amps; }
Seterusnya, kita mempunyai fungsi return_current_value () . Fungsi ini juga menjadikan pin_no sebagai argumen. Dalam fungsi ini juga kita mempunyai empat pemboleh ubah iaitu. tmp, avg, ADCVoltage, dan Amps
Seterusnya, kita membaca pin dengan fungsi analogRead () dan rata-rata 150 kali, seterusnya kita menggunakan formula untuk mengira tegangan AD, dengan itu kita mengira arus dan kita mengembalikan nilainya. Dengan itu, kita dapat bergerak ke bahagian gelung.
gelung void () {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 ("Voltan Input:"); Serial.print (input_voltage); Serial.print ("- Input Semasa:"); Serial.print (input_current); Serial.print ("- Voltan Keluaran:"); Serial.print (output_voltage); Serial.print ("- Output Semasa:"); Serial.println (output_current); kelewatan (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); paparan.cetak ("V"); }
Kami memulakan bahagian gelung dengan menyatakan dan menentukan beberapa pemboleh ubah apungan, di keempat-empat pemboleh ubah tersebut. Kami memanggil fungsi masing-masing, melewati pin_no sebagai argumen, kerana modul ACS712 dapat mengembalikan nilai semasa secara negatif. Kami menggunakan fungsi abs () perpustakaan matematik untuk menjadikan nilai negatif sebagai positif. Seterusnya, kami mencetak secara bersiri semua nilai untuk penyahpepijatan. Seterusnya, kami membersihkan paparan, mengatur kursor, dan mencetak nilainya. Kami melakukan ini untuk semua watak yang ditunjukkan dalam paparan. Yang menandakan berakhirnya fungsi gelung dan program.
Menguji Meter Kecekapan Berasaskan Arduino dan ESP32
Seperti yang anda lihat persediaan ujian saya pada gambar di atas. Saya mempunyai pengubah 30V saya sebagai input, dan meter saya disambungkan untuk papan ujian. Saya menggunakan papan penukar buck berasaskan LM2596 dan untuk muatan dan saya menggunakan tiga perintang 10 Ohms, secara selari.
Seperti yang anda lihat dalam gambar di atas, saya telah menyambung ke multi-meter untuk memeriksa voltan input dan output. Transformer menghasilkan hampir 32V dan output penukar buck adalah 3.95V.
Gambar di sini menunjukkan arus keluaran yang diukur oleh meter kecekapan saya dan multimeter. Seperti yang anda lihat, multimeter menunjukkan 0,97 Amps, dan jika anda mengezum sedikit, ia menunjukkan 1.0A, ia sedikit mati kerana tidak linear dalam modul ACS712 tetapi ini memenuhi tujuan kami. Untuk penjelasan dan pengujian terperinci, anda boleh melihat video di bahagian video kami.
Penambahbaikan Lebih Lanjut
Untuk demonstrasi ini, litar dibuat pada PCB buatan tangan tetapi litar dapat dibina dengan mudah dalam PCB berkualiti. Dalam percubaan saya, ukuran PCB sangat besar kerana ukuran komponen, tetapi dalam persekitaran pengeluaran, ia dapat dikurangkan dengan menggunakan komponen SMD yang murah. Litar ini juga tidak mempunyai ciri perlindungan terpasang, jadi termasuk litar perlindungan akan meningkatkan aspek keselamatan keseluruhan litar. Juga, semasa menulis kod, saya perhatikan ADC ESP32 tidak begitu bagus. Menyertakan ADC luaran seperti modul ADS1115 akan meningkatkan kestabilan dan ketepatan keseluruhan.
Saya harap anda menyukai artikel ini dan mengetahui sesuatu yang baru. Sekiranya anda mempunyai keraguan, anda boleh bertanya dalam komen di bawah atau boleh menggunakan forum kami untuk perbincangan terperinci.