Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Робототехника

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2016, 22:15   #51
Paul_B
Member
 
Регистрация: 06.12.2016
Сообщений: 35
Вес репутации: 0
Paul_B is an unknown quantity at this point
По умолчанию Re: Робот объезжающий препятствия

Цитата:
Сообщение от Admin Посмотреть сообщение
Лучше не использовать 2 УЗД , иначе придется выдерживать паузы что бы отраженный сигнал соседнего УЗД не повлиял на результат измерений
Согласен. А если пауза, то можно и один УЗД вращать на серве.
Paul_B вне форума   Ответить с цитированием
Старый 14.04.2017, 20:31   #52
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию Робот объезжающий препятствия

А как можно скорость передвижения уменьшить?
serjrobi вне форума   Ответить с цитированием
Старый 15.04.2017, 01:58   #53
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Шим-ом
Вот пример из CyberBot-3
В переменной speed, как раз будет скорость
PHP код:
void robot_go()  
{  
  
D4_Low;  
  
analogWrite(5speed);   
  
analogWrite(6speed);  
  
D7_Low;  
}  

void robot_back()  
{  
   
D4_High;   
   
analogWrite(5255-speed);   
   
analogWrite(6255-speed);  
   
D7_High;  
}  

void robot_stop()  
{  
  
D4_Low;   
  
analogWrite(50);   
  
analogWrite(60);  
  
D7_Low;   
  
D10_Low
}  

void robot_rotation_left()  
{  
  
D4_Low;  
  
analogWrite(5speed);   
  
analogWrite(6255-speed);   
  
D7_High;  
}  

void robot_rotation_right()  
{  
  
D4_High;   
  
analogWrite(5255-speed);   
  
analogWrite(6speed);   
  
D7_Low;  

Admin вне форума   Ответить с цитированием
Старый 16.04.2017, 20:28   #54
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию

Спасибо, а теперь как это в скетч CyberBot-1 вставить?

#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_back {D4_High; D5_Low; D6_Low; D7_High;}
#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; D11_Low; //динамик
D14_Out; D14_Low; //пин trig ультразвукового сонара
D15_In; //пин echo ультразвукового сонара
randomSeed(A6_Read); //Получить случайное значение
for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота
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;

Последний раз редактировалось serjrobi; 19.04.2017 в 12:35.
serjrobi вне форума   Ответить с цитированием
Старый 19.04.2017, 20:01   #55
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию

Вот попытался скрестить CiberBot-1 c CiberBot-3 и вот что получилось

Sketch_rob_speed_1


#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;}

int speed = 255; // объявляем переменную speed и присваиваем ей значение

void robot_go()
{
D4_Low;
analogWrite(5, speed);
analogWrite(6, speed);
D7_Low;
}

#define robot_back {D4_High; D5_Low; D6_Low; D7_High;}
#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; D11_Low; //динамик
D14_Out; D14_Low; //пин trig ультразвукового сонара
D15_In; //пин echo ультразвукового сонара
randomSeed(A6_Read); //Получить случайное значение
for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота
wdt_enable(WDTO_500MS); //Сторожевая собака 0,5сек.
}

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

if( dist < 20) {rotation(stat, 255);} else //если 10см максимальный угол разворота
if( dist < 30) {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;
}

// стоит и ждёт пока не поднесут препятствие, потом крутнётся 2 раза и снова стоит и уже совсем.

Последний раз редактировалось serjrobi; 20.04.2017 в 21:08.
serjrobi вне форума   Ответить с цитированием
Старый 20.04.2017, 07:40   #56
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

для гарантированного старта мотора на несколько миллисекунд нужно подавать ШИМ 100% (255)
Admin вне форума   Ответить с цитированием
Старый 20.04.2017, 21:05   #57
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию

Дал maximum-

int speed = 255; // объявляем переменную speed и присваиваем ей значение

Всё равно стоит.
Похоже в логике программы ошибка, не так склеил куски, не поможете?
serjrobi вне форума   Ответить с цитированием
Старый 25.04.2017, 21:22   #58
Shalman
Junior Member
 
Регистрация: 19.12.2014
Адрес: Великий Новгород
Сообщений: 8
Вес репутации: 0
Shalman is an unknown quantity at this point
По умолчанию

В какой Arduino IDE лучше работать ? Я переустановил Windows и теперь не могу залить скетчи с этого сайта . Пробовал даже Arduino IDE 1.0.5 , до переустановки системы ( у меня ХР ) работала 1.0.6.
Выдает ошибки :

In file included from rob_ob_prep.ino:1:
C:\Programm Files\Arduino\Libraries\CyberLib.h:1: error stray '\357' in program
C:\Programm Files\Arduino\Libraries\CyberLib.h:1: error stray '\273' in program
C:\Programm Files\Arduino\Libraries\CyberLib.h:1: error stray '\277' in program

Подскажите пожалуйста что это значит ?
Shalman вне форума   Ответить с цитированием
Старый 25.04.2017, 22:13   #59
Shalman
Junior Member
 
Регистрация: 19.12.2014
Адрес: Великий Новгород
Сообщений: 8
Вес репутации: 0
Shalman is an unknown quantity at this point
По умолчанию

Переустановил Arduino IDE 1.0.6 , переустановил библиотеки и все заработало !!!
Shalman вне форума   Ответить с цитированием
Старый 02.06.2017, 08:29   #60
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию

Нуждаюсь в подробных комментариях по логике работы программы-

#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_back {D4_High; D5_Low; D6_Low; D7_High;} #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; //направление разворота, присвоение переменной stat
//значения =0 void setup() { motors_init; //инициализация выходов моторов D11_Out; D11_Low; //динамик D14_Out; D14_Low; //пин trig ультразвукового сонара D15_In; //пин echo ультразвукового сонара randomSeed(A6_Read); //Получить случайное значение for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота wdt_enable(WDTO_500MS); //Сторожевая собака 0,5сек. } void loop() {Start uint16_t dist=GetDistance(); //производим замер дистанции

//присвоение переменной stat значения = 255;200;130 (ms задержки или скорость вращения ?)
void setup() 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) // объявл переменн arr -? ; dur-длит паузы { switch (arr) //смотрим в каком направление разворачиваться
// как получились значения arr=0 arr=255 ?? { case 0: robot_rotation_right; break; case 255: robot_rotation_left; break; } delay_ms(dur); //угол разворота 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;


---------------------------------------------
serjrobi вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 15 (пользователей: 0 , гостей: 15)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:25. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика