Arduino и Rasperry
Сетевое напряжение, один из важнейших показателей качества поставляемой электроэнергии.
Вопрос особо актуален в пригородных поселках и сельской местности. В этом году я тоже столкнулся с данной проблемой, напряжение плавало в течении суток от 120 до 205 вольт, и как на зло при составлении акта с эксплуатирующей сети организацией приборы зафиксировали 200В. что вписывается в пределы ГОСТ 220+-10%.
Как говорится не мытьем так катаньем- ARDUINO нам в помощь, и пусть показания прибора не занесенного в реестр и не поверенного в метрологических службах пришить куда-то сложно, но сделать определенные выводы вполне реально.
И так к делу -задача непрерывно мониторить напряжение сети в течении определенного промежутка времени и складывать их на SD карту.
Для этого нам потребуются:
- Arduino – мозг системы
- Модуль часов реального времен 1307RTC и — показания должны быть привязаны к реальному времени
- Модуль SD карты — сюда собственно мы и будем писать показания
- Ненужный трансформаторный блок питания — согласование сетевого напряжения.
Arduino имеет аналоговые входы с АЦП разрешением 8 бит (1024), но подавать на них можно лишь 5 вольт.
Задачи ясны приступаем к творчеству.
- Разбираем блок питания и выкидываем все что стабилизирует выходное напряжение, остаются только трансформатор и выпрямительный мост, замеряем напряжение в сети и на выходе БП, у меня получилось 195 и 6.8 расчитывам делитель напряжения получаем 28,6. Считаем максимально возможное напряжение на выходе при напряжении в сети (с запасом) 260В и получаем 9,1В. Расчитываем делитель напряжения так чтобы на Arduinку поступало максимум 5 вольт под рукой оказались следующие резисторы R1 — 2.2К, R2 — 2К, что вполне устраивает, ожидаемое максимальное напряжение 4,8 вольт .
- Калибруем наш новый датчик, для этого цепляем его следующим образом заливаем в ардуинку маленький скетч:
//————————————————————————
void setup()
<
Serial.begin(9600);
>
//————————————————————————
void loop()
<
int analogPin = 0;
Serial.println(analogRead(analogPin));
delay(1000);
>
Включаем датчик в сеть и наблюдаем в мониторе порта обновляющиеся показания, также к сети подключаем образцовый вольтметр. Теперь мы готовы вычислить поправочный коэффициент для будущего скетча,, мои данные: com порт — 669, вольтметр- 187 вольт, итого поделив первое на второе получаем коэффициент 3,58 на 1 вольт.
В примерах от 1307 находим скетч SetTime и загружаем его в Arduino. Открываем монитор com порта и видим что часы синхронизировались с компьютером. Отлично, часы подключены и настроены, дальше они будут идти уже за счет встроенной батарейки.
- Все собрано и залито, наш вольтметр готов
- Лог файл разобранный в excel
Мониторим состояние сети или Вольтметр-самописец : 31 комментарий
Привет!
Прикольная хрень! У меня тоже есть проблемы с сетями (правда трехфазными) Может ли служить датчиком напряжения обычный транс 220-12, если туда просто добавить мост из 4 диодов? Ответь если можно на почту, потом не найду твой сайт….
- sagis Автор записи 21.02.2014 в 19:40
Вполне, только делитель напряжения надо пересчитать, ардуино нельзя подавать на вход более 5 вольт.
Кстати имея 3 таких транса можно с 1 ардуинкой писать сразу 3 фазы и наблюдать их перекосы , разность напряжений и т.д.
Думаю, делитель беспорно), но можно защитить входную цепь ардуинки если поставить по входу стабилитрон на 5 вольт с резистором… если превысит значение, то стаб сбросит на себя остаток, а если не превысит, то что стаб есть, что его нет — без разницы.
Интересный прибор))) К сожалению только сейчас нашёл, всё покупное предлагалось(((… А ведь по долгу службы он требовался и не один раз)))
Для сглаживания нужно использовать конденсатор после диодного моста. Иначе погрешности большие будут.
И еще использовать транс для этих целей по моему не оправданно(и уж тем более три транса на три фазы).
Можно поставить диод и кондюк (получим сглаженные «пол фазы»). Перерасчитать плечо делителя и получится дешевле и компактнее.
- sagis Автор записи 15.07.2014 в 23:12
С первой частью полностью согласен, у меня они тоже стоят, просто я хотел бы отметить что дополнительных стабилизаторов не нужно.
А вот отказываться от трансформаторной развязки с высокой стороной я бы не стал, довольно опасно, тем более фактически данные у меня уходят в сеть( в отличии от статьи которая является только отладочным примером), тут и роутер не долго поджарить
А есть ли у ардуины ограничения по току? Мне просто нужно знать — есть ток, нет его в сети дома. Могу ли я подключить старый блок питания от некий и мониторить это?
- sagis Автор записи 09.11.2014 в 00:59
Вполне возможно, только при пропадании напряжения ардуино тоже нужно чем-то питать?
И второе вы вернее всего сможете мониторить только наличие напряжения т.к. в блоке питания стоит стабилизатор и он будет всегда выравнивать напряжение, как расчитать делителья я написал
Мне это и нужно. а подключать как на первой картинке с делителем напряжения?или как? я просто новичек еще совсем…
- sagis Автор записи 09.11.2014 в 23:02
Да лучше сделать делитель, чтобы подавалось 3-4 Вольта не более, во всяком случае напряжение будет не на пределе
а ардуино независимо хочу запитать или от кроны или от нетбука)))
- sagis Автор записи 09.11.2014 в 23:07
ардуино прожорливая игрушка, крона очень быстро сядет, тут надо либо батарейку помощнее либо применять алгоритмы сна, и еще 1 вариант питать ардуино от БП и писать время отключения и включения
Про писать,я так понял,что на SD карту, хорошая идея))) а можно поподробнее про алгоритмы сна? А крона спокойно подключается, ардуино ничего не грозит?
Модуль часов реального времен 1307RTC говорят лучше не брать — врёт на 4 минуты в сутки.
Модуль DS3231 лучше?
- sagis Автор записи 27.11.2014 в 12:45
Ну 4 минуты в сутки конечно перебор, в сутки может набегать до нескольких секунд, для данного проекта точность в секундах не очень актуальна.
DS3231 действительно более точный прибор
Отличная статья доступно и понятно. Возник вопрос (так как абсолютно не силен в во всем этом) как правильно подобрать конденсатор для сглаживания? Нашел запчасти среди них диодный мост W005M, можно его использовать, подойдет?
Здравствуйте! Не подскажите как подконнектить блок питания, например к порту А0, чисто чтоб узнать идёт ли от него питание? При этом, чтоб саму адруинку питать от другого блока питания.
- sagis Автор записи 05.10.2015 в 08:58
Вариантов 2 либо как в статье мерятт напряжение, либо поставить оптопару и отлавливать наличие сигнала неё.
Сегодня привезли мегу это мой первый ардуино, спасибо за статью, разобрался за 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);
- sagis Автор записи 23.12.2015 в 00:40
Спасибо за комментарий, данный скрипт обязательно кому-нибудь пригодится
Здравствуйте!
Не могу найти библиотеку Time.h
Дайте пожалуйста ссылку
Здравствуйте!
Собрал это устройство. Почему во время работы скетча калибровки датчика в мониторе com порта нестабильные показания ( от 200 до 1027). Также нестабильные показания при мониторинге сети, хотя сеть стабильная. Прошу помочь.
- sagis Автор записи 22.12.2015 в 23:58
Проверьте напряжение на выходе делителя, 1024 это много, можно входы спалить, при необходимости пересчитайте сопротивления.
Где-то выше уже писали что на выходе блока питания необходим электролит, он сгладит излишние пульсации
Спасибо за ответ. Промазал я с электролитом. После установки 1000 мкф все стало отлично, надо только делитель переделать.
Ни в коем случае так делать нельзя! Только гальваническая развязка, убъёт/пробьёт к едрене фене всё и людей поубивают ваши советы.
Как так? Питание и так снимается после трансформатора блока питания, а конденсатор только дополнительно сглаживает напряжение после выпрямления. Никто не разу не предлагал снимать напряжение с бестрансформаторного БП. Прочтите внимательно п.1
Здравствуйте, если делать пишущее устройство на 3 фазы, соединять ещё 2 фазы можно к A0 и GND параллельно? И хотелось бы узнать, что нужно дописать в код? Спасибо
Ну для начала статья была опубликована еще в далеком 2014г. и цель была не иметь точные измерения, а вычислить суточные колебания напряжения. Именно по этому передавать данные в сеть не имеет смысла они хранились на флешке.
Понятно, спасибо. Назрела необходимость отмониторить напряжение в сети (тестер показывает от 180 до 207). Что бы Вы порекомендовали изменить/усовершенствовать в приведенном выше устройстве на настоящий момент?
Прекрасная статья, усвоил только две строчки про трансформаторный БП и АЦП, после чего за полчаса скидал приблуду из трансформатора, моста и подстроечника для звуковухи и поставил на запись сигнал аудиоредактором.
Arduino и Rasperry
Сетевое напряжение, один из важнейших показателей качества поставляемой электроэнергии.
Вопрос особо актуален в пригородных поселках и сельской местности. В этом году я тоже столкнулся с данной проблемой, напряжение плавало в течении суток от 120 до 205 вольт, и как на зло при составлении акта с эксплуатирующей сети организацией приборы зафиксировали 200В. что вписывается в пределы ГОСТ 220+-10%.
Как говорится не мытьем так катаньем- ARDUINO нам в помощь, и пусть показания прибора не занесенного в реестр и не поверенного в метрологических службах пришить куда-то сложно, но сделать определенные выводы вполне реально.
И так к делу -задача непрерывно мониторить напряжение сети в течении определенного промежутка времени и складывать их на SD карту.
Для этого нам потребуются:
- Arduino – мозг системы
- Модуль часов реального времен 1307RTC и — показания должны быть привязаны к реальному времени
- Модуль SD карты — сюда собственно мы и будем писать показания
- Ненужный трансформаторный блок питания — согласование сетевого напряжения.
Arduino имеет аналоговые входы с АЦП разрешением 8 бит (1024), но подавать на них можно лишь 5 вольт.
Задачи ясны приступаем к творчеству.
- Разбираем блок питания и выкидываем все что стабилизирует выходное напряжение, остаются только трансформатор и выпрямительный мост, замеряем напряжение в сети и на выходе БП, у меня получилось 195 и 6.8 расчитывам делитель напряжения получаем 28,6. Считаем максимально возможное напряжение на выходе при напряжении в сети (с запасом) 260В и получаем 9,1В. Расчитываем делитель напряжения так чтобы на Arduinку поступало максимум 5 вольт под рукой оказались следующие резисторы R1 — 2.2К, R2 — 2К, что вполне устраивает, ожидаемое максимальное напряжение 4,8 вольт .
- Калибруем наш новый датчик, для этого цепляем его следующим образом заливаем в ардуинку маленький скетч:
//————————————————————————
void setup()
<
Serial.begin(9600);
>
//————————————————————————
void loop()
<
int analogPin = 0;
Serial.println(analogRead(analogPin));
delay(1000);
>
Включаем датчик в сеть и наблюдаем в мониторе порта обновляющиеся показания, также к сети подключаем образцовый вольтметр. Теперь мы готовы вычислить поправочный коэффициент для будущего скетча,, мои данные: com порт — 669, вольтметр- 187 вольт, итого поделив первое на второе получаем коэффициент 3,58 на 1 вольт.
В примерах от 1307 находим скетч SetTime и загружаем его в Arduino. Открываем монитор com порта и видим что часы синхронизировались с компьютером. Отлично, часы подключены и настроены, дальше они будут идти уже за счет встроенной батарейки.
- Все собрано и залито, наш вольтметр готов
- Лог файл разобранный в excel
Мониторим состояние сети или Вольтметр-самописец : 31 комментарий
Привет!
Прикольная хрень! У меня тоже есть проблемы с сетями (правда трехфазными) Может ли служить датчиком напряжения обычный транс 220-12, если туда просто добавить мост из 4 диодов? Ответь если можно на почту, потом не найду твой сайт….
- sagis Автор записи 21.02.2014 в 19:40
Вполне, только делитель напряжения надо пересчитать, ардуино нельзя подавать на вход более 5 вольт.
Кстати имея 3 таких транса можно с 1 ардуинкой писать сразу 3 фазы и наблюдать их перекосы , разность напряжений и т.д.
Думаю, делитель беспорно), но можно защитить входную цепь ардуинки если поставить по входу стабилитрон на 5 вольт с резистором… если превысит значение, то стаб сбросит на себя остаток, а если не превысит, то что стаб есть, что его нет — без разницы.
Интересный прибор))) К сожалению только сейчас нашёл, всё покупное предлагалось(((… А ведь по долгу службы он требовался и не один раз)))
Для сглаживания нужно использовать конденсатор после диодного моста. Иначе погрешности большие будут.
И еще использовать транс для этих целей по моему не оправданно(и уж тем более три транса на три фазы).
Можно поставить диод и кондюк (получим сглаженные «пол фазы»). Перерасчитать плечо делителя и получится дешевле и компактнее.
- sagis Автор записи 15.07.2014 в 23:12
С первой частью полностью согласен, у меня они тоже стоят, просто я хотел бы отметить что дополнительных стабилизаторов не нужно.
А вот отказываться от трансформаторной развязки с высокой стороной я бы не стал, довольно опасно, тем более фактически данные у меня уходят в сеть( в отличии от статьи которая является только отладочным примером), тут и роутер не долго поджарить
А есть ли у ардуины ограничения по току? Мне просто нужно знать — есть ток, нет его в сети дома. Могу ли я подключить старый блок питания от некий и мониторить это?
- sagis Автор записи 09.11.2014 в 00:59
Вполне возможно, только при пропадании напряжения ардуино тоже нужно чем-то питать?
И второе вы вернее всего сможете мониторить только наличие напряжения т.к. в блоке питания стоит стабилизатор и он будет всегда выравнивать напряжение, как расчитать делителья я написал
Мне это и нужно. а подключать как на первой картинке с делителем напряжения?или как? я просто новичек еще совсем…
- sagis Автор записи 09.11.2014 в 23:02
Да лучше сделать делитель, чтобы подавалось 3-4 Вольта не более, во всяком случае напряжение будет не на пределе
а ардуино независимо хочу запитать или от кроны или от нетбука)))
- sagis Автор записи 09.11.2014 в 23:07
ардуино прожорливая игрушка, крона очень быстро сядет, тут надо либо батарейку помощнее либо применять алгоритмы сна, и еще 1 вариант питать ардуино от БП и писать время отключения и включения
Про писать,я так понял,что на SD карту, хорошая идея))) а можно поподробнее про алгоритмы сна? А крона спокойно подключается, ардуино ничего не грозит?
Модуль часов реального времен 1307RTC говорят лучше не брать — врёт на 4 минуты в сутки.
Модуль DS3231 лучше?
- sagis Автор записи 27.11.2014 в 12:45
Ну 4 минуты в сутки конечно перебор, в сутки может набегать до нескольких секунд, для данного проекта точность в секундах не очень актуальна.
DS3231 действительно более точный прибор
Отличная статья доступно и понятно. Возник вопрос (так как абсолютно не силен в во всем этом) как правильно подобрать конденсатор для сглаживания? Нашел запчасти среди них диодный мост W005M, можно его использовать, подойдет?
Здравствуйте! Не подскажите как подконнектить блок питания, например к порту А0, чисто чтоб узнать идёт ли от него питание? При этом, чтоб саму адруинку питать от другого блока питания.
- sagis Автор записи 05.10.2015 в 08:58
Вариантов 2 либо как в статье мерятт напряжение, либо поставить оптопару и отлавливать наличие сигнала неё.
Сегодня привезли мегу это мой первый ардуино, спасибо за статью, разобрался за 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);
- sagis Автор записи 23.12.2015 в 00:40
Спасибо за комментарий, данный скрипт обязательно кому-нибудь пригодится
Здравствуйте!
Не могу найти библиотеку Time.h
Дайте пожалуйста ссылку
Здравствуйте!
Собрал это устройство. Почему во время работы скетча калибровки датчика в мониторе com порта нестабильные показания ( от 200 до 1027). Также нестабильные показания при мониторинге сети, хотя сеть стабильная. Прошу помочь.
- sagis Автор записи 22.12.2015 в 23:58
Проверьте напряжение на выходе делителя, 1024 это много, можно входы спалить, при необходимости пересчитайте сопротивления.
Где-то выше уже писали что на выходе блока питания необходим электролит, он сгладит излишние пульсации
Спасибо за ответ. Промазал я с электролитом. После установки 1000 мкф все стало отлично, надо только делитель переделать.
Ни в коем случае так делать нельзя! Только гальваническая развязка, убъёт/пробьёт к едрене фене всё и людей поубивают ваши советы.
Как так? Питание и так снимается после трансформатора блока питания, а конденсатор только дополнительно сглаживает напряжение после выпрямления. Никто не разу не предлагал снимать напряжение с бестрансформаторного БП. Прочтите внимательно п.1
Здравствуйте, если делать пишущее устройство на 3 фазы, соединять ещё 2 фазы можно к A0 и GND параллельно? И хотелось бы узнать, что нужно дописать в код? Спасибо
Ну для начала статья была опубликована еще в далеком 2014г. и цель была не иметь точные измерения, а вычислить суточные колебания напряжения. Именно по этому передавать данные в сеть не имеет смысла они хранились на флешке.
Понятно, спасибо. Назрела необходимость отмониторить напряжение в сети (тестер показывает от 180 до 207). Что бы Вы порекомендовали изменить/усовершенствовать в приведенном выше устройстве на настоящий момент?
Прекрасная статья, усвоил только две строчки про трансформаторный БП и АЦП, после чего за полчаса скидал приблуду из трансформатора, моста и подстроечника для звуковухи и поставил на запись сигнал аудиоредактором.
Всем привет. Хочу поделится одним из проектом созданным на базе Arduino.
Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.
Если вам уже интересно, тогда продолжим.
Здесь я расскажу об одном модуле, так как описывать и зарисовывать 7 модулей не очень-то и легко.
Было тех задание:
1) Лампы(фонари) 50-65ВТ 220В переменка или 24В постоянка;
2) Индикация работы лампы (светодиод на панели);
3) Звуковая индикация перегоревшей лампы.
Решение было принято такое:
Используем токовый датчик GY-712 5А
По причинам:
1) Меряет переменный и постоянный ток;
2) Легко подключается к контроллеру;
3) Компактный;
4) Недорогой при заказе с Китая.
Давайте посмотрим на схему:
Как работает программа.
При старте он проверяется, включен ли тумблер, если включен ты выдается звуковой сигнал и световая индикация, что бы датчик можно было откалибровать без нагрузки. Если тумблер выключить то прога выдаст звук + индикация.
Далее идет калибровка. После калибровки – звуковой сигнал.
И стартует основная программа. Контроль тумблера, если включен то контроль тока нагрузки лампы, если ток выше заданного порога то включить индикацию если тока нет, то выключить индикацию и выдать звуковой сигнал.
Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик.
Пример программы для одного модуля. >float srab = 0.650;
const int currentPin1 = 0; // Аналоговый вход с датчика тока
const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
//const int adc_zero = 512; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
int adc_zero1; //Переменная автоматической калибровки
void setup()
<
pinMode(13, OUTPUT);// Пин индикатора
pinMode(12, OUTPUT); // пин звука
pinMode(2, INPUT); // пин входа реле (тумблер)
digitalWrite(13, LOW);
digitalWrite(12, LOW);
tone(12,1500,100); // Звук старта калибровки
delay(180);
tone(12,1500,100);
delay(180);
tone(12,1500,100);
//Serial.begin(9600);
adc_zero1 = determineVQ(currentPin1); //Quiscent output voltage — the average voltage ACS712 shows with no load (0 A)
digitalWrite(13, HIGH);
tone(12,1000,100);
delay(150);
digitalWrite(13, LOW);
void loop() <
// Serial.print(«ACS712@A2_1:»);Serial.print(readCurrent(currentPin1,adc_zero1),3);Serial.println(" mA");
delay(300);
if(digitalRead(2)==0) < // Если включен тумблер то:
if (readCurrent(currentPin1,adc_zero1)> srab) // Если ток больше указанного порга сработки то:
<
digitalWrite(13, HIGH); // Включить индикатор
>
else // Иначе
<
if(digitalRead(2)==0) < //Если тумблер все еще включен то:
digitalWrite(13, LOW); // Погасить индикатор
tone(12,2000,500); > // и выдать звуковой сигнал
>