Изучаем Arduino: инструметы и методы технического волшебства - [14]

Шрифт
Интервал

Что вы узнаете в этой главе

Наш мир является аналоговым. Хотя нередко можно услышать фразу про мир "цифровых технологий", большинство наблюдаемых явлений вокруг нас имеет аналоговый характер. Мир предполагает бесконечное число возможных состояний, будь то солнечный свет, или температура океана, или концентрация загрязняющих веществ в воздухе. Эта глава посвящена методам преобразования аналоговых величин в цифровые значения, которые могут быть проанализированы микроконтроллером Arduino.

- 64 -

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

ПРИМЕЧАНИЕ

Видеоурок данной главы можно посмотреть на интернет-странице

http://www.jeremyblum.com/2011/01/24/arduino-tutorial-4-analog- inputs/[7].


Если вы хотите узнать больше о различиях между аналоговым и цифровым сигналами, посмотрите видеофильм, расположенный на интернет-странице

http://www.jeremyblum.com/2010/06/20/lets-get-digital-or-analog/.

3.1. Понятие об аналоговых и цифровых сигналах


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

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

3.2. Сравнение аналоговых и цифровых сигналов

Графики на рис. 3.1 показывают, чем отличаются друг от друга аналоговые и цифровые сигналы. Слева прямоугольные импульсы, амплитуда которых принимает только два значения: 0 и 5 вольт. Точно так же, как с кнопкой из предыдущей главы: только HIGH или LOW. Справа изображен фрагмент косинусоидального сигнала.

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


- 65 -

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

Допустим, солнечный свет - это аналоговый сигнал, который нужно измерить.

Естественно, есть разумный диапазон, в пределах которого меняется освещенность (измеряется в люксах - световом потоке на единицу площади). Можно обосновано ожидать значение показаний между 0 люкс (для совершенно черного) и 130 000 люкс на прямом солнечном свете. Если бы измерительный прибор был абсолютно точен, то можно получить бесконечное число значений в данном диапазоне.

Рис. 3.1. Аналоговые и цифровые сигналы

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

3.3. Преобразование аналогового сигнала в цифровой

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

- 66 -

Точность АЦП зависит от его разрядности. На плате Arduino Uno установлен 10-разрядный АЦП. Это означает, что АЦП может разделить аналоговый сигнал на 2>10 различных значений. Следовательно, Arduino может присвоить 2>10 = 1024 аналоговых значений, от 0 до 1023.

Опорное напряжение определяет максимальное напряжение на входе АЦП, его значение соответствует коду 1023. При нулевом входном напряжении АЦП выдает на выходе 0, при входном напряжении 2,5 В на выходе будет значение 512 (половина от 1023), при входном напряжении 5 В выходной код равен 1023. Чтобы лучше понять это, посмотрите на графики для трех.разрядного АЦП, изображенные на рис. 3.2. В принципе, опорное напряжение АЦП можно изменить, но в наших устройствах опорным будет напряжение 5 В.