Найти тему
Алексей Кретов

4 motor && 16 servo board. Программирование робошилда с джойстиком от PS2

Оглавление

Задача работы с шилдом решается в 3 этапа:

  1. Необходимо разобраться с джойстиком от PS2 (возможно и с bluetooth)
  2. Разобраться как управлять 4 моторами и обращаться к каждому из 16 серв
  3. Собрать код для управления нашим устройством

1 этап. Библиотека для шилда

После загрузки кода джойстик может не определиться, т.к. он должен быть определен приёмником на стороне контроллера в момент начала алгоритма. иногда нужно нажать reset на ардуинке.

Идеальный код с комментами мы урвём у iArduino, лучше - трудно сделать!

Библиотека от iArduino PS2X_lib

-2

Описание функций библиотеки

  • ps2x.config_gamepad(clock,command,attention,data,Pressures,Rumble) - инициализация геймпада с указанием выводов Arduino, к которым он подключен
  • ps2x.readType() - чтение типа устройства (1 - тип не установлен; 2 - DualShock; 3 - GuitarHero;)
  • ps2x.read_gamepad(motor_1, motor_2) - опрос геймпада с заданием режима работы моторчиков вибрации (motor_1 - большой моторчик (17-19 В), motor_2 - малый моторчик (3.3-5 В) )
  • ps2x.NewButtonState() - ИСТИНА, если СОСТОЯНИЕ кнопки изменилось (многократный сигнал) (с ИСТИНА на ЛОЖЬ --ИЛИ-- с ЛОЖЬ на ИСТИНА)
  • ps2x.ButtonPressed() - ИСТИНА, если кнопка НАЖАТА (однократный сигнал)
  • ps2x.ButtonReleased() - ИСТИНА, если кнопка ОТПУЩЕНА (однократный сигнал)
  • ps2x.Button() - ИСТИНА, пока кнопка НАЖИМАЕТСЯ (многократный сигнал)
  • ps2x.Analog() - считывает АНАЛОГОВОЕ ЗНАЧЕНИЕ кнопок (список возможных вариантов см. выше)

Переменные

Работа с цифровыми кнопками:

  • PSB_START - кнопка СТАРТ
  • PSB_SELECT - кнопка СЕЛЕКТ
  • PSB_PAD_UP - кнопка "Стрелка ВВЕРХ"
  • PSB_PAD_RIGHT - кнопка "Стрелка ВПРАВО"
  • PSB_PAD_LEFT - кнопка "Стрелка ВЛЕВО"
  • PSB_PAD_DOWN - кнопка "Стрелка ВНИЗ"
  • PSB_R1 - кнопка "R1"
  • PSB_L1 - кнопка "L2"
  • PSB_R2 - кнопка "R2"
  • PSB_L2 - кнопка "L2"
  • PSB_R3 - кнопка "правый СТИК" (НАЖАТИЕ)
  • PSB_L3 - кнопка "левый СТИК" (НАЖАТИЕ)
  • PSB_RED - кнопка "круг"
  • PSB_PINK - кнопка "квадрат"
  • PSB_BLUE - кнопка "крест"
  • PSB_GREEN - кнопка "треугольник"

Стики c потенциометрами активируются при зажатой кнопке L1 или R1:

  • PSS_LY - потенциометр "ЛЕВЫЙ СТИК" (по оси ОУ)
  • PSS_LX - потенциометр "ЛЕВЫЙ СТИК" (по оси ОХ)
  • PSS_RY - потенциометр "ПРАВЫЙ СТИК" (по оси ОУ)
  • PSS_RX - потенциометр "ПРАВЫЙ СТИК" (по оси ОХ)

Аналоговые кнопки:

  • PSAB_PAD_UP - кнопка "Стрелка ВВЕРХ" (аналоговое значение) (0 или 255)
  • PSAB_PAD_RIGHT - кнопка "Стрелка ВПРАВО" (аналоговое значение) (0 или 255)
  • PSAB_PAD_LEFT - кнопка "Стрелка ВЛЕВО" (аналоговое значение) (0 или 255)
  • PSAB_PAD_DOWN - кнопка "Стрелка ВНИЗ" (аналоговое значение) (0 или 255)
  • PSAB_R1 - кнопка "R1" (аналоговое значение) (0 или 255)
  • PSAB_L1 - кнопка "L2" (аналоговое значение) (0 или 255)
  • PSAB_R2 - кнопка "R2" (аналоговое значение) (0 или 255)
  • PSAB_L2 - кнопка "L2" (аналоговое значение) (0 или 255)
  • PSAB_RED - кнопка "круг" (аналоговое значение) (0 или 255)
  • PSAB_PINK - кнопка "квадрат" (аналоговое значение) (0 или 255)
  • PSAB_BLUE - кнопка "крест" (аналоговое значение) (0 или 255)
  • PSAB_GREEN - кнопка "треугольник" (аналоговое значение) (0 или 255)

Адаптация кода

Пример кода для работы нашего шилда по ссылке.

Ключевая строка :

error = ps2x.config_gamepad(12, 11, 10, 13, true, true);

2 этап. Работа с шилдом

Информации по шилду на удивление не много, хотя штука крайне удобная для самых разных проектов, возможностей с избытком, и всё очень компактно

-3

Страница с описанием шилда

Более подробная информация о нём же тут

-4

Есть готовое приложение для смартфона, если подключать по BT

Для работы с моторами служит модуль TB6612 и есть ряд примеров тут:

#define PWMD 3

#define DIRD 2

#define PWMC 5

#define DIRC 4

#define PWMB 6

#define DIRB 7

#define PWMA 9

#define DIRA 8

Т.о. моторы задействованы на пинах с 2 по 9

Сервоприводы работают по стандартной схеме для PCA9685 от adafruit через i2c

Важно перед запуском

у меня всё стабильно стало работать только после подключения внешнего питания 5 В к клеммам шилда

Так же джойстик очень быстро ест батарейки ААА, а значит нужно менять их на аккумуляторы. Хотя рабочее напряжение и 3 вольта, но он прекрасно работает и от 4,2 В. Для врезки разъёма с модулем контроля заряда, придётся немного поработать бормашинкой или паяльником ( у кого что есть) или сразу брать нормальный аккумуляторный вариант джойстика. всего лишь 2 вечера и всё работает

-5

Работающий тестовый код по ссылке