Аналоговый выход Ардуино: цифровые пины и функция map

Вопросы и ответы

Чем отличается аналоговый сигнал от цифрового

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

Цифровой сигнал передается в виде единиц и нулей, для компьютеров и цифровой техники проще реализовать (есть сигнал или нет сигнала). Для оперативной памяти в компьютерах используются конденсаторы, заряженный конденсатор — 1 бит. Во флэш-памяти используются транзисторы с плавающим затвором.

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

Более точная работа аналогового входа

Чтобы получить более точные показания с аналогового входа, вы можете использовать 2 варианта:

Функция analogRead()

Функция analogRead () считывает значение с одного из аналоговых входов. Считываемое значение находится в диапазоне 0-1023 (10-битный АЦП). Необходимо указать номер аналогового входа, с которого будут считываться данные.

Следующий пример иллюстрирует использование аналоговых входов:

Как вы можете видеть в приведенном выше примере, считанное значение напряжения передается через последовательный порт на компьютер.

Функция analogReference () не используется в этом примере, так как по умолчанию система использует опорное напряжение от источника питания. Однако лучше указать явный выбор опорного напряжения в функции setup () (в нашем случае это analogReference (DEFAULT)), так как это упрощает понимание кода и его изменение в будущем.

Схема подключения потенциометра к ардуино

Потенциометр (переменный резистор) имеет 3 контакта. В нашем случае мы подключаем центральный контакт к аналоговому порту A0, а два других — к земле (GND) и 5V соответственно.

Объяснение

Чтобы получить аналоговое значение, мы вызываем analogRead (A0). Он вернет целочисленное значение в диапазоне 0..1023. В этом случае 0 соответствует 0 В, а 1024 — максимум, т.е. 5В.

Потенциометр действует как делитель напряжения, позволяя подавать напряжение на порт A0 в диапазоне от 0 В до входного значения (5 В).

Теперь должно быть понятно, почему точность измерения Arduino составляет 1/1024 — это значение деления шкалы аналогового считывателя значений.

для получения истинного аналогового значения, выраженного в вольтах, можно применить простую формулу соотношения. Однако в arduino есть готовая функция карты, которая сделает это за нас:

На вход подаются значение, которое необходимо преобразовать, диапазон значений в текущих единицах измерения (0..1023) и диапазон в единицах вывода (0..5В).

Аналоговые и цифровые выходы на Ардуино

Если вы хотите отрегулировать выходное напряжение, вам нужно использовать контакты с пометкой «~». Для Arduino Uno это 3, 5, 6, 9, 10, 11. Используя аналоговые порты, можно выводить любое напряжение от 0 до 5 Вольт, а цифровые выходы можно только включать и выключать. Аналоговые порты используют ШИМ (широтно-импульсную модуляцию), которая имитирует аналоговый сигнал.

Чтобы понять разницу между цифровыми и аналоговыми сигналами, соберите схему светодиода / резистора на макетной плате, как в Уроке 1 — Подключение светодиода. Но на этот раз подключите светодиод к аналоговому выходу ~ 9. Откройте эскиз мигающего светодиода из первого урока и измените выходной порт с контакта 13 на контакт 9. Загрузите скетч на плату Arduino NANO или UNO.

порт 9 может работать как цифровой выход. Но если функцию digitalWrite изменить на analogWrite, то вместо значений HIGH (1) и LOW (0) можно ввести любое значение от 0 до 255. Именно в этом диапазоне можно изменять напряжение на аналоговых выходах. Скачайте программу для постепенного появления и исчезновения светодиодов. Подробное описание того, как работает эта программа, приведено ниже в пояснении кода.

Скетч. Аналоговый сигнал Ардуино и светодиод

Пояснения к коду:

  1. Функция, где контакт — выходной порт, на который подается сигнал, значение — это значение от 0 (полностью выключено) до 255 (полностью включено), используется для управления яркостью светодиода или скоростью двигателя с помощью широтно-импульсной модуляции (PWM);
  2. Переменная имеет начальное значение «0» каждый раз, когда цикл выполняется, указанное значение добавляется к значению (в этом скетче fade = 5);
  3. Когда переменная достигает максимального значения 255, она принимает отрицательное значение -5. Теперь при каждом запуске цикла к значению добавляется -5, то есть каждый раз, когда оно вычитается .
  4. Если сравнить работу скетча с графиком процесса квантования, размещенным на рисунке в начале статьи, то это шаг квантования, то есть величина, на которую увеличивается приложенное напряжение, и это дискретизация фаза, то есть период времени, по истечении которого значение изменяется .

Подключение фоторезистора к Arduino

Как видите, схема очень простая. Обратите внимание на понижающий резистор 10 кОм. Зачем это нужно и какую конфессию лучше выбрать, о чем мы говорили в прошлом уроке. Теперь напишем простой скетч, который выведет значения с аналогового входа на COM-порт.

Как видите, в эскизе нет ничего сложного. AnalogReferense () не является обязательным. Я добавил это просто для демонстрации.

Сделаем что-нибудь поинтереснее. Например, ночник, который включается автоматически, если яркость освещения падает ниже определенного уровня. Для этого нам нужно добавить в нашу схему светодиод через резистор 150 Ом. Подключаем его к выводу 9 Arduino. Наша схема теперь выглядит так:

схема ночного освещения Arduino

Мы также немного изменим наш набросок.

Я удалил из эскиза все лишнее. Из комментариев в коде легко понять, что к чему. Если вы не разбираетесь в конструкции, вы можете посмотреть справочник по языку программирования arduino.

Теперь мы можем использовать ШИМ, чтобы яркость светодиода менялась в зависимости от освещения. Для этого ему не нужно менять схему. Внесем в код несколько небольших изменений, и все заработает.

Обратите внимание на значения 750 и 900. В вашем случае эти значения могут отличаться. Это зависит от номинала понижающего резистора, сопротивления фоторезистора и уровня освещения в комнате. Загрузите первый набросок этого урока и посмотрите, какие экстремальные значения отображаются на экране.

Таким же образом вы можете подключить множество других элементов и датчиков. Чаще всего продаются готовые датчики, и нет необходимости самостоятельно фильтровать и фильтровать значения, подключать резисторы и т.д. В видеоуроке выше есть пример с подключением инфракрасного датчика расстояния. Там все очень просто.

Эксперимент 2: управление яркостью светодиода с помощью потенциометра

В этом эксперименте мы будем контролировать яркость светодиода с помощью потенциометра. Мы будем использовать analogRead () для чтения напряжения и analogWrite () для вывода сигнала ШИМ, рабочий цикл которого пропорционален аналоговому напряжению.

Необходимые компоненты

  • 1 х потенциометр
  • 1 х светодиод
  • 1 х резистор
  • 1 х Arduino Mega 2560
  • 1 x Совет по развитию
  • 6 х джемпер

Схема соединений

Соберите схему, как показано ниже. При повороте ручки потенциометра напряжение на выводе A0 изменится. Затем программа изменит рабочий цикл сигнала ШИМ на выводе 2, изменив яркость светодиода.

схема подключения: аналоговый ввод / вывод Arduino

Аналоговые пины как цифровые

Аналоговые входы (номера с 14 по 19) также могут использоваться в качестве цифровых контактов для портов ввода / вывода:

Контакты аналогового входа имеют подтягивающие резисторы, которые действуют как цифровые контакты. Сопротивления включаются командой

в то время как выход работает как входной порт.

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

Питание Arduino:

Контакт питания:

  • ВИНО. Вход используется для подачи питания от внешнего источника (при отсутствии 5В от разъема USB или другого регулируемого источника питания). Напряжение питания подается через этот вывод.

Входное напряжение (рекомендуемое): 7-12 В

Входное напряжение (ограничение): 6-20 В

  • 5В. Стабилизированный источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от контакта VIN через регулятор напряжения или от USB-разъема или другого регулируемого источника напряжения 5 В.

Ограничения на допустимый ток:

Постоянный ток через вход / выход 40 мА

Постоянный ток для вывода 3,3 В 50 мА

Описание analogRead

Принцип работы

Функция используется для чтения сигналов с аналоговых выводов платы Arduino. На выходе мы получаем число, пропорциональное реальному значению входного напряжения (но не самому напряжению). Внутри него с помощью analogRead создаем вольтметр и можем использовать его показания для анализа информации с датчиков и выработки любого действия.

Почему мы получаем абстрактное число, а не реальное значение напряжения? Дело в том, что наша программа может работать на разных платах Arduino с разными подключенными датчиками, с разными рабочими напряжениями. И нам приходилось бы менять программы каждый раз, когда мы меняем тип карты или датчика, что крайне неудобно.

Почему функция возвращает значение от 0 до 1023? Все очень просто: аналого-цифровой преобразователь, преобразующий значение напряжения в его цифровое значение, в Arduino имеет 10 цифр, а мощность от 2 до 10 равна 1024. Следовательно, диапазон значений от 0 до 1023 дает нам 1024 вариации уровня сигнала. Мы просто сравниваем полученное число с пределами диапазона и решаем, что делать.

Примеры использования

  • analogRead (A0); // считываем сигнал с аналогового порта A0
  • analogRead (15); // аналогично порт 15 и A0 одинаковые

Преобразование значения с помощью функции map()

В Arudino есть специальная функция, которая упрощает преобразование диапазонов значений. Вы передаете ему значение и два диапазона (исходный и обязательный), и функция возвращает новое значение, которое также будет относиться к пределам запрошенного диапазона и ограничениям оригинала. Например, значение 5 в диапазоне от 0 до 10 преобразуется в значение 10 в диапазоне от 0 до 20. Значение 500 в диапазоне от 0 до 1000 преобразуется в значение 5 в диапазоне От 0 до 10.

Пример использования функции карты в сочетании с analogRead ():

Платы ARDUINO по низкой цене

ВВОД-ВЫВОД

pinMode (вывод, режим); — контактный установочный контакт на входе (INPUT) или выходе (OUTPUT)

По умолчанию цифровые выводы в Arduino предварительно настроены для ввода, поэтому вам не нужно явно объявлять их как INPUT с помощью pinMode().

Предполагается, что выводы, сконфигурированные как INPUT, находятся в состоянии высокого импеданса (сопротивления).

Если входной порт не получает сигнал, рекомендуется установить порт в известное состояние. Это достигается добавлением подтягивающих резисторов 10 кОм, которые подключают вход к источнику питания +5 В или заземлению.

Микроконтроллер ATmega имеет встроенные программируемые подтягивающие резисторы 20 кОм. Эти резисторы запрограммированы следующим образом:

Контакты, настроенные как выходные порты, находятся в состоянии низкого импеданса. Эти штыри могут пропускать через себя довольно большой ток. Контакты ATmega могут обеспечивать ток до 40 мА.

digitalRead (pin) — считывает значение указанного цифрового вывода (вывода) и возвращает результат HIGH (= 1) или LOW (= 0). Вывод должен быть указан как переменная или константа (0-13).

digitalWrite (вывод, значение); — устанавливает логический уровень HIGH или LOW (включается или выключается) на указанном цифровом выводе.

Результат чтения аналогового входа ардуино

Скетч считывает значение из аналогового порта A0 (с небольшой задержкой) и отправляет его в последовательный порт. В этом случае считанное значение преобразуется в вольты и также отображается.

Эксперимент 2: управление яркостью светодиода с помощью потенциометра

В этом эксперименте мы будем контролировать яркость светодиода с помощью потенциометра. Мы будем использовать функцию для считывания напряжения и функцию для вывода сигнала ШИМ, рабочий цикл которого пропорционален аналоговому напряжению.

Необходимые компоненты

  • 1 х потенциометр
  • 1 х светодиод
  • 1 х резистор
  • 1 х Arduino Mega 2560
  • 1 x Совет по развитию
  • 6 х джемпер

Схема соединений

Соберите схему, как показано ниже. При повороте ручки потенциометра напряжение на выводе A0 изменится. Затем программа изменит рабочий цикл сигнала ШИМ на выводе 2, изменив яркость светодиода.

Код программы

Читайте также: Стиральная машина не крутит барабан: 7 причин почему

Оцените статью
Блог про Arduino