Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Компоненты и материалы

Arduino Yun×1
Ультразвуковой датчик расстояния (HC-SR04 или аналогичный)×1
Сервопривод Tower Pro MG996R×1
Перемычки (набор)×10

Программное обеспечение

Arduino IDE
MATLAB

О проекте

Шаг 1: Теория

Используется ультразвуковой датчик расстояния. Он генерирует звуковые волны выше порога слышимости и измеряет расстояние по времени прохождения волны до препятствия и обратно. Принцип работы как у летучих мышей и сонаров кораблей.

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

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

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Комбинируя эти компоненты, получаем 180° обзор для сканирования пространства.

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

Необходимое железо:

Софт:

Шаг 3: Механическая сборка

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

На маленьком куске макетной платы делаем разъём для HC-SR04 и крепим его на рычаг сервы на двусторонний скотч.

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Опционально: для компактности серву также приклеиваем на выступающую часть прото-шилда.

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Результат напоминает живот Wall-E.

Шаг 4: Код для Arduino

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

  1. Подключение библиотек
  2. Инициализация переменных и пинов
  3. Создание объекта сервы
  4. Инициализация последовательной связи
  5. Ожидание 3 секунд
  6. Сброс счётчиков
  7. Поворот сервы на 1°
  8. 10 замеров ультразвукового датчика (по умолчанию)
  9. Усреднение показаний
  10. Отправка среднего значения в последовательный порт
  11. Переход к п. 7

Шаг 5: Код для MATLAB

MATLAB занимается обработкой данных, а не управлением платой. Данные передаются по последовательному порту на ПК.

Получаемые от Arduino данные — угол поворота сервы и расстояние до препятствия в этом направлении. То есть данные в полярной системе координат. Для наглядной визуализации их нужно преобразовать в декартову (X-Y) систему.

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

MATLAB считывает данные из COM-порта, сохраняет в матрицу с углом, преобразует в декартовы координаты по формуле выше и строит график. Я поместил устройство в коробку и получил следующий результат:

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Шаг 6: Заключение

Ультразвуковой сканер-картограф на Arduino Yun: пошаговое руководство

Система не идеальна, но выполняет задачу. Она даёт грубую оценку ширины и длины коробки и передаёт данные точно.

Основные ошибки: дрожание датчика при движении сервы и случайные ошибочные замеры самого датчика.

Система работает стабильно и подходит для экспериментов с восприятием глубины и базовых проектов компьютерного зрения.

Программный код

matlab_code_to_run_on_pc.m MATLAB

theta = 0:(pi/180):pi;
s = serial('COM10');
s.BaudRate = 9600;
fopen(s);
i = 0;
inc = 1;
while i < 180
  A = fgets(s);
  num(i+1) = str2num(A);
  i = i+1;
end
fclose(s);
j = 1;
while 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+1;
end
% figure
% polar(theta,num)
plot(tab(:,3), tab(:,4));

Arduino Code Arduino

#include <Servo.h>
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
int pos = 0;
int it = 10;

void setup() {
  myservo.attach(9);
  Serial.begin(9600);
  delay(3000);
}

void loop() {
  int i = 0, t = 0, a = 0;
  for (i = 0; i < 180; i++) {
    unsigned int uS = sonar.ping();
    myservo.write(i);
    delay(20);
    for (t = 0; t < it; t++) {
      uS = sonar.ping();
      a = uS / US_ROUNDTRIP_CM + a;
      delay(30);
    }
    a = a / (it - 1);
    t = 0;
    Serial.println(a);
    a = 0;
  }
}

Схемы

Fritzing-файл для подключения сервы и ультразвукового датчика: YunConfig.fzz

Производственный процесс

  1. Создание потрясающей системы Ambilight для монитора на Arduino
  2. Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
  3. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  4. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  5. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  6. IoT-монитор пульса в реальном времени на Arduino и MAX30100
  7. Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
  8. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  9. Веб-сервер на Arduino Uno WiFi: управление LED через браузер
  10. Автономный линий-следующий робот на Arduino UNO