- Колесный измеритель расстояния (курвиметр) на Ардуино своими руками
- Курвиметр своими руками
- Колесный измеритель расстояния (курвиметр) на ардуино своими руками
- Зачем нужен сканирующий дальномер?
- Самодельный дальномер
- Устройство сканирующего триангуляционного лазерного дальномера
- Электроника
- Механическая часть
- Ультразвуковой датчик расстояния Ардуино HC-SR04
- Датчик расстояния в проектах Arduino
- Описание датчика HC SR04
- Примеры использования датчика расстояния
- Подключение датчика к ардуино
- Пример скетча
- Скетч с использованием библиотеки NewPing
- Пример подключения ультразвукового дальномера HC SR04 с одним пином
- Краткие выводы
- Дальномер с помощью датчика HC SR04 и Arduino
- 1. Основы сборки дальномера на Ардуино с помощью датчика HC SR04
- 2. Что будет в уроке?
- Колесный измеритель расстояния (курвиметр) на Ардуино своими руками
- 1. Основы сборки дальномера на Ардуино с помощью датчика HC SR04
- 2. Что будет в уроке?
Колесный измеритель расстояния (курвиметр) на Ардуино своими руками
Но для начала разберемся, что это такое и для чего он нужен. На самом деле о его предназначении нам говорит само его название. Оно образовано от латинского слова curvus, что значит изогнутый или волнистый. То есть курвиметр – это колесный или роликовый измеритель расстояния. Выделяют два типа курвиметров : маленькие (картографические) , которые обычно применяют для измерений на карте, и большие (дорожные), которые как правило применяют для измерения длинны изогнутых участков уже автомобильных дорог. Их можно применять везде, где обычной рулеткой измерять неудобно или невозможно, поэтому проект обещает быть интересным.
Первое, о чем стоит позаботиться при постройке курвиметра – это колесо или ролик. Он должен быть достаточно маленьким, чтобы точность прибора была высокой, в то же время он должен быть достаточно большим, чтобы на величину показаний не сильно влияли неровности измеряемой поверхности. В моем случае колесо имеет диаметр 14 сантиметров.
Затем я собрал обработанные детали при помощи небольших саморезов.
Теперь немного отвлечемся от самого курвиметра и подумаем, как эта штука вообще сможет определять расстояние? Все довольно просто. Нам всего лишь нужно посчитать количество оборотов колеса и умножить на длину его внешней окружности, а еще проще добавлять значение длины каждый раз , когда колесо совершает очередной оборот.
Чтобы отсчитать каждый оборот в простейшем случае можно использовать «скользящий контакт». Однако я не рекомендую использовать такой механизм отсчета. Гораздо лучше будет применить геркон или датчик Холла.
Пора примерить колесо. Я буду крепить его с помощью длинного болта. Находим место на раме, где обод колеса находится максимально к ней близко и отмечаем штрихами. Примерно в этой зоне мы и должны установить геркон.
На колесе нужно установить небольшой магнит. Убедитесь, что его силы будет достаточно для смыкания контактов геркона.
Теперь займемся «мозгами» системы. В моем случае это плата Arduino UNO. Она будет считывать состояние геркона и передавать данные по Bluetooth соединению, с помощью модуля HC-05, на телефон. Кстати, геркон подключается к плате как обычная кнопка. Думаю с подключением Bluetooth модуля проблем тоже возникнуть не должно.
Что касается самого кода, то он очень простой. И я постарался его закомментировать, чтобы все было максимально понятно.
Вы можете посмотреть видео по сборке этого аппарата, возможно вы найдете там, что-то интересное.
Источник
Курвиметр своими руками
Автор Instructables под ником MechEngineerMike рассказывает о курвиметре, собранном большей частью из 3D-печатных деталей. Далее показаны несколько таких курвиметров, а также применённый в них готовый компонент — бейдж на рулетке (сам бейдж необходимо снять, оставив только рулетку).
А это — пример применения самоделки:
В зависимости от того, какой из двух роликов вы напечатаете, одно деление на нём соответствует 5 мм либо 0,25 дюйма, один оборот — 100 мм либо 4 дюйма, встроенный одноразрядный механический счётчик считает до 5 оборотов, что соответствует 500 мм либо 20 дюймов. STL-файл для миллиметрового варианта ролика лежит здесь, для дюймового — здесь. Также есть файлы для печати корпуса и счётчика.
Параметры печати: платсмасса — любая (кроме гибких), диаметр сопла макс. 0,4 мм, толщина слоя макс. 0,2 мм, минимум два периметра по всем сторонам, низу и верху, заполнение минимум 10%, продолжительность печати всех деталей — около 2 часов, расположение их при печати — следующее:
Ещё понадобятся два таких самореза (выбор поставщика не критичен, главное — параметры, скриншот мастер приводит для примера):
Применение рулетки от бейджа необязательно, но сделает пользование курвиметром более удобным. После печати необходимо рассверлить отверстия в ролике и счётчике 3,5-миллиметровым светлом, после чего удалить заусенцы в этих отверстиях, а также обработать напильником поверхности корпуса, соприкасающиеся с вращающимися деталями. Затем собрать курвиметр двумя саморезами и при желании присоединить рулетку. Нельзя перетягивать саморезы, иначе ролик и счётчик оборотов не смогут вращаться.
На следующей иллюстрации наглядно показано, почему при наличии в начале или конце измеряемой кривой какого-либо выступа или иного препятствия курвиметр с роликом меньшего диаметра измерит длину точнее:
Источник
Колесный измеритель расстояния (курвиметр) на ардуино своими руками
Зачем нужен сканирующий дальномер?
На сегодняшний день в робототехнике не так уж и много методов навигации внутри помещений. Определение положения робота в пространстве с использованием лазерного сканера — один из них. Важное достоинство этого метода — он не требует установки в помещении каких-либо маяков.
В отличие от систем, использующих распознавание изображения с камер, обработка данных с дальномера не так ресурсоемка. Но есть и недостаток — сложность, и соответственно, цена дальномера.
Традиционно в робототехнике используются лазерные сканеры, использующие фазовый или времяпролетный принцип для измерения расстояния до объектов.
Реализация этих принципов требует довольно сложной схемотехники и дорогих деталей, хотя и характеристики при этом получаются приличные — используя эти принципы, можно добиться высокой скорости сканирования и большой дальности измерения расстояния. Но для домашних экспериментов в робототехнике такие сканеры мало подходят — цена на них начинаются от 1000$.
На помощь приходят дальномеры, использующие триангуляционный принцип измерения расстояния. Дальномер такого типа впервые появился в роботах-пылесосах Neato:
Довольно быстро любители расшифровали протокол этого дальномера, и начали использовать его в своих проектах. Сами дальномеры в качестве запчастей появились на ebay в небольших количествах по цене около 100$.
Через несколько лет китайская компания смогла выпустить сканирующий дальномер RPLIDAR, который поставлялся как полноценный прибор, а не запчасть. Только цена этих дальномеров оказалась достаточно высокой — 400$.
Самодельный дальномер
Как только я узнал о дальномерах Neato, мне захотелось собрать самому аналогичный. В конце концов, мне это удалось, и процесс сборки я описал на Робофоруме. Первая версия дальномера:
Позже я сделал еще одну версию дальномера, более пригодную для использования на реальном роботе, но и ее качество работы не полностью устроило меня. Настало время третьей версии дальномера, и именно она будет описана далее.
Устройство сканирующего триангуляционного лазерного дальномера
Принцип измерения расстояния до объекта основан на измерении угла между лазерным лучом, попадающим на объект, и объективом дальномера. Зная расстояние лазер-объектив (h) и измеренный угол, можно вычислить расстояние до объекта — чем меньше угол, тем больше расстояние. Принцип хорошо иллюстрирует картинка из статьи:
Таким образом, ключевые оптические компоненты такого дальномера — лазер, объектив и фотоприемная линейка. Так как дальномер сканирующий, то все эти детали, а так же управляющая электроника устанавливаются на вращающейся головке.
Тут может возникнуть вопрос — зачем нужно вращать оптику и электронику, ведь можно установить вращающееся зеркало? Проблема в том, что точность дальномера зависит от расстояния между объективом и лазером (базового расстояния), так что оно должно быть достаточно большим.
Соответственно, для кругового сканирования понадобится зеркало диаметром, большим базового расстояния. Дальномер с таким зеркалом получается достаточно громоздким. Сканирующая головка дальномера при помощи подшипника закрепляется на неподвижном основании. На нем же закрепляется двигатель, вращающий головку.
Также в состав дальномера должен входить энкодер, предназначенный для получения информации о положении головки.
Как видно, дальномеры Neato, RPLIDAR и мои самодельные сделаны именно по этой схеме.
Самое сложное в самодельном дальномере — изготовление механической части. Именно ее работа вызывала у меня больше всего нареканий в ранних версиях дальномера. Сложность заключается в изготовлении сканирующей головки, которая должна быть прочно закреплена на подшипнике, вращаться без биений и при этом не нее нужно каким-то образом передавать электрические сигналы.
Во второй версии дальномера первые две проблемы я решил, использовав части старого HDD — сам диск использовался как основание сканирующей головки, а двигатель, на котором он закреплен, уже содержал качественные подшипники. В то же время, при этом возникла третья проблема — электрические линии можно было провести только через небольшое отверстие в оси двигателя.
Мне удалось сделать самодельный щеточный узел на 3 линии, закрепленный в этом отверстии, но получившаяся конструкция получилась шумной и ненадежной. При этом возникла еще одна проблема — линии, чтобы пробросить сигнал энкодера, не было, и датчик энкодера в такой конструкции должен быть установлен на головке, а диск энкодера с метками — на неподвижном основании.
Диск энкодера получился не жестким, и это часто вызывало проблемы.
Фотография второй версии дальномера:
Еще один недостаток получившегося дальномера — низкая скорость сканирования и сильное падение точности на расстояниях больше 3м. Именно эти недостатки я решил устранить в третьей версии дальномера.
Электроника
В принципе, электронная часть триангуляционного дальномера достаточно проста и содержит всего два ключевых компонента -светочувствительную линейку и микроконтроллер. Если с выбором контроллера проблем нет, то с линейкой все значительно сложнее.
Светочувствительная линейка, используемая в подобном дальномере, должна одновременно иметь достаточно высокую световую чувствительность, позволять считывать сигнал с высокой скоростью и иметь маленькие габариты. Различные CCD линейки, применяемые в бытовых сканерах, обычно довольно длинные.
Линейки, используемые в сканерах штрихкодов — тоже не самые короткие и быстрые. В первой и второй версии дальномера я использовал линейки TSL1401 и ее аналог iC-LF1401. Эти линейки хорошо подходят по размеру, они дешевые, но содержат всего 128 пикселей.
Для точного измерения расстояния до 3 метров этого мало, и спасает только возможность субпискельного анализа изображения.
В третьей версии дальномера я решил использовать линейку ELIS-1024:
Однако купить ее оказалось непросто. У основных поставщиков электроники этих линеек просто нет. Первая линейка, которую я смог купить на Taobao, оказалась нерабочей. Второю я купил на Aliexpress (за 18$), она оказалась рабочей.
Обе линейки выглядели паянными — обе имели облуженные контакты и, судя по маркировке, были изготовлены в 2007 году. Причем даже на фотографиях у большинства китайских продавцов линейки именно такие. Похоже, что действительно новую линейку ELIS-1024 можно купить только напрямую у производителя.
Светочувствительная линейка ELIS-1024, как следует из названия, содержит 1024 пикселя. Она имеет аналоговый выход, и достаточно просто управляется.
Еще более хорошими характеристиками обладает линейка DLIS-2K. При сходных размерах, она содержит 2048 пикселей и имеет цифровой выход. Насколько мне известно, именно она используется в дальномере Neato, и возможно, в RPLIDAR. Однако, найти ее в свободной продаже очень сложно, даже в китайских магазинах она появляется не часто и дорого стоит — более 50$.
Так как я решил использовать линейку с аналоговым выходом сигнала, то микроконтроллер дальномера должен содержать достаточно быстрый АЦП. Поэтому я решил использовать серию контроллеров — STM32F303, которые, при относительно небольшой стоимости, имеют несколько быстрых АЦП, способных работать одновременно. В результате у меня получилась такая схема:
Сигнал с линейки (вывод 10) имеет достаточно высокий уровень постоянной составляющей, и ее приходится отфильтровывать при помощи разделительного конденсатора. Далее сигнал нужно усилить — для этого используется операционный усилитель AD8061. Далеко расположенные объекты дают достаточно слабый сигнал, так что пришлось установить коэффициент усиления равным 100.
Как оказалось в результате экспериментов, даже при отсутствии сигнала, на выходе выбранного ОУ по какой-то причине постоянно присутствует напряжение около 1.5В, что мешает обработке результатов и ухудшает точность измерения амплитуды сигнала. Для того, чтобы избавится от этого смещения, мне пришлось подать дополнительное напряжение на инвертирующий вход ОУ.
Плату разводил двухстороннюю, сделать такую плату в домашних условиях качественно довольно сложно, так что заказал изготовление плат в Китае (пришлось заказать сразу 10 штук):
В этом дальномере я использовал дешевый объектив с резьбой M12, имеющий фокусное расстояние 16мм. Объектив закреплен на печатной плате при помощи готового держателя объектива (такие используются в различных камерах).
Лазер в данном дальномере — инфракрасный (780 нм) лазерный модуль, мощностью 3.5 мВт.
Изначально я предполагал, что излучение лазера нужно будет модулировать, но позже оказалось, что с используемой линейкой в этом нет смысла, и поэтому сейчас лазер включен постоянно.
Для проверки работоспособности электроники была собрана вот такая конструкция, имитирующая сканирующую головку дальномера:
Уже в таком виде можно было проверить, какую точность измерения расстояния позволяет обеспечить дальномер. Для анализа сигнала, формируемого линейкой, были написаны тестовые программы для микроконтроллера и ПК.
Пример вида сигнала с линейки (объект на расстоянии 3 м).
Изначально схема была не совсем такая, как приведена выше. В ходе экспериментов мне пришлось частично переделать изначальную схему, так что, как видно из фотографий, некоторые детали пришлось установить навесным монтажом.
Механическая часть
После того, как электроника была отлажена, настало время изготовить механическую часть. В этот раз я не стал связываться с механикой из HDD, и решил изготовить механические детали из жидкого пластика, заливаемого в силиконовую форму.
Эта технология подробно описана в Интернете, в том числе и на Гиктаймс. Уже после того, как я изготовил детали, стало понятно, что изготовить детали на 3D принтере было бы проще, они могли выйти тверже, и возможно, можно было бы сделать одну деталь вместо двух.
Доступа к 3D принтеру у меня нет, так что пришлось бы заказывать изготовление детали в какой-либо компании.
Фото одной из деталей сканирующей головки дальномера:
Эта деталь является основой головки. Она состоит из втулки, на которую позже надевается подшипник, и диска. Диск предназначен для крепления второй детали башни, кроме того, на него снизу наклеивается диск энкодера.
Втулка и диск содержат сквозное отверстие, в которое вставляется покупной щеточный узел на 6 линий — его видно на фотографии. Именно те провода, что видны на фотографии, могут вращаться относительно корпуса этого узла.
Для повышения стабильности работы для передачи сигналов GND и UART TX используется 2 пары линий щеток. Оставшиеся 2 линии используются для передачи напряжения питания и сигнала энкодера.
Силиконовая форма для отливки этой детали:
Вторая деталь сканирующей головки была изготовлена тем же способом. Она предназначена для крепления печатной платы и лазера к диску. К сожалению, фотографий изготовления этой детали у меня не сохранилось, так что ее можно увидеть только в составе дальномера.
Для крепления сканирующей головки к основанию дальномера используется шариковый подшипник. Я использовал дешевый китайский подшипник 6806ZZ.
Честно говоря, качество подшипника мне не понравилось — ось его внутренней втулки могла отклонятся относительно оси внешней на небольшой угол, из-за чего головка дальномера тоже немного наклоняется.
Крепление подшипника к детали с диском и основанию будет показано ниже.
Основание я сделал из прозрачного оргстекла толщиной 5 мм. К основанию крепится подшипник, датчик энкодера, двигатель дальномера и маленькая печатная плата. Само основание устанавливается на любую подходящую поверхность при помощи стоек. Вот так выглядит основание дальномера снизу:
Печатная плата содержит регулируемый линейный стабилизатор напряжения для питания двигателя, и площадки для подключения проводов узла щеток. Сюда же подводится питание дальномера. Как и в других дальномерах, двигатель вращает сканирующую головку при помощи пассика. Для того, чтобы он не сваливался с втулки, на ней имеется специальное углубление.
Как видно из фотографии, подшипник закреплен в основании при помощи трех винтов. На сканирующей головке подшипник удерживается за счет выступа на втулке и прижимается к ней другими винтами, одновременно удерживающими щеточный узел.
Энкодер состоит из бумажного диска с напечатанными рисками и оптопары с фототранзистором, работающей на отражение. Оптопара закреплена при помощи стойки на основании так, что плоскость диска оказывается рядом с ней:
Сигнал от оптопары через щетки передается на вход компаратора микроконтроллера. В качестве источника опорного напряжения для компаратора выступает ЦАП микроконтроллера. Для того, чтобы дальномер мог определить положение нулевого угла, на диск энкодера нанесена длинная риска, отмечающая нулевое положение головки (она видна справа на фотографии выше).
- Вот так выглядит собранный дальномер: Вид сверху:
- Для балансировки сканирующей головки на нее спереди устанавливается крупная гайка — она практически полностью устраняет вибрацию при вращении головки.
Разъем сзади дальномера используется для прошивки микроконтроллера.
Собранный дальномер нужно отюстировать — установить лазер в такое положение, чтобы отраженный от объектов свет попадал на фотоприемную линейку. Обе пластмассовые детали содержат соосные отверстия, располагающиеся под пазом лазера.
В отверстия вворачиваются регулировочные винты, упирающиеся в корпус лазера. Поворачивая эти винты, можно изменять наклон лазера.
Наблюдая в программе на компьютере форму и амплитуду принятого сигнала и изменяя наклон лазера, нужно добиться максимальной амплитуды сигнала.
Также триангуляционные дальномеры требуют проведения калибровки, о чем я писал ранее:
Для того, чтобы при помощи датчика можно было измерять расстояние, нужно произвести его калибровку, т.е. определить закон, связывающий результат, возвращаемый датчиком, и реальное расстояние. Сам процесс калибровки представляет собой серию измерений, в результате которых формируется набор расстояний от датчика до некоторого объекта, и соответствующих им результатов.
В данном случае калибровка представляла собой серию измерений расстояний до различных объектов самодельным дальномером и лазерной рулеткой, после чего по полученным парам измерений выполняется регрессионный анализ и составляется математическое выражение.
Получившийся дальномер имеет существенный недостаток — из-за отсутствия модуляции излучения лазера он некорректно работает при любой сильной засветке.
Обычное комнатное освещение (даже при использовании мощной люстры) не влияет на работу дальномера, но вот расстояние до поверхностей, прямо освещенных Солнцем, дальномер измеряет неправильно.
Для решения этой проблемы в состав дальномера нужно включить интерференционный светофильтр, пропускающий световое излучение только определенной длины волны — в данном случае 780 нм.
Эволюция самодельных дальномеров:
Габаритные размеры получившегося дальномера: Размер основания: 88×110 мм. Общая высота дальномера: 65 мм (может быть уменьшена до 55 при уменьшении высоты стоек).
Диаметр сканирующей головки: 80 мм (как у mini-CD диска).
Как и у любого другого триангуляционного дальномера, точность измерения расстояния этого дальномера резко падает с ростом расстояния. При измерениях расстояния до объекта с коэффициентом отражения около 0.7 у меня получились примерно такие точностные характеристики:
1 м |
Ультразвуковой датчик расстояния Ардуино HC-SR04
Ультразвуковые датчики расстояния Ардуино очень востребованы в робототехнических проектах из-за своей относительной простоты, достаточной точности и доступности.
Они могут быть использованы как приборы, помогающие объезжать препятствия, получать размеры предметов, моделировать карту помещения и сигнализировать о приближении или удалении объектов. Одним из распространенных вариантов такого устройства является датчик расстояния, в конструкцию которого входит ультразвуковой дальномер HC SR04.
В этой статье мы познакомимся с принципом действия датчика расстояния, рассмотрим несколько вариантов подключения к платам Arduino, схему взаимодействия и примеры скетчей.
Датчик расстояния в проектах Arduino
Способность ультразвукового датчика определять расстояние до объекта основано на принципе сонара – посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них.
Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени.
Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Внимание! Так как в основу принципа действия положен ультразвук, то такой датчик не подходит для определения расстояния до звукопоглощающих объектов. Оптимальными для измерения являются предметы с ровной гладкой поверхностью.
Описание датчика HC SR04
Ультразвуковой дальномер HC SR04 имеет такие технические параметры:
- Питающее напряжение 5В;
- Рабочий параметр силы т ока – 15 мА;
- Сила тока в пассивном состоянии Читайте также: Электро-печь для обжига глиняных изделий своими руками
Примеры использования датчика расстояния
Давайте рассмотрим пример простого проекта с платой 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 мс.
#define PIN_TRIG 12
#define PIN_ECHO 11
long duration, cm;
// Инициализируем взаимодействие по последовательному порту
Serial.begin (9600);
//Определяем вводы и выводы
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
>
// Сначала генерируем короткий импульс длительностью 2-5 микросекунд.
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIG, HIGH);
// Выставив высокий уровень сигнала, ждем около 10 микросекунд. В этот момент датчик будет посылать сигналы с частотой 40 КГц.
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Время задержки акустического сигнала на эхолокаторе.
duration = pulseIn(PIN_ECHO, HIGH);
// Теперь осталось преобразовать время в расстояние
cm = (duration / 2) / 29.1;
Serial.print(«Расстояние до объекта: «);
Serial.print(cm);
Serial.println(» см.»);
// Задержка между измерениями для корректной работы скеча
delay(250);
>
Скетч с использованием библиотеки NewPing
Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки.
Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта.
В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().
#define PIN_TRIG 12
#define PIN_ECHO 11
#define MAX_DISTANCE 200 // Константа для определения максимального расстояния, которое мы будем считать корректным.
// Создаем объект, методами которого будем затем пользоваться для получения расстояния.
// В качестве параметров передаем номера пинов, к которым подключены выходы ECHO и TRIG датчика
NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE);
void setup() <
// Инициализируем взаимодействие по последовательному порту на скорости 9600
Serial.begin(9600);
>
// Стартовая задержка, необходимая для корректной работы.
delay(50);
// Получаем значение от датчика расстояния и сохраняем его в переменную
unsigned int distance = sonar.ping_cm();
// Печатаем расстояние в мониторе порта
Serial.print(distance);
Serial.println(«см»);
Пример подключения ультразвукового дальномера HC SR04 с одним пином
Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.
#define PIN_PING 12 // Пин с Arduino соединен с пинами trigger и echo на датчике расстояния
#define MAX_DISTANCE 200 // Максимальное расстояние, которое мы способны контролировать (400-500см).
NewPing sonar(PIN_PING, PIN_PING, MAX_DISTANCE); // Регулировка пинов и максимального расстояния
void setup() <
Serial.begin(9600); // Открывается протокол с данными и частотой передачи 115200 бит/сек.
>
delay(50); // Задержка в 50 мс между генерируемыми волнами. 29 мс – минимально допустимое значение
unsigned int distanceSm = sonar.ping(); // Создание сигнала, получение параметра его продолжительности в мкс (uS).
Serial.print(«Ping: «);
Serial.print(distanceSm / US_ROUNDTRIP_CM); // Пересчет параметра времени в величину расстояния и вывод результата (0 соответствует выходу за допустимый предел)
Serial.println(«cm»);
>
Краткие выводы
Ультразвуковые датчики расстояния достаточно универсальны и точны, что позволяет их использовать для большинства любительских проектов.
В статье рассмотрен крайне популярный датчик HC SR04, который легко подключается к плате ардуино (для этого следует сразу предусмотреть два свободных пина, но есть вариант подключения и с одним пином).
Для работы с датчиком существуют несколько бесплатных библиотек (в статье рассмотрена лишь одна из них, NewPing), но можно обойтись и без них – алгоритм взаимодействия с внутренним контроллером датчика достаточно прост, мы показали его в этой статье.
Исходя из собственного опыта, можно утверждать, что датчик HC-SR04 показывает точность в пределах одного сантиметра на расстояниях от 10 см до 2 м. На более коротких и дальних дистанциях возможно появление сильных помех, что сильно зависит от окружающих предметов и способа использования. Но в большинстве случаев HC-SR04 отлично справлялся со своей работой.
Дальномер с помощью датчика HC SR04 и Arduino
Ардуино – уникальная система, представляющая собой пластилин в руках инженера, из которого он может слепить, что пожелает. Возможно это благодаря большому разнообразию датчиков и модулей разных направленностей. От простых чипов, измеряющих силу тока, до вещей вроде Arduino hc hc sr04.
Это специальный датчик, позволяющий, при помощи ультразвуковых волн, измерить расстояние до объекта, на который его направили. Несложно догадаться, что проще всего его применить для создания простого дальномера. Рассмотрим Arduino hc sr04 и какие нюансы в работе с ним стоит учитывать, прежде чем начать собирать проект.
1. Основы сборки дальномера на Ардуино с помощью датчика HC SR04
Если вы собираетесь собрать дальномер на Ардуино, то без HC SR04 просто не обойтись. Ведь именно этот модуль чаще всего применяют в подобных системах из-за его высокой востребованности, по причине простоты работы, доступности и низкой стоимости.
При этом точность показаний остаётся на высоте, что очень важно в подобных системах. Из данного чипа можно собрать не только дальномер на Ардуино, но и полноценного робота, который будет чувствовать расстояние до объекта и обходить любое препятствие.
Однако сегодня мы рассмотрим именно вариант с дальномером на Аrduino, так как он идеально подойдёт для новичков в сфере, которые ещё не слишком хорошо разбираются в основах.
Если же вы захотите затем модифицировать своё изобретение, то можно научить его моделировать полноценную трехмерную карту помещения, что будет удобно для тех, кто занимается дизайном и конструированием мебели или зданий.
Но сначала стоит рассмотреть, как вообще работает данный прибор и какие основы сборки стоит усвоить, прежде чем создать лазерный дальномер на Ардуино своими руками.
Наш дальномер на Arduino будет основан на сонаре, применяемом в природе дельфинами, для измерения расстояния до объектов и спокойного обхождения препятствий. Делается это с помощью физических свойств ультразвуковых волн, которые способны отражаться, сталкиваясь с твердыми объектами, и возвращаться обратно к датчикам.
Далее в ход вступает программный код, который высчитывает, сколько времени прошло между посланием и возвратом волны, делит его на два и с помощью формул и скорости звука высчитывает усреднённое расстояние до объекта.
Почему усреднённое?
Дело в том, что любой ультразвуковой датчик все равно будет ошибаться на десятые доли метра, связано это с тем, что различные материалы, окружение и прочие переменные могут повлиять на скорость движения и отражения от поверхности звука. А в данном проекте мы берём идеальную систему, которая в реальном мире работать не может.
Можно постараться учесть все эти факторы, но каждую переменную вы все равно не запрограммируете, поэтому наша задача – получить данные, максимально приближённые к показаниям профессиональных приборов, ведь дальномер Ардуино всё ещё далёк от них по точности.
Есть и ещё один нюанс, который вам стоит заранее учесть, собирая ультразвуковой дальномер Arduino – не все поверхности подходят для измерения. Дело в том, что некоторые материалы способны поглощать звук или слишком сильно искажать его движение, подобно тому, как черная рубашка поглощает электромагнитную световую волну.
Соответственно, лучше всего применять прибор к гладким и плоским поверхностям, которые не будут нарушать движения УВ, что также ограничивает его функционал. Но благодаря низкому ценнику и удобству работы датчик всё ещё остается достаточно популярным.
2. Что будет в уроке?
Мы соберем дальномер, который будет работать по следующему принципу: при приближении объекта на расстояние менее 4 сантиметров — загорается красный светодиод, иначе горит зеленый.
Достаточно простой пример, в котором мы проверим точность измерения расстояния дальномером hc-sr04. Основа проверки точности станет простая линейка
Колесный измеритель расстояния (курвиметр) на Ардуино своими руками
Но для начала разберемся, что это такое и для чего он нужен. На самом деле о его предназначении нам говорит само его название. Оно образовано от латинского слова curvus, что значит изогнутый или волнистый. То есть курвиметр – это колесный или роликовый измеритель расстояния.
Выделяют два типа курвиметров : маленькие (картографические) , которые обычно применяют для измерений на карте, и большие (дорожные), которые как правило применяют для измерения длинны изогнутых участков уже автомобильных дорог.
Их можно применять везде, где обычной рулеткой измерять неудобно или невозможно, поэтому проект обещает быть интересным.
Первое, о чем стоит позаботиться при постройке курвиметра – это колесо или ролик. Он должен быть достаточно маленьким, чтобы точность прибора была высокой, в то же время он должен быть достаточно большим, чтобы на величину показаний не сильно влияли неровности измеряемой поверхности. В моем случае колесо имеет диаметр 14 сантиметров.
Затем я собрал обработанные детали при помощи небольших саморезов. Теперь немного отвлечемся от самого курвиметра и подумаем, как эта штука вообще сможет определять расстояние? Все довольно просто. Нам всего лишь нужно посчитать количество оборотов колеса и умножить на длину его внешней окружности, а еще проще добавлять значение длины каждый раз , когда колесо совершает очередной оборот.
Чтобы отсчитать каждый оборот в простейшем случае можно использовать «скользящий контакт». Однако я не рекомендую использовать такой механизм отсчета. Гораздо лучше будет применить геркон или датчик Холла.
Пора примерить колесо. Я буду крепить его с помощью длинного болта. Находим место на раме, где обод колеса находится максимально к ней близко и отмечаем штрихами. Примерно в этой зоне мы и должны установить геркон.
На колесе нужно установить небольшой магнит. Убедитесь, что его силы будет достаточно для смыкания контактов геркона.Теперь займемся «мозгами» системы. В моем случае это плата Arduino UNO.
Она будет считывать состояние геркона и передавать данные по Bluetooth соединению, с помощью модуля HC-05, на телефон. Кстати, геркон подключается к плате как обычная кнопка.
Думаю с подключением Bluetooth модуля проблем тоже возникнуть не должно.
Что касается самого кода, то он очень простой. И я постарался его закомментировать, чтобы все было максимально понятно.
Вы можете посмотреть видео по сборке этого аппарата, возможно вы найдете там, что-то интересное.
В этом выпуске канала alexgyver показано, как сделать колесный измеритель или, иначе говоря, определитель расстояния. Начнем с электронной начинки. Во второй половине видео займемся корпусом и механикой.
Такую штуку показало шоу разрушители легенд. Мозгом этого нехитрого устройства будет ардуино. На английском официальном сайте ардуино расписаны все команды и большинство библиотек. На русском языке очень мало реально полезной информации. Ардуино будет питаться по авторской классической схеме.
Аккумулятор 18650 подключен через защитные зарядный модуль. Ардуино к нему подключен через повышающий модуль до 5 вольт. Снимать обороты колеса будем инфракрасным датчиком препятствий. Автору ролика больше нравится датчик холла. Но предложили попробовать инфракрасный датчик. Ну что ж, давайте попробуем.
Выводить расстояние будем на дисплей на контроллере 595. Еще пригодится кнопка для сброса значений и еще одна для включения системы. Прошивка не представляет собой ничего сверхъестественного.
Еще раз посмотреть россии мой скачать прошивкой библиотеку дисплее можно на странице проекта. Alexgyver.ru/roadmeter/ в целях экономии места решил использовать вместо 18650 так аккумулятор меньшего размера формата 14500.
Просто собираем по схеме и кладем в маленькую распределительную коробочку. Оставим датчик болтаться на длинном проводе.
Загружаем прошивку, все работает. У этого датчика есть довольно неприятная особенность. Если изменять препятствия перед ним слишком медленно, он будет засчитывать 2 оборота. Так что рекомендуем вам использовать датчик холла и несколько магнитиков. Прошивка и подключение датчика будут абсолютно такие же.
Перейдем к конструкции. Ручка и все остальное будет сделано из полипропиленовых труб и фитингов. Паять их можно газовой горелкой, но будем использовать самодельный сварочный аппарат для полипропиленовых труб, который стоит как горелка, а варит в сто раз лучше. Как его и сделать, в другом выпуске.
Для всей конструкции определителя расстояния нужно следующие фитинги на двадцатую трубу. Пять уголков на 45 градусов 2 на 90, один тройник и несколько муфт, чтобы сделать удобную рукоятку, и еще две заглушки.
Сейчас варим вилку для колеса по такой схеме. Используем для соединения кусочки трубы. Основную трубу решил сделать из двух частей, чтобы измеритель с колесом можно было сложить. Середина отмеряется от распределительной коробки. Затем части соединяются при помощи двух креплений и саморезов.
Кстати, можно слегка расплавить места крепления, тогда помимо самореза будет еще сварное соединение. Получается отличная раздвижная ручка. Крепления для труб очень просто усилились, обмотав за выступающие края резинкой или даже кабельной стяжкой. Тогда конструкция будет намного жестче.
Позже автор колесного устройства для определения расстояния отрезал половину. Вместо тойника можно использовать уголок.
Нам понадобится колесо. Можно использовать пластиковую тарелку или выпилить колесо из фанеры. В хозмаге нашел разделочную доску диаметром 26 сантиметров. Колесо из пластика будет легче.
Циркулем определяем центр и сверлим отверстие под ось. Предельно аккуратно и перпендикулярно сверлим отверстие в элементе для оси. В качестве оси болт м 6 длиной 60 мм с потайной головкой. Нужны гайки и шайбы. Закрепляем ось. Лишний зазор можно выбрать шайбами.
Осталось закрепить блок электроники в самом низу на имеющиеся крепления, а также закрепить датчик к ноге вилки снизу на саморез. Вообще нужно было провести провод через трубу, а сам повод вывести через нижнее отверстие распредкоробки. Это было бы более красиво.
Продолжение с 7 минуты видео о колесном приборе для определения пройденного расстояния.
Ардуино – уникальная система, представляющая собой пластилин в руках инженера, из которого он может слепить, что пожелает. Возможно это благодаря большому разнообразию датчиков и модулей разных направленностей. От простых чипов, измеряющих силу тока, до вещей вроде Arduino hc hc sr04.
Это специальный датчик, позволяющий, при помощи ультразвуковых волн, измерить расстояние до объекта, на который его направили. Несложно догадаться, что проще всего его применить для создания простого дальномера. Рассмотрим Arduino hc sr04 и какие нюансы в работе с ним стоит учитывать, прежде чем начать собирать проект.
1. Основы сборки дальномера на Ардуино с помощью датчика HC SR04
Если вы собираетесь собрать дальномер на Ардуино, то без HC SR04 просто не обойтись. Ведь именно этот модуль чаще всего применяют в подобных системах из-за его высокой востребованности, по причине простоты работы, доступности и низкой стоимости.
При этом точность показаний остаётся на высоте, что очень важно в подобных системах. Из данного чипа можно собрать не только дальномер на Ардуино, но и полноценного робота, который будет чувствовать расстояние до объекта и обходить любое препятствие.
Однако сегодня мы рассмотрим именно вариант с дальномером на Аrduino, так как он идеально подойдёт для новичков в сфере, которые ещё не слишком хорошо разбираются в основах.
Если же вы захотите затем модифицировать своё изобретение, то можно научить его моделировать полноценную трехмерную карту помещения, что будет удобно для тех, кто занимается дизайном и конструированием мебели или зданий.
Но сначала стоит рассмотреть, как вообще работает данный прибор и какие основы сборки стоит усвоить, прежде чем создать лазерный дальномер на Ардуино своими руками.
Далее в ход вступает программный код, который высчитывает, сколько времени прошло между посланием и возвратом волны, делит его на два и с помощью формул и скорости звука высчитывает усреднённое расстояние до объекта.
Почему усреднённое?
Дело в том, что любой ультразвуковой датчик все равно будет ошибаться на десятые доли метра, связано это с тем, что различные материалы, окружение и прочие переменные могут повлиять на скорость движения и отражения от поверхности звука. А в данном проекте мы берём идеальную систему, которая в реальном мире работать не может.
Можно постараться учесть все эти факторы, но каждую переменную вы все равно не запрограммируете, поэтому наша задача – получить данные, максимально приближённые к показаниям профессиональных приборов, ведь дальномер Ардуино всё ещё далёк от них по точности.
Соответственно, лучше всего применять прибор к гладким и плоским поверхностям, которые не будут нарушать движения УВ, что также ограничивает его функционал. Но благодаря низкому ценнику и удобству работы датчик всё ещё остается достаточно популярным.
2. Что будет в уроке?
Мы соберем дальномер, который будет работать по следующему принципу: при приближении объекта на расстояние менее 4 сантиметров — загорается красный светодиод, иначе горит зеленый.
Достаточно простой пример, в котором мы проверим точность измерения расстояния дальномером hc-sr04. Основа проверки точности станет простая линейка
Источник