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

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

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

Комплект выглядит так же как на фото

Робот состоит из следующей комплектации:
* Набор для сборки механики робота
*  Arduino Nano v.7
* http://carduino.ru/product_info.php?products_id=1938Драйвер двигателей
* http://carduino.ru/product_info.php?products_id=1925Ультразвуковой дальномер
* http://carduino.ru/product_info.php?products_id=1959Материнская плата робота

Сборка робота занимает 10-15мин.
Инструкция по сборке

Код программы робота получился тоже достаточно простым, но он выполняет то что от него требуется на все 100%
Робот обходит препятствия, даже с неподвижно установленным на него дальномером. Мне так и не удалось создать такую ситуацию из которой бы он не смог выбраться
Для управления роботом и для стабильной работы дальномера, я использовал <a href="http://cyber-place.ru/showthread.php?t=550">библиотеку CyberLib</a>
Вращение колес можно выравнять при помощи оптических энкодеров, но это уже тема для другой статьи.
Планировал выравнивать вращение колес при помощи ШИМ, но мне не пришлось этого делать, так как у меня они примерно одинаково вращаются

Схеиа робота CyberBot

Исходник для Arduino Nano v.7



#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 ультразвукового сонара
for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота
wdt_enable (WDTO_500MS); //Сторожевая собака 1сек.
robot_go;
}

void loop()
{Start
uint16_t dist=GetDistance(); //производим замер
if( dist < 40 && stat==255) //если дистанция меньше 40см
{
robot_rotation_left;
delay_ms(140);
robot_stop;
} else if( dist < 40 && stat==0) //если дистанция меньше 40см
{
robot_rotation_right;
delay_ms(140);
robot_stop;
} else if( dist > 39) {robot_go; stat=~stat;} //поехали!!!

wdt_reset(); //покормить собаку, что бы она не сбежала
End;}

//***************************************************
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(byte dur, word frq)
{
dur=(1000/frq)*dur; //расчет длительности бипа
for(byte i=0; i<dur; i++)
{
D11_High;
delay_us(frq);
D11_Low;
delay_us(frq);
}
}

#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 ультразвукового сонара
for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота
wdt_enable (WDTO_500MS); //Сторожевая собака 1сек.
robot_go;
}

void loop()
{Start
uint16_t dist=GetDistance(); //производим замер
if( dist < 40 && stat==255) //если дистанция меньше 40см
{
robot_rotation_left;
delay_ms(140);
robot_stop;
} else if( dist < 40 && stat==0) //если дистанция меньше 40см
{
robot_rotation_right;
delay_ms(140);
robot_stop;
} else if( dist > 39) {robot_go; stat=~stat;} //поехали!!!

wdt_reset(); //покормить собаку, что бы она не сбежала
End;}

//***************************************************
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(byte dur, word frq)
{
dur=(1000/frq)*dur; //расчет длительности бипа
for(byte i=0; i<dur; i++)
{
D11_High;
delay_us(frq);
D11_Low;
delay_us(frq);
}

На видео можно посмотреть то, что у меня получилось
<video>http://www.youtube.com/watch?v=0k1C0chtScs</video>

Следующий этап, это подключение <a href="http://cyber-place.ru/showthread.php?t=1046">Wi-Fi роутера</a> и видеокамеры

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

Случайно опубликовал черновой вариант, теперь не могу отредактировать

axill
Offline
Зарегистрирован: 05.09.2011

классный зверек

понятно, что скрытая (или даже не скрытая :) ) рекламма, но тем не менее

Araris
Araris аватар
Offline
Зарегистрирован: 09.11.2012

Мда, рекламой изрядно попахивает...

axill
Offline
Зарегистрирован: 05.09.2011

Araris пишет:

Мда, рекламой изрядно попахивает...

немного сбалансирую рекламу))

вот тут похожая платформа http://www.buyincoins.com/item/34695.html, сенсор http://www.buyincoins.com/item/6968.html, драйвер один http://www.buyincoins.com/item/11952.html второй http://www.buyincoins.com/item/11205.html и ардуинка http://www.buyincoins.com/item/10178.html

это для тех кто готов ждать но дешевле

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

Китайская платформа сделана из прозрачного и хрупкого акрила

Наша же платформа сделана из  черного и глянцевого полистирола, он не такой хрупкий как акрил

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

На нашей платформе есть отверстия для крепления севомоторов разного калибра, в разных положениях

Диски энкодеров больше в диаметре, они работают без ложных срабатываний

Китайские энкодеры работают через раз, так как у них оптический элемент на половину закрыт краем диска

Для нашей платформы есть материнская плата, на которую можно подключать дополнительные модули расширения и оптические элементы энкодера

У нас робот комплектуется вершней крышкой

Мы заказываем платформы в Москве, но Вы же понимаете что цены на услуги в Москве не Китайские

Поэтому итоговая цена немного выше Китайской

Китайская платформа может приехать к Вам расколотой, так как упаковывают они ее в бумажный конверт

С удовольствием отвечу на все Ваши вопросы


 

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

Внешний вид Китайского робота

axill
Offline
Зарегистрирован: 05.09.2011

чем этот отличается от предложенного выше?

http://carduino.ru/product_info.php?products_id=1942

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

Ну так я выше раписал все отличия, а этот  я для сравнения выложил

axill
Offline
Зарегистрирован: 05.09.2011

carduino.ru пишет:

Ну так я выше раписал все отличия, а этот  я для сравнения выложил

вы в своем магазине не ориентируетесь???

круто! я дал ссылку на платформу за 400р, а вы выше дали ссылку на платформу за 800р, обе на вашем сайте, обе по фото и описанию одинаковые

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

Когда я читал Ваше сообщение ссылки небыло, возможео что Вы ее добавили позже

По Вашей ссылке только нарезаные из полистирола детали

Там же, описание того что входит в комплект

Mastino
Offline
Зарегистрирован: 03.12.2011

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

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

У меня Китайская акриловая платформа, треснула при сверлении отварстия, если найду ее сфотографирую обязательно и выложу здесь

axill
Offline
Зарегистрирован: 05.09.2011

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

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

Кстати не могу понять почему если машина едет к препятствию под углом, она его в упор не видит. Иногда даже пытается лесть на стенку хотя датчик находится к стенке перпендикулярно. Можно как-то програмно обыграть?

На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их. Думаю поставить акселерометр, чтобы ловить такие цепляния с кружением по кругу вместо движения вперед. Имеет смысл?

 Все покупал в китае. Платформа по ссылке выше за примерно 460р, ултрасоник за 66р, шилд для управления моторами 165р, вольтметр 52р, отсек для батарей заменил на 2x18650 за 30р. Понадобились еще винты и две детали с 3д принтера.

скетч

#include <AFMotor.h>
//#include <Servo.h> 
#include <NewPing.h>

#define DISTANCE_AVG_COUNT  10

// DC motor on M2
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);

NewPing sonar(A0, A1, 400); // NewPing setup of pins and maximum distance.

//Servo servo1;
enum { run_forward=0, run_backward, run_search, run_none } stat_run;
enum { search_left=0, search_right } stat_search;
unsigned long run_time;
unsigned count;

//--------------------------------
// drive functions
void carStop() {
  motor2.run(BRAKE);
  motor3.run(BRAKE);
}
void carForward() {
  motor2.run(FORWARD);
  motor3.run(FORWARD);
}
void carBackward() {
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
}
void carSpeed(uint8_t speed) {
  motor2.setSpeed(speed);
  motor3.setSpeed(speed);
}
void carRight() {
  // направо
  motor3.run(BACKWARD);
  motor2.run(FORWARD);
}
void carLeft() {
  // налево
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
}
//--------------------------------

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("SmartCar v1.0");
  
  carStop();
  
  stat_run = run_none;
  stat_search = search_left;
}

void loop() {
  
  int distance = 0;
  // замер дистанции с усреднением
  for(int i=DISTANCE_AVG_COUNT; i--;) {
    distance += sonar.ping_cm();
  }
  distance /= DISTANCE_AVG_COUNT;
  
  // едем вперед если пространство более 20см
  if(distance > 20) {
      // устанавливаем скорость в зависимости от свободного пространства
      carSpeed((distance > 50)?255:180);
      // включаем моторы если изменился режим
      if(stat_run != run_forward) {
        Serial.println();      
        Serial.print("forward distance = ");
        Serial.print(distance);
        Serial.println("cm");
        stat_run = run_forward;
        run_time = millis();
        count = 0;
        stat_search = (stat_search == search_left)?search_right:search_left;
        carForward();
      } else {
        // если едем вперед больше 4 секунд
        if(millis() - run_time > 4000) {
          if(++count > 3) {
            // поворачиваем немного
            count = 0;
            carStop();
            delay(200);
            carSpeed(200);
            if(stat_search == search_left) carLeft(); else carRight();
            delay(300);
            carStop();
            delay(200);
            carForward();
          } else {
            // сдаем немного назад
            Serial.println("backward");
            stat_run = run_backward;
            carStop();
            delay(200);
            carSpeed(200);
            carBackward();
            delay(500);
            carStop();
          }
        }
      }
  } else {
      if(stat_run != run_search) {
        stat_run = run_search;
        run_time = millis();
        count = 0;
        carSpeed(200);
        Serial.print("search path ");
        Serial.print((stat_search==search_left)?"left ":"right ");
      } else {
        if(millis() - run_time > 2000) {
          run_time = millis();
          // каждые 4 раза вместо смены направления сдаем немного назад
          if(++count > 4) {
            Serial.print("backward");
            carStop();
            delay(200);
            carBackward();
            delay(200);
            carStop();
            delay(50);
            count = 0;
          } else {
            // каждые 4 секунда меняем направление поиска
            stat_search = (stat_search == search_left)?search_right:search_left;
            Serial.print((stat_search==search_left)?"left ":"right ");
          }
        }
        Serial.print('.');
      }
      // небольшой разворот
      if(stat_search == search_left) carLeft(); else carRight();
      // короткий поворот и остановка
      delay(50);
      carStop();
  }
}

видео http://www.youtube.com/watch?v=sgUKik5Yuj4

Для развития планирую поставить пару датчиков (может по периметру еще ултрасоники, акселерометр), возможно голосовой модуль

Для питания спаяю buck-boost который будет давать стабильные 8в вне зависимости от напряжения батареи и сделать нормальный buck для питания 5в ардуины и серв (может поставлю одну или несколько серв), сейчас питание через 7805 на UNO, но это расточительно для батареи

возможно проапгрейджю motor shield или заменю. L293D греется прилично, их можно усилить припаяв сверху еще одну или несколько микросхем. Этот шилд от адафрутс со своей библиотеков и не просто позволяет управлять четырьмя моторами постоянного тока, но и регулирует их отдачу через ШИМ. Вместо двух DC можно включить два шаговика. Кроме того еще две сервы можно воткнуть

Mastino
Offline
Зарегистрирован: 03.12.2011

я думаю с таким же успехом он у вас и без ултрасоника препятствия объезжал бы :)

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

axill пишет:
да наверно ваша платформа крепче, но она и дороже в два раза. Так что и тот и тот вариант имеет право на жизнь.
На видео видно как робот цепляется колесами за ножки стула. Это еще раз доказывает приемущество нашей платформы. У нас платформа легко обходит такие препятствия и при этом за счет круглой формы и защиты коле,с она не цепляется. Завтра сниму видео для наглядности

axill пишет:
Кстати не могу понять почему если машина едет к препятствию под углом, она его в упор не видит. Иногда даже пытается лесть на стенку хотя датчик находится к стенке перпендикулярно. Можно как-то програмно обыграть?Вот наглядно можете сами убедится в приемуществе нашей платформы, она за ножки стула не зацепится

Если Вы заметили, на моем роботе УЗ датчик стоит в глубине, это дает много приемуществ

1-У датчика есть мертвая зона 2-4см, он не может определить такое маленькое расстояние

2-Чем глубже на платформе датчик тем шире его зона срабатывания перед роботом

 

Для измерения дистанции нужно не усреднять , а фильтровать ложные срабатывания.

У меня установлен 1 УЗ датчик и робот не натыкается на стены. На видео видно что в ловушки он тоже не попадает

 

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Mastino пишет:

я думаю с таким же успехом он у вас и без ултрасоника препятствия объезжал бы :)

ну не совсем, все таки ултрасоник когда срабатывает позволяет быстрее находить решение

так дело в том, что мое виде в реальнои окружении, а не в искуственном как видео выше. разве не в этом разница?

axill
Offline
Зарегистрирован: 05.09.2011

про мертвую зону тоже подумал, надо бампер сделать

чем рьянее вы рекламируете себя, тем хуже о вас впечатление, не перестарайтесь, тут все же не рекламный щит, а обмен опытом

по какому признаку идет фильтрация?

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

Я специально сниму видео  со стульми и стенами, раз Вы не верите

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

axill пишет:
чем рьянее вы рекламируете себя, тем хуже о вас впечатление, не перестарайтесь, тут все же не рекламный щит, а обмен опытом

