четверг, 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 транзисторный ключ для управления динамиком:

четверг, 4 июля 2013 г.

BlockProto2 и RGB светодиод - готовая Mood лампа


В продолжение темы об использовании платы BlockProto2 запаяной с цанговыми разъёмчиками под BreadBoard - беспаечную макетную плату.
Сегодня попались мне под руку трехцветные светодиоды и вспомнилось мне, что хотелось как-то посмотреть как будет выглядеть Mood лампа в домашнем исполнении. Ну и я их тут же и примостил на плату.
С резисторами решил не заморачиваться, а просто общий вывод, в моем случае это катод, я повесил на порт микроконтроллера. А так как порт не дает больше 20мА, то светодиод не пострадает от избыточного тока.
Как известно выводов у светодиода 4 - это по одному аноду на каждый встроенный в корпус светодиод (а их там три - красный/Red, зеленый/Green и синий/Blue) и один общий катод.
Расположены в порядке: Red, Катод, Blue, Green. По крайней мере на моих светодиодах. Вывод на катод самый длинный.
Чтоб управлять яркостью светодиода его нужно подключить к порту на котором есть управление ШИМ (PWM), у нас это D3,D5,D6,D9,D10,D11. Этого хватит чтобы управлять двумя трехцветными светодиодами. Один светодиод помещаем на площадку шины BlockDuino, на цифровой ряд, в порта D3-D6, так чтобы катод стал в порт D4, а другой, если есть желание, в порта D8-D11, но надо изгольнуться так, чтобы катод стал в порт D8, т.е. первый и второй ножки согнуть так, чтоб они не соприкасаясь поменялись местами.
 

пятница, 21 июня 2013 г.

Пример использования платы BlockProto2 - термометр из LM35 и светодиодного дисплея GNQ-5641


Отпишусь, как можно из платы BlockProto2 сделать небольшую BreadBoard, т.е. беспаечную макетную плату, ну и как на ее базе сконструировать на коленке термометр.
Итак, во-первых, нужно в плату BlockProto2 впаять цанговые однорядные панельки.
Я купил 6 штук по 40 пинов и разломал их на 9 штук по 20 пинов (8 штук в протоплощадки и одну на цифровую линию шины BlockDuino), две по 8 пинов (на площадки +5V и GND) и две по 9 пинов (на оставшуюся линию шины BlockDuino). Примерно вот так:
Теперь плата готова к использованию. Тут главное не запутаться, где какой пин. В общем, надо поглядывать на схему расположения площадок:

воскресенье, 5 мая 2013 г.

Работа с несколькими датчиками DS18B20

Отпишусь, как я подключил несколько датчиков температуры DS18B20 на один пин BlockDuino.
Для удобства я спаял маленький полублок с разъемом 'мама' размером 8х3, т.е. с возможностью подключения до 8ми датчиков и разъемом 'папа' размером 7х2, в качестве коммутатора, т.е. можно перекинуть вход датчиков на любой пин. 
Для наглядности, этот полублок я подключил не напрямую, а через кабель. Ну чтоб было точно видно, что используется всего один провод для данных (ну и два для подвода питания), к тому же у меня занят разъем 'мама' на основной плате подключенным экранчиком JM164A. К полублоку подключил два выносных датчика, а один вставил сразу в разъем.
Подключение нескольких датчиков DS18B20 Подключение нескольких датчиков DS18B20 к BlockDuino
 Один запихнул под пиво, один окунул в чай, ну и еще один оставил как есть - типа комнатная температура.

среда, 10 апреля 2013 г.

Управление гусеничным роботом со смартфона


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

  Для этого необходимо:

и по необходимости:
  • плата BlockProto (если есть желание подпаять модуль Bluetooth);
  • и шлейф для параллельного соединения блоков (без шлейфа блоки подключаются последовательно);

пятница, 5 апреля 2013 г.

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

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

четверг, 4 апреля 2013 г.

Ambilight своими руками из подручных средств - версия 2

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

четверг, 28 марта 2013 г.

Ambilight своими руками из подручных средств - BlockPWM (TLC5940)

Наигравшись вдоволь с ёлкой и её гирляндой (см. пост за январь 2013), захотелось сообразить какую-нибудь модную 'mod-lamp' и в поисках вдохновения по содержимому компьютера (от интернета я был безнадежно далеко как по расстоянию, так и по времени) наткнулся на интересную задумку, так называемый самодельный Ambilight от сайта compcar.ru.
Смысл таков: на монитор или телевизор на тыльную сторону цепляются трехцветные светодиоды, которые управляются с помощью Arduino, на компьютере же специальная программка просчитывает содержимое монитора, вернее его краев, и посылает цветовой код на ардуинку.
И я подумал, что у меня есть все что нужно чтобы сообразить подсветку монитора на пять точек, ведь один BlockPWM работает на 16ть каналов, а это пять каналов RGB.

воскресенье, 24 марта 2013 г.

суббота, 23 марта 2013 г.

Задачка для Arduino: 3 кнопки и 3 светодиода (3Buttons_3LEDs)

Попалась на глаза задачка попрограммировать:
Написать программу осуществляющую опрос трех кнопок,нажатие каждой из кнопок назначит выключение светодиода соответствующего цвета.Время выключения каждого 1 секунда. Программа должна выполнятся бесконечно.
Так как время было свободное, да и с целью показать, насколько BlockDuino подходит для обучающих целей написал программку-решение и реализовал все это в железе. Благо, всё было под рукой.

четверг, 24 января 2013 г.

Подключение светодиодной ленты к BlockPWM (в продолжение темы ёлочных игрушек)

Хочу описать об управлении светодиодными новогодними игрушками.
Хотя их и можно просто подключить параллельно в 12 вольт и они будут ярко светить, но динамики при этом нет, а значит и нет нужной эффектности.
Поэтом я подключил их к блоку BlockPWM (описание блока).
Небольшое отступление: Новый Год я встречал в море, а там с ёлками проблема, посему пришлось из подручных средств соорудить что-то похожее - из гирлянды с зелеными проводами на иллюминаторе натянул треугольничек и все это обрамил еще одной гирляндой. С натяжкой можно считать новогодней ёлкой:
Имитация ёлки
Со светодиодными игрушками

вторник, 15 января 2013 г.

Ёлочные украшения из светодиодной ленты

Середина января - немного поздновато для "предновогоднего" поста, но как добрался до и-нета, так и отписался.
Дело было вечером, дело было к Новому Году, елки не было даже в перспективе, поэтому её я сымитировал с гирлянды натянув ее треугольником на фоне иллюминатора (так мне захотелось). Получилось неплохо с учетом нескольких елочных шариков, но все же для полноты душевной нирваны не хватало чего-то перемигивающегося.
Но под рукой были огрызки светодиодной ленты разных цветов. Сначала я их просто нарезал, подпаял разъемы и подключил к BlockPWM и BlockDuino. Но об этом попозже.
 Но мысль на месте не стояла, и немного погодя появились такие елочные игрушки: