- Блокова диаграма на Raspberry Pi Smart Energy Meter
- Необходими компоненти
- Подготовка на Pi
- Диаграма на измервател на енергия Pi
- Python код за Pi измервател на енергия
- Демонстрация
Енергийните монитори, независимо дали обхващат целия апартамент или са разположени за наблюдение само на един уред, осигуряват начин да следите консумацията си и да правите необходимите корекции. Въпреки че те стават все по-достъпни на пазара, производителят в мен все още смята, че ще бъде чудесна идея да създаде версия „направи си сам“, която може да бъде съобразена с конкретни лични изисквания. Като такъв, за днешния урок ще изградим монитор за консумация на енергия Raspberry Pi, способен да получи консумация на енергия и да качи на Adafruit.io.
Можете също така да проверите базиран на Arduino IoT измервател на енергия и предплатения GSM измервател на енергия, които сме изградили по-рано.
Блокова диаграма на Raspberry Pi Smart Energy Meter
Блок-схема, показваща как работи системата, е показана по-долу.
За да изберете единиците една след друга;
Текущ сензорен блок : Текущият сензорен блок е съставен от SCT -013 токов сензор, който може да измерва до 100A, в зависимост от версията, която купувате. Сензорът преобразува тока, преминаващ през проводника, върху който е затегнат, в малък ток, който след това се подава в ADC чрез мрежа от делители на напрежението.
Сензор за напрежение: Въпреки че не успях да сложа ръце върху модула на датчика за напрежение, ние ще изградим „направи си сам“ безтрансформаторен датчик за напрежение, който измерва напрежението, използвайки принципа на разделителите на напрежението. Сензорът за напрежение „направи си сам“ включва степен на делител на напрежението, където високото напрежение се трансформира до стойност, подходяща за вход към ADC.
Единица за обработка: Единицата за обработка включва ADC и Raspberry pi. ADC приема аналоговия сигнал и го изпраща към малиновия пи, който след това изчислява точното количество консумирана мощност и го изпраща до определен облак на устройството. За целите на този урок ще използваме Adafruit.io като нашия облак на устройства. Изградили сме и други
Отказ от отговорност: Преди да започнем, важно е да споменем, че този проект включва свързване към AC захранване, което е опасно и може да бъде фатално, ако не се работи безопасно. Уверете се, че имате опит в работата около AC, преди да опитате това.
Готов? Да се потопим.
Необходими компоненти
Следните компоненти са необходими за изграждането на този проект;
- Raspberry Pi 3 или 4 (процесът трябва да бъде същият за RPI2 с WiFi Dongle)
- ADS1115 16-битов I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB захранващ адаптер
- 2W 10K резистор (1)
- 1 / 2W 10K резистор (2)
- 33ohms резистор (1)
- 2W 3.3k резистор (1)
- IN4007 диод (4)
- 3.6v ценеров диод (1)
- 10k потенциометър (или предварително зададен) (1)
- 50v 1uf кондензатор
- 50v 10uf кондензатор (2)
- BreadBoard
- Jumper Wire
- Други аксесоари за използване на Raspberry Pi.
Освен хардуерните компоненти, изброени по-горе, проектът изисква и някои софтуерни зависимости и библиотеки, които ще инсталираме, докато продължаваме.
Въпреки че този урок ще работи независимо от използваната Raspberry Pi OS, аз ще използвам OS Raspberry Pi buster, работещ на Pi 3 (трябва да работи и на Pi 4) и ще предположа, че сте запознати с настройката на Raspberry Pi с OS Raspbian Buster (почти същият процес като предишните версии) и вие знаете как да SSH в него, използвайки терминален софтуер като hyper. Ако имате проблеми с нещо от това, на този уебсайт има тонове уроци за Raspberry Pi, които могат да ви помогнат
Подготовка на Pi
Преди да започнем да свързваме компонентите и кодирането, има няколко прости задачи, които трябва да изпълним на малиновия пи, за да сме сигурни, че сме готови за работа.
Стъпка 1: Активиране на Pi I2C
В основата на днешния проект е не само малиновият pi, но и ADS1115 16bit I2C-базиран ADC. ADC ни позволява да свързваме аналогови сензори към Raspberry Pi, тъй като самият Pi няма вграден ADC. Той приема данните чрез своя собствен ADC и ги препраща към малиновия pi чрез I2C. Като такива трябва да активираме I2C комуникацията на Pi, за да може да комуникира с нея.
I2C шината на Pi може да бъде активирана или деактивирана чрез страницата за конфигуриране на Raspberry Pi. За да го стартирате, щракнете върху иконата Pi на работния плот и изберете предпочитания, последвани от конфигурацията на Raspberry pi.
Това трябва да отвори конфигурационната страница. Проверете разрешения бутон за I2C и щракнете върху OK, за да го запазите и рестартирайте Pi, за да извършите промените.
Ако използвате Pi в режим без глава, страницата за конфигурация на Raspbian може да бъде достъпна чрез стартиране на sudo raspi-config.
Стъпка 2: Инсталиране на библиотеката ADS11xx от Adafruit
Второто нещо, което трябва да направим, е да инсталираме библиотеката на ADS11xx python, която съдържа функции и рутини, които ни улесняват при писането на python скрипт за извличане на стойности от ADC.
Следвайте стъпките по-долу, за да направите това.
- Актуализирайте пи, като стартирате; sudo apt-get update, последвано от sudo apt-get upgrade, това ще актуализира пи, като гарантира, че няма проблеми със съвместимостта на всеки нов софтуер, който сте избрали да инсталирате.
- След това изпълнете командата cd ~, за да сте сигурни, че сте в домашната директория.
- След това инсталирайте основите за изграждане, като стартирате; sudo apt-get инсталирайте компилацията на python-dev python-smbus git
- След това клонирайте папката Adafruit git, съдържаща библиотеката ADS, като стартирате; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Превключете в директорията на клонирания файл и стартирайте инсталационния файл с помощта на; cd Adafruit_Python_ADS1x1z, последвано от sudo python setup.py install
След това инсталацията трябва да бъде завършена.
Можете да тествате инсталацията на библиотеката, като свържете ADS1115, както е показано в раздела за схеми по-долу, и първо да стартирате примерния код, предоставен с библиотеката, като промените в нейната папка с помощта; cd примери и стартиране на примера с използване; python simpletest.py
Стъпка 3: Инсталирайте модула Adafruit.IO Python
Както споменахме по време на въведенията, ще публикуваме показания от сензорите за напрежение и ток към облака Adafruit IO, от който може да се гледа от цял свят или да се свърже с IFTTT, за да извършите каквито и да е действия, които желаете.
Python модулът Adafruit.IO съдържа подпрограми и функции, които ще използваме, за лесно поточно предаване на данни в облака. Следвайте стъпките по-долу, за да инсталирате модула.
- Стартирайте cd ~, за да се върнете в началната директория.
- След това изпълнете командата; sudo pip3 инсталирайте adafruit-io . Той трябва да инсталира модула Adafruit IO python.
Стъпка 4: Настройте вашия акаунт в Adafruit.io
За да използвате Adafruit IO, определено ще трябва първо да създадете акаунт и да получите AIO ключ. Този AIO ключ заедно с вашето потребителско име ще бъде използван от вашия python скрипт за достъп до облачната услуга Adafruit IO. За да създадете акаунт, посетете; https://io.adafruit.com/, щракнете върху бутона за начало безплатно и попълнете всички необходими параметри. С Регистрация завършена, трябва да видите бутона Преглед на AIO клавиша вдясно на началната страница.
Кликнете върху него, за да получите вашия AIO ключ.
С копирания ключ сме готови за работа. За да улесните обаче процеса на изпращане на данни към облачната услуга, можете също да създадете емисии, към които ще се изпращат данни. (повече информация за това какво представляват AIO емисии можете да намерите тук). Тъй като основно ще изпращаме консумация на енергия, ще създадем захранване за захранване. За да създадете емисия, щракнете върху „емисии“ в горната част на страницата AIO и щракнете върху добавяне на нова емисия.
Дайте му каквото име искате, но за да улесня нещата, ще го нарека консумация на енергия. Можете също така да решите да създадете захранвания за напрежение и ток и да адаптирате кода, за да публикувате данни към тях.
С всичко това на място, сега сме готови да започнем да изграждаме проекта.
Диаграма на измервател на енергия Pi
Схемите за проекта Raspberry Pi Energy Monitor са сравнително сложни и включват свързване към променливо напрежение, както беше споменато по-рано, любезно се уверете, че сте взели всички необходими предпазни мерки, за да избегнете токов удар. Ако не сте запознати с безопасното боравене с променливотоково напрежение, нека радостта от внедряването му на макет, без да го захранвате, да бъде задоволителна.
Схемите включват свързване на датчика за напрежение и ток към ADC, който след това изпраща данните от сензорите към Raspberry Pi. За да се направят връзките по-лесни за следване, схемите за всяка единица са представени самостоятелно.
Схема на токовия сензор
Свържете компоненти за текущия сензор, както е показано в схемите по-долу.
Токовият трансформатор, използван в този проект, е показан по-долу, както можете да видите, имаме три проводника от него, а именно заземяване, Cout и 3.3V
Схеми на сензора за напрежение
Свържете компоненти за сензора за напрежение, както е показано на схемите по-долу.
Схеми на процесора
Свържете всичко заедно с ADC (ADS1115), свързан към малиновия pi и изхода на датчиците за ток и напрежение, свързани съответно към щифтове A0 и A1 на ADS1115.
Уверете се, че щифтовете GND на двата сензорни блока са свързани към GND на ADC или малиновия pi.
За да направя нещата малко по-нестабилни, внедрих сензорите за напрежение и ток на Protoboard. Също така не се препоръчва да се изгражда верига за променлив ток на макетната плоча. Ако направите същото, окончателната ви настройка може да изглежда като изображението по-долу;
След завършване на връзките вече сме готови да напишем кода за проекта.
Python код за Pi измервател на енергия
Както обикновено с нашите малинови пи проекти, ще разработим кода за проекта, използвайки python. Кликнете върху иконата на малинов пи на работния плот, изберете програмиране и стартирайте коя версия на python искате да използвате. Ще използвам Python 3 и някои от функциите в python 3 може да не работят за python 2.7. Така че може да се наложи да направите значителна промяна в кода, ако искате да използвате python 2.7. Ще направя разбивка на кода на малки фрагменти и ще споделя пълния код с вас в края.
Готов? Готино.
Алгоритъмът зад кода е прост. Нашият скрипт на python запитва ADS1115 (над I2C) за отчитане на напрежение и ток. Получената аналогова стойност се получава, взема се проба и се получават средните квадратни стойности на напрежението и тока. Мощността в киловати се изчислява и изпраща към захранването Adafruit IO след определени интервали.
Започваме скрипта, като включваме всички библиотеки, които ще използваме. Това включва вградени библиотеки като библиотеката за време и математика и другите библиотеки, които инсталирахме по-рано.
време за импортиране импортиране Adafruit_ADS1x15 от Adafruit_IO import * математика на импорта
След това създаваме екземпляр на библиотеката ADS1115, който ще се използва за адресиране на физическия ADC напред.
# Създайте ADS1115 ADC (16-битов) екземпляр.. adc1 = Adafruit_ADS1x15.ADS1115 ()
След това предоставете вашето потребителско име за адафрут IO и ключ „AIO“.
username = 'въведете вашето потребителско име между тези кавички' AIO_KEY = 'вашия aio ключ' aio = Клиент (потребителско име, AIO_KEY)
Моля, пазете ключа в безопасност. Може да се използва за достъп до акаунта ви в adafruit io без ваше разрешение.
След това създаваме някои променливи като печалба за ADC, броя на извадките, които искаме, и задаваме закръгляването, което определено не е критично.
GAIN = 1 # вижте документацията на ads1015 / 1115 за потенциални стойности. проби = 200 # брой проби, взети от реклами1115 места = int (2) # набор закръгляване
След това създаваме цикъл while, за да наблюдаваме тока и напрежението и да изпращаме данните на Adafruit io на интервали. Цикълът while започва с задаване на нула на всички променливи.
while True: # нулиране на променливи count = int (0) datai = datav = maxIValue = 0 #max текуща стойност в пробата maxVValue = 0 #max стойност на напрежението в пробата IrmsA0 = 0 # корен среден квадратен ток VrmsA1 = 0 # корен средно квадратно напрежение ampsA0 = 0 # текущи пикови волта A1 = 0 # напрежение киловати = float (0)
Тъй като работим с променливотокови вериги, изходът на SCT-013 и сензорът за напрежение ще бъдат синусоида, така че За да изчислим тока и напрежението от синусоида, ще трябва да получим пиковите стойности. За да получим пиковите стойности, ще вземем проби както за напрежение, така и за ток (200 проби) и ще намерим най-високите стойности (пикови стойности).
за брой в обхват (проби): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # вижте дали имате нов maxValue печат (datai) ако datai> maxIValue: maxIValue = datai ако datav> maxVValue: maxVValue = datav
След това стандартизираме стойностите, като преобразуваме от стойностите на ADC в действителната стойност, след което използваме уравнението на средния квадратен корен, за да намерим RMS напрежението и тока.
# пресметнете тока, като използвате извадковите данни # използваният sct-013 е калибриран за изход от 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = кръгъл (IrmsA0, места) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Изчислете напрежение VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = кръг (VrmsA1, места) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = кръг (voltsA1, места) print ('Напрежение: {0}'. format (voltsA1)) print ('Current: {0} '. Формат (ampsA0))
С това се изчислява мощността и данните се публикуват на adafruit.io
#calculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) # post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', мощност)
За безплатни акаунти adafruit изисква известно забавяне между заявките или качването на данни.
# Изчакайте преди да повторите цикъла time.sleep (0)
В пълния код за проекта можете да намерите в долната част на тази страница
Демонстрация
След като завършите кода, запазете го и натиснете бутона за изпълнение в IDE на python. Преди това се уверете, че Pi е свързан с интернет чрез WiFi или LAN и вашият aio ключ и потребителско име са правилни. След известно време трябва да започнете да виждате енергийните данни (мощност), показвани в емисията на Adafruit.io. По време на демонстрацията моята хардуерна настройка беше такава
За да продължите нещата, можете да създадете табло за управление на adafruit.io и да добавите графичен компонент, така че да можете да получите графичен изглед на данните, както е показано на изображението по-долу.
Това е, момчета, вече можете да наблюдавате консумацията на енергия от всяка точка на света. Важно е да се отбележи, че определено трябва да се извърши още много фина настройка и калибриране, за да се превърне в наистина точно решение, но вярвам, че това ви дава почти всичко, от което се нуждаете, за да продължите.
Чувствайте се свободни да ми застреляте въпроси за проекта чрез раздела за коментари. Ще се опитам да отговоря на възможно най-много. До следващия път.