Penulis: Peter Jensen
Ini adalah upaya pertama saya pada proyek IoT 'berguna'. Saya memiliki Arduino Uno untuk sementara waktu, tetapi tidak benar -benar menggunakannya untuk apa pun, kecuali melalui tutorial LED yang berkedip. Sudah waktunya untuk digunakan. Saya merasa bermanfaat untuk memikirkan ide proyek dan kemudian mencari informasi yang Anda butuhkan saat Anda membutuhkannya. Tentu saja, sering kali Anda menemukan bahwa orang lain telah melakukan sesuatu yang serupa, tetapi tidak apa -apa, Anda masih akan belajar dari prosesnya.
Saya ingin perangkat mengukur konsumsi daya di rumah saya dan melaporkannya ke layanan 'cloud' ketika keadaan berubah; Lampu menyala/mati, dll. Juga, saya ingin tampilan di kotak, jadi saya bisa membaca apa konsumsi daya saat ini.
Saya mulai dengan menghubungkan sensor saat ini ke pin input analog; seperti ini:
Sumber: OpenEnergyMonitor.org
Untuk kalibrasi, saya menggunakan multimeter yang mampu mengukur hingga 10A dan mengaitkannya ke kawat yang menyalakan tiga lampu bohlam. Masing -masing umbi dapat dinyalakan dan dimatikan secara individual. Dengan 60W umbi di soket, saya bisa mendapatkan sampel untuk 60W, 120W, dan 180W.
Catatan, sensor saat ini hanya harus berkeliling satu kawat, agar arus AC melalui kawat itu untuk menginduksi arus dalam sensor.
Arus yang diukur adalah arus yang melewati saluran listrik yang dibungkus sensor arus.
Jika semua yang Anda lakukan di fungsi loop() dalam sketsa Arduino Anda adalah memanggil analogRead() dan menyimpan hasilnya dalam buffer memori, Anda akan bisa mendapatkan sekitar 100 sampel selama satu siklus (60Hz - 16,7ms). Arduino berjalan pada 16MHz. Itu seharusnya cukup untuk menghitung nilai input root-mean-square (RMS) secara akurat.
Mengapa Anda membutuhkan nilai RMS? Input pada pin input analog adalah penurunan tegangan di atas resistor beban/beban. Penurunan tegangan itu berbanding lurus dengan arus melalui saluran listrik yang diukur pada saat pengukuran.
Ketika arus dan tegangan bervariasi dari waktu ke waktu, daya dihitung sebagai daya rata -rata selama periode gelombang sinus 60Hz, menggunakan nilai RMS i dan V:
Komponen V RMS tetap konstan oleh perusahaan listrik di 120V, jadi yang menarik adalah nilai i rms . Konverter analog-ke-digital Arduino adalah 10-bit, dan sirkuit dirancang sehingga titik tengah input sinus adalah 2.5V, yang seharusnya menghasilkan pembacaan ~ 511. Jika bacaannya sama -sama berjarak dalam waktu, nilai i rms dapat dihitung sebagai:
di mana n adalah jumlah sampel yang diperlukan untuk mencakup periode penuh gelombang sinus 60Hz, k adalah konstanta kalibrasi yang akan ditentukan setelah mengukur nilai -nilai i rms aktual dengan multimeter, dan v i adalah nilai yang dikembalikan oleh panggilan ke analogRead()
Info lebih lanjut tentang matematika dapat ditemukan di sini: Wikipedia
<TODO: Masukkan gambar pengaturan pengukuran uji>
Saya membeli semua yang saya butuhkan di Amazon Prime. Jika Anda bukan pelanggan utama, Anda mungkin akan membayar sedikit lebih banyak. Untuk beberapa item, masuk akal untuk membeli lebih dari satu unit, karena hanya beberapa dolar lebih banyak dan selalu menyenangkan untuk memiliki cadangan jika Anda menggoreng satu. Juga, jika Anda ingin membuat unit kedua (atau ketiga) Anda sudah memiliki apa yang Anda butuhkan.
| Barang | Total biaya | Biaya satuan |
|---|---|---|
| Arduino Pro Mini (3-Pack) | $ 11 | $ 4 |
| Modul Catu Daya 3.3V/5V (5-Pack) | $ 9 | $ 2 |
| ESP8266 ESP-01 (4-Pack) | $ 14 | $ 4 |
| 2x SCT-013-000 Sensor arus AC non-invasif | $ 26 | $ 13 |
| Modul Tampilan 16x2 LCD | $ 6 | $ 6 |
| 110VAC-> adaptor 9V | $ 6 | $ 6 |
| 10pcs 4x6cm prototipe sisi ganda PCB | $ 7 | $ 1 |
| 10 pcs 3.5mm jack pemasangan pcb betina | $ 8 | $ 2 |
| Lain -lain: kapasitor, resistor, tombol, kabel | ~ $ 2 | $ 2 |
| Total | $ 89 | $ 40 |
Begini cara saya menyatukan semuanya:
Saya menggunakan perangkat lunak Digikey Scheme-IT untuk membuat diagram kabel perangkat keras di atas. Ini berjalan di browser!
Ada beberapa hal yang harus ditunjukkan:
Informasi yang ditunjukkan pada 2 baris siklus LCD melalui informasi ini, ketika tombol ditekan:
Jika pers panjang terdeteksi ketika 'opsi lanjutan' ditunjukkan layar tambahan ini termasuk dalam rotasi:
Untuk mengubah status on/off atau mengatur ulang data, tekan lama pada tombol harus dilakukan.
Kekuatan total | Daya garis |
Arus garis | Total Penggunaan Energi Sejak Terakhir Reset |
Alamat IP lokal | Tekan Panjang untuk Opsi Lanjutan |
Transmisi WiFi ON/OFF | Mengirimkan setiap nilai sampel |
Transmisi sedang berlangsung |
Tampilan/antarmuka browser saat ini terlihat seperti ini:

