Оглавление:

ЭНЕРГОСЧЕТЧИК ARDUINO: 10 шагов (с изображениями)
ЭНЕРГОСЧЕТЧИК ARDUINO: 10 шагов (с изображениями)

Видео: ЭНЕРГОСЧЕТЧИК ARDUINO: 10 шагов (с изображениями)

Видео: ЭНЕРГОСЧЕТЧИК ARDUINO: 10 шагов (с изображениями)
Видео: ✅Как собрать счетчик посетителей на АРДУИНО УНО? 2024, Ноябрь
Anonim
Image
Image
ЭНЕРГОСЧЕТЧИК ARDUINO
ЭНЕРГОСЧЕТЧИК ARDUINO
ЭНЕРГОСЧЕТЧИК ARDUINO
ЭНЕРГОСЧЕТЧИК ARDUINO

[Проиграть видео]

Я живу в деревне Одиша в Индии, где частые отключения электроэнергии - обычное дело. Это мешает жизни каждому. В детстве продолжение учебы после сумерек было настоящим испытанием. Из-за этой проблемы я экспериментально спроектировал солнечную систему для своего дома. Я использовал солнечную панель на 10 Вт, 6 В для освещения нескольких ярких светодиодов. После многих трудностей проект был успешным. Затем я решил контролировать напряжение, ток, мощность и энергию, задействованные в системе. Это привело к идее разработки СЧЕТЧИКА ЭНЕРГИИ. Я использовал ARDUINO в качестве основы этого проекта, потому что очень легко писать код в его среде IDE, а в Интернете доступно огромное количество библиотек с открытым исходным кодом, которые можно использовать в соответствии с Я экспериментировал с проектом для солнечной системы с очень маленьким номиналом (10 Вт), но его можно легко изменить для использования в системе с более высоким рейтингом.

Вы можете найти все мои проекты на:

Особенность: мониторинг энергии с помощью 1. ЖК-дисплея 2. через Интернет (загрузка Xively) 3. Запись данных на SD-карту

Вы можете увидеть мой новый управляемый КОНТРОЛЛЕР СОЛНЕЧНОГО ЗАРЯДА ARDUINO MPPT (Версия 3.0)

Вы также можете увидеть другие мои инструкции на

КОНТРОЛЛЕР СОЛНЕЧНОГО ЗАРЯДА ARDUINO (Версия 2.0)

КОНТРОЛЛЕР СОЛНЕЧНОГО ЗАРЯДА ARDUINO (Версия-1)

Шаг 1: Необходимые детали:

Требуемые детали
Требуемые детали

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

3. ЖК-дисплей с символами 16x2 (Amazon)

4. ДАТЧИК ТОКА ACS 712 (Amazon) 4. РЕЗИСТОРЫ (10к, 330 Ом) (Amazon) 5. ПОТЕНЦИОМЕТР 10К (Amazon) 6. ПРОВОДА ПЕРЕМЫЧКА (Amazon) 7. КАБЕЛЬ ETHERNET (Amazon) 8. ХЛЕБНАЯ ДОСКА (Amazon)

Шаг 2: мощность и энергия

Мощность: мощность - произведение напряжения (вольт) и тока (ампер) P = VxI Единица мощности - ватт или кВт Энергия: энергия - произведение мощности (ватт) и времени (час) E = Pxt. Единица энергии - ватт-час или киловатт. Час (кВтч) Из приведенной выше формулы ясно, что для измерения энергии нам нужны три параметра: 1. Напряжение 2. Сила тока 3. Время.

Шаг 3: Измерение напряжения

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

Напряжение измеряется с помощью схемы делителя напряжения. Поскольку входное напряжение аналогового вывода ARDUINO ограничено до 5 В, я спроектировал делитель напряжения таким образом, чтобы выходное напряжение с него было меньше 5 В. Моя батарея использовалась для хранения мощность от солнечной панели составляет 6 В, 5,5 А · ч, поэтому я должен понизить эти 6,5 В до напряжения ниже 5 В. Я использовал R1 = 10K и R2 = 10K. Значение R1 и R2 может быть меньше, но проблема в том, что при низком сопротивлении через него протекает более высокий ток, в результате чего большая мощность (P = I ^ 2R) рассеивается в виде тепла. Таким образом, можно выбрать другое значение сопротивления, но следует позаботиться о минимизации потерь мощности на сопротивлении. Vout = R2 / (R1 + R2) * Vbat Vbat = 6,5 при полной зарядке R1 = 10 кОм и R2 = 10 кОм Vout = 10 / (10 + 10) * 6,5 = 3,25 В, что ниже 5 В и подходит для аналогового вывода ARDUINO ПРИМЕЧАНИЕ I. показали, что 9-вольтовая батарея на оголенной плате предназначена только, например, для подключения проводов. Но на самом деле я использовал свинцово-кислотную батарею на 6 В, 5,5 Ач. Калибровка напряжения: когда батарея полностью заряжена (6,5 В), мы получим a Vout = 3,25 В и ниже для другого более низкого напряжения батареи. AEDUINO ADC преобразует аналоговый сигнал в соответствующее цифровое приближение. Когда напряжение батареи составляет 6,5 В, я получил 3,25 В от делителя напряжения и sample1 = 696 в последовательном мониторе, где sample1 - значение АЦП, соответствует 3,25 В. Для лучшего понимания я приложил имитацию в реальном времени с помощью 123D. Схема для измерения напряжения Калибровка: 3,25 В эквивалентно 696 1 эквивалентно 3,25 / 696 = 4,669 мВ Vout = (4,669 * образец1) / 1000 вольт Фактическое напряжение батареи = (2 * Vout) вольт КОД КОДА КАРДУИ: // получение 150 образцов с делителя напряжения с интервалом 2 секунды а затем усреднить данные выборки, собранные для (int i = 0; i <150; i ++) {sample1 = sample1 + analogRead (A2); // считываем напряжение из схемы делителя delay (2); } sample1 = sample1 / 150; напряжение = 4,669 * 2 * образец1 / 1000;

Шаг 4: измерение тока

Текущее измерение
Текущее измерение
Текущее измерение
Текущее измерение

Для измерения тока я использовал датчик тока на эффекте Холла ACS 712 (20 А). На рынке доступны датчики ACS712 с другим диапазоном тока, поэтому выбирайте их в соответствии с вашими требованиями. На макетной схеме я показал светодиод как нагрузку, но фактическая нагрузка другая. ПРИНЦИП РАБОТЫ: Эффект Холла - это создание разности напряжений (напряжения Холла) на электрическом проводнике, поперечной электрическому току в проводнике и магнитное поле, перпендикулярное току. Чтобы узнать больше о датчике на эффекте Холла, щелкните здесь. Технические характеристики датчика ACS 712 можно найти здесь. Из технического описания 1. ACS 712 измеряет положительный и отрицательный ток 20 А, что соответствует аналоговому выходу 100 мВ / А 2. Отсутствует тестовый ток через выходное напряжение. VCC / 2 = 5 В / 2 = 2,5 В Калибровка: Аналоговое считывание дает значение 0-1023, что соответствует от 0 В до 5 В Таким образом, аналоговое считывание 1 = (5/1024) V = 4,89 мВ Значение = (4,89 * Значение аналогового считывания) / 1000 В Но в соответствии с техническими данными смещение составляет 2,5 В (при нулевом токе вы получите 2,5 В с выхода датчика) Фактическое значение = (значение-2,5) В Ток в усилителе = фактическое значение * 10 КОД КОДА: // взятие 150 образцов из датчики с интервалом 2 секунды, а затем усредняют данные выборки, собранные для (int i = 0; i <150; i ++) {sample2 + = analogRead (A3); // считываем ток с датчика delay (2); } sample2 = sample2 / 150; val = (5.0 * sample2) /1024.0; фактическое значение = значение-2,5; // напряжение смещения равно 2,5 В ампер = фактическое значение * 10;

Шаг 5: Измерение времени

Для измерения времени нет необходимости во внешнем оборудовании, так как сам ARDUINO имеет встроенный таймер. Функция millis () возвращает количество миллисекунд с тех пор, как плата Arduino начала запускать текущую программу. КОД КАРДИНО: long milisec = millis (); // вычисляем время в миллисекундах long time = milisec / 1000; // конвертируем миллисекунды в секунды

Шаг 6: Как ARDUINO рассчитывает мощность и энергию

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

Шаг 7: Визуальный вывод

Визуальный выход
Визуальный выход

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

Serial.print ("НАПРЯЖЕНИЕ:"); Serial.print (напряжение); Serial.println («Вольт»); Serial.print ("ТЕКУЩИЙ:"); Serial.print (амперы); Serial.println («Амперы»); Serial.print ("МОЩНОСТЬ:"); Serial.print (ватт); Serial.println («Ватт»); Serial.print («ЭНЕРГИЯ ПОТРЕБЛЯЕТСЯ:»); Serial.print (энергия); Serial.println («Ватт-час»); Serial.println (""); // печать следующих наборов параметров после задержки пустой строки (2000); Для ЖК-дисплея: для ЖК-дисплея вы должны сначала импортировать библиотеку "LiquidCrystal" в коде. Чтобы узнать больше о библиотеке LequidCrystal, щелкните здесь. Для просмотра руководства по ЖК-дисплею щелкните здесь. Следующий код представляет собой формат для отображения на ЖК-дисплее всех вычислений мощности и энергии #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, ВЫХОД); // устанавливаем вывод 9 как выход analogWrite (backLight, 150); // регулирует яркость подсветки 0-254 lcd.begin (16, 2); // столбцы, строки. размер дисплея lcd.clear (); // очищаем экран} void loop () {lcd.setCursor (16, 1); // устанавливаем курсор за пределы отображаемого счетчика lcd.print (""); // выводим пустой символ delay (600); ////////////////////////////////////////// Напечатайте мощность и энергию на ЖК-дисплее / /////////////////////////////////////////////// lcd.setCursor (1, 0); // установить курсор на 1-й столбец и 1-ю строку lcd.print (watt); lcd.print ("W"); lcd.print (напряжение); lcd.print ("V"); lcd.setCursor (1, 1); // установить курсор на 1-й столбец и 2-ю строку lcd.print (energy); lcd.print ("WH"); lcd.print (амперы); lcd.print («А»); }

Шаг 8: загрузка данных на Xively.com

Загрузка данных на Xively.com
Загрузка данных на Xively.com
Загрузка данных на Xively.com
Загрузка данных на Xively.com
Загрузка данных на Xively.com
Загрузка данных на Xively.com

Для лучшего понимания см. Приведенные выше снимки экрана. Для загрузки данных на xively.com сначала необходимо загрузить следующую библиотеку HttpClient: щелкните здесь Xively: щелкните здесь SPI: Импорт из Arduino IDE (эскиз -> Импорт библиотеки…..) Ethernet: Импорт из arduino IDE ((эскиз -> Импортировать библиотеку…..) Откройте учетную запись на https://xively.com (ранее pachube.com и cosm.com) Зарегистрируйтесь для получения бесплатной учетной записи разработчика на

Выберите имя пользователя, пароль, укажите свой адрес и часовой пояс и т. Д. Вы получите электронное письмо с подтверждением;

затем щелкните ссылку активации, чтобы активировать свою учетную запись. После успешного открытия учетной записи вы будете перенаправлены на страницу «Устройства для разработки».

  • Нажмите на + Добавить устройство.
  • Дайте название вашему устройству и описание (например, МОНИТОРИНГ ЭНЕРГЕТИКИ) ·
  • Выберите личные или общедоступные данные (я выбираю частные) ·
  • Нажмите на Добавить устройство.

После добавления устройства вы попадаете на новую страницу, где есть много важной информации.

  • Идентификатор продукта, секрет продукта, серийный номер, код активации ·
  • Идентификатор канала, FeedURL, конечная точка API (идентификатор канала используется в коде ARDUINO)
  • Добавьте каналы (выберите ЭНЕРГИЮ и МОЩНОСТЬ, но вы можете выбрать по своему усмотрению). Укажите единицы измерения и символ для параметра ·
  • Добавить свое местоположение ·
  • Ключи API (используются в коде ARDUINO, не сообщайте этот номер) ·
  • Триггеры (пинг веб-страницы, когда произошло событие, например, когда потребление энергии превышает определенный предел)

Шаг 9: Код Xively и ARDUINO

Здесь я приложил полный код (бета-версия) для счетчика электроэнергии, за исключением регистрации данных с SD-карты, которая прилагается отдельно на следующем шаге. / ** Загрузка данных мониторинга энергии в xively ** / #include #include #include #include #define API_KEY "xxxxxxxx" // Введите ключ API Xively #define FEED_ID xxxxxxxxx // Введите идентификатор канала Xively // MAC-адрес вашего Байт экрана Ethernet mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Аналоговый вывод, который мы отслеживаем (0 и 1 используются экраном Ethernet) int sensorPin = 2; беззнаковый длинный lastConnectionTime = 0; // в прошлый раз мы подключались к Cosm const unsigned long connectionInterval = 15000; // задержка между подключением к Cosm в миллисекундах // Инициализация библиотеки Cosm // Определение строки для нашего идентификатора потока данных char sensorId = "POWER"; char sensorId2 = "ЭНЕРГИЯ"; XivelyDatastream datastreams = {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 () {если (millis () - lastConnectionTime> connectionInterval) {sendData (); // отправляем данные в xively getData (); // считываем поток данных обратно из xively lastConnectionTime = millis (); // обновляем время подключения, поэтому мы ждем перед повторным подключением}} void sendData () {int sensor1 = watt; int sensor2 = энергия; потоки данных [0].setFloat (sensor1); // потоки данных значений мощности [1].setFloat (sensor2); // значение энергии Serial.print ("Мощность чтения"); 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 ("ПОЛУЧИТЬ код возврата:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (канал [0]); Serial.print («Значение мощности:»); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream is:"); Serial.println (канал [1]); Serial.print («Энергетическая ценность:»); Serial.println (feed [1].getFloat ()); } Serial.println ();

Шаг 10: Регистрация данных на SD-карте

Для хранения данных на SD-карте вам необходимо импортировать SD-библиотеку. Чтобы узнать больше о SD-библиотеке, щелкните здесь. Код для хранения данных на SD-карте написан отдельно, так как у меня недостаточно памяти в моем ARDUINO UNO после написание кода для ЖК-дисплея и загрузка данных xively.com. Но я пытаюсь улучшить код бета-версии, чтобы один код мог содержать все функции (ЖК-дисплей, загрузка данных Xively и сохранение данных на SD-карте). Код для регистрации данных прилагается ниже. улучшите код, изменив мой код, пожалуйста, поделитесь со мной. Это моя первая техническая инструкция. Если кто-нибудь обнаружит в нем какую-либо ошибку, не стесняйтесь комментировать … чтобы я мог улучшить себя. Если вы найдете области улучшения в этом проекте, пожалуйста, прокомментируйте или напишите мне, так что проект станет более мощным. Думаю, это будет полезно не только мне, но и другим.

Конкурс схем 123D
Конкурс схем 123D
Конкурс схем 123D
Конкурс схем 123D

Третий приз в конкурсе 123D Circuits Contest

Рекомендуемые: