Мониторим состояние сети или Вольтметр-самописец

Сетевое напряжение, один из важнейших показателей качества поставляемой электроэнергии.

Вопрос особо актуален в пригородных поселках и сельской местности. В этом году я тоже столкнулся с данной проблемой, напряжение плавало в течении суток от 120 до 205 вольт, и как на зло при составлении акта с эксплуатирующей сети организацией приборы зафиксировали 200В. что вписывается в пределы ГОСТ 220+-10%.

Как говорится не мытьем так катаньем- ARDUINO нам в помощь, и пусть показания прибора не занесенного в реестр и не поверенного в метрологических службах пришить куда-то сложно, но сделать определенные выводы вполне реально.

И так к делу -задача непрерывно мониторить напряжение сети в течении определенного промежутка времени и складывать их на SD карту.

Для этого нам потребуются:

  1. Arduino – мозг системы                                         IMG_20131223_215213
  2. Модуль часов реального времен 1307RTC и — показания должны быть привязаны к реальному времени                                                                       IMG_20131223_215411
  3. Модуль  SD карты — сюда собственно мы и будем писать показанияIMG_20131223_215257
  4. Ненужный трансформаторный блок питания — согласование сетевого напряжения.

Arduino имеет аналоговые входы с АЦП разрешением 8 бит (1024), но подавать на них можно лишь 5 вольт.

Задачи ясны приступаем к творчеству.

  1. Разбираем блок питания и выкидываем все что стабилизирует выходное напряжение, остаются только трансформатор и выпрямительный мост, замеряем напряжение в сети и на выходе БП, у меня получилось 195 и 6.8 расчитывам  делитель напряжения получаем 28,6. Считаем максимально возможное напряжение на выходе при напряжении в сети (с запасом) 260В и получаем 9,1В. Расчитываем делитель напряжения так чтобы на Arduinку поступало максимум 5 вольт под рукой оказались следующие резисторы R1 — 2.2К, R2 — 2К, что вполне устраивает, ожидаемое максимальное напряжение 4,8 вольт .
  2. Калибруем наш новый датчик, для этого цепляем его следующим образомUntitled Sketch_bb                                                                                          заливаем в ардуинку маленький скетч:
    //————————————————————————
    void setup()
    {
    Serial.begin(9600);
    }
    //————————————————————————
    void loop()
    {
    int analogPin = 0;
    Serial.println(analogRead(analogPin));
    delay(1000);
    }

    Включаем датчик в сеть и наблюдаем в мониторе порта обновляющиеся показания, также к сети подключаем образцовый вольтметр. Теперь мы готовы вычислить поправочный коэффициент для будущего скетча,, мои данные:  com порт — 669,  вольтметр- 187 вольт, итого поделив первое на второе получаем коэффициент 3,58 на 1 вольт.

  3. Модуль часов реального времени. Для настройки и  работы данного модуля нам понадобятся библиотеки DS1307RTC и Time. Подключаем модуль по следующей схеме
    1307                                                                                В примерах от 1307 находим скетч SetTime и загружаем его в Arduino. Открываем монитор com порта и видим что часы синхронизировались с компьютером. Отлично, часы подключены и настроены, дальше они будут идти уже за счет встроенной батарейки.
  4. Ну и последний элемент куда мы будем писать свои данные это SD шильд                     voltmeter                                                                                      здесь никаких дополнительных настроек не требуется, светодиод на 5 пине будет указывать на наличие ошибок.
  5. С железом покончено начинаем программировать

//Подключаем библиотеки
//Библиотека для чтения, записи SD карты
#include <SD.h>             
// Библиотеки для работы часов
#include <DS1307RTC.h>       
#include <Time.h>             
#include <Wire.h> 
// объявляем пин датчика
int analogPin =0;             
const int chipSelect = 10;
//буфер
char dataString [64];         
// пин светодиода
int led = 5;               

//————————————————————————
void setup()
{

  //инициализация SD карты
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    digitalWrite(led, HIGH);
    return;
  }

  digitalWrite(led, LOW);
}
//————————————————————————
void loop()
{
  tmElements_t tm;
  // читаем данные с часов
  RTC.read(tm);                           
  // читаем данные с датчика и делим на коэффициент
  int sensor = analogRead(analogPin)/3.58;
  //разбираем данные и пишем в буфер
  sprintf(dataString, "%4d/%2d/%2d %2d:%2d %3d",tmYearToCalendar(tm.Year),tm.Month,tm.Day,tm.Hour,tm.Minute,sensor);
  //Открываем SD для записи
  File dataFile = SD.open("log.txt", FILE_WRITE);
  //пишем буфер на карту
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    digitalWrite(led, LOW);
    //ждем 5 минут
    delay(300000);
  }
  else {

    digitalWrite(led, HIGH);
  }
}

 

  • Все собрано и залито, наш вольтметр готов
  • Лог файл разобранный в excel                              лог

 

Мониторим состояние сети или Вольтметр-самописец: 28 комментариев

  1. Александр

    Привет!
    Прикольная хрень! У меня тоже есть проблемы с сетями (правда трехфазными) Может ли служить датчиком напряжения обычный транс 220-12, если туда просто добавить мост из 4 диодов? Ответь если можно на почту, потом не найду твой сайт….

    1. sagis Автор записи

      Вполне, только делитель напряжения надо пересчитать, ардуино нельзя подавать на вход более 5 вольт.
      Кстати имея 3 таких транса можно с 1 ардуинкой писать сразу 3 фазы и наблюдать их перекосы , разность напряжений и т.д.

  2. first-leon

    Для сглаживания нужно использовать конденсатор после диодного моста. Иначе погрешности большие будут.
    И еще использовать транс для этих целей по моему не оправданно(и уж тем более три транса на три фазы).
    Можно поставить диод и кондюк (получим сглаженные «пол фазы»). Перерасчитать плечо делителя и получится дешевле и компактнее.

    1. sagis Автор записи

      С первой частью полностью согласен, у меня они тоже стоят, просто я хотел бы отметить что дополнительных стабилизаторов не нужно.
      А вот отказываться от трансформаторной развязки с высокой стороной я бы не стал, довольно опасно, тем более фактически данные у меня уходят в сеть( в отличии от статьи которая является только отладочным примером), тут и роутер не долго поджарить

  3. максим

    А есть ли у ардуины ограничения по току? Мне просто нужно знать — есть ток, нет его в сети дома. Могу ли я подключить старый блок питания от некий и мониторить это?

    1. sagis Автор записи

      Вполне возможно, только при пропадании напряжения ардуино тоже нужно чем-то питать?
      И второе вы вернее всего сможете мониторить только наличие напряжения т.к. в блоке питания стоит стабилизатор и он будет всегда выравнивать напряжение, как расчитать делителья я написал

      1. Максим

        Мне это и нужно. а подключать как на первой картинке с делителем напряжения?или как? я просто новичек еще совсем…

        1. sagis Автор записи

          Да лучше сделать делитель, чтобы подавалось 3-4 Вольта не более, во всяком случае напряжение будет не на пределе

        1. sagis Автор записи

          ардуино прожорливая игрушка, крона очень быстро сядет, тут надо либо батарейку помощнее либо применять алгоритмы сна, и еще 1 вариант питать ардуино от БП и писать время отключения и включения

          1. Максим

            Про писать,я так понял,что на SD карту, хорошая идея))) а можно поподробнее про алгоритмы сна? А крона спокойно подключается, ардуино ничего не грозит?

  4. Дмитрий

    Модуль часов реального времен 1307RTC говорят лучше не брать — врёт на 4 минуты в сутки.
    Модуль DS3231 лучше?

    1. sagis Автор записи

      Ну 4 минуты в сутки конечно перебор, в сутки может набегать до нескольких секунд, для данного проекта точность в секундах не очень актуальна.
      DS3231 действительно более точный прибор

  5. Din

    Отличная статья доступно и понятно. Возник вопрос (так как абсолютно не силен в во всем этом) как правильно подобрать конденсатор для сглаживания? Нашел запчасти среди них диодный мост W005M, можно его использовать, подойдет?

  6. Анатолий

    Здравствуйте! Не подскажите как подконнектить блок питания, например к порту А0, чисто чтоб узнать идёт ли от него питание? При этом, чтоб саму адруинку питать от другого блока питания.

    1. sagis Автор записи

      Вариантов 2 либо как в статье мерятт напряжение, либо поставить оптопару и отлавливать наличие сигнала неё.

  7. Alexander

    Сегодня привезли мегу это мой первый ардуино, спасибо за статью, разобрался за 1 минуту
    вот что получилось:
    ————————————————
    // библиотека для работы с дисплеем
    #include
    // объявляем пин датчика
    int analogPin =0;
    // создаём объект класса UTFT
    // и передаём идентификатор модели дисплея и номера управляющих пинов
    UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
    // объявления встроенного шрифта
    extern uint8_t BigFont[];
    void setup()
    {
    // инициализируем дисплей с вертикальной ориентацией
    myGLCD.InitLCD();
    // очищаем экран
    myGLCD.clrScr();
    // выбираем большой шрифт
    }

    void loop()
    {
    // шрифт
    myGLCD.setFont(BigFont);
    // цвет шрифта
    myGLCD.setColor(0, 200, 0);

    // выводим на экран
    myGLCD.print(«Voltage», 18, 16);
    int sensor = analogRead(analogPin)/2.6;
    myGLCD.print(«v», 194, 16);
    myGLCD.printNumI(sensor, 144, 16);

    delay(2000);
    }
    ————————————————

    1. sagis Автор записи

      Спасибо за комментарий, данный скрипт обязательно кому-нибудь пригодится

  8. Игорь

    Здравствуйте!
    Не могу найти библиотеку Time.h
    Дайте пожалуйста ссылку

  9. Игорь

    Здравствуйте!
    Собрал это устройство. Почему во время работы скетча калибровки датчика в мониторе com порта нестабильные показания ( от 200 до 1027). Также нестабильные показания при мониторинге сети, хотя сеть стабильная. Прошу помочь.

    1. sagis Автор записи

      Проверьте напряжение на выходе делителя, 1024 это много, можно входы спалить, при необходимости пересчитайте сопротивления.
      Где-то выше уже писали что на выходе блока питания необходим электролит, он сгладит излишние пульсации

      1. Игорь

        Спасибо за ответ. Промазал я с электролитом. После установки 1000 мкф все стало отлично, надо только делитель переделать.

  10. Дмитрий

    Ни в коем случае так делать нельзя! Только гальваническая развязка, убъёт/пробьёт к едрене фене всё и людей поубивают ваши советы.

  11. sagis Автор записи

    Как так? Питание и так снимается после трансформатора блока питания, а конденсатор только дополнительно сглаживает напряжение после выпрямления. Никто не разу не предлагал снимать напряжение с бестрансформаторного БП. Прочтите внимательно п.1

  12. Яша

    Здравствуйте, если делать пишущее устройство на 3 фазы, соединять ещё 2 фазы можно к A0 и GND параллельно? И хотелось бы узнать, что нужно дописать в код? Спасибо

  13. sagis Автор записи

    Ну для начала статья была опубликована еще в далеком 2014г. и цель была не иметь точные измерения, а вычислить суточные колебания напряжения. Именно по этому передавать данные в сеть не имеет смысла они хранились на флешке.

  14. Сергей

    Понятно, спасибо. Назрела необходимость отмониторить напряжение в сети (тестер показывает от 180 до 207). Что бы Вы порекомендовали изменить/усовершенствовать в приведенном выше устройстве на настоящий момент?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *