Привет, бродяга зоны! Ты посетил портал
Stalker-worlds.games


Этот проект посвящен знаменитой игре S.T.A.L.K.E.R. и не менее знаменитому моду "Народная Солянка" и ОП-2. У нас ты сможешь найти ответы на любые вопросы по этой тематике и не только.
Регистрируйся, присаживайся к нашему костру и послушай байки старожилов зоны. Удачи!


Робот с ультразвуковым датчиком HC-SR04
Попытаемся построить самого простого робота с ультразвуковым датчиком растояния.

Начнем с концепции: мы хотим робота, который может самостоятельно передвигаться по комнате, при этом объезжать все препятствия, встречаемые на своем пути.
Задачу поставили. Теперь бегом по магазинам!
Есть такие варианты: сделать самому всё, купить детальки (например 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);      
       }       
}




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



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


Обсудить, задать вопросы можно на форуме ---> Робот с ультразвуковым датчиком HC-SR04

Похожие новости:


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Статьи | Просмотров: 5 755 | Автор: RUS_D | Дата: 11-08-2013, 13:53 | Комментариев (0)
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Авторское право на игру принадлежит GSC Game World.
Использование материалов сайта только с разрешения Администрации!
© 2008 - 2017 design RUS_D Сайт оптимизирован под FireFox или Opera