Menu Home

Бесплатная техническая библиотека для любителей и профессионалов Бесплатная техническая библиотека


Arduino. Операции аналогового ввода-вывода, работа со звуком. Энциклопедия радиоэлектроники и электротехники

Бесплатная техническая библиотека

Энциклопедия радиоэлектроники и электротехники / Радиолюбителю-конструктору

Комментарии к статье Комментарии к статье

Хотя цифровые операции ввода-вывода позволяют решать широкий круг задач, однако наличие в микроконтроллере платы Arduino встроенного аналого-цифрового преобразователя (АЦП) и возможность вывода аналоговых сигналов с помощью широтно-импульсной модуляции (ШИМ) обеспечивают работу с аналоговыми датчиками и всевозможными исполнительными устройствами, воздействующими на объект пропорционально управляющему сигналу.

Строго говоря, в режиме вывода все линии портов Arduino могут передавать только дискретные сигналы, имеющие лишь два состояния. Но микроконтроллер способен изменять эти состояния очень быстро, генерируя прямоугольные импульсы. Если подать эти импульсы на какое-либо устройство, обладающее инерционными свойствами, то оно станет вести себя так, будто подаваемое на него напряжение постоянное, равное среднему значению импульсного, и меняется плавно, а не скачками между высоким и низким логическими уровнями.

В режиме ШИМ порт формирует импульсный сигнал постоянной частоты и переменной скважности (это отношение периода следования импульсов к их длительности). Часто вместо скважности оперируют обратной ей величиной - коэффициентом заполнения, который можно изменять от 0 (нет импульсов) до 100% (импульсы следуют, слившись, без пауз). Следовательно, хотя в каждый отдельный момент выходное напряжение соответствует высокому или низкому логическому уровню, его среднее значение пропорционально коэффициенту заполнения. Если к этому выходу подключить обычный мультиметр, он покажет это значение (конечно, если частота импульсов достаточно высока).

В Arduino UNO в режиме ШИМ могут работать выходы D3, D5, D6, D9, D10 и D11. Обычно на плате они помечены знаками "~" или аббревиатурами "PWM". Следует заметить, что у плат Arduino других модификаций число таких выходов может быть больше или меньше.

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

Дискретные выходы, способные формировать ШИМ, настроены на использование этого режима по умолчанию, поэтому вызывать функцию pinMode() для их работы в таком режиме не нужно. Для установки коэффициента заполнения ШИМ-сигнала имеется стандартная функция analogWrite(N, M), где N - номер вывода, M - число, пропорциональное требуемому коэффициенту заполнения. Оно должно лежать в интервале от 0 до 255, причем 0 соответствует нулевому коэффициенту заполнения (навыходе постоянный низкий уровень), 255 - коэффициенту заполнения 100 % (на выходе постоянный высокий уровень). Временные диаграммы выходного напряжения при некоторых значениях M и соответственно коэффициента заполнения Кз показаны на рис. 1.

Arduino. Операции аналогового ввода-вывода, работа со звуком
Рис. 1. Временные диаграммы выходного напряжения

Для примера рассмотрим приведенную в табл. 1 программу, которая постепенно увеличивает яркость свечения светодиода, подключенного к цифровому выходу D9, а затем постепенно уменьшает ее. Она основана на стандартном примере examples3.AnalogFading из комплекта поставки Arduino IDE. Перебор значений коэффициента заполнения импульсов реализован здесь с помощью уже рассмотренных в [1] операторов цикла for.

Таблица 1.

Arduino. Операции аналогового ввода-вывода, работа со звуком

Для приема аналоговых сигналов от внешних устройств в Arduino предназначены входы A0-A5, по умолчанию установленные в нужное для этого состояние, так что дополнительной инициализации не требуется. АЦП, встроенный в Arduino UNO, формирует 10-разрядные двоичные коды и входное напряжение, лежащее в интервале от 0 до +5 В, преобразует в целое число от 0 до 1023 (210-1).

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

К аналоговым входам Arduino можно подключать разнообразные датчики, выходное напряжение которых пропорционально измеряемой величине (переменные резисторы, терморезисторы, фоторезисторы и др.). Однако нужно помнить, что на аналоговый вход можно подавать напряжение лишь от 0 до +5 В. Если выходное напряжение датчика лежит в другом интервале или оно отрицательной полярности, сигнал необходимо предварительно уложить в указанный интервал. Опрос аналогового входа выполняется с частотой менее 10 кГц [2], что может оказаться недостаточным для анализа некоторых быстроизменяющихся сигналов.

Наличие аналоговых входов позволяет превратить Arduino в простейший цифровой вольтметр, измеряющий постоянное напряжение от 0 до +5 В и передающий результат измерения в компьютер. Для этого достаточно загрузить в Arduino программу, приведенную в табл. 2.

Таблица 2

Arduino. Операции аналогового ввода-вывода, работа со звуком

Обратите внимание, что в программе константами заданы образцовое напряжение АЦП Uref (в милливольтах) и коэффициент пересче-тавыходного кодаАЦП в напряжение Ku. Значение коэффициента вычисляется делением заданного образцового напряжения на 1023. Коэффициент обычно дробный, поэтому константа Ки имеет тип float (число с плавающей запятой). Константа Uref имеет такой же тип для правильного вычисления коэффициента. Поскольку в правой части формулы находятся только константы, вычисляет коэффициент не микроконтроллер, выполняя программу, а сам компилятор на этапе ее трансляции.

Все это позволяет повысить точность вольтметра, измерив мультиметром точное значение образцового напряжения на выводе Uref платы Arduino и записав его в программу, присвоив константе Uref. О других способах повысить точность аналого-цифрового преобразования можно прочитать в [3, 4].

При работе рассматриваемой программы на плате мигает светодиод TX, сигнализирующий о передаче информации через последовательный порт. Светодиод RX не светится, так как компьютер ничего не передает в ответ. Встроенный терминал Arduino IDE отображает принятую информацию (рис. 2) - результаты измерения напряжения гальванической батареи 3332.

Arduino. Операции аналогового ввода-вывода, работа со звуком
Рис. 2. Окно программы

Arduino может подавать не только световые, но и звуковые сигналы. Для этого к одному из его выходов необходимо подключить пьезоизлучатель звука, например ЗП-1 (рис. 3).

Arduino. Операции аналогового ввода-вывода, работа со звуком
Рис. 3. Подключение пьезоизлучателя звука

Для работы со звуком предусмотрена специальная функция tone(N, F, T), где N - номер вывода, на котором будут сформированы прямоугольные импульсы; F - частота звука, Гц; T - длительность звука, мс. Последний параметр не обязателен. В его отсутствие звук будет непрерывным. Чтобы выключить его, предусмотрена функция noTone(N).

Конечно, пьезокерамический излучатель звука сложно назвать устройством высококачественного воспроизведения, а формируемый микроконтроллером сигнал имеет прямоугольную форму, тем не менее использование этих функций позволяет исполнять несложные мелодии. Пример приведен в табл. 3. Это немного измененная программа examples 02.Digital oneMelody, входящая в комплект среды разработки Arduino IDE. Поскольку задавать вручную частоту каждой ноты мелодии неудобно, к программе в ее заголовке директивой #include подключен файл pitches.h. Эта операция равносильна включению в программу полного текста этого файла. В рассматриваемом случае он содержит список названий нот, которые можно воспроизвести, и их частот.

Таблица 3

Arduino. Операции аналогового ввода-вывода, работа со звуком

Излучатель звука должен быть подключен к выходу D8.

Для программы мелодия - это последовательность однотипных констант (значений частоты), которые удобно объединить в массив - пронумерованный список однотипных элементов. При объявлении массива нужно либо перечислить все его элементы, либо указать их общее число. Учтите, что нумерация элементов массива всегда начинается с нуля.

