Как измерить расстояние между двумя точками с помощью Arduino?

В электронике чаще всего используются ультразвуковые датчики для измерения расстояния от одной конкретной точки до другой. Очень легко написать код на плате Arduino и интегрировать ультразвуковой датчик выполнить эту задачу. Но в этой статье мы собираемся применить другой подход. Мы собираемся использовать два отдельных ультразвуковых датчика, которые будут интегрированы с двумя отдельными Arduino. Эти два модуля будут размещены в двух разных точках, между которыми необходимо измерить расстояние. Один датчик станет приемником, а другой - передатчиком. Таким образом, мы сможем измерить расстояние между ними, просто определив положение передатчика с помощью множества ультразвуковых приемников. Техника, которую мы здесь используем, называется Триангуляция.



Измерение расстояния с помощью Arduino

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



Как использовать Arduino и ультразвуковой датчик для измерения расстояния?

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



Шаг 1. Сбор компонентов (оборудования)

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



  • Перемычки
  • Адаптер 5 В переменного тока в постоянный (x2)

Шаг 2: Сбор компонентов (программного обеспечения)

  • Proteus 8 Professional (можно загрузить с Вот )

После загрузки Proteus 8 Professional спроектируйте схему на нем. Я включил сюда моделирование программного обеспечения, чтобы новичкам было удобно спроектировать схему и выполнить соответствующие соединения на оборудовании.

Шаг 3: Работа HCR-05

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

Этот датчик имеет два контакта, спусковой штифт, и эко булавка которые оба используются для измерения расстояния между двумя конкретными точками. Процесс инициируется отправкой ультразвуковой волны от датчика. Эта задача выполняется путем срабатывания триггерного контакта на 10 мкс. Как только эта задача будет выполнена, передатчик отправит 8 звуковых импульсов ультразвуковых волн. эта волна будет распространяться по воздуху, и как только она ударит по объекту на своем пути, она нанесет ответный удар и получит приемник, встроенный в датчик.



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

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

Невозможно сделать ультразвуковой датчик как только приемник потому что подъем вывода ECO не может контролироваться микроконтроллером, потому что он связан с выводом триггера датчика. Но есть одна вещь, которую мы можем сделать, это накрыть передатчик этого ультразвукового датчика изолентой, чтобы не выходила УФ-волна. Тогда передатчик не повлияет на вывод ECO этого передатчика.

Шаг 4: Работа схемы

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

Чтобы решить эту проблему, нам нужно отправить ВЫСОКО сигнал на ECO приемника, как только ультразвуковая волна передается на датчик передатчика. Или простыми словами, мы можем сказать, что ECO приемника и триггер передатчика должны быть отправлены в HIGH одновременно. Итак, чтобы достичь этого, мы каким-то образом заставим триггер приемника переходить в высокий уровень, как только триггер передатчика станет высоким. Этот триггер приемника будет оставаться в высоком уровне, пока вывод ECO НИЗКИЙ . Когда на вывод ECO приемника будет получен ультразвуковой сигнал, он перейдет в низкий уровень. Это будет означать, что триггер датчика передатчика только что получил ВЫСОКИЙ сигнал. Теперь, как только ECO станет низким, мы дождемся известной задержки и переведем триггер приемника в ВЫСОКИЙ уровень. Таким образом, триггеры обоих датчиков будут синхронизированы, и расстояние будет рассчитано, зная время задержки прохождения волны.

Шаг 5: Сборка компонентов

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

  1. Возьмите два ультразвуковых датчика. Закройте приемник первого датчика и передатчик второго датчика. Используйте для этой цели белую клейкую ленту и убедитесь, что эти два датчика полностью закрыты, чтобы сигнал не покидал передатчик второго датчика и не попадал в приемник первого датчика.
  2. Подключите два Arduino к двум отдельным макетам и подключите к ним соответствующие датчики. Подключите триггер к контакту 9 Arduino, а ecoPin - к контакту 10 Arduino. Включите ультразвуковой датчик от 5 В Arduino и подключите все заземления.
  3. Загрузите код приемника в Arduino приемника и код передатчика в Arduino передатчика.
  4. Теперь откройте монитор последовательного порта на принимающей стороне и обратите внимание на измеряемое расстояние.

Принципиальная схема этого проекта выглядит так:

Принципиальная электрическая схема

Шаг 6: начало работы с Arduino

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

  1. Загрузите последнюю версию Arduino IDE из Ардуино.
  2. Подключите плату Arduino Nano к ноутбуку и откройте панель управления. в панели управления нажмите на Оборудование и звук . Теперь нажмите на Устройства и принтеры. Здесь найдите порт, к которому подключена ваша плата микроконтроллера. В моем случае это COM14 но на разных компьютерах по-разному.

    Поиск порта

  3. Щелкните меню инструментов. и установите доску на Ардуино Нано из раскрывающегося меню.

    Доска настроек

  4. В том же меню инструментов установите порт на номер порта, который вы наблюдали ранее в Устройства и принтеры .

    Настройка порта

  5. В том же меню инструментов установите для процессора значение ATmega328P (Старый Загрузчик ).

    Процессор

  6. Загрузите приведенный ниже код и вставьте его в свою Arduino IDE. Нажми на загрузить кнопку, чтобы записать код на плату микроконтроллера.

    Загрузить

Чтобы скачать код, кликните сюда.

Шаг 7: понимание кода

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

Код для стороны передатчика

1. Вначале инициализируются контакты платы Arduino, которые будут подключены к ультразвуковому датчику. Затем объявляются переменные, которые будут использоваться для хранения значений для расчета времени и расстояния во время выполнения кода.

// определяет номера выводов const int trigPin = 9; // Подключаем триггер ультразвукового датчика к выводу 9 Arduino const int echoPin = 10; // Подключаем экологический вывод ультразвукового датчика к выводу 10 Arduino // определяет переменные long duration; // переменная для хранения времени прохождения ультразвуковой волны t int distance; // переменная для хранения рассчитанного расстояния

2. установка void () Это функция, которая запускается только один раз при запуске, когда плата включена или нажата кнопка включения. Здесь оба вывода Arduino заявлены как ВВОД и ВЫВОД . В этой функции устанавливается скорость передачи данных. Скорость передачи - это скорость в битах в секунду, с которой микроконтроллер обменивается данными с ультразвуковым датчиком.

пустая настройка () {pinMode (trigPin, OUTPUT); // Устанавливает trigPin как Output pinMode (echoPin, INPUT); // Устанавливает echoPin как входной Serial.begin (9600); // Запускаем последовательную связь}

3. пустой цикл () это функция, которая запускается снова и снова в цикле. Здесь мы закодировали микроконтроллер так, чтобы он отправлял ВЫСОКИЙ сигнал на триггерный вывод ультразвукового датчика, выдерживал 20 микросекунд и отправлял ему НИЗКИЙ сигнал.

void loop () {// Устанавливает триггер в ВЫСОКОЕ состояние на 10 микросекунд digitalWrite (trigPin, HIGH); // отправляем ВЫСОКИЙ сигнал при срабатывании первого датчика delayMicroseconds (10); // ждем 10 микросекунд digitalWrite (trigPin, LOW); // посылаем НИЗКИЙ сигнал на триггер первого датчика delay (2); // ждем 0,2 секунды}

Код для приемной стороны

1. В начале инициализируются контакты платы Arduino, которые будут подключены к ультразвуковому датчику. Затем объявляются переменные, которые будут использоваться для хранения значений для расчета времени и расстояния во время выполнения кода.

// определяет номера выводов const int trigPin = 9; // Подключаем триггер ультразвукового датчика к выводу 9 Arduino const int echoPin = 10; // Подключите экологический вывод ультразвукового датчика к выводу 10 Arduino // определяет переменные long duration; // переменная для хранения времени прохождения ультразвуковой волны t int distance; // переменная для хранения рассчитанного расстояния

2. установка void () Это функция, которая запускается только один раз при запуске, когда плата включена или нажата кнопка включения. Здесь оба вывода Arduino заявлены как ВХОД и ВЫХОД. В этой функции устанавливается скорость передачи. Скорость передачи - это скорость в битах в секунду, с которой микроконтроллер обменивается данными с ультразвуковым датчиком.

пустая настройка () {pinMode (trigPin, OUTPUT); // Устанавливает trigPin как Output pinMode (echoPin, INPUT); // Устанавливает echoPin как входной Serial.begin (9600); // Запускаем последовательную связь}

3. void Trigger_US () - это функция, которая будет вызываться для ложного срабатывания триггерного контакта второго ультразвукового датчика. Мы синхронизируем время срабатывания триггерного контакта обоих датчиков.

void Trigger_US () {// Фальшивый триггер датчика США digitalWrite (trigPin, HIGH); // Посылаем ВЫСОКИЙ сигнал на триггер второго датчика delayMicroseconds (10); // ждем 10 микросекунд digitalWrite (trigPin, LOW); // посылаем НИЗКИЙ сигнал на второй отправитель контакта триггера}

Четыре. void Calc () - это функция, которая используется для расчета времени, необходимого ультразвуковому сигналу для прохождения от первого датчика ко второму датчику.

void Calc () // функция для расчета времени прохождения ультразвуковой волны {duration = 0; // длительность изначально установлена ​​равной нулю Trigger_US (); // вызываем функцию Trigger_US while (digitalRead (echoPin) == HIGH); // пока состояние пина eo в высокой задержке (2); // выставляем задержку 0,2 секунды Trigger_US (); // вызов функции Trigger_US duration = pulseIn (echoPin, HIGH); // вычисляем затраченное время}

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

void loop () {Pdistance = расстояние; Calc (); // вызов функции Calc () distance = duration * 0.034; // вычисление расстояния, пройденного ультразвуковой волной if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // печать на последовательном мониторе Serial.println (distance / 2); // печать на последовательном мониторе} //Serial.print('Distance: '); //Serial.println(distance/2); задержка (500); // ждем 0,5 секунды}