Как стать автором
Обновить

Машинка с дистанционным управлением на базе Raspberry Pi

Время на прочтение3 мин
Количество просмотров42K


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.

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии2

Публикации

Ближайшие события