Можно ли использовать межблочный кабель заместо коаксиального. Занимательное чтиво по кабелям. Межблочный кабель - косичка

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

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

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

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

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

Таблица 1.

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

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

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

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

Таблица 2.

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

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

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

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

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

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

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

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

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

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

Таблица 3

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

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

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

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

Таблица 4

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

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

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

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

Датчик света — это прибор, который позволяет нашему устройству оценивать уровень освещенности. Для чего нужен такой датчик? Например, для системы уличного освещения, чтобы включать лампы только тогда, когда на город спускается ночь. Еще одно применение датчиков света — это детектирование препятствия роботом, путешествующем по лабиринту. Либо детектирование линии роботом следопытом (LineFollower). Но в этих двух случаях, в паре с датчиком света используют специальный источник света. Мы же начнем с простого примера, и подключим к микроконтроллеру Ардуино Уно один из самых распространенных датчиков — фоторезистор. Как долнжо быть понятно из названия, фоторезистор — это резистор, который меняет свое сопротивление в зависимости от падающего на него света. Выглядит этот радиоэлемент так: Различаются фоторезисторы по диапазону сопротивления. Например:

  • VT83N1 — 12-100кОм;
  • VT93N2 — 48-500кОм.
Это значит, что в темноте сопротивления фоторезистора равно 12кОм, а при определенной тестовой засветке — 100кОм. Конкретно в случае этих светодиодов, тестовая засветка имела параметры: освещенность -10 Люкс, и цветовая теплота — 2856К. Кроме фоторезистора, в датчиках света часто используют фотодиод и фототранзистор. Оба выглядят как типичные светодиоды:

1. Подключение

Для того, чтобы подключить наш фоторезистор к Ардуино Уно, необходимо будет вспомнить . Ведь на выходе цепи фоторезистора мы получим некое напряжение, в диапазоне от 0 до 5 Вольт, которое нам потребуется превратить во вполне себе конкретное число, с которым уже будет работать программа микроконтроллера. Держа в уме, что в Ардуино Уно есть 6 аналоговых входов на ногах A0-A5, подключаем фоторезистор по следующей схеме:

Внешний вид макета


Смотрите что получилось. Мы просто напросто построили обычный делитель напряжения, верхнее плечо которого будет меняться в зависимости от уровня света, падающего на фоторезистор. Снимаемое с нижнего плеча напряжение, мы подаем на аналоговый вход, который преобразует его в число от 0 до 1024.

2. Программа

Подключив фоторезистор по нехитрой схеме, начинаем писать программу. Первое что мы сделаем, это выведем необработанный сигнал с аналогового входа в последовательный порт, для того чтобы просто понять, как меняется значение на входе A0. Соответствующая программа имеет вид: const int pinPhoto = A0; int raw = 0; void setup() { Serial.begin(9600); pinMode(pinPhoto, INPUT); } void loop() { raw = analogRead(pinPhoto); Serial.println(raw); delay(200); } Запустив эту программу у нас в хакспейсе, мы получили следующие значения с датчика:
А теперь прикроем датчик рукой:
Видно, что значение сильно меняется. От 830 при прямом попадании света, до 500 в случае затенения (появление преграды на пути света). Зная такое поведение, мы можем численно определить порог срабатывания. Пусть он будет равен, скажем, 600. Не ровно 500, потому что мы хотим обезопасить себя от случайного срабатывания. Вдруг над датчиком пролетит муха — он слегка затенится, и покажет 530. Наконец, добавим в программу некое действие, которое будет совершаться если уровень освещенности станет ниже заданного порога. Самое простое, что мы можем сделать — это зажигать на Ардуино штатный светодиод #13. Получается такая вот программа: const int pinPhoto = A0; const int led = 13; int raw = 0; void setup() { pinMode(pinPhoto, INPUT); pinMode(led, OUTPUT); } void loop() { raw = analogRead(pinPhoto); if(raw < 600) digitalWrite(led, HIGH); else digitalWrite(led, LOW); delay(200); } Накрываем датчик рукой (или выключаем свет в комнате) — светодиод зажигается. Убираем руку — гаснет. Работает, однако. А теперь представьте, что вы зажигаете не светодиод, а подаете сигнал на реле, которое включает лампу в подъезде вашего дома. Получаеся готовый прибор для экономии электроэнергии. Или ставите такой датчик на робота, и он при наступлении ночи ложится спать вместе с вами 🙂 В общем, как говорил профессор Фарнсворт, у датчика света тысяча и одно применение!

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

