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



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.

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 2

    0
    А если сделать RPi этаким «сервером управления» и организовать радиосвязь между RPi и моделью? Это избавит от необходимости установки RPi на модель и аккумуляторов к нему. Продаются готовые электронные «модули радиосвязи»?
      0
      Продаются, но тогда это будет уже другой проект.
      Я хотел сделать что бы RPi была на самой машинке и можно было организовать связь с машинкой по WiFi.
      Также на RPi хочу поставить камеру и выводить картинку на дисплей. С радиосвязью так не получится.

    Only users with full accounts can post comments. Log in, please.