Съдържание:

ЕНЕРГИЕН МЕТЪР ARDUINO: 10 стъпки (със снимки)
ЕНЕРГИЕН МЕТЪР ARDUINO: 10 стъпки (със снимки)

Видео: ЕНЕРГИЕН МЕТЪР ARDUINO: 10 стъпки (със снимки)

Видео: ЕНЕРГИЕН МЕТЪР ARDUINO: 10 стъпки (със снимки)
Видео: Код на Arduino VL53L1X Време на полет 400 см Лазерен сензор за разстояние 2024, Юли
Anonim
Image
Image
ЕНЕРГИЕН МЕТР ARDUINO
ЕНЕРГИЕН МЕТР ARDUINO
ЕНЕРГИЕН МЕТР ARDUINO
ЕНЕРГИЕН МЕТР ARDUINO

[Пускане на видео]

Принадлежа към село Одиша, Индия, където честото спиране на тока е много често. Това възпрепятства живота на всеки. По време на детството ми продължаването на ученето след здрач беше истинско предизвикателство. Поради този проблем проектирах слънчева система за моя дом на експериментална основа. Използвах слънчев панел от 10 вата, 6V за осветяване на няколко ярки светодиода. След като се сблъска с много трудности, проектът беше успешен. Тогава реших да наблюдавам напрежението, тока, мощността и енергията, включени в системата. Това донесе идеята за проектиране на ENERGY METER. Използвах ARDUINO като сърцето на този проект, защото е много лесно да се пише код в неговата IDE и има огромен брой библиотеки с отворен код, достъпни в интернет, които могат да се използват според Опитах проекта за много малка мощност (10 Watt) слънчева система, но това може лесно да бъде променено, за да се използва за по -висока рейтингова система.

Можете да намерите всички мои проекти на:

Характеристика: Мониторинг на енергията чрез 1. LCD дисплей 2. чрез интернет (Xively upload) 3. Регистриране на данни в SD карта

Можете да видите моя нов инструктируем ARDUINO MPPT SOLAR CHARGE CONTROLLER (Версия-3.0)

Можете също да видите другите ми инструкции на

ARDUINO SOLAR CHARGE CONTROLLER (Версия 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Версия-1)

Стъпка 1: Необходими части:

Необходими части
Необходими части

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)

3. 16x2 CHARACTER LCD (Amazon)

4. ACS 712 ТОКОВ СЕНЗОР (Amazon) 4. РЕЗИСТОРИ (10k, 330ohm) (Amazon) 5. 10K ПОТЕНЦИОМЕТЪР (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET CABLE (Amazon) 8. ХЛЕБНА ДОСКА (Amazon)

Стъпка 2: Мощност и енергия

Мощност: Мощността е продукт на напрежение (волт) и ток (Amp) Час (kWh) От горната формула е ясно, че за измерване на енергия се нуждаем от три параметъра 1. Напрежение 2. Ток 3. Време

Стъпка 3: Измерване на напрежение

Измерване на напрежение
Измерване на напрежение
Измерване на напрежение
Измерване на напрежение
Измерване на напрежение
Измерване на напрежение

Напрежението се измерва с помощта на верига на разделител на напрежение. Тъй като входното напрежение на аналоговия щифт на ARDUINO е ограничено до 5V I проектирах делителя на напрежението по такъв начин, че изходното напрежение от него трябва да бъде по -малко от 5 V. Моята батерия се използва за съхранение на мощността от слънчевия панел е номинална 6v, 5.5Ah, така че трябва да намаля тази 6.5v до напрежение по -ниско от 5V. Използвах R1 = 10k и R2 = 10K. Стойността на R1 и R2 може да бъде по -ниска, но проблемът е, че когато съпротивлението е ниско, през него преминава по -голям ток, в резултат на което голямо количество енергия (P = I^2R) се разсейва под формата на топлина. Така че може да се избере различна стойност на съпротивлението, но трябва да се внимава да се сведе до минимум загубата на мощност в съпротивлението. Vout = R2/(R1+R2)*Vbat Vbat = 6.5 при пълно зареждане R1 = 10k и R2 = 10k Vout = 10/(10+10)*6.5 = 3.25v което е по -ниско от 5v и подходящо за аналогов извод ARDUINO ЗАБЕЛЕЖКА I са показали 9 -волтова батерия в схемата на оголената платка, например само за свързване на проводниците. Но действителната батерия, която използвах, е 6 -волтова, 5.5Ah оловно -киселинна батерия. Калибриране на напрежението: Когато батерията е напълно заредена (6.5v), ще получим a Vout = 3.25v и по -ниска стойност за друго по -ниско напрежение на батерията. AEDUINO ADC преобразува аналоговия сигнал в съответно цифрово приближение. Когато напрежението на батерията е 6.5v, получих 3.25v от делителя на напрежението и sample1 = 696 в сериен монитор, където sample1 е ADC стойността съответства на 3.25v За по -добро разбиране съм приложил симулация в реално време от 123D. Схема за измерване на напрежение Калибриране: 3.25v еквивалентно на 696 1 е еквивалентно на 3.25/696 = 4.669mv Vout = (4.669*sample1)/1000 волта Действително напрежение на батерията = (2*Vout) voltARDUINO КОД: // вземане на 150 проби от делител на напрежение с интервал от 2sec и след това осреднете данните от пробите, събрани за (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // отчита напрежението от закъснението на разделителната верига (2); } проба1 = проба1/150; напрежение = 4.669*2*проба1/1000;

Стъпка 4: Измерване на тока

Текущо измерване
Текущо измерване
Текущо измерване
Текущо измерване

За измерване на ток използвах сензор за ток с ефект на Хол ACS 712 (20 A). На пазара се предлагат различни сензори за токов диапазон ACS712, така че изберете според вашите изисквания. В схемата на дъската за хляб съм показал LED като товар, но действителното натоварване е различно. РАБОТЕН ПРИНЦИП: Ефектът на Хол е производството на разлика в напрежението (напрежението на Хол) през електрически проводник, напречно на електрически ток в проводника и магнитно поле, перпендикулярно на тока. За да научите повече за сензора за ефекта на Hall, щракнете тук. Информационният лист на сензора ACS 712 се намира тук От техническия лист 1. ACS 712 измерва положителни и отрицателни 20Amps, съответстващи на аналоговия изход 100mV/A 2. Няма изпитвателен ток през изходното напрежение VCC/2 = 5v/2 = 2.5V Калибриране: Аналоговото четене произвежда стойност от 0-1023, равна на 0v до 5v Така че аналоговото четене 1 = (5/1024) V = 4.89mv Стойност = (4.89*Стойност за аналогово четене)/ 1000 V Но според таблиците с данни офсетът е 2.5V (Когато текущата нула ще получите 2.5V от изхода на сензора) Действителна стойност = (стойност-2.5) V Ток в усилвател = действителна стойност*10ARDUINO КОД: // вземане на 150 проби от сензори с интервал от 2 секунди и след това осредняват данните от пробите, събрани за (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // четене на тока от закъснение на сензора (2); } проба2 = проба2/150; val = (5.0*проба2) /1024.0; действителна стойност = val-2,5; // изместеното напрежение е 2.5v ампера = действителен вал*10;

Стъпка 5: Измерване на времето

За измерване на времето няма нужда от външен хардуер, тъй като самият ARDUINO има вграден таймер. Функцията millis () връща не на милисекунди, откакто дъската на Arduino започна да изпълнява текущата програма. ARDUINO CODE: long milisec = millis (); // изчисляване на времето в милисекунди дълго време = милисек/1000; // конвертирате милисекунди в секунди

Стъпка 6: Как ARDUINO изчислява мощност и енергия

totamps = totamps+усилватели; // изчисляване на общите ампери avgamps = totamps/time; // средни ампери amphr = (avgamps*време)/3600; // усилвател-час ват = напрежение*ампера; // мощност = напрежение*токова енергия = (ват*време)/3600; Ват-сек отново се преобразува във Ват-час чрез разделяне на 1 час (3600 секунди) // енергия = (ват*време)/(1000*3600); за отчитане в kWh

Стъпка 7: Визуален изход

Визуален изход
Визуален изход

Всички резултати могат да бъдат визуализирани в серийния монитор или с помощта на LCD. Използвах 16x2 символен LCD дисплей, за да покажа всички резултати, получени в предишните стъпки. За схеми вижте схемата на платката за хляб, показана по -горе. Свържете LCD с ARDUINO, както е дадено по -долу: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + резистор или потенциометър 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -не е свързан 8. D1 -> Arduino -Не е свързан 9. D2 -> Arduino -Не е свързан 10. D3 -> Arduino -Не е свързан 11. D4 -> Arduino щифт 5 12. D5 -> Arduino щифт 4 13. D6 -> Arduino щифт 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Резистор (мощност на подсветката) 16. K -> Arduino GND (задно осветяване) ARDUINO КОД: За сериен монитор:

Serial.print ("VOLTAGE:"); Serial.print (напрежение); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serial.print (усилватели); Serial.println ("Усилватели"); Serial.print ("POWER:"); Serial.print (ват); Serial.println ("Ват"); Serial.print ("ИЗПОЛЗВАНА ЕНЕРГИЯ:"); Serial.print (енергия); Serial.println ("Watt-Hour"); Serial.println (""); // отпечатваме следващите набори от параметри след закъснение на празен ред (2000); За LCD: За LCD дисплея първо трябва да импортирате библиотеката "LiquidCrystal" в кода. За да научите повече за библиотеката LequidCrystal, щракнете тук За LCD урок щракнете тук Следният код е формат за показване на LCD всички изчисления за мощност и енергия #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // задаваме щифт 9 като изход analogWrite (backLight, 150); // контролира интензивността на подсветката 0-254 lcd.begin (16, 2); // колони, редове. размер на дисплея lcd.clear (); // изчистване на екрана} void loop () {lcd.setCursor (16, 1); // задаваме курсора извън броя на дисплея lcd.print (""); // отпечатваме забавяне на празен знак (600); //////////////////////////////////////////// мощност и енергия на печат към LCD/ /////////////////////////////////////////////////// lcd.setCursor (1, 0); // задаваме курсора на 1 -ви колона и 1 -ви ред lcd.print (ват); lcd.print ("W"); lcd.print (напрежение); lcd.print ("V"); lcd.setCursor (1, 1); // задаваме курсора на 1 -ви колона и 2 -ри ред lcd.print (енергия); lcd.print ("WH"); lcd.принт (усилватели); lcd.print ("A"); }

Стъпка 8: Качване на данни на Xively.com

Качване на данни на Xively.com
Качване на данни на Xively.com
Качване на данни на Xively.com
Качване на данни на Xively.com
Качване на данни на Xively.com
Качване на данни на Xively.com

Вижте горните снимки на екрани за по -добро разбиране. За качване на данни на xively.com следната библиотека, която трябва да бъде изтеглена първо HttpClient: щракнете тук Пряко: щракнете тук SPI: Импортиране от arduino IDE (скица -> Импортиране на библиотека …..) Ethernet: Импортиране от arduino IDE ((скица -> Импортиране на библиотека …..) Отворете акаунт с https://xively.com (по -рано pachube.com и cosm.com) Регистрирайте се за безплатен акаунт на програмист на

Изберете потребителско име, парола, задайте своя адрес и часова зона и т.н. Ще получите имейл за потвърждение;

след това щракнете върху връзката за активиране, за да активирате акаунта си. След успешно отваряне на акаунта ще бъдете пренасочени към страницата за устройства за разработка

  • Кликнете върху полето +Добавяне на устройство
  • Дайте име на вашето устройство и описание (напр. НАБЛЮДЕНИЕ НА ЕНЕРГИЯТА) ·
  • Изберете лични или обществени данни (аз избирам частни) ·
  • Кликнете върху Добавяне на устройство

След като добавите устройството, вие се пренасочвате към нова страница, където има много важна информация

  • Идент. № на продукта, секрет на продукта, сериен номер, код за активиране ·
  • Идентификатор на емисията, FeedURL, Крайна точка на API (Идентификаторът на емисията се използва в кода ARDUINO)
  • Добавете канали (IChoose ENERGY и POWER, но можете да избирате според вашия избор) Дайте единица и символ за параметъра ·
  • Добавете вашето местоположение ·
  • API ключове (използвани в кода ARDUINO, избягвайте да споделяте този номер) ·
  • Задействания (ping aweb страница, когато се е случило събитие, например когато консумацията на енергия надвишава определена граница)

Стъпка 9: Xively и ARDUINO код

Тук прикачих пълния код (бета версия) за електромера, с изключение на регистрирането на данни от SD карта, който е приложен отделно в следващата стъпка. / ** Качване на данни за мониторинг на енергията в xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Въведете своя ключ на Xively API #define FEED_ID xxxxxxxxx // Въведете вашия Xively канал ID // MAC адрес за вашия Ethernet щит байт mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Аналогов щифт, който наблюдаваме (0 и 1 се използват от Ethernet щита) int sensorPin = 2; unsigned long lastConnectionTime = 0; // последният път, когато се свързвахме с Cosm const unsigned long connectionInterval = 15000; // забавяне между свързване към Cosm в милисекунди // Инициализиране на библиотеката Cosm // Определяне на низ за нашия поток от данни ID char sensorId = "POWER"; char sensorId2 = "ЕНЕРГИЯ"; XivelyDatastream потоци от данни = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Обвийте потока от данни в емисия XivelyFeed емисия (FEED_ID, потоци от данни, 2/ * брой потоци от данни */); EthernetClient клиент; XivelyClient xivelyclient (клиент); void setup () {Serial.begin (9600); Serial.println ("Инициализиране на мрежа"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Грешка при получаване на IP адрес чрез DHCP, опит отново …"); забавяне (15000); } Serial.println ("Мрежа инициализирана"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // изпращаме данни до xively getData (); // прочетете потока от данни обратно от xively lastConnectionTime = millis (); // актуализираме времето за връзка, така че чакаме преди да се свържем отново}} void sendData () {int sensor1 = watt; int сензор2 = енергия; потоци от данни [0].setFloat (сензор1); // потоци от данни за стойност на мощността [1].setFloat (сензор2); // енергийна стойност Serial.print ("Read power"); Serial.println (потоци от данни [0].getFloat ()); Serial.print ("Четене на енергия"); Serial.println (потоци от данни [1].getFloat ()); Serial.println ("Качване в Xively"); int ret = xivelyclient.put (емисия, API_KEY); Serial.print ("PUT код за връщане:"); Serial.println (ret); Serial.println (); } // получаваме стойността на потока от данни от xively, отпечатвайки стойността, която получихме void getData () {Serial.println ("Четене на данни от Xively"); int ret = xivelyclient.get (емисия, API_KEY); Serial.print ("GET код за връщане:"); Serial.println (ret); if (ret> 0) {Serial.print ("Потокът от данни е:"); Serial.println (емисия [0]); Serial.print ("Стойността на мощността е:"); Serial.println (емисия [0].getFloat ()); Serial.print ("Потокът от данни е:"); Serial.println (емисия [1]); Serial.print ("Енергийна стойност е:"); Serial.println (емисия [1].getFloat ()); } Serial.println ();

Стъпка 10: Регистриране на данни в SD карта

За съхранение на данни в SD карта трябва да импортирате SD библиотеката За урок щракнете тук За да научите повече за SD библиотеката щракнете тук Кодът за съхранение на данни в SD карта се пише отделно, тъй като нямам достатъчно памет в моя ARDUINO UNO след писане на код за LCD дисплей и качване на данни xively.com. Но се опитвам да подобря кода на бета версията, така че един код да може да съдържа всички функции (LCD дисплей, качване на данни Xively и съхранение на данни в SD карта). Кодът за регистриране на данни е приложен по -долу. Ако някой напише по -добър код, като променя кода ми, моля, споделете с мен. Това е първата ми техническа инструкция. Ако някой открие някаква грешка в него, не се колебайте да коментирате.. за да мога да се подобря. Ако намерите области на подобрение в този проект, моля, коментирайте или ми изпратете съобщение, така че проектът ще бъде по -мощен. Мисля, че ще бъде полезен както за другите, така и за мен.

Конкурс 123D вериги
Конкурс 123D вериги
Конкурс 123D вериги
Конкурс 123D вериги

Трета награда в конкурса 123D Circuits

Препоръчано: