Датчик движения ардуино
Содержание:
Фоторезистор ардуино и датчик освещенности
Фоторезистор, как следует из названия, имеет прямое отношение к резисторам, которые часто встречаются практически в любых электронных схемах. Основной характеристикой обычного резистора является величина его сопротивления. От него зависят напряжение и ток, с помощью резистора мы выставляем нужные режимы работы других компонентов. Как правило, значение сопротивления у резистора в одних и тех же условиях эксплуатации практически не меняется.
В отличие от обычного резистора, фоторезистор может менять свое сопротивление в зависимости от уровня окружающего освещения. Это означает, что в электронной схеме будут постоянно меняться параметры, в первую очередь нас интересует напряжение, падающее на фоторезисторе. Фиксируя эти изменения напряжения на аналоговых пинах ардуино, мы можем менять логику работы схемы, создавая тем самым адаптирующиеся под вешние условия устройства.
Фоторезисторы достаточно активно применяются в самых разнообразных системах. Самый распространенный вариант применения — фонари уличного освещения. Если на город опускается ночь или стало пасмурно, то огни включаются автоматически. Можно сделать из фоторезистора экономную лампочку для дома, включающуюся не по расписанию, а в зависимости от освещения. На базе датчика освещенности можно сделать даже охранную систему, которая будет срабатывать сразу после того, как закрытый шкаф или сейф открыли и осветили. Как всегда, сфера применения любых датчиков ардуино ограничена лишь нашей фантазией.
Самый популярный и доступный вариант датчика на рынке – это модели массового выпуска китайских компаний, клоны изделий производителя VT. Там не всегда можно разораться, кто и что именно производит тот или иной поставщик, но для начала работы с фоторезисторами вполне подойдет самый простой вариант.
Начинающему ардуинщику можно посоветовать купить готовый фотомодуль, который выглядит вот так:
На этом модуле уже есть все необходимые элементы для простого подключения фоторезистора к плате ардуино. В некоторых модулях реализована схема с компаратором и доступен цифровой выход и подстроечный резистор для управления.
Российскому радиолюбителю можно посоветовать обратить на российский датчик ФР. Встречающиеся в продаже ФР1-3, ФР1-4 и т.п. — выпускались ещё в союзовские времена. Но, несмотря на это, ФР1-3 – более точная деталь. Из этого следует и разница в цене За ФР просят не более 400 рублей. ФР1-3 будет стоить больше тысячи рублей за штуку.
Маркировка фоторезистора
Современная маркировка моделей, выпускаемых в России, довольно простая. Первые две буквы — ФотоРезистор, цифры после чёрточки обозначают номер разработки. ФР -765 — фоторезистор, разработка 765. Обычно маркируется прямо на корпусе детали
У датчика VT в схеме маркировке указаны диапазон сопротивлений. Например:
- VT83N1 — 12-100кОм (12K – освещенный, 100K – в темноте)
- VT93N2 — 48-500кОм (48K – освещенный, 100K – в темноте).
Иногда для уточнения информации о моделях продавец предоставляет специальный документ от производителя. Кроме параметров работы там же указывается точность детали. У всех моделей диапазон чувствительности расположен в видимой части спектра. Собирая датчик света нужно понимать, что точность срабатывания — понятие условное. Даже у моделей одного производителя, одной партии, одной закупки отличаться она может на 50% и более.
На заводе детали настраиваются на длину волны от красного до зелёного света. Большинство при этом «видит» и инфракрасное излучение. Особо точные детали могут улавливать даже ультрафиолет.
Достоинства и недостатки датчика
Основным недостатком фоторезисторов является чувствительность к спектру. В зависимости от типа падающего света сопротивление может меняется на несколько порядков. К минусам также относится низкая скорость реакции на изменение освещённости. Если свет мигает — датчик не успевает отреагировать. Если же частота изменения довольно велика — резистор вообще перестанет «видеть», что освещённость меняется.
К плюсам можно отнести простоту и доступность. Прямое изменение сопротивления в зависимости от попадающего на неё света позволяет упростить электрическую схему подключения. Сам фоторезистор очень дешев, входит в состав многочисленных наборов и конструкторов ардуино, поэтому доступен практически любому начинающему ардуинщику.
Подключение датчика движения
Без данного датчика не обходится ни одна серьёзная охранная система. Инфракрасный датчик — базовый элемент обнаружения присутствия теплокровных.
Также при помощи PIR-датчиков чрезвычайно удобно управлять освещением в зависимости от нахождения рядом человека. Инфракрасные или пироэлектрические датчики просты по внутреннему устройству и недороги. Они крайне надёжны и редко выходят из строя.
Основа датчика — пироэлектрик или диэлектрик, способный создавать поле при изменении температуры. Они устанавливаются попарно, а сверху закрываются куполом с сегментами в виде обычных линз или линзой Френеля. Это позволяет сфокусировать лучи от разных точек проникновения.
При отсутствии излучающих тепло тел в помещении у каждого элемента одинаковая попадающая доза излучения, соответственно, одинаковое напряжение на выходах. При попадании в зону «обзора» датчиков живого теплокровного нарушается равновесие и появляются импульсы, которые и регистрируются.
HC-SR501 — наиболее распространённый и популярный датчик. Он имеет два подстроечных переменных резистора:
- один — для регулировки чувствительности и размера обнаруживаемого объекта,
- второй — для регулировки времени срабатывания (времени генерации импульса после обнаружения).
Схема подключения стандартна и не вызовет затруднений.
Как подключить датчик освещенности к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль датчика освещенности;
- один светодиод и резистор 220 Ом;
- беспаечная макетная плата;
- провода «папа-папа», «папа-мама».
Датчик освещенности ky: схема подключения к Ардуино
На картинке представлена схема подключения датчика света к Arduino Uno с использованием аналогового сигнала. На модуль подается питание 5 Вольт, а в зависимости от освещенности в помещении на выходе модуля (S) меняется напряжение от 0 до 5 Вольт. При подаче этого сигнала на аналоговый вход микроконтроллера, Arduino преобразует сигнал при помощи АЦП в диапазон значений от 0 до 1023.
Счетч для аналогового датчика освещенности
void setup() { pinMode(A1, INPUT); analogWrite(A1, LOW); Serial.begin(9600); // подключаем монитор порта } void loop() { // считываем данные с датчика и выводим на монитор порта int light = analogRead(A1); Serial.print("Light = "); Serial.println(light); // рассчитываем напряжение и выводим на монитор порта float u = light * 0.48 / 100; Serial.print("U = "); Serial.println(u); // ставим паузу и делаем перенос строки delay(500); Serial.println(""); }
- в приведенном примере мы выводим на монитор порта данные с датчика освещенности, преобразованные с помощью АЦП Ардуино;
- чтобы узнать приблизительно напряжение, поступающее на вход Arduino, следует умножить получаемое значение на 0,0048 или U = light * (5 / 1023). Так как тип данных может хранить значения только с двумя знаками после запятой, то мы используем в скетче другую формулу для своих расчетов.
Схема подключения датчика освещенности к Ардуино
Следующая программа использует цифровой сигнал, идущий от датчика освещенности ky. На модуле имеется подстроечный резистор для настройки чувствительности. То есть вы можете отрегулировать, какой уровень освещенности необходим, чтобы модуль стал отправлять сигнал истина (логическая единица) на микроконтроллер Arduino. Подключите светодиод к пин 13 и загрузите следующий скетч.
Счетч для цифрового датчика освещенности
void setup() { pinMode(13, OUTPUT); pinMode(A1, INPUT); } void loop() { // считываем данные с датчика и выводим на монитор порта if (digitalRead(A1) == HIGH) { digitalWrite (13, LOW); } if (digitalRead(A1) == LOW) { digitalWrite (13, HIGH); } }
Зачем нужен модуль для Ардуино
Для начала стоит понять, зачем вообще подобная модульность необходима. Ведь, казалось бы, Ардуино – это всего лишь микроконтроллер, к которому можно приспособить любой сторонний датчик. Но на деле всё не так просто, как раз из-за программной части и других особенностей системы, поэтому, для расширения функционала, и присутствуют специальные Аrduino модули, позволяющие приспособить МК к любым потребностям человека, который его использует. Это основная функция, объясняющая необходимость модульности, помимо неё, присутствуют и другие причины такого решения:
- Стандартизированный набор датчиков с одинаковыми характеристиками позволяет писать универсальные решения для различных ситуаций. Таким образом, захотев воплотить в жизнь какой-то проект, вам не нужно самостоятельно изучать язык программирования и создавать уникальную электросхему. В большинстве случаев, уже готовая система или какие-то её части присутствуют в свободном доступе, инженеру лишь остается их правильно скомпоновать, что значительно экономит время при реализации задумок.
- Простота работы с Ардуино. Уже описанная выше стандартизация, позволяет быть уверенным, что купленный вами датчик или специальный модуль, не нужно будет подключать с помощью дополнительных шлейфов или переходников. Хоть иногда и появляется необходимость самостоятельно паять платформу под Ардуино, но, в большинстве случаев, вы можете приобрести уже готовую, под конкретные модули и потребности. Более того, существуют универсальные платы, полностью раскрывающие возможности модульной системы.
Примеры работы для Arduino
Подключение датчика
К платформе Arduino сенсорный модуль удобнее подключать через плату расширения: например, через Troyka Shield.
При помощи трёхпроводных шлейфов подключите модуль к питанию и и к пинам шины I²C — и .
Получение данных с датчиков линии
Попробуем получить значения с датчиков сборки и вывести полученные значения на монитор serial-порта. Для этого создадим объект для работы с датчиком, выставим чувствительность фотоприёмников и настроим яркость свечения инфракрасных светодиодов.
- folowSensorSimple.ino
-
// библиотека для работы с модулями I²C #include <Wire.h> // библиотека для работы cо сборкой датчиков линии #include <Octoliner.h> // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255 octoliner.setBrightness(255); } void loop() { // считываем значение с датчиков линии for (int i = ; i < 8; i++) { // выводим значения в Serial-порт Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(); // ждём пол секунды delay(500); }
Поиск линии
Теперь научим датчики определять нахождение линии. Будем использовать диапазон от –1 до 1:
- –1 — линия в крайнем левом положении модуля.
- 1 — линия в крайнем правом положении модуля.
- 0 — линия посередине модуля.
- folowSensorMapLine.ino
-
// библиотека для работы с модулями I²C #include <Wire.h> // библиотека для работы cо сборкой датчиков линии #include <Octoliner.h> // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255 octoliner.setBrightness(255); } void loop() { // массив для хранения показателей с датчиков линии int dataSensors8; // считываем значение с датчиков линии for (int i = ; i < 8; i++) { // выводим значения в Serial-порт dataSensorsi = octoliner.analogRead(i); Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(octoliner.mapLine(dataSensors)); Serial.println(); // ждём пол секунды delay(500); }
Для плавной езды по линии рекомендуем использовать сборку датчиков совместно с ПИД-регулятором.
KY-032, модуль инфракрасного датчика
Модуль инфракрасного датчика |
Модуль от 60 р в небольших партиях |
Снова датчик 2 в 1. Данное устройство гибрид двух датчиков KY-005 (модуль инфракрасного светодиода) и KY-022 (датчик ИК приемника) в качестве датчика + плата управления на операционном усилителе. Девайс имеет несколько настроек. 1. На яркость светодиода. 2. На порог срабатывания фотодиода. Чувствительность регулируется от 2 до 40 см. Следует учесть что срабатывание на темных поверхностях несколько хуже чем на светлых вследствие плохого отражения. Принцип работы: светодиод испускает инфракрасный свет и он, если на пути излучения находится препятствие, отражается в фотодиод. |
3Скетч Arduino для инфракрасного датчика препятствий
Скетч для работы с инфракрасным сенсором препятствий также предельно простой: мы будем читать показания с выхода модуля и выводить в монитор порта. А также, если ИК модуль обнаружил препятствие, будем сообщать об этом.
const int ir = A7; void setup() { Serial.begin(115200); } void loop() { int r = analogRead(ir); // r в диапазоне от 0 до 1023 Serial.println(r); if (r < 100) { // т.к. используется аналоговый пин Arduino Serial.println("Detected!"); } delay(100); }
Напомню, в Arduino используется 10-разрядный АЦП, поэтому значение аналогового сигнала кодируется числом в диапазоне от 0 до 1023. При использовании аналогового входа Arduino предельные значения «0» или «1023» мы вряд ли получим с датчика, поэтому лучше использовать некоторый порог, например, равный 100 (поэтому в скетче r < 100). При использовании же цифрового вывода Arduino для чтения показаний инфракрасного датчика, можно можно написать (r == LOW) или (r == 0) или (r < 1).
Хорошая статья про аналоговые измерения на Arduino.
Думаю, довольно понятно, как найти применение такому модулю в ваших проектах. Необходимо периодически опрашивать состояние на выходе модуля, и как только напряжение меняется с HIGH на LOW, предпринимать необходимые действия: менять направление движения робота, включать свет в помещении и т.п.
Примеры популярных Ардуино модулей
Ультразвуковой дальномер HC-SR04
Самый популярный ультразвуковой датчик, которые работает по следующему принципу: отправляет ультразвуковую волну, считает время, за которое она возвратится. Мы знаем скорость звука и время, за которое волна вернулась, а далее мы рассчитываем расстояние до объекта. Данный модуль стоит довольно дешево, диапазон измерений от 2 см до 4 метров.
Инфракрасный дальномер Sharp
Также довольно широко используются дальномеры Sharp с рабочим диапазоном от 20 см до 1,5 метров. Цена таких модулей выше, чем звуковых дальномеров.
Модуль температуры и влажности DHT11
Этот Ардуино модуль измеряет температуру в диапазоне от 0 до +50 °C и влажность от 20 до 90%. Часто используется для измерений данных в комнате или теплице. Также оченб популярен при создании систем по управлению климатом или умных домов.
По теме: Датчик температуры и влажности Ардуино DHT11
Барометр BMP085 или BMP180
С помощью модуля Барометр можно определить атмосферное давление от 30 до 110 кПа. Используется при создании на базе Ардуино аналогов метеостанциё.
Модуль-датчик влажности почвы FC-28
Модуль измеряет влажности почвы или среды в которую его втыкают. Состоит из двух частей. Его используют для автоматизированного полива растений.
Bluetooth HC06
Помогает организовать беспроводную связь Ардуино с компьютером, телефоном или другими устройствами.