Я всего лишь пытаюсь Вам доказать что разница в цене с лихвой компенсируется

Считываю 5 замеров, потом из этих 5 замеров берутся только те замеры которые чаще всего повторяются

Ложными замерами так же считаются, замеры меньше 5 см и больше 4метров

 

axill
Offline
Зарегистрирован: 05.09.2011

я не про веру писал, вы не слышите, да ладно

ответьте лучше на вопрос про фильтрацию

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

...

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

axill пишет:

я не про веру писал, вы не слышите, да ладно

Извиняюсь был не внимателен

Про фильтры выше ответил

axill
Offline
Зарегистрирован: 05.09.2011

ясно, спасибо

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

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

Библиотека как раз и фильтрует

Вот я вызываю фильтр из библиотеки

dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см

 

 

axill
Offline
Зарегистрирован: 05.09.2011

этот кусок кода я видел, но что толку если не известно, что делает find_similar

com
Offline
Зарегистрирован: 06.09.2013

для невнимательных - еще раз:

carduino.ru пишет:

Для управления роботом и для стабильной работы дальномера, я использовал <a href="http://cyber-place.ru/showthread.php?t=550">библиотеку CyberLib</a>

гляньте, хорошая библиотека, много полезного

axill
Offline
Зарегистрирован: 05.09.2011

com пишет:

гляньте, хорошая библиотека, много полезного

упорное всучивание всего что имеет отношение к вашему магазину выдает вас с головой даже не смотря на другой ник :))))))))))))))))))))))))))))

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

Я бы попросил не выдвигать не обоснованые обвинения.

Вот мне больше заняться нечем, как другие ники регистрировать и самому себя нахваливать.

Прям детский сад какой то

P.S.

Попросите админа проверить мой IP адрес и com

com
Offline
Зарегистрирован: 06.09.2013

ахтунг! параноики на форуме!

axill, вы и впрямь думаете, что искреннее предложение посмотреть на полезную библиотеку ( и ликвидировать пробел в знаниях, вообще-то) - это закамуфлирование желание магазина "всучить" вам что-то? большего бреда не встречал, у вас чсв зашкаливает

carduino, не спорьте с больными, ведь если даже если у нас ипы разные, это же не доказывает, что мы разные люди :)

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

Я подозреваю, что axill опять будет думать, что это я написал.

Вопрос для axill , а Вас е смущает то что дата регистрации у com 06.09.2013 ?

Логично предположить, что я бы для того что бы похвалить себя, зарегистрировался 21.12.2013

 

 

Mastino
Offline
Зарегистрирован: 03.12.2011

carduino.ru я подазреваю что вы уже все заранее спланировали наверно уже в 2012 был план как обмануть axill`a.. показывая ему библиотеку с другого ника. Вирус в библиотеке при распаковке автоматически заказывает Робота объезжающего препятствия с вашего магазина. axill человек осторожный умный(посмотрите с какой легкостью робот препятствие обижает, код точно гений писал) и не повелся на вашу удавку.

axill
Offline
Зарегистрирован: 05.09.2011

com пишет:

axill, вы и впрямь думаете, что искреннее предложение посмотреть на полезную библиотеку ( и ликвидировать пробел в знаниях, вообще-то) - это закамуфлирование желание магазина "всучить" вам что-то? большего бреда не встречал, у вас чсв зашкаливает

раз ошибся, прошу извинить. Я не просил вас мне рассказывать про библиотеку, оттого и была такая реакция. Меня интересовал лишь один кусок кода в скетче, не более.

Цитата:

carduino, не спорьте с больными, ведь если даже если у нас ипы разные, это же не доказывает, что мы разные люди :)

ну ошибся, с кем не бывает. Однако вы со своей стороны с легкостью клеймите человека не разобравшись. Бог вам судья

com
Offline
Зарегистрирован: 06.09.2013

axill пишет:

раз ошибся, прошу извинить. Я не просил вас мне рассказывать про библиотеку, оттого и была такая реакция. Меня интересовал лишь один кусок кода в скетче, не более.

кхм.... а это что тогда?

axill пишет:

ответьте лучше на вопрос про фильтрацию

axill пишет:

этот кусок кода я видел, но что толку если не известно, что делает find_similar

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

:)

еще раз со всей ответственностью заявляю, что к carduino и его магазину не имею никакого отношения, и мой акцент на библиотеке вызван всего лишь желанием разьяснить, как же именно происходит фильтрация ложных замеров у дальномера

давайте лучше про самих роботов

axill, он у вас так смешно бегает по кухне - как хомяк какой-то! не надо бампер, так веселее :)

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

Прошу прощения.

К сожалению снять видео не ролучилось, так как не нашел УЗ сенсора

В магазине дальномеры тоже закончились :(

Сейчас они уже на таможне, надеюсь до нового года приедут

Kolchugin
Offline
Зарегистрирован: 15.12.2013

axill пишет:

На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их. 

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

axill
Offline
Зарегистрирован: 05.09.2011

Kolchugin пишет:

axill пишет:

На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их. 

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

спасибо. Тоже думал об этом. Они не полностью прикрывают колеса, но полтолщины будут "обтекаемы", а за вторую половину цепляться будет явно меньше

Я вот думаю городить ли поворот датчика сервой как на многих видео которые я видел или же просто несколько датчиков поставить? Угол обзора у них на удивление очень узкий

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

Если разместить сенсор в глубине платформы на расстоянии 10-15 см от морды, то одного сенсора будет достаточно. К томуже ничто не мешает в программном коде настроить минимально допустимой расстояние

Диаграмма направленности датчика

 

Можно использовать 2 сенсора 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

axill пишет:

Я вот думаю городить ли поворот датчика сервой как на многих видео которые я видел или же просто несколько датчиков поставить? Угол обзора у них на удивление очень узкий

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

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

Kolchugin пишет:

Датчик хочу поставить самодельный.

А что за датчик если не секрет? LIDAR? 

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Нет, намного проще. Датчик на ИК-лучах. Работает просто. Есть препятствие - на выходе 1, нет препятствия - 0.

Вот собрал макет, работает так:   http://youtu.be/hc6w7kAhdpg

Схему датчика (подробное описание) взял отсюда: http://www.getchip.net/posts/094-datchik-priblizheniya-na-ik-luchakh-attiny13/

axill
Offline
Зарегистрирован: 05.09.2011

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

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Логика движения такая же как и у carduino.ru. Есть препятствие - платформа разворачивается, нет - прямо едет.  По программированию - с  датчиком который я собираюсь использовать, получается примитивно, потому как замеров делать не нужно (расстояние срабатывания можно настроить на датчике).  Меня пока это устраивает, потому как я уже писал, только начинаю. Придёт понимание - буду усложнять.

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

У ИК бампера есть недостаток, ИК луч не отражается или плохо отражается от тканевых поверхностей

Дистанция срабатывания датчика будет зависить от типа отражаемой поверхности.

 

axill
Offline
Зарегистрирован: 05.09.2011

carduino.ru пишет:

Случайно опубликовал черновой вариант, теперь не могу отредактировать

вы watchdog использовали. Под него нужно бутлоадер другой прошивать?

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

У Arduino Nano v.7 он уже есть в прошивке

axill
Offline
Зарегистрирован: 05.09.2011

Спасибо за отклик и с Наступающим!

watchdog к прошивке не имеет отношения, он в железе

но у многих ардуино есть баг в бутлоадере из за которого ардуину колбасит от бесконечных перезагрузок в случае срабатывания watchdog. Как я понял в вашей Nano баг исправлен. Со своей тоже разобрался по этой статье http://habrahabr.ru/post/189744/

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

Вы сами себе противоречите

axill пишет:

watchdog к прошивке не имеет отношения, он в железе

и

axill пишет:

но у многих ардуино есть баг в бутлоадере из за которого ардуину колбасит от бесконечных перезагрузок в случае срабатывания watchdog.

Это все равно как написать что таймеры к прошивке не имеют отношения, так как они в железе

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

axill
Offline
Зарегистрирован: 05.09.2011

Я не ищу повода поспорить) я себе не противоречу

но что касается вочдога, он в бутлоадере не настраивается, просто бутлоадер глючит если в бутлоадере нет отключения вачдога

 

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

axill пишет:

но что касается вочдога, он в бутлоадере не настраивается, просто бутлоадер глючит если в бутлоадере нет отключения вачдога

А отключение и включение , это не настройка?

Что касается Arduino Nano V.7 то исправления вносились в сам bootloader

axill
Offline
Зарегистрирован: 05.09.2011

А вы ищите способ поспорить) у вас крутая прошивка, не сомневаюсь

на голом МК вачдог работает, а с прошивкой ардуино не работает. Стоит ли при этом говорить, что прошивка ардуино "настраивает" вачдог? По моему нет, но не суть, спорить нет смысла