Привет друзья! Ну очень мне захотелось установить мультируль в машину. Вот только как подключить его, да еще и к планшету? Купил на али всякие джойстики, хотел потроха от них скрестить с рулём, т.е. пилить, сверлить, паять, подгонять всё так чтобы плата от джойстика встала под кнопки руля. То что заказал взаимодействует с планшетом через блютуз. Вроде-бы хорошо, что не нужно тянуть провода, но с другой стороны, как подавать питание на джойстик (не батарею же менять в руле)? Да и после использования джойстика в том виде как он есть, возникали часто проблемы с синхронизацией, всё меньше желания было в его использовании.
Еще весной решился и всё-таки приобрёл руль от Mazda 6 gg, когда разобрал его и увидел в каком состоянии внутренности, рука не поднялась что-то там пилить, паять. Стал разбираться как же там всё работает. Один провод на подсветку, второй провод на корпус, третий провод подходит на все кнопки, только через резисторы разного потенциала. Изучив немного информации в интернете, выяснил что кнопки называются резистивные (так стало проще пользоваться поисковиком). Так же на разных сайтах в том числе и Д2 есть немало информации как подключить мульти-руль через ардуино к планшету.
На али были приобретены набор для начинающего ардуинщика и сама плата ардуино микро.
Всю необходимую информацию по подключению и программированию вычитал на этом сайте здесь же скачал архив со всеми программами, установил на ноутбук, подключил руль к плате ардуино а её саму к ноутбуку.
Далее скопировал код программы с сайта
1. int rknop;
2.
3. void setup()
4. {
5. Serial.begin(9600);
6.
7. pinMode(rknop, INPUT);
8. }
9.
10. void loop()
11. {
12. rknop=analogRead(A0);
13. Serial.println(rknop);
14. delay(500);
15. }
и вставил его в окно программы. После окончания загрузки кода в плату ардуино, открыл вкладку «инструменты» далее «монитор последовательного порта», после чего открывается окно где каждые пол секунды появляется 0. Если нажать на какую-либо из кнопок на руле, то вместо 0 появится значение этой кнопки. Так нажав все кнопки поочерёдно я узнал значения каждой из них и записал всё это на листок бумаги.
После чего скопировал следующий код с указанного выше сайта
1. int rknop; // это переменная которая хранит значения наших кнопок.
2. void setup()
3. {
4. Serial.begin(9600); //это скорость соединения с компьютером (для сериал монитора в нашем случае)
5.
6. pinMode(rknop, INPUT);
7. }
8.
9. void loop()
10. {
11. rknop=analogRead(A0); //Считываем значения на порту A0 и записываем значения в переменную rknop
12. Serial.println(rknop); //Отправляем данные переменной rknop на компьютер
13. delay(500); //небольшая задержка в пол секунды, её можно удалить но значения в сериал мониторе будет меняться очень быстро
14.
15. ///////////////////////////////////////////
16. if(rknop < 960 && rknop > 900) //здесь мы делаем условие. Т.е если у наз значение переменной rknop больше 900 и меньше 960 то делаем какоето действие которая ниже. На сколько мы помним при нажатии кнопки S1 у нас значения были ~930 так вот мы могли написать просто if(rknop == 930) что означает если rknop равно 930 то делем дейсвие которое ниже, но наши значения немного игрют поэтому мы задаем никий промежуток от 900 до 960
17. {
18. Remote.next(); //отправляем команду следующая песня
19. delay(200); //делаем небольшую задержу чтоб устройство успело отправить необходимые команды на планшет или компьютер и не засыпать его командами
20. Remote.clear();//очищаем команду
21. }
22.
23. ////////////////////////////////////////////
24. if(rknop < 880 && rknop > 820)
25. {
26. Remote.previous(); //предыдущая песня
27. delay(200);
28. Remote.clear();
29. }
30.
31. //далее все повторяется, просто добавляйте значения (которые считали с кнопок) и команды (команды ниже) столько сколько у вас кнопок.
32. }
Команды необходимые для управления планшетом:
Remote.next(); //следующая песня
Remote.previous(); //предыдущая песня
Remote.play_pause(); //плей и паузу
Remote.increase(); //громкость прибавить
Remote.decrease(); //громкость убавить
Remote.mute(); //Убрать звук
Remote.play(); // Воспроизвести
Remote.stop(); //Остановить воспроизведение
Remote.forward(); //Ускорить воспроизведение
Remote.rewind(); //Обратное воспроизведение
Записал в код значения своих кнопок, добавил необходимые команды и загрузил всё это в плату. Но вот только ничего не заработало. Скачал другую версию Arduino 1.6.5,
выполнил все необходимые действия и на ноутбуке всё заработало. Т.е. рулём я мог увеличить, уменьшить громкость, а также переключить треки в плеере!
С планшетом всё это может работать только в режиме OTG, подключил и всё действительно работает. Но теперь планшет не заряжается, лучший выход из всего этого удалить из планшета батарею, запитав на прямую. Тогда освободится разъём микро юсб, к которому можно подключать все что угодно. И снова в помощь али, заказал всё необходимое
и пока ждал доставки стал экспериментировать с кодом. В итоге получилось вот так:
int rknop;
int relPin = 3;
unsigned long flag = 0;
unsigned long eventTime = 0;
void setup()
{
Serial.begin(9600);
pinMode(rknop, INPUT);
digitalWrite(relPin, LOW);
pinMode(relPin, OUTPUT);
}
void loop()
{
rknop=analogRead(A3); Serial.println(rknop);
if(millis()-eventTime>1500 && rknop < 1020 && rknop > 1000) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 4;
}
if( flag == 4) // действие после короткого нажатия кнопки, Previous
{
digitalWrite(relPin, LOW);
delay(10);
}
if(rknop < 800 && rknop > 650) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
flag = 3;
}
if( flag == 3) // действие после короткого нажатия кнопки, Previous
{
digitalWrite(relPin, HIGH);
delay(100);
}
///////////////////////////////////////////
if(rknop < 980 && rknop > 950)
{
Remote.next(); //отправляем команду следующая песня
delay(200);
Remote.clear();//очищаем команду
}
////////////////////////////////////////////
if(rknop < 950 && rknop > 900)
{
Remote.previous(); //предыдущая песня
delay(200);
Remote.clear();
}
////////////////////////////////////////////
if(rknop <= 1000 && rknop >= 980)
{
Remote.increase(); //звук громче
delay(200);
Remote.clear();
}
////////////////////////////////////////////
if(rknop < 1020 && rknop > 1000)
{
Remote.decrease(); //звук тише
delay(200);
Remote.clear();
}
////////////////////////////////////////////
if(rknop < 900 && rknop > 800)
{
Remote.play_pause(); //плей пауза
delay(200);
Remote.clear();
}
}
В этом коде добавил возможность управления реле, которое переключало планшет из режима зарядки в режим OTG, при зажатии назначенных кнопок.
Руль от мазды 6 встал как родной, даже шлейф не понадобился.
А самое главное провод кнопок руля от разъема шлейфа до разъёма магнитолы уже был установлен штатно.
Не было только провода подсветки кнопок.
Получив все посылки со всем необходимым начал процедуру извлечения батареи из планшета
Снял батарею и проверил напряжение и полярность на пятачках платы контроллера заряда
отрезал плату от батареи и припаял к пятачкам провода для подключения блока питания
так-же минусовой провод задублировал на плату планшета, т.к. после отключения батареи от платы контроллера она уходит в блокировку по минусу. Конденсатор и диод подключил для того чтобы при запуске двигателя планшет не выключался, схему взял здесь.
Напряжение блоке питания отрегулировал на 4.0v
на планшете заряд при этом 70%. После отключения питания планшет несколько секунд работает от конденсатора.
Далее нужно поставить перемычку на плате планшета что-бы он все время работал в режиме OTG
Попробовал подключить разные устройства, всё работает!
Установил всё это в машину и радуюсь результату! Конечно теперь много идей приходит в голову, как например установка юсб хаба для подключения разных устройств к планшету, на плате ардуино много свободных портов что даёт возможность расширить например управление питанием планшета и многое другое.