Arduino и датчик расстояния hc-sr04

1Сборка ультразвукового дальномера

Для начала, необходимо подобрать подходящего размера корпус. Размер зависит от того, какую плату Arduino вы собираетесь использовать (UNO, Mini, Nano, или другую), а также от того, какого размера у вас ЖК-дисплей. Можно вместо ЖК дисплея использовать миниатюрный светодиодный индикатор на 3 символа. Этого будет вполне достаточно для отображения дистанции в сантиметрах, т.к. используемый ультразвуковой датчик имеет диапазон измерений от 3 до 400 см.

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

Я буду использовать в проекте Arduino Nano, и размещу его на макетной плате. На нижней части Arduino расположен кварцевый генератор. Он довольно высокий, поэтому я для него вырежу отверстие, иначе вся плата будет выступать и занимать гораздо больше места. Тут же на макетной плате будет размещён переменный резистор на 10 кОм.

3Скетч Arduino для ультразвукового дальномера

Напишем скетч для нашего дальномера:

const int trigPin = 6; // вывод триггера датчика HC-SR04
const int echoPin = 5; // вывод приёмника датчика HC-SR04

#include <LiquidCrystal.h> // подключаем стандартную библиотеку
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //инициализация ЖКИ 

void setup() {
  pinMode(trigPin, OUTPUT); // триггер - выходной пин
  pinMode(echoPin, INPUT); // эхо - входной
  digitalWrite(trigPin, LOW); 
  lcd.begin(16, 2); //задаём кол-во строк и символов в строке
  lcd.setCursor(10, 0); // выравниваем надпись по правому краю
  lcd.print("Dist:");
  lcd.setCursor(14, 1); 
  lcd.print("cm");
}

void loop() {
  long distance = getDistance(); // получаем дистанцию с датчика   
  lcd.setCursor(10, 1);
  lcd.print("    "); // очищаем ЖКИ от предыдущего значения
  lcd.setCursor(10, 1);
  lcd.print((String)distance); // выводим новую дистанцию
  delay(100);
}

// Определение дистанции до объекта в см
long getDistance() {
  long distacne_cm = getEchoTiming() * 1.7 * 0.01;
  return distacne_cm;
}

// Определение времени задержки
long getEchoTiming() {
  digitalWrite(trigPin, HIGH); // генерируем импульс запуска
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // определение на пине echoPin длительности уровня HIGH, мкс:
  long duration = pulseIn(echoPin, HIGH);
  return duration;
}

Тут всё просто. Сначала инициализируем ЖКИ на выводах 12, 11, 10, 9, 8 и 7 с помощью библиотеки LiquidCrystal из состава Arduino IDE. Далее привяжем выводы «триггер» и «эхо» дальномера к выводам 6 и 5 платы Arduino. Каждые 100 мс будем запрашивать с детектора расстояние с помощью функции getDistance() и выводить на ЖК-дисплей.

У меня на LCD дисплее имеется дефект, и его левая половина почти не работает. Поэтому я вывожу надписи выровненными по правому краю.

После того как записали скетч в память Arduino, можем собирать прибор. Предлагаемая мной компоновка внутренностей показана на рисунке. Дисплей и датчик я закрепил с помощью термоклея. Он держит достаточно прочно, но при этом даёт возможность снять соединённые детали, если понадобится. Желательно всё разместить так, чтобы можно было подключиться к USB порту Arduino и поправить «прошивку» при необходимости. Например, изменить выводимый текст или поправить коэффициенты для расчёта дистанции. Может понадобиться менять контрастность ЖК дисплея, так что также желательно иметь в доступности регулятор потенциометра.

Вариант готового прибора показан на фотографии. Он достаточно компактен и удобен в использовании.

Вариант компоновки ультразвукового дальномера Внешний вид готового ультразвукового дальномера

Но следует иметь в виду несколько важных замечаний при его использовании:

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

KY-008: лазерный модуль для Ардуино

Основной компонент модуля — это красный лазерный светодиод с медным цилиндрическим радиатором охлаждения. Также на плате передатчика размещены пассивные компоненты, обеспечивающие стабильный режим работы светодиода. Лазера луч виден в задымленном помещении. и создает небольшое световое пятно на поверхности объекта, расположенного на расстоянии до 14 метров от источника.

Принцип работы лазерного светодиода на схеме

При подключении светодиода к Arduino, во время прохождения электронов через p-n переход происходит спонтанное излучение фотонов света. В лазерном светодиоде происходит рекомбинация фотонов (вынужденное излучения фотонов с одинаковыми параметрами). Принцип работы лазера основан на том, что излучаемые фотоны света вызывают повторное излучение, которое увеличивается лавинообразно.

Интенсивность излучения передатчика ky-008 зависит от силы тока. При малых токах модуль работает, как обычный светодиод, так как происходит только спонтанное излучение фотонов. Когда сила тока превышает пороговое значение – мощность излучения резко вырастает. Лазерный диод испускает свет перпендикулярно поверхности кристалла и фокусируется с помощью оптики (см. фото выше).

Подключение ультразвукового датчика к Arduino с помощью TinkerCad Circuits

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

TinkerCad Circuits является бесплатным онлайн-симулятором схем, который позволяет моделировать различные электрические и электронные схемы, прежде чем соединять их на реальной макетной плате. Вы даже можете протестировать проекты Arduino (в том числе код) с TinkerCad Circuits. Вы можете получить ценные знания в области электроники с помощью экспериментов до принятия решения о создании физической схемы.

На рисунке ниже показан проект функционального ультразвукового датчика Arduino, построенного с помощью TinkerCad Circuits.

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

Управление устройствами с помощью хлопков

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

В данном проекте для управления питанием устройств используется одноканальный модуль реле, который будет коммутировать переменное напряжение сети 220 В.

Схема соединений

Схема соединений в этом проекте очень проста.

Предупреждение:
Данная схема взаимодействует с ВЫСОКИМ переменным напряжением сети 220 В. Неправильное подключение или использование может привести к серьезным травмам или смерти. Поэтому данный проект предназначен для людей, имеющих опыт работы и знающих о мерах техники безопасности при работе с высоким переменным напряжением.

Сначала необходимо подать питание на датчик и модуль реле. Подключите их выводы VCC к выводу 5V на Arduino, и выводы GND к выводу GND на Arduino.

Затем подключите выходной вывод (OUT) звукового датчика к цифровому выводу 7 на Arduino, а управляющий вывод (IN) на модуле реле к цифровому выводу 8 Arduino.

Вам также необходимо поместить модуль реле в линию питания устройства, которым вы хотите управлять. Вам придется разрезать один провод в кабеле питания и подключить один конец отрезанного провода (идущий от вилки) к выводу COM (общий) модуля реле, а другой к выводу NO (нормально разомкнутый).

Схема соединений показана на следующем рисунке.

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

Код Arduino

Ниже приведен скетч для управления устройствами с помощью хлопков.

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

Объяснение

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

В начале мы объявляем вывод Arduino, к которому подключен вывод управления реле (IN). Мы также определили новую переменную для хранения состояния реле.

В функции мы настраиваем вывод как выходной.

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

API VL53L0X

Большая часть функциональности этой библиотеки основана на API VL53L0X, предоставленной компанией производителем. Отдельные комментарии в коде цитируются или перефразированы из исходного кода API, руководства пользователя API (UM2039) и Технического описание VL53L0X.

Для получения дополнительной информации о коде библиотеки и о том, как он был получен из API, см. комментарии в файле VL53L0X.cpp на GitHub.

Эта библиотека предназначена для того, чтобы обеспечить более быстрый и простой способ начать использование VL53L0X с Arduino-совместимым контроллером, в отличие от настройки и компиляции API-интерфейса ST для Arduino.

Библиотека имеет более упрощенный интерфейс, а также меньший объем памяти. Однако она не реализует некоторые из более продвинутых функциональных возможностей, доступных в API (например, калибровка датчика для правильной работы под стеклом), и имеет менее надежную проверку ошибок.

Для продвинутых приложений, особенно когда хранение и память менее важны, рассмотрите возможность использования API VL53L0X напрямую (скачать документацию API можно выше).

Шаг 1. Комплектующие и инструменты

На фото выше можно увидеть основные комплектующие Ардуино радара. Конструкция проста. В из инструментов всё, что вам нужно, — это два сверла, острый нож, пару резаков и паяльник.

Стоит сказать, что точки на радаре, представляющие первичные объекты, отображаются красным цветом, а точки, представляющие вторичные объекты, отображаются синим цветом. Подробнее — на последнем шаге.

Следующие детали были куплены в обычном магазине:

  • 1 — пластиковый контейнер для пищевых продуктов.
  • 1 — миниатюрный переключатель.
  • 1 — лента (используется для крепления проводов от датчика).
  • 1 — лента (используется для крепления датчика).
  • 1 — кусок из алюминия толщиной 20 мм размером 40 х 55 мм.
  • 6 — 9 мм нейлоновых прокладок.
  • 3 — кабельные стяжки.
  • 13 — болтики 3 мм x 6 мм.
  • 1 — 3-мм гайка.
  • 4 — болтики 4 мм x 10 мм.
  • 2 — 4 мм гайки.

Эти детали заказаны на АлиЭкспресс:

  • 1 — микроконтроллер Arduino Uno R3 в комплекте с USB-кабелем.
  • 1 — 28BJY-48 5-вольтовый шаговый двигатель в комплекте с контроллером ULN2003.
  • 1 — 5-миллиметровый латунный шестигранный вал для колесной пары для моделей автомобилей.
  • 1 — ультразвуковой датчик HY-SRF05 (или HC-SRF04).

Основы сборки дальномера

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

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

Это специальный датчик, позволяющий, при помощи ультразвуковых волн, измерить расстояние до объекта, на который его направили. Несложно догадаться, что проще всего его применить для создания простого дальномера. Рассмотрим Arduino hc sr04 и какие нюансы в работе с ним стоит учитывать, прежде чем начать собирать проект.

Если вы собираетесь собрать дальномер на Ардуино, то без HC SR04 просто не обойтись. Ведь именно этот модуль чаще всего применяют в подобных системах из-за его высокой востребованности, по причине простоты работы, доступности и низкой стоимости

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

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

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

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

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

Почему усреднённое?

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

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

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

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

Принцип работы

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

Разница ультразвукового сонара от прочих излучателей слышимых колебаний в направленности действия. Волна двигается от него в определенную сторону, охватывая угол до 15–20° перед прибором. Оттуда же ожидается эхо-возврат, отраженный от препятствия. С целью уменьшения влияния сторонних помех на сигнал используется звук с частотой в 40 КГц, не слышимый человеческим ухом.

Датчик VL6180X

VL6180X – это оптический датчик от компании STMicroelectronics. Его также называют датчиком света (освещенности) и приближения. Его внешний вид показан на следующем рисунке.

Датчик VL6180 содержит ИК-излучатель, датчик внешней освещенности и датчик дальности. К микроконтроллерам и другим электронным устройствам он подключается по интерфейсу I2C. Также датчик имеет встроенный стабилизатор напряжения 2,8 В, поэтому он не повредится если подключить к нему напряжение больше 2,8 В (ну в пределах разумного, конечно же). Еще в датчике присутствуют два программируемых вывода GPIO. Распиновка датчика показана на следующем рисунке.

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

Датчик VL6180X способен измерять расстояния до 25 см. Поэтому, к примеру, в домашнем использовании он отлично подойдет для измерения фокусного расстояния камеры или фотоаппарата. Если же вам необходим лидар, работающий на большие расстояния, то в данном случае вам вместо датчика VL6180X необходимо использовать датчик Vl53l0x, который также отличается большей точностью измерений и не имеет проблем с линейностью, приводящих к “двойному изображению”.

Суть проекта

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

Что понадобится?

  • Любая плата Arduino (у меня Uno);

  • Ультразвуковой дальномер HC-SR04;

  • OLED-дисплей на 0,96 дюймов;

  • Соединительные провода;

  • Макетная плата.

Печать корпуса и сборка

