
Raspberry Pi очень популярна. На сайте уже есть много статей по созданию различных проектов на ее основе. Как только она стала доступной в продаже, мне тоже сразу же захотелось приобрести одну. Была куплена модель B (еще с 256Mb памяти) и аксессуары к ней. И, естественно, захотелось что-нибудь сконструировать на ее базе. Было желание поработать с GPIO и использовать ее в качестве контроллера. Именно тогда появилась идея сделать управляемую машинку на колесах.
Железная часть
Первым делом на ebay было найдено шасси для будущей модели. На каждое колесо в нем установлен отдельный двигатель. Конструкция обошлась в $33 и пришла мне по почте в разобранном виде. Производство, естесственно, китайское, поэтому пришлось поработать надфилем, чтобы детали помещались в пазы.

Часть комплектующих покупалась на dx.com. Сайт оказался очень удобным и недорогим, хороший выбор разных штук на нем меня приятно удивил, а бесплатная доставка в Украину пришлась как нельзя кстати. Там же была заказана дюжина аккумуляторов емкостью 2700mAh и несколько зарядных устройств к ним.
В качестве контроллеров для двигателей была куплена плата на основе микросхемы L298N.

Одна такая плата позволяет управлять двумя электродвигателями с различным направлением движения. Я решил обойтись одной такой платой и соединил два левых и два правых двигателя попарно. При включении всех двигателей, в зависимости от направления вращения, машинка едет вперед или назад. Чтобы повернуть налево — включаются только два правых двигателя, при повороте направо — только два левых.
Питание на двигатели подается через этот контроллер. Было использовано 6 аккумуляторов напряжением 1.2 вольта каждый.

Далее была решена проблема с автономным питанием Raspberry Pi. Для этой цели также был использован аналогичный блок аккумуляторов из 6 штук. Питание на плату подключил через DC-DC преобразователь на основе микросхемы LM2596.
Для подключения платы к сети был использован Wi-Fi адаптер Edimax EW-7811UN. Он рекомендуется как совместимое оборудование на elinux.org/RPi_VerifiedPeripherals, доступен в продаже, небольшого размера и прост в настройке.

Программная часть
А теперь переходим к программной части. Весь код, использованный в проекте, был написан на C.
В процессе управления двигателями задействуются разъемы GPIO0 — GPIO3, которые напрямую подключаются к контроллеру. Используется следующий порядок подачи сигналов на контроллер:
Двигатели | Направление | GPIO 0 — IN1 | GPIO 1 — IN2 | GPIO 2 — IN3 | GPIO 3 — IN4 |
---|---|---|---|---|---|
Левые | вперед | 1 | 0 | ||
назад | 0 | 1 | |||
стоп | 0 | 0 | |||
Правые | вперед | 1 | 0 | ||
назад | 0 | 1 | |||
стоп | 0 | 0 |
Очень удобно было использовать шпаргалку для обозначения выходов GPIO. Найти и распечатать ее можно с этой страницы — www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html.
Для работы с GPIO используется очень удобная библиотека wiringPi. Информацию о том, как установить ее в систему и API можна найти здесь — projects.drogon.net/raspberry-pi/wiringpi. Библиотека содержит также утилиты, с помощью которых можно инициализировать и подать сигнал на выход GPIO без программирования.
Код, который подает сигнал на выход GPIO, выглядит примерно так:
...
pinMode(0, OUTPUT);
digitalWrite(0, 1);
...
В данном случае подается сигнал на выход GPIO 0.
Далее было проведено первичное тестирование машинки.
Следующим шагом было написание сервера, который принимает подключение от клиента, получает и выполняет команды управления двигателями. Протокол довольно прост:
“forward” — вперед, “back” — назад, “stop” — остановка, “left” и “right” — отключают левый или правые двигатели (в зависимости от направления), “quit” — закрывает соединение с клиентом.
И наконец о клиенте. Управлять машинкой с удаленной консоли, клавиатуры компьютера я посчитал неинтересным. Я решил, что она должна управлятся с планшета, идею подсмотрел в игре NFS Undercover.
Клиент был написан под Playbook используя Native SDK. На официальном сайте есть достаточно примеров и документации, чтобы разобратся в платформе. SDK установливается вместе с QNX Momentics IDE основанной на Eclipse. Самой сложной частью для меня было создание пользовательского интерфейса с помощью OpenGL ES, так как я никогда до этого не работал с графикой. Изображения элементов управления были найдены в интернете. Интерфейс очень простой — запустил программу, ввел IP адрес Raspberry Pi, подключился к серверу (переключатель вверху справа скриншота) и поехали.

Посередине экрана — переключатель вперед, стоп, назад. При наклоне планшета до определенного угла влево или вправо отправляются команды повернуть влево или вправо соответственно.
И, собственно, видео, показывающее машинку в действии.
Сразу же был выявлен недостаток шасси — сцепление с полом оказалось не очень хорошим, а на поворотах колеса бывало пробуксовывали. Да и конструкция с жестко закрепленными индивидуальными осями мне сразу не очень понравилась. Захотелось поменять шасси на что нибудь более серьйозное.

Кот, кстати, тоже заинтересован в проектах на базе Raspberry Pi.
