Zobacz temat - [R All]DIY Konwerter do sterowania z kierownicy.
 
Forum Klubu ROVERki.pl

Car-audio, nawigacje, radia CB - [R All]DIY Konwerter do sterowania z kierownicy.

BigBoyPL - Sro Maj 11, 2016 22:46
Temat postu: [R All]DIY Konwerter do sterowania z kierownicy.
Witam w moim projekcie :P Może jeszcze nie najwyższych lotów ale powoli do celu.

Do czego służy ten konwerter?
W obecnej sytuacji konwertuje on sygnał analogowy bezpośrednio z pilota przy kierownicy z R75/MG_ZT do postaci cyfrowej. W skrócie zamieniamy przyciski na coś w stylu klawiatury na USB.
Jednakże dzięki zastosowaniu Arduino można zaprogramować praktycznie wszystko, ograniczeniem jest tylko wyobraźnia.

Co jest potrzebne?
Potrzebna jest płytka Arduino. Program zadziała na wszystkich Arduino z procesorami ATMega: 8u2, 16u2, at90usb8, 32u2, 32u4 jednakże ja polecam wybrać coś z ATMega32u4, może to być klon Sparkfun "ProMicro", obecnie chyba najlepsza cena. Niektóre płytki różnią się też zasilaniem, dostępne są np. 5V oraz 3.3V. Dokładniejsza jest wersja 5V ponieważ od 0 do 5V mamy rozdzielczość 1024, w przypadku 3.3V jest mniejsza ale też będzie działać po drobnej modyfikacji programu.
Dodatkowo potrzebny jest oczywiście komputer z zainstalowanym środowiskiem Arduino, biblioteką HID by NicoHood oraz w przypadku płytek innych firm biblioteką dodatkowych płytek.

Jak wygląda kompatybilność?
Urządzenie jest wykrywane jako HID czyli tak samo jak mysz czy klawiatura USB. Testowane na 2 urządzeniach z różną wersją Androida i nie potrzeba żadnych dodatkowych programów czy sterowników. Działa również pod Windowsem jednakże czasami system może zapytać o sterowniki.

Schemat i podłączenie.

Słownie: Przy kostce od radia mamy 2 przewody od sterowania pilotem. Jeden podłączamy do pinu 5V, drugi do pinu A0, między pinem A0 a GND potrzebny jest rezystor 1KOm. Jeśli wcześniej mamy wpięty konwerter K-BUS YWQ100031 (biała obudowa za radiem)

Należy go wypiąć i połączyć przewody wychodzące z wchodzącymi bądź wpiąć się bezpośrednio przed tym konwerterem.

Instalacja.
Z Zainstalowaniem programu każdy powinien sobie poradzić. Link
Chciałbym się skupić co należy zrobić po zainstalowaniu.
Jeśli naszej płytki nie ma na liście należy ją zainstalować. Przykład Sparkfun ProMicro oraz inne klony z napisem ProMicro (ATMega32U4 5V).
Poradnik po angielsku
Podłączamy nasze Arduino do komputera, oczywiście sam nie znajdzie sterowników, pobieramy paczkę ze strony producenta płytki. Sterowniki nie mają certyfikatu podpisanego cyfrowo, jeśli macie windows 8, 8.1 lub 10 należy włączyć jednorazowo obsługę niecertyfikowanych sterowników. Instalujemy sterowniki tak jak na obrazkach,
następnie kiedy już nasze Arduino jest widoczne w systemie trzeba też zainstalować bibliotekę w środowisku. Klikamy Plik>Preferencje i wklejamy adres do dodatkowych płytek :
Kod:
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
. Następnie wybieramy Narzędzia>Płytka...>Menadżer Płytek, w filtrze wpisujemy "Sparkfun AVR" i instalujemy. Od tej pory w Narzędzia>Płytka mamy już swoje urządzenie które wybieramy. Dodatkowo w menu Narzędzia wybieramy odpowiedni Procesor oraz wirtualny port COM. Należy pamiętać że przy zmianie gniazda USB zmienia się też numer portu COM i trzeba go od nowa wybrać.

Instalowanie dodatkowych bibliotek.
Wchodzimy w Szkic>Dołącz bibliotekę>Zarządzaj bibliotekami w filtrze wpisujemy "HID-Project" i instalujemy. To samo robimy jeśli w przyszłości będziemy potrzebować innych bibliotek, np. do Enkodera.

Jeśli wszystko jest ok możemy przystąpić do wgrywania pierwszego, testowego programu. Jeśli mamy oryginalne Arduino (np. Leonardo) możemy wgrać program z Plik>Przykłady>Basics>Blink. Na płytce jest dioda led o nazwie L podłączona do pinu 13. Jeśli mamy niestandardową płytkę i nie mamy żadnej testowej diody led, są tylko RX i TX możemy posłużyć się kodem z linku Blink, wystarczy usunąć wszystko ze szkicownika i wkleić skopiowany kod.
Następnie klikamy ptaszek w kształcie V w lewym górnym rogu (Zweryfikuj), jeśli wszystko zakończy się pomyślnie dostaniemy tylko komunikat zwrotny o zajętości pamięci w Arduino, w przeciwnym wypadku wyświetli się błąd z pomarańczowym tekstem. Jeśli wszystko jest i nasze Arduino jest podłączone możemy kliknąć przycisk Wgraj (strzałka w prawo) i po chwili zobaczymy jak nasze arduino miga.

Jeśli mamy możliwość zaprogramować nasze arduino w samochodzie możemy najpierw sprawdzić działanie pilota oraz czy połączenia są poprawne.
Otwieramy program Plik>przykłady>Basics>AnalogReadSerial. Polecam zmienić delay(1); na delay(100); w naszym przypadku jest to szybkość wyświetlania wartości wciśniętych przycisków.
Weryfikujemy program, jeśli wszystko jest ok klikamy Wgraj. Nie zamykamy środowiska Arduino, klikamy Narzędzia>Monitor Szeregowy.
Klikamy po kolei każdy przycisk i zapisujemy jego wartość. Warto to sprawdzić ponieważ czasami tolerancja rezystorów może wyjść poza zakresy jakie przyjąłem. Przy okazji sprawdzamy działanie całego układu oraz wszystkich przycisków.

Na końcu możemy wgrać (a przede wszystkim przeczytać) ten program:
http://pastebin.com/Sp1FKkPX
Dla każdego przycisku mamy przedziały wartości jak w matmie ;] Wszystko powinno się zgadzać ale trzeba po prostu sprawdzić czy wszystko jest na 100% ok. W razie czego trzeba po prostu zmienić odpowiednio przedziały.

dawidd - Czw Maj 12, 2016 07:01

:brawo:
czekam na płytkę i robię :)
Na pewno nie tylko w roverach Twój projekt wyląduje. Kawal dobrej roboty

Remigiusz - Czw Maj 12, 2016 07:13

Powinieneś dodać jeszcze bibliotekę

Kod:
https://github.com/NicoHood/HID/blob/master/src/HID-APIs/ConsumerAPI.h


do projektu :) Jeżeli dobrze rozumiem to to tylko daje sygnał na Tableta :P :roll:

BigBoyPL - Czw Maj 12, 2016 07:49

Dlatego właśnie trzeba zainstalować hid-project. Służy on do definiowania niestandardowych funkcji. Bez niego można zrobić tylko prostą klawiaturę a-z ctrl shift itp. oraz funkcje myszki.
Wymagana jest nowsza atmega przynajmniej 8u8 bo ma w środku bezpośredni konwerter usb a nie rs232 do usb jak starsze. Tylko dzięki temu można zmieniać typ wykrywanego urządzenia USB.

dawidd - Nie Maj 22, 2016 21:45

Dziś zmontowałem pilota i sprawdziłem w aucie. Generalnie działa, przyciski bez korekt rezystancji w programie są zidentyfikowane poprawnie. Pisze generalnie, bo jest jedno ale. W programie nie ma nic o wykluczeniu drgań styków w mikroswitchach co skutkuje tym, ze przy jednokrotnym wciśnięciu przycisku w tablecie wywołuje akcje kilkukrotnego wciśnięcia przycisku. BigBoyPL, poradzisz coś?
Ale sam projekt jest bajecznie prosty, instalacja arduino opisana tak ze tylko głupi by sobie nie poradził. Naprawdę BigBoyPL, zrobiłeś kawał dobrej roboty. Dzięki wielkie, bo chyba ja Ci najwięcej trułem i dalej truje w temacie pilota :)

BigBoyPL - Pon Maj 23, 2016 15:47

Jedyna rzecz jaką można zmienić bez kombinowania to zwiększenie wartości delay. Jak dasz mniej to 1 krótkie naciśnięcie zmieni ci od razu głośność do skrajnej. Jak dasz za dużo to trzeba będzie długo trzymać.
dawidd - Pon Maj 23, 2016 20:36

zmieniłem delay na 150, na "stole" było ok, ale w aucie jeszcze drgania styków dają o sobie znać. Jeszcze zmienię do 200 i powinno byc ok. Generalnie pilot działa jak trzeba. Jeszcze raz wielkie dzięki.
_Matt_ - Pon Maj 23, 2016 20:40

Właśnie przyszło do mnie dzisiaj Pro Micro więc na dniach też będę montował i zdam relacje :)
Remigiusz - Pon Maj 23, 2016 20:45

BigBoyPL, Zamiast delay lepiej uzyc funkcji millis() i liczyc czas jak dlugo sie faktycznie naciska i przez to zrobic rozne mozliwosci czy sie naciska non stop czyli trzyma czy tylko naciska krotko.
BigBoyPL - Wto Maj 24, 2016 21:48

Oczywiście że można zrobić sporo. Nie piszę tego z sarkazmem. Jeśli dobrze kojarzę tutorial opisuje nawet cały kod Debounce dla przycisków z wykorzystaniem millis.
Remigiusz, widziałem gdzieś na forum twój projekt z wyświetlaczem. Jako osobie która dopiero poznaje Arduino oraz C++ zajęłoby mi to sporo czasu ;]

Wracając na ziemię mogę powiedzieć że już dawno mógłbym popisać coś odnośnie enkodera, podpatrzeć w gotowcach i przykładach itp.
Jedna wymówka jest taka że praktycznie codziennie robię coś jakiemuś znajomemu albo sobie związanego z elektroniką a druga jest taka że z natury jestem leniwy ;d

dawidd - Pią Maj 27, 2016 07:48

BigBoyPL, a jest możliwość dopisania do kodu takiego polecenie żeby po podaniu stanu wysokiego na któreś wejście w płytce uruchamiał sie konkretny program, w moim wypadku easycap viewer?
BigBoyPL - Pią Maj 27, 2016 18:22

Musisz mieć do tego aplikacje na androida działającą w tle, np. External Keyboard Helper. Później możesz skorzystać z przykładów klawiatury.
_Matt_ - Nie Maj 29, 2016 14:37

Ok wszystko podłączone i działa. Nie obyło się bez problemów ale to była wina sterowników. Faktycznie dobrze jest ustawić wartość delay na min. 200 bo przy 100 ciężko jest włączyć play :mrgreen: Wielkie dzięki :piwko: BigBoyPL
bartek_tychy - Pon Lip 11, 2016 21:13

Witam

A ja niestety mam problem, faktem jest ze projekt nie laduje w roverze tylko chevrolecie ale mniejsza o to.
Komputer arduino widzi na krótko spięte z kompem niby działa niestety nexus juz w żaden sposób nie reagujemy w ogóle po usb nie daje zasilania dopiero po podłączeniu z zewnątrz 5v arduino ożywa ale dalej tablet nie reaguje.
Mam huba i podpiętego daca i to działa.

Może jakieś sugestie dzięki z góry

BigBoyPL - Wto Lip 12, 2016 20:07

Ciekawe ;]
Skoro DAC działa to znaczy że tablet jest w trybie OTG i daje zasilanie.
Z drugiej strony skoro Arduino świeci podłączone do komputera to też to zasilanie odbiera.
Za mało danych. Najlepiej foto jak to wszystko jest podłączone razem z przejściówkami itp.

bartek_tychy - Sro Lip 13, 2016 19:32

Witam ponownie,

Panowie problem rozwiązany, a okazało się że mój hub usb był uszkodzony po wymianie na nowy DAC działa poprawnie, nie wiesza się i sterowanie z kierownicy ruszyło od razu po podpięciu.

BigBoyPL dzieki za opracowanie tego manuala, dzieki Tobie zrobiłem to czego najbardziej brakowała przy naszych samochodowych tabletach, przy okazji czy kod źródłowy programu może być rozpowszechniany dalej ?

Pozdro

BigBoyPL - Czw Lip 14, 2016 17:45

Oczywiście, nie ma z tym żadnego problemu. Jedynie jeśli to nie problem chciałbym wiadomość na pw gdzie to idzie żeby w razie czego mógłbym pomagać.
dooddie - Pon Paź 17, 2016 17:13

Witam
Na początku podziękowanie dla BigBoyPL-a za fajną prostą i dokładną instrukcje, świetna robota, osoby takie jak ja nie mające styczności z elektroniką powinny sobie poradzić. Ja sobie dałem rade.
Mam pytanie do fachwca.
W moim aucie pilot posiada trzy kabelki zamiast dwóch. Część przycisków vol+, next i mode idą na jednym kablu, a vol-, prev na drugim.
Żeby nie było łatwo to vol+ i vol- mają tą samą wartość (607), tak jak next i prev (865) . W załączniku przedstawiam schemat jak bym połączył kable pilot-arduino i szkic programu po przeróbce.
BigBoyPL proszę powiedz czy dobrze jest to zrobione?
Z góry dziękuje za pomoc.
Pozdrawiam
Dooddie

BigBoyPL - Sro Paź 19, 2016 16:44

Dziś akurat mam wolne, nazbierało mi się 6 stron z nowych tematów do przeczytania ale czytam po kolei :D
dooddie, y= analogRead(A2); ale to byś pewnie zauważył :)
Niestety nie napisałeś co to za pilot więc nie mogę sobie tego wyobrazić :)
Najprościej to podłącz wszystko tak jak na schemacie i wrzuć do Arduino przykład AnalogReadSerial, potem zobacz co ci wypluje Monitor portu COM dla każdego przycisku, następnie w programie zmień A0 na A2 i powtórz czynność :)

Warto byłoby wrócić do tego projektu, mam gdzieś radio z E39 i chyba wyciągnę z niego enkoder :)

thorgalxxx - Czw Paź 20, 2016 20:05

Napisałem w dziale tabletu zamiast tutaj. Zrobiłem pilota i wszystko jest ok poza vol -. Wartości przycisku zmierzone w aucie są na poziomie od 950 do 980. Co zmienić w kodzie żeby przycisk chodził. Próbowałem sam zmienić wartość na x<1000 i wartość wpisałem 980, co spowodowało zadziałanie przycisku, ale na stałe czyli jakby był wciśnięty ciągle.

Czy taki zapis będzie ok?

/*Car remote sketch by Bigboy™
Ten kod uzywa biblioteki HID od NicoHood
Zobacz dokumentacje Projektu HID aby dowiedziec sie wiecej.
https://github.com/NicoHood/HID/wiki/Consumer-API
idealne wartosci przyciskow 0 = nic 255 = mode 392 = prev 551 = next 749 = vol+ 1023 = vol-
rezystancje : pullup 2,2K, 3180R(1680+1500), 1680R(860+820), 860R(390+470), 390R, 0R
Wszystkie funkcje https://github.com/NicoHood/HID/blob/master/src/HID-APIs/ConsumerAPI.h

*/

#include "HID-Project.h"

void setup() {
Consumer.begin();
}

void loop() {
delay(200); //szybkosc dzialania przyciskow
int x;
x = analogRead(A0); //A0 to pin odczytu wartosci
if ( (x >= 900) && (x <= 1000) ) { //wartosc 970
Consumer.write(MEDIA_VOL_DOWN); //przycisk vol-
}
else if ( (x >= 700) && (x <=800) ) { //wartosc 749
Consumer.write(MEDIA_VOL_UP); //przycisk vol+
}
else if ( (x >= 500) && (x <=600) ) { //wartosc 551
Consumer.write(MEDIA_NEXT); //przycisk next
}
else if ( (x >= 350) && (x <=450) ) { //wartosc 392
Consumer.write(MEDIA_PREV); //przycisk prev
}
else if ( (x >= 200) && (x <=300) ) { //wartosc 255
Consumer.write(MEDIA_PLAY_PAUSE); //przycisk mode
}
}

dooddie - Czw Paź 20, 2016 21:10

Cześć
Jak dla mnie owinno być OK,
Pozdrawiam
Dooddie

BigBoyPL - Czw Paź 20, 2016 21:57

Oczywiście że będzie OK :)
thorgalxxx - Pią Paź 21, 2016 20:24

Wszystko działa. WIELKIE DZIĘKI. Tego mi brakowało. Zamieniłem jeszcze miejscami podgłaśnianie i następny utwór bo jakoś wygodniej mi naciskać. BigBoy jesteś wielki :mrgreen: :mrgreen: :mrgreen:
Organ18 - Sro Paź 11, 2017 13:57
Temat postu: Pytanie
Cześć wszystkim zacznę od takiej kwestii planuje zakup rowera 75 urok niczym jaguar , a wnętrze jak rolls royce jak się uda to jeszcze w tym roku w wakacje :) ale przechodzę do konkretu w domu mamy zafire niestety poprzedni właściciel zdemontował sterowanie przy kierownicy ponoć to poprzedni a jak skontaktowałem się z jeszcze wcześniejszym na podstawie zdjęć wywnioskowałem że jednak ten od którego kupiłem :( chce odbudować takie sterowanie piloty możliwe że na dniach będę miał ale mam problem chce zbudować takie sterowanie jak tutaj jest pokazane że będę obsługiwał ekran lcd , ale u wujka googla widzę że do kostki radia zazwyczaj do iso C wpina się 3 kable a tutaj było pisane o 2 kablach na jakiej zasadzie to ma działać bo mam w domu arduino UNO już bardzo dawno jak i sporo części od mikrokontrolerów itd. W przyszłości przy zakupie rowerka chce przenieść ten projekt na mojego rowerka :) ale chce mamie oddać zafirke niech zazna luksusu sterowania z kierownicy :) dlatego proszę o pomoc jeżeli mam radio z 3 kośćmi iso A , B , C na A jest zasilanie , B głośniki a C jest sterowanie kierownicą , zestaw głośnomówiący ... itd. to które piny co muszą zawierać żeby pociągnąć do arduino i tej klawiatury.

[ Dodano: Sro Paź 11, 2017 13:57 ]
Cześć wszystkim mam firmowe autko renault mastera 2010r Tam poprzedni właściciel wyjoł orginalne radio i zostawił tylko sterowanie przy kierownicy a wyświetlacz (częstotliwości + zegarek ) zdemontował na rzecz cb-radia :/ udało mi się od niego odkupić te radyjko ale tam nie ma wyświetlacza bo był zewnętrzny ( nie umiał go znaleść ) jak kupowałem tak więc mam radio bez wyświetlacza haha wpadłem na pomysł zrobienia tabletu do niego że pilotem przy kierownicy wybieram sobie np. nawigacje i mam offline map , wybieram radio i mi pokazuje częstotliwości z radia :) ale powiedzcie mi taką rzecz z pilota idzie do radia kostka jak dobrze kojarze to ISO C i co dalej zrobić mam wypiąć dwa kable z kostki iso i co dalej wyczytałem że jeden z pinów dajemy pod 5v drugi pod A0 czy tylko tyle no i oczywiście potem wgrać sketch do arduino :D tylko co z kablami z góry dzięki za pomoc

Remigiusz - Sro Paź 11, 2017 14:45

Sterowanie z kiery to nic innego jak rezystory wiec tak podajesz na jeden pin 5v a drugi pin z kiery na analogpin do ų-controllera
dawidd - Sro Lis 01, 2017 07:00

BigBoyPL, mam pytanie. Czy w do pilota dało by sie zaprogramować przycisk który by działał jak oryginalny POWER ? Nieraz jak zwieche załapie tablet albo się rozładuje to by sie taki przycisk przydał, a nie musiał bym pruć tableta zęby wyciągać przycisk