У нас 8 светодиодов, они установлены так, что слева короткая ножка это минус, справа длинная ножка это плюс. Так они все установлены, в схеме использован один резистор на 10 килоом, я его брал из набора Arduino Kit , и используется 8 подключенных к плюсовому контакту светодиода сопротивлений на 220ом, так оно подключено.


Использовано 8 чёрных проводов это минусовые, и зелёные 8 штук – пины управления от двенадцатого до пятого. В процессе отладки крайний черный заменил на зеленый, но об этом позже.

Фоторезистор здесь, рядом с ним резистор на 10килоом, синяя перемычка идёт к минусу, оранжевый подключается одним концом в среднюю точку, между резистором и фоторезистором, другим концом в плату Arduino , в А0 (аналоговый пин).

Красный это 5 Вольт, и вот через этот делитель напряжения будет работать схема, будут загораться светодиоды, в зависимости от уровня освещенности. Я поправлю светодиоды, достаточно шаткая получилось конструкция. К модели ещё вернемся, а сейчас займемся написанием скетча.

Создадим новый проект, и приступим к написанию, объявим константы, несколько штук, пусть будет тип int , это будет количество выводов, поскольку светодиодов в схеме 8 штук. Так будет указано, сколько светодиодов использовали в схеме.

const int NbrLEDs = 8;

Сделаем массив с номерами пинов, задействуем 5 6 7 8 9 10 11 12 цифровые разъёмы, укажем номер пина на котором снимается уровень освещённости, объявим переменную для фоторезистора, значение сенсора и также объявим уровень освещённости, чтобы можно было делать разбивку их по пинам.

const int ledPins = { 5, 6, 7, 8, 9, 10, 11, 12}; const int photocellPin = A0; int sensorValue = 0; int ledLevel = 0;

В подпрограмме setup напишем цикл, в котором чтобы не присваивать каждому значению исходящего через pinMode , пройдём в цикле по всем пинам присвоим им значения в pinmode из массива и каждому пину присвоим значение OUTPUT .

void setup() { for (int led = 0; led < NbrLEDs; led++) { pinMode(ledPins, OUTPUT); } }

В принципе можно было этого не делать, можно было указать pinmode и дальше писать пять, потом 6, и так далее, но это очень долго и это дикий варварский метод. Поэтому в цикле за один проход пройдем все пины.

pinMode(5, OUTPUT); pinMode(6, OUTPUT);

В loop получим значение сенсора, считав через analogRead из пина A0 .

Далее, сделаем разбивку значение сенсор, используя функцию map получаем значение сенсора, и исходя из уровня освещенности, при чувствительности от 300 до максимального значения 1023 , будет распределяться по 8 пинам, которая объявлены выше.

Смотрите так же видео Фоторезистор и светодиоды на Arduino - (видео) , ссылка откроется в новой вкладке.

Далее в цикле пройдем все пины, так добавил скобки, начиная с первого светодиода, если счетчик не больше 8 будем прибавлять, и дальше проверим по условию, что если номер светодиода меньше уровня освещения, подадим на этот светодиод и все предыдущие напряжение через константу HIGH .

Если же нет, запишем в него отсутствие напряжения, и светодиод не будет гореть.

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Выравниваем код через комбинацию клавиш ctrl+T и давайте теперь посмотрим, что получится, запустим на проверку, сохраним скетч.

