Робот объезжающий препятствия

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

А мне проект нравится, хоть это и скрытая реклама. Человек старался изготовить более качественную платформу и у него получилось, а за качество и хорошую работу и платить надо достойно.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Спасибо, за поддержку!

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Для универсальности управления Wi-Fi роботом, в репозиторий CyberWrt добавлен модуль "Free UART", теперь вместо ардуины можно использовать любой контроллер, подключив его к UART роутера wr703n

 

 

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Вышла новая версия WiFi робота CyberBot-2

Схема подключения моторов такая же, а так же в этой версии добавлены дополнительные функции

1-управление поворотом камеры по оси X и Y

2-регулировка скорости движения робота

3-включение/выключение фар

4-клаксон

5-выстрел из пушки

6-Визуальная разметка габаритов робота

Позунки и разметка при не надобности убираются соответствующими кнопками

-sergius-
Offline
Зарегистрирован: 07.03.2015

Помогите пожалуйста разобраться в вашем коде, подскажите как увеличить угол разворота? Заранее благодарю.

#include <CyberLib.h>
#include <avr/wdt.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);
  } 
} 
carduino.ru
Offline
Зарегистрирован: 06.12.2011

Поменяйте значения 255, 200 и 130 на свои

 

 

27   uint16_t dist=GetDistance(); //производим замер дистанции
28  
29     if( dist < 10) {rotation(stat, 255);} else   //если 10см максимальный угол разворота
30     if( dist < 20) {rotation(stat, 200);} else   //если 20см  средний угол разворота
31     if( dist < 40) {rotation(stat, 130);} else   //если 40см  минимальный угол разворота