08.12.2016, 22:15 | #51 |
Member
Регистрация: 06.12.2016
Сообщений: 35
Вес репутации: 0 |
Re: Робот объезжающий препятствия
|
14.04.2017, 20:31 | #52 |
Junior Member
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0 |
Робот объезжающий препятствия
А как можно скорость передвижения уменьшить?
|
15.04.2017, 01:58 | #53 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Шим-ом
Вот пример из CyberBot-3 В переменной speed, как раз будет скорость PHP код:
|
16.04.2017, 20:28 | #54 |
Junior Member
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0 |
Спасибо, а теперь как это в скетч 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. |
19.04.2017, 20:01 | #55 |
Junior Member
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0 |
Вот попытался скрестить 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. |
20.04.2017, 07:40 | #56 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
для гарантированного старта мотора на несколько миллисекунд нужно подавать ШИМ 100% (255)
|
20.04.2017, 21:05 | #57 |
Junior Member
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0 |
Дал maximum-
int speed = 255; // объявляем переменную speed и присваиваем ей значение Всё равно стоит. Похоже в логике программы ошибка, не так склеил куски, не поможете? |
25.04.2017, 21:22 | #58 |
Junior Member
Регистрация: 19.12.2014
Адрес: Великий Новгород
Сообщений: 8
Вес репутации: 0 |
В какой 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 Подскажите пожалуйста что это значит ? |
25.04.2017, 22:13 | #59 |
Junior Member
Регистрация: 19.12.2014
Адрес: Великий Новгород
Сообщений: 8
Вес репутации: 0 |
Переустановил Arduino IDE 1.0.6 , переустановил библиотеки и все заработало !!!
|
02.06.2017, 08:29 | #60 |
Junior Member
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0 |
Нуждаюсь в подробных комментариях по логике работы программы-
#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 //размер массива sensoruint16_t sensor[size_buff]; //массив для хранения замеров дальномераuint8_t stat=0; //направление разворота, присвоение переменной stat //значения =0void 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; --------------------------------------------- |
Здесь присутствуют: 15 (пользователей: 0 , гостей: 15) | |
|
|