А почему бы и нет? Все необходимое чтобы нарисовать график изменения напряжения в бытовой электросети на борту Arduno имеется. (заодно и частоту узнаем).
Единственная проблема - переменный ток из розетки меняется в электрической цепи не только по величине, но и по направлению, а измерять отрицательные значения напряжений блок АЦП не умеет. Поэтому придется добавить в схему отдельный блок на операционном усилителе который будет конвертировать поступающие на вход значения напряжений в привычный для АЦП диапазон 0....5V. Это также позволит значительно увеличить входное сопротивление (сам прибор будет вносить минимальное влияние на измеряемую цепь).
Питается осциллограф от напряжения 12V. Схема на операционном усилителе рассчитана таким образом, что производит конвертацию входного напряжения в диапазоне от -15....+15V в диапазон 0....5V. ОУ питается от отдельного источника опорного напряжения собранного на линейном стабилизаторе 7805. Это же напряжение подается на вход AREF микроконтроллера. Также подключено 4 кнопки и монохромный дисплей с параллельным интерфейсом и разрешением 240*128 точек. Схему подключения дисплея мне было рисовать лень - все было спаяно по таблице да и на моем канале есть отдельная статья про этот дисплей.
Устройство собрано на ардуино-подобной платформе Mega 2560 R3 Core на базе микроконтроллера ATmega2560 от производителя INHAOS. Плата полностью обратно-совместима с оригинальной платой Arduino Mega 2560 - хотя по факту ей конечно не является. (на ней выведены дополнительные порты ввода/вывода, отсутствует встроенный стабилизатор напряжения и USB-UART преобразователь). За то в магазине INHAOS можно приобрести удобную макетную плату под пайку с мощным стабилизатором напряжения выполненным на базе линейного стабилизатора 7805 и промаркированными отверстиями для подключения периферии.
Для начала проведем тест вольтметра:
Скетч вольтметра очень простой:
Строка для вычисления напряжения имеет небольшое смещение:
float V = map(v, 0, 1023, -148, 152);
так как резисторы применяемые в схеме имели небольшую погрешность по сопротивлению.
Ни каких хитрых формул пересчета не требуется - и вы можете отдыхать пока Arduino за Вас работает.
Самодельный "двухполярный" вольтметр на Arduino работает как нужно - можно приступать к реализации алгоритмов по рисованию на дисплее синуса переменного тока из бытовой электросети.
Тырим картинку из Википедии и разбираемся с ней
По оси i мы будем измерять напряжение на входе ОУ. А вот сколько этих измерений (и с каким временным интервалом) потребуется сделать, чтобы нарисовать 1 период (T)?
Частота в сети f=50Гц
T=1/50 = 0,02 секунды или 20 миллисекунд
Для отрисовки одного периода Т я буду делать 100 измерений.
Одно измерение нужно будет проводить каждые 0.2 миллисекунды, или с частотой 5000 Гц
Естественно, что дисплей с такой частотой обновляться не сможет и поэтому придется применить следующий фокус:
- делаем 200 измерений и сохраняем значения в оперативную память (для наглядности построим сразу 2 периода)
- отображаем график из полученных значений на дисплее
Для того чтобы отмерять эти самые 0.2 миллисекунды будем использовать аппаратный 16 разрядный счетчик таймер 1. Запись полученных значений будем сохранять в процедуре прерываний, а картинку рисовать после сбора этих самых 200 значений.
Посчитаем прескалер таймера и количество тиков:
Собственно говоря тут и считать то особо нечего - при использовании делителя 1 как только счетчик будет иметь значение 3199 - вызываем прерывание, делаем измерение, пишем результат в массив размещенный в оперативной памяти. (подойдет и делитель 8 (считаем до 399).
Итоговые настройки таймера выглядят следующим образом:
Для начала попробуем построить график синусоидальной ЭДС из розетки в мониторе порта.
Общий алгоритм будет такой:
- определяем момент перехода через 0 синусоидальной ЭДС от отрицательной полуволны к положительной
- запускаем таймер, считываем и записываем 199 значений с аналогового входа (первое значение у нас уже есть)
- на основании полученных значений строим график изменения напряжения (должно получится ровно 2 периода (2T))
пишем скетч
В loop два условия:
Если нажата кнопка 1 - ждем пока напряжение перейдет через 0 от отрицательного полупериода к положительному, и запускаем таймер который будет делать одно измерение каждые 0,2мс (всего 199 измерений)
Если нажата кнопка 2 результаты отправляются в COM порт.
Процедура прерывания таймера по совпадению:
На вход ОУ от старинного советского трансформатора подаем переменное напряжение 6V (у кого в детстве была такая штука - имейте в виду, что диодный мост из неё я выкинул)
- отключаем Arduino от компьютера (чтобы не вносить погрешность помехами от компьютера)
- клацаем кнопку 2
- подключаем Arduino к компьютеру
- открываем в среде Arduino IDE плоттер по последовательному соединению
- клацаем кнопку 3.
И получаем картинку из Википедии на которой отображаются 2 периода синусоидального тока из розетки.
Если бы таймер был рассчитан на другу частоту (не с интервалом измерения каждой точки графика 0.2мс) - картинка бы у нас съехала. Амплитудное напряжение у нас составляет 6*1,44=8.6 и его тоже видно на графике.
Аппаратная часть готова - осталось только вывести график на дисплей.
По вертикальной оси Y отображаем значение напряжения. 1 деление 1V (1 пиксель дисплея 0.2V). У меня дисплей с разрешением 240х128 точек - отображаемый диапазон составляет от -12V до + 12V (больше в такой дисплей не впихнуть). По горизонтальной оси Y отображаем диапазон измерений 200 точек с интервалом 0,2 мс. и получаем в виде картинки 2Т при частоте 50Гц.
Если вместо трансформатора к данному девайсу подключить одну из фаз мини-трехфазного генератора из Китая и крутануть вал рукой можно убедиться что ЭДС на его выходе тоже имеет форму синуса.
Толкнуть вал рукой равномерно вряд-ли получится поэтому график несколько кривоватый - но прекрасно видно что на выходе именно переменный ток. Потом как-нибудь раскрутим Вал каким-нибудь двигателем и посмотрим, что из этого получится.
Резюмируем: Если вы
то вам вполне по силам из
построить своим руками прибор который в некоторых случаях сможет заменить осциллограф. А учитывая то, в семействе Arduino уже давно появились мощные 32 разрядные микроконтроллеры (а не только AVR как считает безнадежно отставший от жизни автор этого поста) позволяющие обрабатывать звук и видео - используя знания и кучу дешёвого "говнища" из Китая можно собрать вполне себе приличный аппарат для решения своих задач.
Впрочем с оцифровкой частоты из розетки вполне может справиться и плата на бесперспективном AVR которую в Китае можно купить почти задаром.
Полный список всех статей канала доступен по этой ссылке.
Всем добра.