на главную
Карта сайта
English version
Вы читаете:

Программа Arduino - начинающему радиолюбителю

Р/л технология
8 лет назад

Arduino. Подключение простейших датчиков (часть 4)


Рассмотренный в предыдущей части обзора встроенный АЦП микроконтроллера позволяет легко подключать к плате Arduino различные аналоговые датчики, которые преобразуют измеряемые физические параметры в электрическое напряжение.

Примером простейшего аналогового датчика может служить переменный резистор, подключённый к плате, как показано на рис. 1. Он может быть любого типа, например СП3-33-32 (рис. 2). Номинал резистора на схеме указан ориентировочно и может быть как меньше, так и больше. Однако следует помнить, что чем меньше сопротивление переменного резистора, тем больший ток он потребляет от источника питания микроконтроллера. А при сопротивлении источника сигнала (в данном случае переменного резистора) более 10 кОм АЦП микроконтроллера работает с большими ошибками. Учтите, что сопротивление переменного резистора как источника сигнала зависит от положения его движка. Оно равно нулю в его крайних положениях и максимально (равно четверти номинального сопротивления) в среднем положении.

Схема подключения переменного резистора к плате

Рис. 1. Схема подключения переменного резистора к плате

 

СП3-33-32

Рис. 2. СП3-33-32

 

Удобно использовать переменный резистор, когда требуется изменять параметр плавно, а не ступенями (дискретно). В качестве примера рассмотрим работу приведённой в табл. 1 программы, которая изменяет яркость свечения светодиода в зависимости от положения движка переменного резистора. Строка U = U/4 необходима в программе для того, чтобы преобразовать возвращаемое АЦП десятиразрядное двоичное число в восьмиразрядное, принимаемое в качестве второго операнда функцией analogWrite(). В рассматриваемом случае это делается делением исходного числа на четыре, что эквивалентно отбрасыванию двух младших двоичных разрядов.

Таблица 1. 

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

На рис. 3 изображена схема подключения к Arduino фоторезистора. При изменении освещённости меняется его электрическое сопротивление и соответственно напряжение на аналоговом входе платы Arduino. Указанный на схеме фоторезистор ФСК-1 можно заменить любым другим, например СФ2-1.

Схема подключения к Arduino фоторезистора

Рис. 3. Схема подключения к Arduino фоторезистора

 

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

Таблица 2. 

 

Изображение на экране отладочного терминала Arduino

Рис. 4. Изображение на экране отладочного терминала Arduino

 

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

Фототранзистор [1] или фотодиод (рис. 5) подключают к Arduino подобным образом. Используя несколько светочувствительных приборов, можно сконструировать простейшую систему зрения для робота [2]. Можно и на новом техническом уровне реализовать многие известные широкому кругу радиолюбителей классические конструкции - кибернетическую модель ночной бабочки [3, c. 134-151] или модель танка, который движется на свет [4, c. 331, 332].

Схема подключения фотодиода к Arduino

Рис. 5. Схема подключения фотодиода к Arduino

 

Аналогично фоторезистору подключают к Arduino терморезистор (рис. 6), который меняет своё электрическое сопротивление в зависимости от температуры. Вместо указанного на схеме терморезистора ММТ-4, основное достоинство которого - герметичный корпус, можно использовать практически любой другой, например, ММТ-1 или импортный.

Схема подключения терморезистора к Arduino

Рис. 6. Схема подключения терморезистора к Arduino

 

После соответствующей калибровки [5, с. 231-255] подобный прибор можно применять для измерения температуры во всевозможных домашних метеостанциях, термостатах и тому подобных конструкциях [6].

Известно, что почти все светодиоды могут служить не только источниками света, но и его приёмниками - фотодиодами. Дело в том, что кристалл светодиода находится в прозрачном корпусе и поэтому его p-n переход доступен для света от внешних источников. К тому же корпус светодиода, как правило, имеет форму линзы, которая фокусирует внешнее излучение на этом переходе. Под его влиянием изменяется, например, обратное сопротивление p-n перехода.

Подключив светодиод к плате Arduino по схеме, изображённой на рис. 7, можно использовать один и тот же светодиод и по прямому назначению, и как фотодатчик [7]. Программа, иллюстрирующая такой режим, приведена в табл. 3. Её идея состоит в том, что сначала на p-n переход светодиода подают обратное напряжение, заряжая его ёмкость. Затем катод светодиода изолируют, конфигурируя как вход вывод Arduino, к которому он подключён. После этого программа измеряет зависящую от внешней освещённости продолжительность разрядки ёмкости p-n перехода светодиода его собственным обратным током до уровня логического нуля.

Схема подключения светодиода к плате Arduino

Рис. 7. Схема подключения светодиода к плате Arduino

Таблица 3

В приведённой программе переменная t описана как unsigned int - целое число без знака. Переменная такого типа, в отличие от обычной int, принимающей значения от -32768 до +32767, не использует свой старший двоичный разряд для хранения знака и может принимать значения от 0 до 65535.

Подсчёт времени разрядки программа выполняет в цикле while(digitalRead (K)!=0)t++. Этот цикл выполняется, всякий раз увеличивая значение t на единицу, пока истинно заключённое в скобки условие, т. е. пока напряжение на катоде светодиода не опустилось до низкого логического уровня.

Иногда требуется, чтобы робот не просто получал информацию об освещённости поверхности, по которой движется, но и мог определить её цвет. Реализуют датчик цвета подстилающей поверхности, освещая её поочерёдно светодиодами разного цвета свечения и сравнивая с помощью фотодиода уровни отражённых от неё при разном освещении сигналов [8]. Схема соединения элементов датчика цвета с платой Arduino показана на рис. 8, а обслуживающая его программа - в табл. 4.

Схема соединения элементов датчика цвета с платой Arduino

Рис. 8. Схема соединения элементов датчика цвета с платой Arduino

 

Таблица 4

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

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

Пример конструкции датчика цвета из четырёх светодиодов и фотодиода

Рис. 9. Пример конструкции датчика цвета из четырёх светодиодов и фотодиода

 

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

Рассмотренные в статье программы можно найти здесь.

Литература

1. Холостов К. Огород на подоконнике. - Левша, 2014, № 11, с. 12-14.

2. Холостов К. Не удивляйтесь: робот - это просто. - Левша, 2012, № 11, с. 12-14.

3. Отряшенков Ю. М. Юный кибернетик. - М.: Детская литература, 1978.

4. Борисов В. Г. Юный радиолюбитель. - М.: Радио и связь, 1992.

5. Ревич Ю. Занимательная электроника. - СПБ.: БХВ-Петербург, 2007.

6. Холостов К. Регулируем температуру. - Левша, 2013, № 8, с. 12-14; № 9, с. 12-14.

7. Практическое программирование Arduino/CraftDuino - Сенсор на светодиоде. - URL: http://robocraft.ru/blog/arduino/70. html (22.06.16).

8. Самодельный датчик цвета. - URL: http://robocraft.ru/blog/sensor/395.html (22.06.16).

Автор: Д. Лекомцев, г. Орёл


Рекомендуем к данному материалу ...