Пошаговая инструкция по подключению ультразвукового датчика к плате Arduino с нуля
Если вы хотите начать использовать ультразвуковой датчик на вашей плате Arduino здесь мы объясним, как выполнить эту процедуру быстро и легко. Учтите, что для этого вам понадобится только один Плата Arduino, это может быть любая модель карты, потому что процедура для всех одинакова. В этом случае мы будем работать с Плата Arduino UNO R3 .
Для этого просто выполните каждый из шагов, которые мы укажем ниже:
Первым делом нужно вставить ультразвуковой датчик в макет а с кабелями необходимо выполнить следующие подключения: «Срабатывание датчика на контакте 2 Arduino» et «Эхо датчика на выводе 3 Arduino».
При желании вы также можете подключить модуль напрямую к Arduino, не используя модель.
- Имейте в виду, что все эти подключения всегда должны выполняться с выключенным Arduino , поэтому рекомендуется отключите от ПК или любого другого внешнего источника.
- Позже тебе придется откройте среду программирования Arduino , для них вам нужно перейти к опциям “Орудие труда” затем “Меню”, Оказавшись там, вам нужно выбрать модель используемой платы Arduino. В этом случае вариант «Ардуино Уно» будет выбран .
Когда IDE уже настроена, вы должны начать запланировать наш эскиз , чтобы вы могли лучше все это понять, поехали объясните весь код пошагово.
Первое, что нужно сделать, это настроить контакты и последовательную связь на 9800 бод:
Теперь из пустого цикла вам нужно начать с отправки импульса 10 мкс на триггер датчика:
Впоследствии ответный импульс от датчика будет получен через вывод Echo для измерения импульса, который мы используем функцию Pulseln:
В случае переменная t, вы будет время, необходимое для прибывает ультразвуковое эхо , теперь следующий шаг – вычислить расстояние между ультразвуковым датчиком и объектом.
Для этого следует использовать следующую формулу:
переменная “Скорость” – скорость звука 340 м / с, но в этом случае единицы измерения должны быть см / мкс, так как он будет работать в сантиметрах и микросекундах. Le “время” время, необходимое ультразвуку, чтобы достичь объекта и вернуться к датчику. И, наконец, переменная “Пройденный путь” вдвое больше расстояния до объекта, заменив все эти данные в формуле, мы получим следующее:
Enfin, значение расстояния должны быть отправлены серийно и закончим, поставив паузу 100ms , что выше, чем 60ms рекомендуемые техническими данными датчика.
Здесь вы можете увидеть полный код программы:
Пример 2. При изменении наклона KY-020 меняем цвет светодиода на модуле KY-016.
Чтобы сделать живой пример, необходимо дополнительно подключить RGB светодиод в виде модуля KY-016. Данный пример сигнализирует красным цветом при наклоне модуля и зеленым, если модуль находится в горизонтальном положении.
Схема подключения модулей KY-020, KY-016 к Arduino NANO.
Так как на модуле распаяна вся необходимая обвязка, дополнительные резисторы подключать не нужно. Как мы делали в уроке: KY-017 – модуль ртутного датчика наклона.
Вывод по использованию модуля наклона KY-020.
При работе с модулем наклона нужно помнить, что при соединении контактов возникает дребезг контактов, который мы уже рассмотрели в уроке: Arduino: Дребезг — программное устранение. Нажатие кнопки без ложных срабатываний.
Также можно отметить, что ртутный датчик работает гораздо быстрее и более точно. В связи с чем, можно сделать вывод, что модуль KY-020 можно использовать при обнаружения наклонов в не очень ответственных проектах. Если нужно измерять наклон боле точно стоит задуматься об использовании других средств измерения наклона, например акселерометр.
Понравился Урок KY-020 — датчики наклона. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу , в группу на .
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.
Код для Arduino включения светодиода при наклоне модуля KY-020.ino | 1 Kb | 44 | Скачать | |
При изменении наклона KY-020 меняем цвет светодиода на модуле KY-016.ino | 1 Kb | 44 | Скачать |
Основные технические характеристики резистивных датчиков давления
Эти характеристики относятся к модели датчика давления Interlink 402, но практически все остальные датчики (недорогой Китай в том числе) обладают похожими параметрами. Естественно, уточнение характеристик по даташиту вашей модели не помешает.
- Размер: 1/2″ (12.5 мм) чувствительной поверхности. Толщина – 0.02″ (Interlink выпускает некоторые модели, размер которых составляет 1.5″x1.5″)
- Цена: около 7 долларов от западных производителей. 2-3 доллара в Китае.
- Диапазон сопротивлений: бесконечность/разомкнутая цепь (нет внешнего давления), от 100 КОм (легкое давление) до 200 Ом (максимальное давление)
- Диапазон силы: от 0 до 20 lb. (0 – 100 Ньютонов) на каждый 0.125 квадратный дюйм поверхности
- Источник питания: любой! Использует силу тока менее 1 мА (зависит от резисторов и напряжения питания)
Описание дальномера
Ультразвуковой датчик HC SR04 точно измеряет расстояния бесконтактным методом на дистанциях от 0,02 до 4 м. Прибор не чувствителен к воздействию солнечного света, электромагнитного излучения. Также, в противоположность инфракрасным дальномерам, не создает препятствий в работе сильная тепловая засветка в любой части ИК-диапазона. В комплект поставки включаются:
- модуль измерительный HC SR04;
- управляющий модуль Arduino;
- приемник (receiver);
- передатчик (transmitter).
Дальномер Arduino HC SR04 относится к дешевым устройствам, предназначенным для образовательных целей и хобби. Однако его электрические и эксплуатационные характеристики достаточны для практического применения в быту, в строительстве в качестве бесконтактной рулетки. Стоимость устройства колеблется в пределах от 150 до 450 руб.
Основы сборки дальномера
Ардуино – уникальная система, представляющая собой пластилин в руках инженера, из которого он может слепить, что пожелает.
Возможно это благодаря большому разнообразию датчиков и модулей разных направленностей. От простых чипов, измеряющих силу тока, до вещей вроде Arduino hc hc sr04.
Это специальный датчик, позволяющий, при помощи ультразвуковых волн, измерить расстояние до объекта, на который его направили. Несложно догадаться, что проще всего его применить для создания простого дальномера. Рассмотрим Arduino hc sr04 и какие нюансы в работе с ним стоит учитывать, прежде чем начать собирать проект.
Если вы собираетесь собрать дальномер на Ардуино, то без HC SR04 просто не обойтись. Ведь именно этот модуль чаще всего применяют в подобных системах из-за его высокой востребованности, по причине простоты работы, доступности и низкой стоимости
При этом точность показаний остаётся на высоте, что очень важно в подобных системах. Из данного чипа можно собрать не только дальномер на Ардуино, но и полноценного робота, который будет чувствовать расстояние до объекта и обходить любое препятствие
Однако сегодня мы рассмотрим именно вариант с дальномером на Аrduino, так как он идеально подойдёт для новичков в сфере, которые ещё не слишком хорошо разбираются в основах.
Если же вы захотите затем модифицировать своё изобретение, то можно научить его моделировать полноценную трехмерную карту помещения, что будет удобно для тех, кто занимается дизайном и конструированием мебели или зданий. Но сначала стоит рассмотреть, как вообще работает данный прибор и какие основы сборки стоит усвоить, прежде чем создать лазерный дальномер на Ардуино своими руками.
Наш дальномер на Arduino будет основан на сонаре, применяемом в природе дельфинами, для измерения расстояния до объектов и спокойного обхождения препятствий. Делается это с помощью физических свойств ультразвуковых волн, которые способны отражаться, сталкиваясь с твердыми объектами, и возвращаться обратно к датчикам.
Далее в ход вступает программный код, который высчитывает, сколько времени прошло между посланием и возвратом волны, делит его на два и с помощью формул и скорости звука высчитывает усреднённое расстояние до объекта.
Почему усреднённое?
Дело в том, что любой ультразвуковой датчик все равно будет ошибаться на десятые доли метра, связано это с тем, что различные материалы, окружение и прочие переменные могут повлиять на скорость движения и отражения от поверхности звука. А в данном проекте мы берём идеальную систему, которая в реальном мире работать не может.
Можно постараться учесть все эти факторы, но каждую переменную вы все равно не запрограммируете, поэтому наша задача – получить данные, максимально приближённые к показаниям профессиональных приборов, ведь дальномер Ардуино всё ещё далёк от них по точности.
Есть и ещё один нюанс, который вам стоит заранее учесть, собирая ультразвуковой дальномер Arduino – не все поверхности подходят для измерения. Дело в том, что некоторые материалы способны поглощать звук или слишком сильно искажать его движение, подобно тому, как черная рубашка поглощает электромагнитную световую волну.
Соответственно, лучше всего применять прибор к гладким и плоским поверхностям, которые не будут нарушать движения УВ, что также ограничивает его функционал. Но благодаря низкому ценнику и удобству работы датчик всё ещё остается достаточно популярным.
Модуль ИК дальномера KY-032
Модуль предназначен для обнаружения препятствий без непосредственного контакта с ними. На печатной плате модуля располагается ИК-светодиод и ИК-фотоприемник, когда интенсивность отраженного от препятствия излучения превышает заданный порог, формируется сигнал срабатывания датчика.
Модуль имеет размер 45 х 16 х 12 мм, массу 4 г, в печатной плате модуля предусмотрено крепежное отверстие диаметром 3 мм. На плате имеется четырехконтактный разъем, через который осуществляется питание модуля и передача информации. Назначение выводов разъема следующее: «GND» — общий провод, «+»– питание +5В, «OUT» — информационный выход, «EN» — управление режимом работы. Для индикации подачи питания на датчик служит светодиод «Pled», при срабатывании загорается светодиод «Sled».
На информационном цифровом выходе «OUT» появляется низкий логический уровень, если в поле зрения датчика имеется препятствие, иначе на выходе высокий логический уровень. В этом можно убедиться, загрузив в память Arduino UNO программу AnalogInput2, тогда при срабатывании датчика в мониторе последовательного порта программы Arduino IDE будет наблюдаться следующая картина.
По данным продавцов , датчик может обнаруживать препятствия на расстоянии от 2 до 40 см. Автору настоящего обзора удалось добиться срабатывания датчика на расстоянии 5,5-3,5 см от белого препятствия (лист бумаги). Черную шероховатую поверхность (бокс CD-дисков) датчик не видит совсем, черную глянцевую поверхность датчик регистрирует расстояния около 2 см.
Согласно документации, для настройки частоты модуляции ИК-импульсов на частоту 38 кГц служит подстроечный резистор промаркированный 103, а для регулирования чувствительности датчика следует использовать подстроечный резистор промаркированный 507. как хорошо видно на предыдущих фотографиях на плате доставшейся автору оба переменных резистора имеют маркировку 103. Возможно это брак в данном конкретном устройстве. Может быть этим и объясняется малая дальность действия датчика.
Датчик потребляет ток 4-5 мА в рабочем режиме и 5-6 мА при срабатывании. Если настроить датчик на минимально расстояние срабатывания, то можно немного уменьшить ток потребления (примерно на 1 мА). На данной фотографии, также видно, сто при срабатывании датчика загорелся светодиод «Sled».
По описанию этого датчика вывод «EN» служит для управления режимом работы при снятой перемычке. При низком логическом уровне на входе «EN» датчик включен, при высоком логическом уровне модуль дальномера находится в спящем режиме с пониженным энергопотреблением.
Таким образом, с одно стороны датчик можно использовать по назначению, однако по факту этот датчик не превосходит более простые ИК-датчики расстояния
Датчик расстояния в проектах Arduino
Способность ультразвукового датчика определять расстояние до объекта основано на принципе сонара – посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них. Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени. Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Внимание! Так как в основу принципа действия положен ультразвук, то такой датчик не подходит для определения расстояния до звукопоглощающих объектов. Оптимальными для измерения являются предметы с ровной гладкой поверхностью
Описание датчика HC SR04
Датчик расстояния Ардуино является прибором бесконтактного типа, и обеспечивает высокоточное измерение и стабильность. Диапазон дальности его измерения составляет от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия. В комплект модуля с HC SR04 arduino также входят ресивер и трансмиттер.
Ультразвуковой дальномер HC SR04 имеет такие технические параметры:
- Питающее напряжение 5В;
- Рабочий параметр силы т ока – 15 мА;
- Сила тока в пассивном состоянии < 2 мА;
- Обзорный угол – 15°;
- Сенсорное разрешение – 0,3 см;
- Измерительный угол – 30°;
- Ширина импульса – 10-6 с.
Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):
- Контакт питания положительного типа – +5В;
- Trig (Т) – выход сигнала входа;
- Echo (R) – вывод сигнала выхода;
- GND – вывод «Земля».
Схема взаимодействия с Arduino
Для получения данных, необходимо выполнить такую последовательность действий:
- Подать на выход Trig импульс длительностью 10 микросек;
- В ультразвуковом дальномере hc sr04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
- Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;
- На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.
При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.
Подключение HC SR04 к Arduino
Выполнить подключение ультразвукового датчика расстояния к плате Arduino достаточно просто. Схема подключения показана на рисунке.
Контакт земли подключаем к выводу GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:
Библиотека для работы с HC SR04
Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет проблем с пинговыми доступами и добавляет некоторые новые функции.
К особенностям библиотеки можно отнести:
- Возможность работы с различными ультразвуковыми датчиками;
- Может работать с датчиком расстояния всего через один пин;
- Отсутствие отставания на 1 секунду при отсутствии пинга эха;
- Для простой коррекции ошибок есть встроенный цифровой фильтр;
- Максимально точный расчет расстояния.
Скачать бибилотеку NewPing можно здесь
Точность измерения расстояния датчиком HC SR04
Точность датчика зависит от нескольких факторов:
- температуры и влажности воздуха;
- расстояния до объекта;
- расположения относительно датчика (согласно диаграммы излучения);
- качества исполнения элементов модуля датчика.
В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, испуская волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.
Фактор расстояния до объекта важен, т.к. растет вероятность отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.
Для уменьшения ошибок и погрешности измерений обычно выполняются следующие действия:
- усредняются значения (несколько раз замеряем, убираем всплески, потом находим среднее);
- с помощью датчиков (например, DHT11 или DHT22) определяется температура и вносятся поправочные коэффициенты;
- датчик устанавливается на серводвигатель, с помощью которого мы “поворачиваем голову”, перемещая диаграмму направленности влево или вправо.
Поверка вольтметра
Поверка вольтметра заключается в сравнении показаний вольтметра на ардуино с рабочим вольтметром (мультиметром). Если значения отличаются, нужно проверить напряжение на пинах Ардуино 5V и GND. Напряжение может слегка отличаться от 5 вольт. Например, 4,95 В. Тогда в формуле temp = (analogvalue * 5.0) / 1024.0 нужно значение 5 заменить на 4,95. И также необходимо проверить точное сопротивление резисторов R1 и R2 и в строчки float r1=100000.0 и float r2=10000.0 вписать свои значения. После такой поверки мы получим точный вольтметр на Ардуино. Данный прибор способен измерять напряжение до сотых вольт.
И напоследок хотел бы предостеречь вас. Использовать данный вольтметр для измерения 55 вольт не рекомендуется. Это максимальный предел. При незначительном скачке измеряемого напряжения микроконтроллер выйдет из строя. Необходимо дать некий запас для непредвиденных ситуаций. И ограничить диапазон измеряемого напряжения до 45 вольт.
Полный текст скетча
#include < LiquidCrystal.h> #include < NewPing.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12); #define TRIGGER_PIN 2 #define ECHO_PIN 3 #define MAX_DISTANCE 400 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { Serial.begin(115200); lcd.begin(16, 2); } void loop() { delay(100); unsigned int uS = sonar.ping(); Serial.print("Ping: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); lcd.setCursor(0, 0); lcd.print("Distance:"); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(9, 1); lcd.print(uS / US_ROUNDTRIP_CM); lcd.setCursor(12, 1); lcd.print("cm"); }
Компиляция скетча прошла, загрузим скетч в Arduino и теперь если я буду приближаться, или удаляться от датчика, то соответственно будут меняться показатели на дисплее, расстояние в сантиметрах.
Иногда значение падает до нуля, ультразвук отражается от предметов перед собой, если я поднесу руку к нему, расстояние определяется достаточно точно.
Схему с ультразвуковым датчиком можно использовать в простейшей сигнализации, управлять включением света, или сигнала тревоги при приближении на определенное расстояние и многое другое.
Предыдущие статьи
- Arduino в роли вольтметра. Вывод напряжения на LCD дисплей – 10/04/2019 15:32
- Подключаем терморезистор к arduino, получим температуру в градусах по Цельсию и по Фаренгейту – 23/02/2019 20:51
- Как подключить дисплей LCD1602 к Arduino – 23/02/2019 19:35
- Как подключить сервомотор к Arduino – 23/02/2019 19:12
- Подключение RGB светодиода к Arduino – 12/01/2019 15:25
- Фоторезистор и светодиоды на Arduino – 12/01/2019 11:38
- Играем ноты на пищалке с Arduino – 12/01/2019 10:34
- Вынос мозга!!! АЦКИЙ BUZZER – омерзительная пищалка на Arduino Uno – 12/01/2019 09:55
- Новогодняя мини гирлянда в Arduino UNO. Как сделать мини гирлянду в Arduino UNO на светодиодах. – 12/01/2019 08:40
- Скетч – выключатель, светодиод и кнопка в Arduino UNO – 12/01/2019 08:15
- Включение светодиода через кнопку в Arduino UNO – 16/12/2018 04:55
- Управление светодиодом в Arduino UNO – 14/12/2018 18:24
- Установка среды разработки для Arduino UNO и пример программы – 14/12/2018 17:49
Исходный код программы
Полный код программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.
В программе мы должны сообщить плате Arduino, к каким ее контактам подключен ЖК дисплей. Контакт RS ЖК дисплея подключен к цифровому контакту 2 платы Arduino, а контакт Enable – к цифровому контакту 3 платы Arduino. Контакты данных ЖК дисплея (D4-D7) подключены к цифровым контактам 4,5,6,7 платы Arduino.
Arduino
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
1 | LiquidCrystallcd(2,3,4,5,6,7);//rs,e,d4,d5,d6,d7 |
Затем в программе мы должны инициализировать необходимые нам переменные.
Arduino
int Vin=5; //напряжение на контакте 5V платы arduino
float Vout=0; //напряжение на контакте A0 платы arduino
float R1=3300; //значение сопротивления известного резистора
float R2=0; // значение сопротивления неизвестного резистора
1 | intVin=5;//напряжение на контакте 5V платы arduino floatVout=;//напряжение на контакте A0 платы arduino floatR1=3300;//значение сопротивления известного резистора floatR2=;// значение сопротивления неизвестного резистора |
Далее в программе мы должны инициализировать наш ЖК дисплей.
Arduino
lcd.begin(16,2);
1 | lcd.begin(16,2); |
Затем мы должны считать значение на выходе АЦП контакта A0.
Далее значение с выхода АЦП (оно в диапазоне от 0 до 1023) конвертируется в значение напряжения.
Arduino
buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;
1 | buffer=a2d_data*Vin; Vout=(buffer)1024.0; |
Далее в коде программе исходя из найденного значения напряжения мы рассчитываем значение сопротивления R2.
Arduino
buffer=Vout/(Vin-Vout);
R2=R1*buffer;
1 | buffer=Vout(Vin-Vout); R2=R1*buffer; |
Далее найденное значение сопротивления резистора R2 выводится на экран ЖК дисплея.
Arduino
lcd.setCursor(4,0);
lcd.print(«ohm meter»);
lcd.setCursor(0,1);
lcd.print(«R (ohm) = «);
lcd.print(R2);
1 | lcd.setCursor(4,); lcd.print(«ohm meter»); lcd.setCursor(,1); lcd.print(«R (ohm) = «); lcd.print(R2); |
Если вас заинтересовал данный проект, то вы можете следующие похожие проекты на нашем сайте:
— цифровой вольтметр на Arduino;
— цифровой амперметр на Arduino;
— частотомер на Arduino;
— измеритель емкости на Arduino.
Далее приведен полный код программы.
Arduino
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
int Vin=5; //напряжение на контакте 5V платы arduino
float Vout=0; //напряжение на контакте A0 платы arduino
float R1=3300; //значение сопротивления известного резистора
float R2=0; // значение сопротивления неизвестного резистора
int a2d_data=0;
float buffer=0;
void setup()
{
lcd.begin(16,2);
}
void loop()
{
a2d_data=analogRead(A0);
if(a2d_data)
{
buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;
buffer=Vout/(Vin-Vout);
R2=R1*buffer;
lcd.setCursor(4,0);
lcd.print(«ohm meter»);
lcd.setCursor(0,1);
lcd.print(«R (ohm) = «);
lcd.print(R2);
delay(1000);
}
}
1 | #include<LiquidCrystal.h> LiquidCrystallcd(2,3,4,5,6,7);//rs,e,d4,d5,d6,d7 intVin=5;//напряжение на контакте 5V платы arduino floatVout=;//напряжение на контакте A0 платы arduino floatR1=3300;//значение сопротивления известного резистора floatR2=;// значение сопротивления неизвестного резистора inta2d_data=; floatbuffer=; voidsetup() { lcd.begin(16,2); } voidloop() { a2d_data=analogRead(A0); if(a2d_data) { buffer=a2d_data*Vin; Vout=(buffer)1024.0; buffer=Vout(Vin-Vout); R2=R1*buffer; lcd.setCursor(4,); lcd.print(«ohm meter»); lcd.setCursor(,1); lcd.print(«R (ohm) = «); lcd.print(R2); delay(1000); } } |
Как собрать датчик наклона?
Рис. 3: электрическая схема датчика наклонаПодключение акселерометра к микроконтроллеру осуществляется по такому принципу:
- Вывод ST подключается к пину платы Arduino A0;
- Вывод перемещений по оси Z подключается к пину платы Arduino A1;
- Вывод перемещений по оси Y подключается к пину платы Arduino A2;
- Вывод перемещений по оси X подключается к пину платы Arduino A3;
- Вывод GND подключается к пину платы Arduino A4;
- Вывод VCC подключается к пину платы Arduino A5.
Затем от микроконтроллера Ардуино производится подключение к дисплею, в данной ситуации состоящего из группы светодиодов. Для подключения от платы берутся выходы с 8 по 12 и пин питания на 5В, которые распределяются по логике схемы следующим образом:
- Пин 5В является общей точкой подключения;
- Восьмой подключается к светодиоду, сигнализирующему о наклоне в правую сторону;
- Девятый подключается к светодиоду, сигнализирующему о стабильном положении датчика по центру (его, для отличия, мы делаем красного цвета, но это не принципиально);
- Десятый подключается к светодиоду, сигнализирующему о перемещении датчика назад;
- Одиннадцатый подключается к светодиоду, сигнализирующему о наклоне в левую сторону;
- Двенадцатый подключается к светодиоду, сигнализирующему о наклоне датчика вперед.
При изменении положения акселерометра в пространстве произойдет движение инертной массы. В результате такого движения инертная масса приведет к замыканию контактов и подаст соответствующий сигнал с одного из выводов. Далее этот сигнал обработается микроконтроллером Arduino и преобразуется в подачу напряжения на определенный светодиод или группу светодиодов. Вот по такому принципу и осуществляется работа датчика наклона на базе Arduino.
Помимо приведенного способа сборки датчика на макетной плате, вы можете с тем же успехом реализовать его на печатной плате. Пример такой платы приведен на рисунке ниже.
Рисунок 4: схема для печатной платы
Проверка правильности подключения осуществляется в контрольных точках, приведены на рисунке 3. Напряжение в них должно соответствовать данным из таблицы.
Таблица: уровни напряжения в контрольных точках
Точка на рисунке | Напряжение в точке, В |
Т0 | |
Т1 | 5 |
Т2 | Ниже, чем в Т3 |
Т3 | Выше, чем в Т2 |
Предисловие
Так получилось, что в университете я изучаю C/C++. Для души пробую делать небольшие проекты на Python. Я много слышал про платформу Arduino, смотрел видео на YouTube, частенько посещал Arduino Project Hub и вот мне стало интересно самому поэкспериментировать, углубясь в разработку под микроконтроллеры. Купив стартовый набор с самой платой и горстью электронных компонентов и попробовав собрать проекты из обучающей брошюры, понял, что надо двигаться дальше. Продумав саму идею следующей самоделки, отправился на просторы Google и обнаружил, что не могу найти всего, что мне нужно на одном ресурсе. Безусловно, мне несложно было посетить несколько сайтитов и блогов с информацией, но я бы сильно сэкономил время, если бы нашел все в одном месте. Так и появилась эта статья-туториал.
Примеры использования датчика расстояния
Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino IDE. Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.
Подключение датчика к ардуино
При написании скетча использовалась следующий вариант распиновки подключения датчика:
- VCC: +5V
- Trig – 12 пин
- Echo – 11 пин
- Земля (GND) – Земля (GND)
Пример скетча
Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.
В данном скетче мы выполняем такую последовательность действий:
- Коротким импульсом (2-5 микросекунды) переводим датчик расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц.
- Ждем, пока датчик проанализирует отраженные сигналы и по задержке определит расстояние.
- Получаем значение расстояния. Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса).
- Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в сумме даст 58.2).
Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).
Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.
Скетч с использованием библиотеки NewPing
Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().
Пример подключения ультразвукового дальномера HC SR04 с одним пином
Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.