- Rajah Blok Meter Tenaga Pintar Raspberry Pi
- Komponen yang Diperlukan
- Menyiapkan Pi
- Rajah Litar Meter Tenaga Pi
- Kod Python untuk Pi Energy Meter
- Demo
Pemantau Tenaga, sama ada meliputi seluruh apartmen atau dikerahkan untuk memantau hanya satu perkakas, menyediakan cara untuk anda mengawasi penggunaan anda dan membuat penyesuaian yang diperlukan. Walaupun mereka semakin tersedia di pasaran, pembuatnya masih merasakan idea yang bagus untuk membina versi DIY yang dapat disesuaikan untuk memenuhi keperluan peribadi tertentu. Oleh itu, untuk tutorial hari ini, kami akan membina monitor Raspberry Pi Power Consumption yang mampu memperoleh penggunaan tenaga dan memuat naik ke Adafruit.io.
Anda juga boleh melihat IoT Energy Meter berasaskan Arduino dan Prabayar GSM Energy Meter yang telah kami bina sebelumnya.
Rajah Blok Meter Tenaga Pintar Raspberry Pi
Gambarajah blok yang menunjukkan bagaimana sistem berfungsi ditunjukkan di bawah.
Untuk memilih unit satu demi satu;
Unit Sensing Semasa: Unit penginderaan semasa terdiri daripada sensor arus SCT -013 yang dapat mengukur hingga 100A, bergantung pada versi yang anda beli. Sensor mengubah arus yang melewati wayar di mana ia dijepit menjadi arus kecil yang kemudian dimasukkan ke dalam ADC melalui rangkaian pembahagi voltan.
Unit Sensasi Voltan: Walaupun saya tidak dapat meletakkan modul sensor voltan, saya akan membina DIY sebuah sensor voltan tanpa transformer yang mengukur voltan menggunakan prinsip pembahagi voltan. Sensor voltan DIY melibatkan tahap pembahagi voltan di mana voltan tinggi diubah menjadi nilai yang sesuai untuk input ke ADC.
Unit Pemprosesan: Unit pemprosesan terdiri daripada ADC dan Raspberry pi. ADC mengambil isyarat analog dan mengirimkannya ke raspberry pi, yang kemudian mengira jumlah kuasa yang tepat yang digunakan dan menghantarnya ke awan peranti yang ditentukan. Untuk tujuan tutorial ini, kami akan menggunakan Adafruit.io sebagai Cloud Device kami. Kami juga telah membina yang lain
Penafian: Sebelum kita memulakan, penting untuk menyebutkan bahawa projek ini melibatkan penyambungan ke bekalan AC yang berbahaya, dan boleh membawa maut jika tidak ditangani dengan selamat. Pastikan anda mempunyai pengalaman bekerja di sekitar AC sebelum mencuba ini.
Sedia? Mari selami.
Komponen yang Diperlukan
Komponen berikut diperlukan untuk membina projek ini;
- Raspberry Pi 3 atau 4 (prosesnya harus sama untuk RPI2 dengan Dongle WiFi)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB Power Adapter
- Perintang 2W 10K (1)
- Perintang 1 / 2W 10K (2)
- Perintang 33ohms (1)
- Perintang 2W 3.3k (1)
- Diod IN4007 (4)
- 3.6v Zener Diod (1)
- Potensiometer 10k (atau Pratetap) (1)
- Kapasitor 50v 1uf
- Kapasitor 50v 10uf (2)
- Papan Roti
- Kawat Jumper
- Aksesori lain untuk kegunaan Raspberry Pi.
Selain komponen perkakasan yang disenaraikan di atas, projek ini juga memerlukan beberapa pergantungan perisian dan perpustakaan yang akan kami pasang semasa kami meneruskannya.
Walaupun tutorial ini akan berfungsi tanpa mengira OS raspberry pi yang digunakan, saya akan menggunakan OS buster Raspberry Pi yang berjalan pada Pi 3 (juga harus berfungsi pada Pi 4) dan saya akan menganggap anda sudah biasa mengatur Raspberry Pi dengan OS Raspbian Buster (hampir sama dengan versi sebelumnya), dan anda tahu bagaimana SSH menggunakannya menggunakan perisian terminal seperti hiper. Sekiranya anda mempunyai masalah dengan perkara ini, terdapat banyak Tutorial Raspberry Pi di laman web ini yang dapat membantu
Menyiapkan Pi
Sebelum kita memulakan pemasangan komponen dan pengekodan, ada beberapa tugas mudah yang perlu kita laksanakan pada raspberry pi untuk memastikan kita sudah bersedia.
Langkah 1: Mengaktifkan Pi I2C
Inti projek hari ini bukan hanya pi raspberry tetapi ADC1115 16bit I2C berasaskan ADS. ADC membolehkan kita menyambungkan sensor analog ke Raspberry Pi kerana Pi itu sendiri tidak mempunyai ADC bawaan. Ia mengambil data melalui ADC sendiri dan meneruskannya ke pi raspberry melalui I2C. Oleh itu, kita perlu mengaktifkan komunikasi I2C pada Pi supaya dapat berkomunikasi dengannya.
Bas Pi I2C boleh diaktifkan atau dinyahaktifkan melalui halaman konfigurasi raspberry pi. Untuk melancarkannya, Klik pada Ikon Pi di desktop dan pilih pilihan diikuti dengan konfigurasi Raspberry pi.
Ini akan membuka halaman konfigurasi. Periksa butang radio yang diaktifkan untuk I2C dan klik OK untuk menyimpannya dan reboot Pi untuk mempengaruhi perubahan.
Sekiranya anda menjalankan Pi dalam mod tanpa kepala, halaman konfigurasi Raspbian dapat diakses dengan menjalankan sudo raspi-config.
Langkah 2: Memasang perpustakaan ADS11xx dari Adafruit
Perkara kedua yang perlu kita lakukan ialah memasang pustaka ADS11xx python yang mengandungi fungsi dan rutin yang memudahkan kita menulis skrip python untuk mendapatkan nilai dari ADC.
Ikuti langkah di bawah untuk melakukan ini.
- Kemas kini pi anda dengan menjalankan; sudo apt-get update diikuti oleh sudo apt-get upgrade ini akan mengemas kini pi memastikan tidak ada masalah keserasian untuk perisian baru yang anda pilih untuk pasang.
- Seterusnya, jalankan perintah cd ~ untuk memastikan anda berada di direktori utama.
- Seterusnya, pasang build-essentials dengan menjalankan; sudo apt-get install build-essential python-dev python-smbus git
- Seterusnya, klon folder Adafruit git yang mengandungi perpustakaan ADS dengan menjalankan; git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Tukar ke direktori fail yang diklon dan jalankan fail persediaan menggunakan; cd Adafruit_Python_ADS1x1z diikuti dengan pemasangan sudo python setup.py
Dengan ini, pemasangannya kini harus selesai.
Anda boleh menguji pemasangan perpustakaan dengan menyambungkan ADS1115 seperti yang ditunjukkan dalam bahagian skema di bawah dan menjalankan contoh kod yang disertakan dengan perpustakaan terlebih dahulu, menukar ke foldernya menggunakan; contoh cd dan menjalankan contoh menggunakan; python simpletest.py
Langkah 3: Pasang Modul Adafruit.IO Python
Seperti yang telah disebutkan semasa perkenalan, kami akan menerbitkan bacaan dari sensor voltan dan arus ke Adafruit IO Cloud dari mana ia dapat dilihat dari seluruh dunia atau dihubungkan dengan IFTTT untuk melakukan apa sahaja tindakan yang anda inginkan.
Modul Adafruit.IO python mengandungi subrutin dan fungsi yang akan kita manfaatkan, untuk mengalirkan data ke awan dengan mudah. Ikuti langkah-langkah di bawah untuk memasang modul.
- Jalankan cd ~ untuk kembali ke direktori utama.
- Seterusnya, jalankan arahan; sudo pip3 pasang adafruit-io . Ia harus memasang modul Adafruit IO python.
Langkah 4: Sediakan Akaun Adafruit.io Anda
Untuk menggunakan Adafruit IO pastinya perlu membuat akaun terlebih dahulu dan mendapatkan kunci AIO. Kunci AIO ini bersama dengan nama pengguna anda akan digunakan oleh skrip python anda untuk mengakses perkhidmatan awan Adafruit IO. Untuk membuat akaun, lawati; https://io.adafruit.com/, klik pada butang bermula secara percuma dan isikan semua parameter yang diperlukan. Dengan Pendaftaran selesai, anda akan melihat butang Lihat Kunci AIO di sebelah kanan laman utama anda.
Klik padanya untuk mendapatkan kunci AIO anda.
Dengan kunci yang disalin, kami sudah bersedia untuk pergi. Namun, untuk mempermudah proses pengiriman data ke layanan cloud, Anda juga dapat membuat umpan ke mana data akan dikirim. (maklumat lebih lanjut mengenai apa suapan AIO boleh didapati di sini). Oleh kerana kita pada dasarnya akan menghantar penggunaan Tenaga, kita akan membuat suapan untuk mendapatkan tenaga. Untuk membuat suapan, klik pada "suapan" di bahagian atas halaman AIO dan klik tambahkan suapan baru.
Berikan apa sahaja nama yang anda mahukan tetapi untuk memastikan semuanya menjadi sederhana, saya akan memanggilnya penggunaan tenaga. Anda juga boleh memutuskan untuk membuat suapan untuk voltan dan arus dan menyesuaikan kod untuk menerbitkan data kepada mereka.
Dengan semua ini di tempat, kita sekarang sudah bersedia untuk mula membina projek.
Rajah Litar Meter Tenaga Pi
Skema untuk projek Raspberry Pi Energy Monitor agak rumit dan melibatkan penyambungan ke voltan AC seperti yang disebutkan sebelumnya, sila pastikan anda mengambil semua langkah berjaga-jaga untuk mengelakkan kejutan elektrik. Sekiranya anda tidak biasa mengendalikan voltan AC dengan selamat, biarkan kegembiraan melaksanakannya di papan roti, tanpa menyalakannya, memuaskan.
Skema ini melibatkan penyambungan unit sensor voltan dan arus ke ADC yang kemudian menghantar data dari sensor ke Raspberry Pi. Untuk menjadikan sambungan lebih mudah diikuti, skema untuk setiap unit disajikan sendiri.
Skema Sensor Semasa
Sambungkan komponen untuk sensor semasa seperti yang ditunjukkan dalam skema di bawah.
Transformer semasa yang digunakan dalam projek ini ditunjukkan di bawah, seperti yang anda lihat, kami mempunyai tiga wayar daripadanya, iaitu ground, Cout dan 3.3V
Skema Sensor Voltan
Sambungkan komponen untuk sensor voltan seperti yang ditunjukkan dalam skema di bawah.
Unit pemprosesan Skematik
Sambungkan semuanya bersama-sama dengan ADC (ADS1115) yang disambungkan ke raspberry pi dan output sensor arus dan voltan masing-masing disambungkan ke pin A0 dan A1 dari ADS1115.
Pastikan pin GND kedua-dua unit penginderaan disambungkan ke GND ADC atau pi raspberry.
Untuk membuat keadaan menjadi kurang goyah, saya menggunakan sensor voltan dan arus pada Protoboard. Juga, tidak digalakkan untuk membina litar sesalur AC di papan roti. Sekiranya anda melakukan perkara yang sama, persediaan terakhir anda mungkin seperti gambar di bawah;
Dengan sambungan selesai, kami kini bersedia untuk menulis kod untuk projek tersebut.
Kod Python untuk Pi Energy Meter
Seperti biasa dengan projek raspberry pi kami, kami akan mengembangkan kod untuk projek menggunakan python. Klik pada ikon raspberry pi di desktop, pilih pengaturcaraan dan lancarkan versi python mana yang anda mahu gunakan. Saya akan menggunakan Python 3 dan beberapa fungsi di python 3 mungkin tidak berfungsi untuk python 2.7. Jadi mungkin ada keperluan untuk membuat perubahan ketara pada kod jika anda ingin menggunakan python 2.7. Saya akan membahagikan kod menjadi coretan kecil dan berkongsi kod lengkap dengan anda pada akhir.
Sedia? Sejuk.
Algoritma di sebalik kodnya mudah. Skrip python kami menanyakan ADS1115 (lebih I2C) untuk bacaan voltan dan arus. Nilai analog yang diterima diterima, diambil sampel dan nilai punca kuasa dua voltan dan arus diperolehi. Kuasa dalam kilowatt dikira dan dihantar ke suapan Adafruit IO setelah selang waktu tertentu.
Kami memulakan skrip dengan memasukkan semua perpustakaan yang akan kami gunakan. Ini termasuk perpustakaan terbina seperti perpustakaan masa dan matematik dan perpustakaan lain yang kami pasangkan lebih awal.
import time import Adafruit_ADS1x15 dari Adafruit_IO import * import math
Seterusnya, kami membuat contoh perpustakaan ADS1115 yang akan digunakan untuk menangani fizikal ADC ke depan.
# Buat instance ADS1115 ADC (16-bit).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Seterusnya, berikan nama pengguna IO adafruit anda dan kunci "AIO".
nama pengguna = 'masukkan nama pengguna anda di antara petikan ini' AIO_KEY = 'kunci aio anda' aio = Pelanggan (nama pengguna, AIO_KEY)
Pastikan kunci selamat. Ia dapat digunakan untuk mengakses akaun io adafruit anda tanpa izin anda.
Seterusnya, kami membuat beberapa pemboleh ubah seperti keuntungan untuk ADC, bilangan sampel yang kami mahukan dan menetapkan pembundaran yang pastinya tidak kritikal.
GAIN = 1 # lihat dokumentasi ads1015 / 1115 untuk nilai berpotensi. sampel = 200 # bilangan sampel yang diambil dari iklan1115 tempat = int (2) # pembundaran yang ditetapkan
Seterusnya, Kami membuat gelung sementara untuk memantau arus dan voltan dan menghantar data ke Adafruit io pada selang waktu. Gelung sementara bermula dengan menetapkan semua pemboleh ubah menjadi sifar.
while True: # reset variables count = int (0) datai = datav = maxIValue = 0 #max nilai semasa dalam sampel maxVValue = 0 #max nilai voltan dalam sampel IrmsA0 = 0 #rroot mean current square VrmsA1 = 0 # root mean voltage voltage ampsA0 = 0 # voltan puncak semasaA1 = 0 # kilowatt voltan = terapung (0)
Oleh kerana kita bekerja dengan litar AC, output SCT-013 dan sensor voltan akan menjadi gelombang sinus, oleh itu Untuk mengira arus dan voltan dari gelombang sinus, kita perlu mendapatkan nilai puncak. Untuk mendapatkan nilai puncak, kami akan mengambil sampel voltan dan arus (200 sampel), dan mencari nilai tertinggi (nilai puncak).
untuk kiraan dalam julat (sampel): datai.insert (kiraan, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (kiraan, (abs (adc1.read_adc (1, gain = GAIN)))) # lihat jika anda mempunyai cetakan maxValue baru (datai) jika datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Seterusnya, kami menyeragamkan nilai dengan menukar dari nilai ADC ke nilai sebenar selepas itu kami kemudian menggunakan persamaan Root Mean Square untuk mencari voltan dan arus RMS.
#kira arus menggunakan data sampel # sct-013 yang digunakan dikalibrasi untuk output 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = bulat (IrmsA0, tempat) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = bulat (ampsA0, tempat) # Hitung voltan VrmsA1 = apungan (nilaiVaksimum * 1100 / float (2047)) VrmsA1 = bulat (VrmsA1, tempat) volttsA1 = VrmsA1 / math.sqrt (2) voltsA1 = bulat (voltsA1, tempat) cetak ('Voltage: {0}'. format (voltsA1)) cetak ('Semasa: {0} '. Format (ampsA0))
Dengan ini, kekuatan dikira dan data diterbitkan di adafruit.io
#kira daya kuasa = bulat (ampsA0 * voltsA1, tempat) cetak ('Kuasa: {0}'. format (kuasa)) #kirimkan data ke adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', kuasa)
Untuk akaun percuma, adafruit menuntut bahawa terdapat sedikit kelewatan antara permintaan atau muat naik data.
# Tunggu sebelum mengulangi masa gelung. Tidur (0)
The kod lengkap untuk projek ini boleh didapati di bahagian bawah halaman ini
Demo
Dengan kod yang lengkap, simpan dan tekan butang jalankan pada python IDE. Sebelum ini, pastikan Pi disambungkan ke internet melalui WiFi atau LAN, dan kunci dan nama pengguna aio anda betul. Selepas beberapa ketika, anda harus mula melihat data tenaga (kuasa) yang dipaparkan pada suapan Adafruit.io. Penyediaan perkakasan saya semasa demo seperti ini
Untuk mengambil lebih jauh, anda boleh membuat papan pemuka di adafruit.io dan menambahkan komponen grafik sehingga anda dapat memperoleh gambaran grafik data seperti yang ditunjukkan pada gambar di bawah.
Itu sahaja, anda kini dapat memantau penggunaan tenaga anda dari mana sahaja di dunia. Penting untuk diperhatikan bahawa pasti ada lebih banyak penyesuaian dan penentukuran yang perlu dilakukan untuk mengubahnya menjadi penyelesaian yang benar-benar tepat, tetapi saya percaya ini memberi anda hampir semua perkara yang anda perlukan untuk meneruskannya.
Jangan ragu untuk mengemukakan soalan mengenai projek ini melalui bahagian komen. Saya akan cuba menjawab sebanyak mungkin. Hingga ke suatu masa yang akan datang.