Каталог
|
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, чтобы закрыть корпус.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Олег
11.06.2020 09:21:03
Тема интересная, я делал контроллер на базе мега8 MJoy от Mindaugas Milasauskas. В мега8 влазит симулятор USB контроллера (програмный) и разрадности АЦП хватает на 1024 отсчета на ось. Датчики Холла очень хорошо себя показали, но следующая стадия развития это датчики направленности магнитного поля.
|