четверг, 24 октября 2013 г.

Line Rider Railway - Железная дорога из бумаги для робота

Робот едущий по линииВ продолжение статьи 'Робот бегущий по линии, с одним датчиком - Line Rider 1'

Исправил проблему с потерей линии. Теперь робот, съехав с линии, поворачивается на небольшую величину в заданную сторону и не найдя линии поворачивается в другую на чуть большую величину, и так далее.
Основное тело программы выглядит так:
void loop() { // Основное тело программы
  if(isLine()) {                  // если под нами линия
    digitalWrite(LED_PIN, LOW);     // гасим индикаторный светодиод
    counter = 3;                    // сбрасываем счетчик
    Run();                          // едем вперед
  } else {                        // иначе (нет под нами линии)
    digitalWrite(LED_PIN, HIGH);    // включаем индикаторный светодиод
    Rotation(MIN_ROT);              // поворачиваем на минимальную величину
    if(!isLine()) {                 // смотрим снова, если под нами нет линии (знак '!' - знак отрицания)
      isCW=!isCW;                     // меняем направление поворота
      Rotation(MIN_ROT * counter);    // поворачиваем на несколько (зависит от количества попыток) минимальных величин
      counter= counter + 4;           // увеличиваем счетчик попыток
    }
  }    
} // конец основной программы, начинаем все сначала
Обратите внимание, что добавилась переменная
int counter;
Для проверки работоспособности собрал небольшую трассу с резкими поворотами и прямыми углами. Тест показал неплохую работоспособность, за исключением небольшого но: на очередном повороте робот потеряв линию проскочил ее снова и начал раскачиваться вокруг своей вертикальной оси. А все потому, что наличие линии определяется только в конечных точках. В общем нашел он ее только развернувшись в обратную сторону. Вот видео:

вторник, 22 октября 2013 г.

Inclination Rider - Едем по наклонной

Как и обещал, подключил акселерометр к управлению роботом.
Inclination Rider - Робот поворачивается в сторону небольшого наклона и едет вперед при бо'льшем наклоне.

Алгоритм прост:
  • если наклон по Х(право-лево) и Y(нос-корма) меньше допустимого, то стоим;
  • если нос вниз и левый борт чуток внизу, то направо;
  • если нос вниз и правый борт чуток внизу, то налево;
  • если левый борт внизу, то направо;
  • если правый борт внизу, то налево;
  • а если нос вверх в два раза больше допустимого, то едем вперед;

понедельник, 21 октября 2013 г.

Compass Rider - Робот знающий свое направление

Продолжаем играться в роботов.

На этот раз прикурочил я к моему роботу компас на микросхеме LSM303, от Sparkfun.

Робот с компасом на основе LSM303


Замечательная штучка - работает по протоколу I2C, а у меня как раз под нее разъемчик появился.

среда, 25 сентября 2013 г.

Робот бегущий по линии, с одним датчиком - Line Rider 1

Отчитавшись о Boundary Rider, в тот же вечер сел думать о следующих шагах на пути к роботу ездящему по линии, а так как паять еще один датчик было лень, да и не из чего (нужно распаивать другой датчик), то решил поизгаляться и заделать такого робота с одним датчиком.
Дело за малым - за алгоритмом и его реализацией. С алгоритмом решил не усложнять и пошел по простому пути:
смотрим в пол
если линия есть, то едем дальше
иначе (линии нет):
поворачиваем чуток в заданную сторону
если снова линии нет:
то меняем направление поворота
поворачиваем в два раза больше чем чуток в другую сторону
начинаем все сначала

четверг, 19 сентября 2013 г.

Робот не выезжающий за черную линию - Boundary Rider

Продолжаем экспериментировать с гусеничной платформой от Pololu.
Вид робота Boundary Rider
Захотелось на этот раз сделать робота ездящего по линии, для этого я запаял датчик линии, вернее датчик яркости: Паяем датчик линии на CleClo:Proto
Но так как датчик пока один, то решил пока сделать робота не выезжающий за границу.
Робот состоит из:
Датчик подключил сразу напрямую в шину BlockDuino, благо этому ничего не мешает, шина у нас пустая. Подключил в порт A0.