Возьмите скользящие контакты и поместите его в верхнюю часть корпуса. Убедитесь, что вращающаяся часть кольца находится на верхней стороне корпуса, чтобы она вращалась одновременно с диском. Теперь установите шаговый мотор, который фиксируется к корпусу двумя 3M винтами и гайкам. Крышка готова:

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

Теперь пропускаем провода от скользящих контактов через отверстие вращающегося диска:

После чего берём датчик и припаиваем к нему 4 провода (+5V, GND, SCL и SDA) от скользящих контактов:

С помощью двух болтов М3 закрепляем модуль дальномера на корпусе вращающегося диска:

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

Когда датчик будет закреплён, вращающийся диск надевается на подшипник:

На вращающуюся крышку приклеивается неодимовый магнит, а в верхнюю крышку вставляется датчик холла:

Магнит служит для того, чтобы на него на него срабатывал датчик Холла и в этот момент в коде происходит установка переменной «угол» в некоторое значение. Если магнит по размерам позволяет наклеить его по центру под датчиком, это будет самый лучший вариант, т.к. при срабатывании переменной «угол» нужно будет присвоить значение 0. Если нет, магнит можно наклеить возле датчика. Тогда переменной «угол» нужно будет присвоить не 0, а соответствующее значение (на какой угол относительно магнита повёрнут датчик). Если магнит находится с противоположной стороны, нужно присвоить 180. Если угол составляет 20 градусам (на фото выше угол немного больше):

Тогда переменной «угол» нужно присвоить 20 и т.д.

На макетную плату по схеме, приведенной ранее, запаиваем конденсатор, драйвер мотора, 10K резистор, датчик Холла, провода от Arduino и стабилизатора питания:

Всё припаяно, теперь закрепляем (двусторонней липкой лентой, клеем, термоклеем и т.д.) Arduino Nano внутри корпуса и наш лидар почти готов:

Осталось вплавить в нижнюю крышку корпуса три вставные гайки, затем прикрутить крышку корпуса, надеть на шкив пасик и можно переходить к программированию и экспериментам.

Как работает лазерный дальномер

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

Говоря по сути, принцип работы лазерного дальномера базируется на скорости света и времени прохождения луча до поверхности и обратно. Выпущенный из излучателя лазер, отражается от первого попавшегося на пути твердого объекта (даже с большим углом преломления), и частично возвращается к устройству, где его распознает принимающий модуль и фиксирует время, потребовавшееся ему для преодоления этого расстояния. Поскольку свет перемещается со скоростью 299 792 458 метров в секунду или 29.2 сантиметров в микросекунду (мкс), то, зная затраченное на путь время, можно легко вычислить длину проделанного им пути. Таким образом, основная формула, используемая дальномерами, имеет следующий вид.

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

Помимо импульсного, существует ещё фазовый способ измерения, все также основанный на лазере, но кардинально отличающийся по способу получения информации. В основе данного принципа лежит частота испускаемого лазера, которая не превышает 450 МГц (в среднем от 10 до 150). Вместо времени, здесь определяется разница фаз (исходящей и принимаемой), на основе которой рассчитывается расстояние до объекта. Фазовому дальномеру требуется больше времени для получения значения, но точность измерений превосходит импульсный.

Установка датчика H206

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

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

Технические характеристики разработанного лазерного сканирующего дальномера

Для реализации SLAMнеобходима аппаратная база. В совместной работе кафедры «Мехатроника и Робототехника» с предприятием ОАО «Восход КРЛЗ» был разработан сканирующий лазерный дальномер. Трехмерная модель сканера приведена на рисунке (Рисунок 3).

Тип лазера: Импульсный;

Мощность лазерного излучения: 75 Вт в импульсе;

Угол сканирования: 90 0 ;

Высота плоскости сканирования относительно основания: 140 мм;

Количество точек в одном скане: 5000 точек;

Максимальное измеряемое расстояние: 31 м;

Погрешность измерений: до ±2% от измеряемого расстояния;

Напряжение питания: 12 В;

Ток потребления: 0.9 А;

Рисунок 3 – Трехмерная модель сканера

Неисправности лазерного дальномера

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector