Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Arduino Leonardo и авиа-симулятор. Переводим джойстик на датчики Холла и делаем педали.

2020-05-14

Всі статті →

Богдан Норкин

Длинными карантинными вечерами захотелось скоротать время в леталке. Достал старый, добрый Logitech Attack 3 и… вот беда, его резисторы совсем умерли. И такие мелкие просто так купить, разве что заказывать на Али и ждать месяц.

Ждать не хотелось, да и летать без педалей тоже не хотелось. Зато на полочке лежала купленная когда-то давно Arduino Leonardo https://arduino.ua/prod260-arduino-leonardo-a000057. Основная фишка этой платы в том, что она построена на базе микроконтроллера ATmega32U4, в котором есть конвертор USB и он может подключаться не только, как виртуальный СOM порт, но и как HID – мышка, клавиатура, джойстик или даже руль. Leonardo имеет 12 аналоговых входов, т.е. мы можем сделать контроллер с 12 осями – все ограничено только нашей фантазией. Ну что же, нам как раз это и нужно, будем оживлять джойстик и делать педали, решил я.

Для начала джойстик. Я давно хотел избавиться от постоянно выходящих из строя резисторов. Штатный микроконтроллер (им оказался Cypress CY7C63221A/31A) был безжалостно отправлен на полочку, (хотя datasheet на него легко гуглится) и его место гордо занял Leonardo (к сожалению в корпус плата не поместилась). На место резисторов клеевым пистолетом были неподвижно приклеены датчики Холла (датчик, реагирующий на изменение магнитного поля, подробнее о них можно почитать, например на: http://robocraft.ru/blog/electronics/594.html Honeywell SS495A https://sensing.honeywell.com/SS495A-S-linear-and-angle-sensor-ics, а на оси - маленькие подвижные неодимовые магнитики. Вышло немного не эстетично, но надежно, работает и регулируется, достаточно немного подогреть паяльником или, в идеале, феном. Подключаются датчики просто элементарно – подаем питание (они прекрасно работают от 5в), а сигнальный провод заводим на аналоговый вход Ардуино. Теперь скачиваем с github библиотеку https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-2.0 Эта замечательная библиотека превращает ардуинку в джойстик, руль или GamePad. Библиотека поддерживает 11 осей, 32 кнопки и 2 hatSwitch.

Распаковываем и кладем в папку с билбилотеками Ардуино, на Windows по умолчанию это %userprofile%\Documents\Arduino\libraries С библиотекой идет много примеров, на всякий случай приведу свой первоначальный скэтч - джойстик с одной кнопкой, педалями и газом. О том, как подключить кнопки, читаем здесь http://arduino.ru/tutorials/button, для этого понадобится резистор, у меня под рукой были на 100К.

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,

1, 0, // Button Count, Hat Switch Count

true, true, false, // X ,Y, no Z Axis

false, false, false, // No Rx, Ry, or Rz

true, true, // Rudder and Throttle

false, false, false); // No accelerator, brake, or steering

int button_0 = 10; // Для примера - единственная кнопка на pin10

int button_0_state = 0;

unsigned int xAxis_ = 0;

unsigned int yAxis_ = 0;

int Rudder_ = 0;

int Throttle_ = 0;

const bool initAutoSendState = true; //иначе придется обновлять состояние контроллера вручную

void setup()

{

Joystick.begin(); // инициализируем библиотеку

pinMode(button_0, INPUT); // назначаем пин 10, на котором у нас кнопка, как вход.

}

void loop()

{

button_value = digitalRead(button_0);

Joystick.setButton(0,button_value);

xAxis_ = analogRead(A0);

Joystick.setXAxis(xAxis_);

yAxis_ = analogRead(A1);

Joystick.setYAxis(yAxis_);

Throttle_ = analogRead(A2);

Joystick.setThrottle(Throttle_);

Rudder_ = analogRead(A3);

Joystick.setRudder(Rudder_);

}

Теперь подключаем это все к компьютеру, идем в настройки USB game controllers, видим там Arduino Leonardo, идем в настройки и если видим джойстик с одной кнопкой, газом и рулем направления, то переходим к настройке магнитов. Заходим в калибровку, ставим галочку в поле Display Raw Data.

Удаляя или приближая магнитик к датчику добиваемся того, чтобы в центральном положении показания были как можно ближе к нулю, а при движении до упора диапазон значений имел как можно больший разброс, но не выходил за пределы signed integer -32768 до 32767. Я установил более-менее грубо с 3 попытки, работа меня более чем устроила, захотелось улучшить механику.

Теперь педали! В ход пошло то, что было под рукой – лобзик, деревянные мебельные щиты и линейные направляющие от мебельных ящиков. Все собрано на подшипниках, но так как под рукой датчиков больше не оказалось, был вставлен переменный резистор на 10К. С горяча приклеил термоклеем еще пару таких же резисторов к джойстику – газ и триммер. Откалибровал, подключил 5 кнопок на ручке (думал еще hatswitch приделать, но 4 кнопки сверху оказалось вполне достаточно, чтобы переключать вид), и можно лететь! Осталось придумать какие ни будь пружины, чтобы педали возвращались в центральное положение и заменить Леонардо на https://arduino.ua/prod2671-klon-arduino-micro, чтобы закрыть корпус.

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Arduino Leonardo и авиа-симулятор. Переводим джойстик на датчики Холла и делаем педали. "
5 з 5
зроблена на основі 1 оцінки 1 клієнтських відгуку.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Олег
11.06.2020 09:21:03
Тема интересная, я делал контроллер на базе мега8 MJoy от Mindaugas Milasauskas. В мега8 влазит симулятор USB контроллера (програмный) и разрадности АЦП хватает на 1024 отсчета на ось. Датчики Холла очень хорошо себя показали, но следующая стадия развития это датчики направленности магнитного поля.
оплата картами Visa і MasterCard