Garis hitam dan merah mewakili kekuatan yang diambil dari masing -masing dua fase yang masuk ke rumah. Tombol panah kiri dan kanan di atas akan pergi ke hari sebelumnya atau hari berikutnya. Jika Anda pada hari hari ini, data baru akan diambil. Tidak perlu menekan 'Refresh'!
Inilah beberapa hal yang dapat diperoleh dari ini:
Konsumsi siaga 'hitam' kira -kira 125W, dan 'merah' adalah 25w. Ini adalah undian parasit oleh semua perangkat yang berada dalam mode siaga (TV, microwave, komputer, webcam, dll)
Pola persegi atas/bawah pada garis 'hitam' adalah kompresor di lemari es yang menyala dan mati.
Saya bangun sekitar jam 6 pagi dan mulai menyalakan lampu dan TV menyala. TV menggambar dari garis 'hitam'.
Lonjakan 'merah' adalah kipas CO2 saya di pemanas air saya. Pemanas air berjalan selama sekitar 10 menit
Lonjakan yang lebih kecil setelah lonjakan pemanas air adalah lubang pintu garasi.
Saya menggunakan OpenScad untuk merancang sebuah kotak. File .scad dan file .stl yang diterjemahkan ada di repo ini. Kotak dengan guntingan untuk tampilan, tombol, dan berbagai konektor terlihat seperti ini:

Catu Daya Berprestasi
Mengandalkan catu daya dari USB menyebabkan beberapa kekacauan dalam pembacaan pin analog. Juga, untuk memasok daya ke ESP-01, saya membutuhkan pasokan 3.3V. Arduino Pro Mini tidak memiliki regulator tegangan 3.3V, seperti yang dilakukan UNO. Modul catu daya yang sangat murah sesuai dengan tagihan, dan tampaknya memberikan daya yang cukup stabil untuk memastikan pembacaan yang stabil.
Baud Rate ESP8266 ESP-01
Saya harus menggunakan beberapa pin I/O digital di Arduino untuk komunikasi serial antara Modul Arduino dan ESP-01. Pin TX/RX reguler diperlukan untuk mem -flash perangkat lunak ke Arduino. Saat menggunakan modul softwareserial dengan pin I/O digital, tidak mungkin untuk mendapatkan tautan komunikasi yang andal ke ESP-01 di 115200 baud rate default. Karena jumlah pertukaran data antara Arduino dan ESP-01 cukup terbatas, saya menetapkan laju baud ke 9600 baud yang aman.
Kehabisan memori di Arduino
Arduino hanya memiliki memori RAM bernilai 2K. RAM digunakan untuk semua data global, data tumpukan, dan bahkan data string konstan. Kompiler ATMEL 328 GCC melakukan pekerjaan yang baik menghilangkan semua kode dan data mati, dan saya cukup kagum bahwa Anda benar -benar dapat menjalankan program 1000+ baris C ++ dalam sejumlah kecil RAM. Butuh beberapa mengutak -atik agar pas.
new untuk mengalokasikan objek:String : Tampilan teratas | Konektor catu daya |
Konektor CT | Antena bagian dari ESP8266 |
Tampilan bawah | Tampilan bawah tanpa Arduino |
Tampilan bawah tanpa Arduino dan ESP8266 | ![]() |
Tombol dan LCD terpasang di bagian atas | ![]() |
PCB Underside | Kotak dengan tutup |
here's some code
Ini meja:
| 1 | 2 | | | | | adadf | adfadf |