В рассматриваемом примере использованы два массива: int melody[] содержит названия нот мелодии, int note Durations[] - их длительность в миллисекундах. Для обращения к элементу массива указывают его имя с заключенным в квадратные скобки порядковым номером. Чтобы иметь возможность легко менять число нот в мелодии, оно вычисляется с использованием функций sizeof(V), возвращающих число байтов, занимаемых ее аргументом (переменной или их массивом) в памяти микроконтроллера. В рассматриваемом случае массив melody занимает 16 байт, а длина его элементов типа int - два байта. Поэтому переменная Note получает значение 8 и именно столько раз будет повторено тело цикла for, поочередно воспроизводящее ноты.

Если к массиву melody[] добавить несколько нот, соответственно изменится и значение Note. Нужно только не забыть дополнить массив noteDurations[] длительностями звучания этих нот.

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

Для повторного исполнения нужно привести микроконтроллер в исходное состояние, нажав на находящуюся на плате Arduino кнопку RESET

Рассмотренные в статье программы для Arduino можно скачать с ftp://ftp.radio.ru/pub/2016/09/aninout.zip.

Литература

  1. Лекомцев Д. Arduino. Операции цифрового ввода-вывода. - Радио, 2016, № 8, с. 51-54.
  2. Аналоговые измерения с Arduino. - URL: robotosha.ru/arduino/analog-measurements-arduino.html.
  3. Arduino Language Reference. Analog I/O - analogReference(). - URL: arduino.cc/en/Reference/AnalogReference.
  4. Функция analogReference(). - URL: arduino.ru/Reference/AnalogReference.

Автор: Д. Лекомцев

Смотрите другие статьи раздела Радиолюбителю-конструктору.

Читайте и пишите полезные комментарии к этой статье.

<< Назад

Последние новости науки и техники, новинки электроники:

Хорошо управляемые луга могут компенсировать выбросы от скота 15.02.2026

Животноводство, особенно разведение крупного рогатого скота, часто обвиняют в значительном вкладе в глобальное потепление из-за мощного парникового газа - метана, который выделяется при пищеварении у жвачных животных. Это вызывает острые политические споры и призывы к сокращению потребления мяса. Однако ученые напоминают, что полная картина климатического воздействия отрасли не ограничивается только выбросами от животных: огромную роль играет окружающая экосистема - пастбища, почва и растительность, которые способны активно поглощать углекислый газ из атмосферы. Исследователи из Университета Небраски-Линкольна решили глубже изучить этот баланс. Группа под руководством профессора Галена Эриксона сосредоточилась на том, как правильно организованные пастбища накапливают углерод в растениях и грунте благодаря естественным процессам, стимулируемым выпасом скота. Ученые подчеркивают, что при достаточном уровне осадков и грамотном управлении такие луга превращаются в мощные природные погло ...>>

NASA тестирует инновационную технологию крыла 15.02.2026

Коммерческая авиация ежегодно расходует колоссальные объемы керосина, что сказывается не только на бюджете авиакомпаний, но и на состоянии окружающей среды. В 2024 году глобальные затраты на авиационное топливо достигли 291 миллиарда долларов, и эта сумма продолжает расти. Чтобы справиться с этими вызовами, NASA активно работает над технологиями, способными заметно повысить аэродинамическую эффективность самолетов. Одним из самых перспективных направлений стало создание специальной конструкции крыла, которая максимизирует естественный ламинарный поток воздуха и минимизирует сопротивление. В январе 2026 года специалисты NASA Armstrong Flight Research Center успешно провели важный этап наземных испытаний концепции Crossflow Attenuated Natural Laminar Flow (CATNLF). Для эксперимента под фюзеляж исследовательского самолета F-15B закрепили вертикально ориентированную масштабную модель высотой около 0,9 м (3 фута), напоминающую узкий киль. Такая компоновка позволила подвергнуть прототип р ...>>

Забота о внуках очень полезна для здоровья мозга 14.02.2026

Общение между поколениями приносит радость всей семье, но мало кто задумывается, насколько активно бабушки и дедушки, заботящиеся о внуках, поддерживают свою умственную форму. Регулярное взаимодействие с детьми стимулирует мозг пожилых людей, помогая сохранять память, скорость мышления и общую когнитивную активность. Новые научные данные подтверждают, что такая добровольная помощь не только важна для общества, но и может замедлять возрастные изменения в мозге. Исследователи из Тилбургского университета в Нидерландах провели анализ, чтобы понять, приносит ли уход за внуками реальную пользу здоровью пожилых людей. Ведущий автор работы Флавия Черечес отметила, что многие бабушки и дедушки регулярно присматривают за детьми, и оставался открытым вопрос, насколько это положительно сказывается на их собственном благополучии, особенно в плане когнитивных функций. Ученые поставили цель выяснить, способен ли регулярный уход за внуками замедлить снижение памяти и других умственных способ ...>>

Случайная новость из Архива

Модуль Silicon Labs BGM111 Blue Gecko 20.08.2015

Ориентируясь на проектировщиков устройств интернета вещей, компания Silicon Labs представила полностью интегрированный и сертифицированный модуль с поддержкой Bluetooth Smart. Модуль BGM111 открыл семейство модулей Blue Gecko, построенных на одноименной однокристальной системе.

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

Модули Silicon Labs BGM111 поставляются с предустановленным стеком Bluetooth LE, соответствующим спецификации Bluetooth 4.1. В перспективе возможно обновление до Bluetooth 4.2 и более новых версий. Наличие сертификации позволяет использовать модули в изделиях для североамериканского, европейского и азиатско-тихоокеанского рынков. К достоинствам BGM111 также относится наличие SDK и поддержка скриптового языка Bluegiga BGScript, позволяющего быстро создавать приложения, использующие Bluetooth, для которых не требуется отдельный микроконтроллер.

Конфигурация BGM111 включает микроконтроллер на ядре ARM Cortex-M4, 256 КБ флэш-памяти и 32 КБ памяти RAM. Модуль может работать от миниатюрного элемента питания, выдающего напряжение 3В, или двух элементов типоразмера AAA. В активном режиме микроконтроллер потребляет 59 мА/МГц, а в спящем режиме потребляемый ток уменьшается до 200 нА. Встроенный приемопередатчик Bluetooth Smart потребляет до 7,5 мА в режиме приема и до 8,2 мА в режиме передачи.

Дальность связи достигает 200 м. Габариты модуля равны 12,9 x 15 x 2,2 мм.Ознакомительные образцы модулей и наборы для разработчиков SLWSTK6101A уже доступны. Серийные поставки производитель рассчитывает начать в четвертом квартале.

Цена BGM111 - $4,97 за штуку в партии из 10 000 штук. Набор SLWSTK6101A стоит $150.

Другие интересные новости:

▪ HDD объемом 10 ТБ не за горами

▪ Самоуправляемые автомобили Volvo с круговым обзором

▪ Подводный лесоруб

▪ Умная дверная ручка Philips

▪ Сапрессоры переходного напряжения от ON SEMICONDUCTOR

Лента новостей науки и техники, новинок электроники

 

Интересные материалы Бесплатной технической библиотеки:

▪ раздел сайта Справочные материалы. Подборка статей

▪ статья Пирогов Николай Иванович. Знаменитые афоризмы

▪ статья Зачем бразильский футболист Джоване Элбер однажды заклеил себе рот скотчем? Подробный ответ

▪ статья Приемщик товаров. Типовая инструкция по охране труда

▪ статья Почему IrDA не годится для приема команд ИК дистанционного управления. Энциклопедия радиоэлектроники и электротехники

▪ статья Электропроводки. Открытые электропроводки внутри помещений. Энциклопедия радиоэлектроники и электротехники

Оставьте свой комментарий к этой статье:

Имя:


E-mail (не обязательно):


Комментарий:





Главная страница | Библиотека | Статьи | Карта сайта | Отзывы о сайте

www.diagram.com.ua

www.diagram.com.ua
2000-2026