Перейти к содержимому

Добро пожаловать к нам на сайт! Про Ваш статус и права можно прочитать в Этой теме

Для просмотра картинок и скачивания файлов с форума - пройдите регистрацию!   Проблемы с регистрацией - вам сюда




Фотография

Робот с ультразвуковым датчиком


  • Авторизуйтесь для відповіді у темі
Повідомлень у темі: 6

#1
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  •  Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-грудень 08
  • 5 029 Cообщений
  • Пропуск №: 2

0 баллов предупреждения
Репутация: 8 184

Репутация: 8184 Постов: 5029
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.
Попытаемся построить самого простого робота с ультразвуковым датчиком растояния.

Начнем с концепции: мы хотим робота, который может самостоятельно передвигаться по комнате, при этом объезжать все препятствия, встречаемые на своем пути.
Задачу поставили. Теперь бегом по магазинам!
Есть такие варианты: сделать самому всё, купить детальки (например Tamiya ) и собрать из них, либо же купить готовое.

Выбираем второй вариант :)

Нужные материалы:
1. Ультразвуковой дальномер HC-SR04

2. Плата с микроконтролером arduino Nano или подобные

3. Motor Shield драйвер электродвигателей

4. Мотор-редуктор с колесом - 2шт.

5. Платформа робота (любая или самодельная)


Схема подключения


Програма для контролера
Код
#include <CyberLib.h>      

#define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;}      
#define robot_go {D4_Low; D5_High; D6_High; D7_Low;}      
#define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;}      
#define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;}      
#define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;}      

#define size_buff 5 //размер массива sensor      
uint16_t sensor[size_buff]; //массив для хранения замеров дальномера      
uint8_t stat=0; //направление разворота      

void setup()        
{      
       motors_init;  //инициализация выходов моторов      
       D11_Out;     //динамик      
       D14_Out; D14_Low; //пин trig ультразвукового сонара      
       D15_In;     //пин echo  ультразвукового сонара      
       randomSeed(A6_Read); //Получить случайное значение      
       for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота      
       wdt_enable (WDTO_500MS);    //Сторожевая собака 0,5сек.      
}      

void loop()      
{Start        
       uint16_t dist=GetDistance(); //производим замер дистанции      

         if( dist < 10) {rotation(stat, 255);} else   //если 10см максимальный угол разворота      
         if( dist < 20) {rotation(stat, 200);} else   //если 20см  средний угол разворота      
         if( dist < 40) {rotation(stat, 130);} else   //если 40см  минимальный угол разворота      
                        {robot_go; stat=~stat;}       //поехали!!!            
          wdt_reset(); //сторожевой таймер      
End;}      
//***************************************************      
void rotation(uint8_t arr, uint8_t dur)       
{      
         switch (arr) //смотрим в каком направление разворачиваться      
         {      
         case 0:    robot_rotation_right;      
           break;      
         case 255:    robot_rotation_left;       
           break;          
         }       
         delay_ms(dur);    //угол разворота      
         robot_stop;      //стоп мотор!      
}      
//***************************************************      
uint16_t GetDistance()       
{      
      uint16_t dist;      
      for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров      
       {       
         D14_High; delay_us(10);  D14_Low;  //запустить измерение      
        dist = pulseIn(15, HIGH, 2400); //считываем длительность времени прохождения эха, ограничить время ожидания      
        if(dist==0) dist=2400;        
        sensor[i]=dist;  //сохранить в массиве      
        delay_ms(40); //задержка между посылками      
        wdt_reset(); //сторожевой таймер
       }      
       dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см      
       return dist;      
}       
//***************************************************        
void beep(uint8_t dur, uint16_t frq)      
{      
       dur=(1000/frq)*dur;  //рассчет длительности бипа      
       for(byte i=0; i<dur; i++)      
       {      
         D11_High;       
         delay_us(frq);       
         D11_Low;      
         delay_us(frq);      
       }       
}




Итог наших трудов. Робот завершен, все работает :)



Видео заезда робота

#2
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  •  Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-грудень 08
  • 5 029 Cообщений
  • Пропуск №: 2

0 баллов предупреждения
Репутация: 8 184

Репутация: 8184 Постов: 5029
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.
Принцип работы ультразвукового дальномера HC-SR04.
Девайс представляет из себя модуль с двумя пъезоизлучателями, один из которых служит излучателем, а второй - приемником ультразвуковой волны; плюс управляющая электроника для управления излучателем и приемником. Для подключения модуль имеет 4-х контактный разъем: два из которых питание (требуется 5 вольт), и еще два для общения с микроконтроллером.

Интерфейс связи тут организован очень просто: на вход подаем короткий умпульс длительностью 10-15 микросекунд и ждем импульса на выходе. Как только до приемника дойдет отраженная волна, модуль сам рассчитает расстояние и выдаст на ногу Echo импульс высокого уровня длинной до 25 мс. Длина выходного импульса будет пропорциональна расстоянию до препятствия от которого отразилась ультразвуковая волна. Нам остается только поймать этот импульс, посчитать его длину и перевести это значение в расстояние.




Технические характеристики: Напряжение питания: 5V Ток покоя: < 2 мА Эффективный угол обзора: < 15 ° Диапазон расстояний: 2 см - 500 см Разрешение: 0,3 см

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

S=F/58 ; где S - дистанция в сантиметрах, F - длина импульса в микросекундах

Как видно, даже знать скорость звука не обязательно.

#3
Weles

Weles

    Тёмный сталкер

  • Не в сети
  • Старожилы
  • Помог купить свой сервер сайту! Клуб Спонсор сайта Старожил сайта
<- Информация ->
  • Регистрация:
    20-лютий 10
  • 569 Cообщений
  • Пропуск №: 5511

0 баллов предупреждения
Репутация: 2 295

Репутация: 2295 Постов: 569
  • Страна проживания:Россия
  • Реальное имя:Юрий
  • Пол:Мужчина
  • Город:Алтай, Россия
Цитата (RUS_D)
все работает

И на сколько минут езды одной зарядки батарей хватает ?

#4
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  •  Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-грудень 08
  • 5 029 Cообщений
  • Пропуск №: 2

0 баллов предупреждения
Репутация: 8 184

Репутация: 8184 Постов: 5029
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.
Несколько часов, потом на зарядку.
Или ставить более емкие акумы.

#5
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  •  Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-грудень 08
  • 5 029 Cообщений
  • Пропуск №: 2

0 баллов предупреждения
Репутация: 8 184

Репутация: 8184 Постов: 5029
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.

Видео этой тварюшки :)



#6
yeov

yeov

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    01-липень 15
  • 1 Cообщений
  • Пропуск №: 19349


Репутация: 0
  • Страна проживания:Россия
  • Реальное имя:Олег
  • Пол:Мужчина
  • Город:Иркутск

Добрый день, уважаемые конструкторы!

Не знаю правильно ли я обращаюсь, но у меня  (у нас) возникла идея построить для нужд РЖД телегу на автопилоте... :)

Предполагается что масса телеги в снаряженном состоянии до 250 кг (что бы один максимум 2 человека смогли её установить-снять с рельсов) сама телега должна быть беспилотной, на неё устанавливается комплекс приборов (геосканер, 3D сканер, тепловизоры ну и кое что по желанию Заказчика) и она запускается в рейс, скорость движения данной телеги прогнозируется 30-50 км/ч

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

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

За реальную помощь можно обсуждать и разумное вознаграждение!!!

Так как телегу собираем на свои средства то сумма вознаграждения,понимаете, не может выражаться большим количеством знаков :(

Теперь разъясню что и как я понимаю:

В наличии имеется квадроцикл с объёмом двигателя 150 куб.см и коробкой автоматом

У него будут сняты родные колёса, увеличена колёсная база и установлены железнодорожные колёса

Будет сварена платформа на которую всё и будет монтироваться

Далее в качестве исполнительного механизма переключения будут использоваться компоненты взятые отсюда: http://www.festo.com/cat/ru_ru/products_011100

для включения предполагаю что то из: http://www.razumdom.ru/oborudovanie_ethernet/row647/

осталось придумать что использовать вместо мозгов и глазов...

Моск должен уметь распознавать сигнал от "глаз" и самостоятельно принять решение об остановке, а в случае если препятствие приближается то и удрать от него. Чего ещё от него требуется - включать скорость вперёд-назад (через нейтральное положение) и тянуть тросик акселератора.

Как запасной вариант управления желательно установка дистанционного управления по радиоканалу.

Есть желающие посотрудничать?


Повідомлення відредагував yeov: 02 липень 2015 - 06:20


#7
Юрий_88

Юрий_88

    Сталкер

  • Не в сети
  • Проверенные
  • Помог купить свой сервер сайту! Клуб Спонсор сайта
<- Информация ->
  • Регистрация:
    30-червень 13
  • 799 Cообщений
  • Пропуск №: 8852

0 баллов предупреждения
Репутация: 1 180

Репутация: 1180 Постов: 799
  • Страна проживания:Россия
  • Реальное имя:Юрий
  • Пол:Мужчина
  • Город:город

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

А можно вопрос: Какой минимальный диаметр препятствия "виден" датчику? И расстояние. Как датчик реагирует на препятствия углового профиля (направленные вершиной угла к излучателю - ножка стула)? Туман, снегопад, дождь дают ложное срабатывание? Наверное, не проверялось... Спасибо.


Повідомлення відредагував Юрий_88: 03 липень 2015 - 10:49




реклама на сайте подключена

Использование материалов сайта только с разрешения Администрации!
Или с указанием прямой ссылки на источник. 2008 - 2017 © Stalker-Worlds