Так компиляция скетча, теперь его загрузим на Arduino . Вернемся к схеме, на данный момент один светодиод при изменении освещение не горит из-за плохого контакта.


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


Если же я включу полностью освещение, горят почти все, в чём проблема с этим светодиодом. Достаточно много потратил на него времени, здесь всё правильно собрано, даже минус пробросил заведомо исправным зеленым проводом, но почему-то он капризничает и не горит.


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

В скетче получается распределение освещенности от 300 до 1023 (максимального значения), попытка изменить начальный порог на 0 - никакого результатов не даёт.

Но если распределяем на 8 частей вот это вот всё значение, то тут пригодится калькулятор, получается, либо сопротивление на 10килоом даёт погрешность какую-то, нужно 1023 разделить на 8, получаем практически 128, если брать правильно, то 1024 разделить на 8, это и есть 128.

Теперь нужно от 1023 вычесть 128, поставить сюда значение 895, тогда по логике вещей должно быть всё нормально. Загрузим и посмотрим, что изменится.

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 0, 895, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Сейчас горят все светодиоды, попробуем перекрыть освещенность, или давайте отключим…

Стартовое значение всё равно надо вернуть 300, поскольку подается на эти три первых светодиода питания. Давайте изменим в скетче 0 на 300, как было, было это сделано не просто так, перезалью скетч и посмотрим, что изменится на этот раз…

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 300, 895, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Теперь горит первый светодиод, при минимальном освещении, если включить все, а там у меня 1800 люксов, из двух метров светодиодной ленты, горят все, как и должно.


При выключении фоторезистор ловит остаточное освещение в помещении, горит люстра, не полная тьма, и он срабатывает. Но если подсвечивать фонариком, подавая плавно свет на фоторезистор, схема работает правильно.


Если вырубить свет полностью, посмотрим, что получится в полной темноте. Как видите, при полном отсутствии света, фоторезистор реагирует правильно, светодиоды загораются постепенно, по мере увеличения освещенности. При включенном свете горят все. Такой вот получился скетч, с лайфхаком – подгонка чувствительности фоторезистора, под свои нужды.


Продолжаем серию уроков “ ”. Сегодня подключаем фоторезистор (фотоэлемент) к плате Arduino. Фоторезисторы используются в роботах как датчики освещенности. В статье видео-инструкция, листинг программы, схема подключения и необходимые компоненты.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него. В нашей модели светодиод горит, только если яркость света над фоторезистором меньше определенной, эту яркость можно регулировать программно.

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

Видео-инструкция сборки модели Arduino с фоторезистором:

Для сборки модели с сервоприводом нам потребуется:

  • плата Arduino
  • 6 проводов “папа-папа”
  • фоторезистор
  • светодиод
  • резистор на 220 Ом
  • резистор на 10 кОм
  • программа Arduino IDE, которую можно скачать с сайта Arduino .

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

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

Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):

int led = 13; //переменная с номером пина светодиода
int ldr = 0; //и фоторезистора
void setup() //процедура setup
{
pinMode(led, OUTPUT); //указываем, что светодиод - выход
}
void loop() //процедура loop
{
if (analogRead(ldr) < 800) digitalWrite(led, HIGH);
//если показатель освещенности меньше 800, включаем светодиод
else digitalWrite(led, LOW); //иначе выключаем
}

Так выглядит собранная модель Arduino с фоторезистором:

Готовая модель подключения фоторезистора на Arduino

Если светодиод не реагирует на изменение освещенности, то попробуйте поменять число 800 в программе, если он все время горит — уменьшите, если не горит — увеличьте.

Посты по урокам:

  1. Первый урок:
  2. Второй урок:
  3. Третий урок:
  4. Четвертый урок:
  5. Пятый урок:
  6. Шестой урок:
  7. Седьмой урок:
  8. Восьмой урок:
  9. Девятый урок:

Все посты сайта «Занимательная робототехника» по тегу .

Наш YouTube канал , где публикуются видео-уроки.

Статьи по теме: