Ультразвуковой картограф с использованием Arduino Yun
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 10 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Шаг 1. Теория
В этом проекте мы используем ультразвуковой датчик расстояния. Он генерирует звуковые волны, недоступные человеческому слуху, и измеряет расстояние, вычисляя время, необходимое этим волнам, чтобы поразить препятствие и вернуться назад. Это похоже на принцип, используемый летучими мышами и круизными лайнерами.
Еще один компонент, который мы собираемся использовать, - это серводвигатель. Он отличается от обычного двигателя постоянного тока тем, что может очень точно поворачиваться в заданное угловое положение и удерживать там свое состояние. Когда серводвигатель получает импульсы определенной продолжительности, он перемещается в соответствующее угловое положение.
Мы будем использовать оба этих компонента, чтобы получить поле обзора для нашего робота на 180 градусов.
Шаг 2. Сбор материалов
В этом проекте используется следующее оборудование
- Arduino Uno / Yun (обратите внимание, что любую плату Arduino можно использовать вместо Uno или Yun)
- Arduino Prototyping Shield
- Ультразвуковой датчик HC-04
- Серводвигатель (я использовал Tower Pro SG90, потому что он очень компактен).
- Что касается программного обеспечения, мы используем следующие программы.
- IDE Arduino для загрузки управляющего кода в Arduino, чтобы вращать сервопривод и получать данные о расстоянии от ультразвукового датчика, а также передавать их в последовательный порт.
- Mathworks MatLab для получения данных из последовательной линии, их обработки и визуализации в виде графика.
Шаг 3. Механическая сборка
Используя небольшой кусок печатной платы общего назначения, сделайте небольшой заголовок для HC-04 и прикрепите его к рупору сервопривода с помощью куска двусторонней ленты.
Этот шаг не является обязательным, но, чтобы сделать систему более компактной, я прикрепил сервопривод к выступающей части экрана прототипной платы, используя двусторонний скотч.
Окончательный результат должен выглядеть как живот Валл-И.
Шаг 4. Код Arduino
Код Arduino управляет движением серводвигателя, а также когда и как часто регистрируются показания ультразвукового датчика. Он также передает данные датчика в последовательный порт.
- Импортировать библиотеки
- Инициализировать переменные и контакты.
- Инициализировать сервообъект
- Инициализировать последовательную связь
- Подождите 3 секунды.
- Инициализировать счетчики на 0
- Повернуть сервопривод на 1 градус.
- Получить данные ультразвукового датчика 10 раз (установлено по умолчанию)
- Усреднить данные
- Отправить среднее значение на последовательный порт
- Вернуться к шагу 7
Шаг 5. Код MatLab
Код MatLab имеет дело больше с данными, чем с фактическим управлением платой, поэтому все данные датчиков передаются по последовательному каналу на ПК, где они считываются MatLab.
Теперь данные, которые мы получаем от Arduino, говорят нам о двух вещах. Степень вращения сервопривода и расстояние до препятствия в этом направлении. Следовательно, данные, которые у нас есть на данный момент, находятся в полярной системе координат. Чтобы он имел смысл для человеческого глаза при визуализации, он должен быть преобразован в декартову систему координат или систему координат X-Y.
Таким образом, код MatLab делает именно это. Он последовательно получает данные из COM-порта, сохраняет их в матрицу с указанием угла поворота, а затем преобразует их в декартовы координаты по формуле, приведенной выше.
Как только это будет сделано, он выдает результат, нанося точки на график. Я поместил доску в коробку и получил следующий результат.
Шаг 6:Заключение
Хотя система не идеальна, она выполняет свою работу. Он может приблизительно оценить ширину и длину коробки и точно отправлять данные.
Единственные ошибки, которые я вижу на данный момент, связаны с встряхиванием датчика во время движения сервопривода и ошибочными показаниями самого датчика.
Кроме того, система отлично работает и может использоваться для экспериментов по восприятию глубины, а также для базовых проектов компьютерного зрения.
Код
- matlab_code_to_run_on_pc.m
- Код Arduino
matlab_code_to_run_on_pc.m MATLAB
Код MatLab для компиляции и выполнения на ПКtheta =0:(pi / 180):pi; s =serial ('COM10'); s.BaudRate =9600fopen (s) i =0; inc =1; while я <180 А =fgets (s); число (я + 1) =str2num (A); i =i + 1; endfclose (s) j =1 при j <181 tab (j, 1) =(j-1) * inc tab (j, 2) =num (j) tab (j, 3) =num ( j) * cosd ((j-1) * inc) tab (j, 4) =num (j) * sind ((j-1) * inc) j =j + 1end% цифра% полярный (theta, num) график (вкладка (:, 3), вкладка (:, 4))
Код Arduino Arduino
Код Arduino для загрузки в Arduino Yun#include#include #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 200 NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); Сервомашинный резервуар; int pos =0; int it =10; установка void () {myservo.attach (9); Serial.begin (9600); задержка (3000);} void loop () {int я =0; int t =0; int a =0; для (я =0; я <180; я ++) {unsigned int uS =sonar.ping (); myservo.write (я); задержка (20); for (t =0; t
Схема
Файл Fritzing для подключения сервопривода и ультразвукового датчика YunConfig.fzzПроизводственный процесс
- Создание монитора Ambilight с помощью Arduino
- Робототехническая система для обнаружения человека с использованием Arduino Uno
- Ультразвуковой левитационный аппарат с использованием ARDUINO
- FlickMote
- Вольтметр своими руками с использованием Arduino и смартфона
- Монитор сердечного ритма с использованием Интернета вещей
- Игрушка под управлением Android с использованием Raspberry Motor Shield
- IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
- WebServerBlink с использованием Arduino Uno WiFi
- Робот-последователь линии