вторник, 17 сентября 2013 г.

Паяем датчик линии на CleClo:Proto

Решил научить моего робота ездить по линии, а для этого нужен соответствующий датчик, т.е. датчик яркости, который будет определять белая или черная поверхность под ним.
Схему взял что попроще:
Т.е. список деталей следующий:
  • инфракрасный светодиод
  • инфракрасный фотодиод
  • резистор 330 Ом, 0.125 Вт
  • резистор 10 кОм, 0.125 Вт
  • разъем 1х3 прямой (или угловой, кому как сподручнее)
  • платка CleClo:Proto
Схемку нарисовал в программе EAGLE и прикинул как расположить эффективнее детальки и куда бросать перемычки, получилось очень даже ничего - компакненько:
Слева лицевая сторона, с детальками; справа - обратная, где перемычки.

вторник, 27 августа 2013 г.

Робот объезжающий препятствия пользуясь ультразвуковым датчиком расстояния - USonic Rider

Продолжаем экспериментировать с гусеничной платформой от Pololu.
На этот раз едем куда попало в автономном режиме, но объезжаем препятствия используя ультразвуковой датчик расстояния. А раз автономно, то можем с чистой совестью считать эту машинку роботом.
Машинка состоит из (слева направо):

понедельник, 26 августа 2013 г.

Проигрываем музыку без шилдов с карточки SD --- Play WAV on Arduino from SD

Проигрываем музыку без шилдов с карточки SD --- Play WAV on Arduino from SDВроде бы особой необходимости в этой библиотеке и не было, да и времени в обрез, но рутина и скука доедает остатки мозгов. А тут под рукой и динамик пищащий и платка с подключенной к ней SD карточкой периодически на глаза попадается. В общем два вечера просижены почти не зря - на выходе библиотека которая позволяет проигрывать звуковые файлы к подключенному на порт D3 зуммеру или спикеру/динамику считывая данные налету с файлов расположенных на SD карточке.

Идея взята на форуме сайта CarMonitor.ru, где обсуждается их чудесная библиотека PlaySound. Но автор эту идею прикопал, как я понимаю, т.к. по умолчанию библиотека использует пин D11 под пищалку, но этот пин входит в SPI протокол, по которому общается SD карточка. Т.е. конфуз…

Первый вечер потратил, чтоб накидать скетч для Processing который переводит звуковые файлы с текстового формата "*.h", которые прицеплены к примеру в библиотеке PlaySound, в цифровой "*.raw", чтоб не делать это на лету тратя драгоценные микросекунды.

воскресенье, 18 августа 2013 г.

Управление гусеничным роботом с пульта ДУ от чего-то там (IR Rider)

Не то, что бы я решил изобрести велосипед и показать как это клёво, примеров ездящих шасси управляемых пультом от телевизора в и-нете дофигась. Просто вырвался наконец-то на берег и купил желанных четыре пальчиковых аккумулятора для шасси. И в честь этого в ближайший свободный вечер было собрано из стандартных Blockduino'вских средств такое чудо. Конечно же без использования паяльника.
Итак в него входят:
Пульт можно использовать практически любой из тех что под рукой, у меня оказался такой:
ИК пульт от ДВД плеера
Удобное расположение кнопок для управления траком
А далее все просто:

воскресенье, 4 августа 2013 г.

Кодовый замок с экраном и динамиком

Попробовал побаловаться с клавиатурой купленной по случаю и лежавшей и ждавшей другого удобного случая. Вот недавно звёзды сошлись и получился кодовый замок (это первое что приходит в голову при виде такой клавки). По ходу пригодилась и казалось бы вполне бесполезная, в силу своей прожорливости, библиотека по проигрыванию звука на Arduino - PlaySound. Так что кодовый замок с динамиком:


Клаву я подпаял на половину платы PlugDIO, как раз хорошо подошла - 7 выводов клавы на 7 портов BlockDuino, и притыкнул в первый слот, т.е. в порта D0-D6:
Так же подпаял на CleClo:Proto транзисторный ключ для управления динамиком: