- Diagram Blok Pengukur Energi Cerdas Raspberry Pi
- Komponen yang Diperlukan
- Mempersiapkan Pi
- Diagram Sirkuit Pengukur Energi Pi
- Kode Python untuk Pi Energy Meter
- Demo
Pemantau Energi, baik yang mencakup seluruh apartemen atau digunakan untuk memantau hanya satu peralatan, menyediakan cara bagi Anda untuk melacak konsumsi Anda dan membuat penyesuaian yang diperlukan. Sementara mereka semakin tersedia di pasar, pembuat dalam diri saya masih merasa itu akan menjadi ide bagus untuk membangun versi DIY yang dapat disesuaikan untuk memenuhi kebutuhan pribadi tertentu. Karena itu, untuk tutorial hari ini, kami akan membangun monitor Konsumsi Daya Raspberry Pi yang mampu memperoleh konsumsi energi dan mengunggah ke Adafruit.io.
Anda juga dapat memeriksa Pengukur Energi IoT berbasis Arduino dan Pengukur Energi GSM Prabayar yang telah kami buat sebelumnya.
Diagram Blok Pengukur Energi Cerdas Raspberry Pi
Diagram blok yang menunjukkan cara kerja sistem ditunjukkan di bawah ini.
</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>Untuk memilih unit satu demi satu;
Unit Penginderaan Saat Ini: Unit penginderaan saat ini terdiri dari sensor arus SCT -013 yang dapat mengukur hingga 100A, tergantung pada versi yang Anda beli. Sensor mengubah arus yang melewati kabel yang dijepit menjadi arus kecil yang kemudian dimasukkan ke ADC melalui jaringan pembagi tegangan.
Unit Penginderaan Tegangan: Meskipun saya tidak dapat meletakkan tangan saya pada modul sensor tegangan, Kami akan membuat sebuah sensor tegangan tanpa transformator yang mengukur tegangan menggunakan prinsip pembagi tegangan. Sensor tegangan DIY melibatkan tahap pembagi tegangan di mana tegangan tinggi diubah menjadi nilai yang sesuai untuk input ke ADC.
Unit Pemrosesan: Unit pemrosesan terdiri dari ADC dan Raspberry pi. ADC mengambil sinyal analog dan mengirimkannya ke raspberry pi, yang kemudian menghitung jumlah daya yang dikonsumsi secara tepat dan mengirimkannya ke cloud perangkat yang ditentukan. Untuk keperluan tutorial ini, kami akan menggunakan Adafruit.io sebagai Cloud Perangkat kami. Kami juga telah membangun lainnya
Penafian: Sebelum kita mulai, penting untuk menyebutkan bahwa proyek ini melibatkan koneksi ke suplai AC yang berbahaya, dan bisa berakibat fatal jika tidak ditangani dengan aman. Pastikan Anda memiliki pengalaman bekerja di sekitar AC sebelum mencoba ini.
Siap? Mari selami.
Komponen yang Diperlukan
Komponen berikut diperlukan untuk membangun proyek ini;
- Raspberry Pi 3 atau 4 (prosesnya harus sama untuk RPI2 dengan Dongle WiFi)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- Adaptor Daya MicroUSB 2.5A 5V
- Resistor 2W 10K (1)
- 1 / 2W 10K Resistor (2)
- 33ohms Resistor (1)
- 2W 3.3k Resistor (1)
- IN4007 Diode (4)
- 3.6v Zener Diode (1)
- 10k Potensiometer (atau Preset) (1)
- Kapasitor 50v 1uf
- Kapasitor 50v 10uf (2)
- Papan tempat memotong roti
- Kawat Jumper
- Aksesoris Lain untuk Penggunaan Raspberry Pi.
Selain komponen perangkat keras yang tercantum di atas, proyek ini juga memerlukan beberapa dependensi perangkat lunak dan pustaka yang akan kita instal saat kita melanjutkan.
Sementara tutorial ini akan berfungsi terlepas dari raspberry pi OS yang digunakan, saya akan menggunakan Raspberry Pi buster OS yang berjalan pada Pi 3 (juga harus bekerja pada Pi 4) dan saya akan menganggap Anda sudah terbiasa dengan pengaturan Raspberry Pi dengan Raspbian Buster OS (proses yang kurang lebih sama dengan versi sebelumnya), dan Anda tahu cara SSH ke dalamnya menggunakan perangkat lunak terminal seperti hyper. Jika Anda mengalami masalah dengan semua ini, ada banyak Tutorial Raspberry Pi di situs web ini yang dapat membantu
Mempersiapkan Pi
Sebelum kita mulai memasang kabel komponen dan pengkodean, ada beberapa tugas sederhana yang perlu kita lakukan pada raspberry pi untuk memastikan kita siap.
Langkah 1: Mengaktifkan Pi I2C
Inti dari proyek hari ini bukan hanya raspberry pi tetapi ADS berbasis ADS1115 16bit I2C. ADC memungkinkan kita untuk menghubungkan sensor analog ke Raspberry Pi karena Pi itu sendiri tidak memiliki ADC bawaan. Ia mengambil data melalui ADC-nya sendiri dan meneruskannya ke raspberry pi melalui I2C. Karena itu, kami perlu mengaktifkan komunikasi I2C pada Pi sehingga dapat berkomunikasi dengannya.
Bus I2C Pi dapat diaktifkan atau dinonaktifkan melalui halaman konfigurasi raspberry pi. Untuk meluncurkannya, Klik pada Ikon Pi di desktop dan pilih preferensi diikuti oleh konfigurasi Raspberry pi.
Ini harus membuka halaman konfigurasi. Periksa tombol radio yang diaktifkan untuk I2C dan klik OK untuk menyimpannya dan reboot Pi untuk melakukan perubahan.
Jika Anda menjalankan Pi dalam mode headless, halaman konfigurasi Raspbian dapat diakses dengan menjalankan sudo raspi-config.
Langkah 2: Menginstal perpustakaan ADS11xx dari Adafruit
Hal kedua yang perlu kita lakukan adalah menginstal library python ADS11xx yang berisi fungsi dan rutinitas yang memudahkan kita dalam menulis skrip python untuk mengambil nilai dari ADC.
Ikuti langkah-langkah di bawah ini untuk melakukan ini.
- Perbarui pi Anda dengan menjalankan; sudo apt-get update diikuti oleh sudo apt-get upgrade ini akan memperbarui pi memastikan tidak ada masalah kompatibilitas untuk perangkat lunak baru yang Anda pilih untuk dipasang.
- Selanjutnya, jalankan perintah cd ~ untuk memastikan Anda berada di direktori home.
- Selanjutnya, instal build-essential dengan menjalankan; sudo apt-get install build-essential python-dev python-smbus git
- Selanjutnya, klon folder git Adafruit yang berisi pustaka ADS dengan menjalankan; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Ubah ke direktori file kloning dan jalankan file setup menggunakan; cd Adafruit_Python_ADS1x1z diikuti oleh sudo python setup.py install
Dengan ini selesai, instalasi sekarang harus selesai.
Anda dapat menguji instalasi perpustakaan dengan menghubungkan ADS1115 seperti yang ditunjukkan di bagian skema di bawah ini dan menjalankan kode sampel yang disertakan dengan perpustakaan dengan terlebih dahulu, mengubah ke foldernya menggunakan; cd contoh dan menjalankan contoh menggunakan; python simpletest.py
Langkah 3: Instal Modul Adafruit.IO Python
Seperti yang disebutkan selama perkenalan, kami akan menerbitkan bacaan dari sensor tegangan dan arus ke Adafruit IO Cloud yang dapat dilihat dari seluruh dunia atau terhubung dengan IFTTT untuk melakukan tindakan apa pun yang Anda inginkan.
Modul python Adafruit.IO berisi subrutin dan fungsi yang akan kami manfaatkan, untuk dengan mudah mengalirkan data ke cloud. Ikuti langkah-langkah di bawah ini untuk memasang modul.
- Jalankan cd ~ untuk kembali ke direktori home.
- Selanjutnya, jalankan perintah; sudo pip3 menginstal adafruit-io . Ini harus menginstal modul python Adafruit IO.
Langkah 4: Siapkan Akun Adafruit.io Anda
Untuk menggunakan Adafruit IO pasti perlu membuat akun terlebih dahulu dan mendapatkan kunci AIO. Kunci AIO ini bersama dengan nama pengguna Anda akan digunakan oleh skrip python Anda untuk mengakses layanan cloud Adafruit IO. Untuk membuat akun, kunjungi; https://io.adafruit.com/, klik tombol mulai gratis dan isi semua parameter yang diperlukan. Dengan Mendaftar selesai, Anda akan melihat tombol Lihat AIO Key di sebelah kanan halaman beranda Anda.
Klik di atasnya untuk mendapatkan kunci AIO Anda.
Dengan kunci disalin, kami siap untuk pergi. Namun, untuk mempermudah proses pengiriman data ke layanan cloud, Anda juga dapat membuat feed yang menjadi tujuan pengiriman data. (info lebih lanjut tentang umpan AIO dapat ditemukan di sini). Karena pada dasarnya kami akan mengirimkan konsumsi Daya, kami akan membuat umpan untuk daya. Untuk membuat feed, klik "feeds" di bagian atas halaman AIO dan klik add new feed.
Berikan nama apa pun yang Anda inginkan tetapi untuk membuatnya tetap sederhana, saya akan menyebutnya konsumsi energi. Anda juga dapat memutuskan untuk membuat umpan untuk tegangan dan arus dan menyesuaikan kode untuk mempublikasikan data kepada mereka.
Dengan semua ini, kami sekarang siap untuk mulai membangun proyek.
Diagram Sirkuit Pengukur Energi Pi
Skema untuk proyek Raspberry Pi Energy Monitor relatif kompleks dan melibatkan penyambungan ke tegangan AC seperti yang disebutkan sebelumnya, mohon pastikan Anda melakukan semua tindakan pencegahan yang diperlukan untuk menghindari sengatan listrik. Jika Anda tidak terbiasa menangani voltase AC dengan aman, biarkan kegembiraan menerapkan ini pada papan tempat memotong roti, tanpa menyalakannya, memuaskan.
Skema tersebut melibatkan penyambungan unit sensor tegangan dan arus ke ADC yang kemudian mengirimkan data dari sensor tersebut ke Raspberry Pi. Untuk membuat koneksi lebih mudah diikuti, skema untuk setiap unit disajikan sendiri.
Skema Sensor Arus
Hubungkan komponen untuk sensor arus seperti yang ditunjukkan pada skema di bawah ini.
Trafo arus yang digunakan dalam proyek ini ditunjukkan di bawah ini, seperti yang Anda lihat, kami memiliki tiga kabel darinya, yaitu ground, Cout dan 3.3V
Skema Sensor Tegangan
Hubungkan komponen untuk sensor tegangan seperti yang ditunjukkan pada skema di bawah ini.
Skema Unit Pengolahan
Hubungkan semuanya bersama-sama dengan ADC (ADS1115) yang terhubung ke raspberry pi dan output dari sensor arus dan tegangan yang terhubung ke pin A0 dan A1 dari ADS1115 masing-masing.
Pastikan pin GND dari kedua unit penginderaan terhubung ke GND dari ADC atau raspberry pi.
Untuk membuat hal-hal sedikit tidak goyah, saya menerapkan sensor tegangan dan arus pada Protoboard. Selain itu, tidak disarankan untuk membangun sirkuit listrik AC di papan tempat memotong roti. Jika Anda melakukan hal yang sama, pengaturan akhir Anda mungkin terlihat seperti gambar di bawah;
Dengan koneksi yang lengkap, kami sekarang siap untuk menulis kode untuk proyek tersebut.
Kode Python untuk Pi Energy Meter
Seperti biasa dengan proyek raspberry pi kami, kami akan mengembangkan kode untuk proyek tersebut menggunakan python. Klik pada ikon raspberry pi di desktop, pilih pemrograman dan luncurkan versi python mana saja yang ingin Anda gunakan. Saya akan menggunakan Python 3 dan beberapa fungsi di python 3 mungkin tidak berfungsi untuk python 2.7. Jadi mungkin ada kebutuhan untuk membuat beberapa perubahan signifikan pada kode jika Anda ingin menggunakan python 2.7. Saya akan melakukan pemecahan kode menjadi potongan-potongan kecil dan membagikan kode lengkapnya kepada Anda di bagian akhir.
Siap? Keren.
Algoritme di balik kode itu sederhana. Skrip python kami menanyakan ADS1115 (melalui I2C) untuk pembacaan tegangan dan arus. Nilai analog yang diterima diterima, diambil sampelnya dan nilai kuadrat akar rata-rata dari tegangan dan arus diperoleh. Kekuatan dalam kilowatt dihitung dan dikirim ke umpan Adafruit IO setelah interval tertentu.
Kami memulai skrip dengan memasukkan semua pustaka yang akan kami gunakan. Ini termasuk pustaka bawaan seperti pustaka waktu dan matematika dan pustaka lain yang kami pasang sebelumnya.
waktu impor impor Adafruit_ADS1x15 dari Adafruit_IO impor * impor matematika
Selanjutnya, kami membuat turunan pustaka ADS1115 yang akan digunakan untuk menangani ADC fisik di masa mendatang.
# Buat turunan ADS1115 ADC (16-bit).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Selanjutnya, berikan nama pengguna Adafruit IO dan kunci "AIO" Anda.
username = 'masukkan nama pengguna Anda di antara tanda kutip ini' AIO_KEY = 'kunci aio Anda' aio = Klien (nama pengguna, AIO_KEY)
Harap simpan kunci aman. Ini dapat digunakan untuk mengakses akun adafruit io Anda tanpa izin Anda.
Selanjutnya, kami membuat beberapa variabel seperti keuntungan untuk ADC, jumlah sampel yang kami inginkan dan mengatur pembulatan yang pasti tidak kritis.
GAIN = 1 # lihat dokumentasi ads1015 / 1115 untuk nilai potensial. sampel = 200 # jumlah sampel yang diambil dari ads1115 tempat = int (2) # set pembulatan
Selanjutnya, Kami membuat loop sementara untuk memantau arus dan tegangan dan mengirim data ke Adafruit io secara berkala. Perulangan while dimulai dengan mengatur semua variabel ke nol.
Sementara Benar: # variabel reset count = int (0) datai = datav = maxIValue = 0 # nilai arus maks dalam sampel maxVValue = 0 # nilai tegangan maks dalam sampel IrmsA0 = 0 # akar berarti arus kuadrat VrmsA1 = 0 # root mean square voltage ampsA0 = 0 # arus puncak voltA1 = 0 # voltase kilowatt = float (0)
Karena kita bekerja dengan rangkaian AC, output SCT-013 dan sensor tegangan akan menjadi gelombang sinus, jadi untuk menghitung arus dan tegangan dari gelombang sinus, kita perlu mendapatkan nilai puncak. Untuk mendapatkan nilai puncak, kami akan mengambil sampel tegangan dan arus (200 sampel), dan menemukan nilai tertinggi (nilai puncak).
untuk hitungan dalam rentang (sampel): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # lihat apakah Anda memiliki maxValue print (datai) baru if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Selanjutnya, kami membakukan nilai dengan mengubah dari nilai ADC ke nilai sebenarnya setelah itu kami kemudian menggunakan persamaan Root Mean Square untuk menemukan tegangan dan arus RMS.
#hitung arus menggunakan data sampel # sct-013 yang digunakan dikalibrasi untuk keluaran 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Hitung tegangan VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = bulat (VrmsA1, tempat) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. Format (ampsA0))
Setelah selesai, daya dihitung dan datanya dipublikasikan di adafruit.io
#calculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data ke adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', power)
Untuk akun gratis, adafruit menuntut adanya penundaan waktu antara permintaan atau pengunggahan data.
# Tunggu sebelum mengulang waktu loop.sleep (0)
The kode lengkap untuk proyek ini tersedia di bagian bawah halaman ini
Demo
Dengan kode lengkap, simpan dan tekan tombol run pada IDE python. Sebelum ini, pastikan Pi terhubung ke internet melalui WiFi atau LAN, dan kunci aio dan nama pengguna Anda sudah benar. Setelah beberapa saat, Anda akan mulai melihat data energi (daya) yang ditampilkan pada feed di Adafruit.io. Pengaturan perangkat keras saya selama demo seperti ini
Untuk melangkah lebih jauh, Anda dapat membuat dashboard di adafruit.io dan menambahkan komponen grafik sehingga Anda bisa mendapatkan tampilan grafik dari data seperti yang ditunjukkan pada gambar di bawah ini.
Itu saja guys, sekarang Anda dapat memantau konsumsi energi Anda dari mana saja di dunia. Penting untuk dicatat bahwa pasti ada lebih banyak penyempurnaan dan kalibrasi yang harus dilakukan untuk mengubahnya menjadi solusi yang benar-benar akurat, tetapi saya yakin ini memberi Anda hampir semua yang Anda butuhkan untuk melanjutkan.
Jangan ragu untuk memberi saya pertanyaan tentang proyek melalui bagian komentar. Saya akan mencoba menjawab sebanyak mungkin. Sampai nanti.