Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Budowa symulatora samochodu i elektronika

ziomek673 06 Jul 2017 11:17 1908 21
Computer Controls
  • #1
    ziomek673
    Level 5  
    Cześć
    Buduje symulator samochodu z deski rozdzielczej i właśnie robię elektronikę.
    Wszystkie włączniki (kierunkowskazy, awaryjne, ręczny itp) podłączam do USB ZERO DELAY a potem przez USB do komputera.
    W grach problem jest taki, że gdy np. Zaciągnę ręczny (taka dźwignia normalnie z samochodu) to ręczny się włącza, ale gdy puszczam dźwignie na dół to hamulec ciągle jest zaciągnięty i muszę jeszcze raz zaciągnąć i puścić żeby się wyłączył. Działa tak jak na klawiaturze, że klikam to coś się wlacza, a jak klikam jeszcze raz to się wyłącza.
    Jest jakiś sposób na to, żeby przy każdej zmianie stanu przełącznika był wysyłany impuls do komputera? Że np. Klikam na włącznik awaryjnych to idzie jeden sygnał który je włącza, a jak "odklikam" to jest kolejny który je wyłącza?

    Jeśli ktoś nie zrozumiał, to niech pisze w komentarzach :p nie widziałem jak to inaczej napisać...

    Jakby gry były potrzebne, to:
    Dirt 3
    ETS 2
    BeamNG.drive
    City car driving
  • Computer Controls
  • #2
    User removed account
    Level 1  
  • #3
    D214d3k
    Level 39  
    Lepiej zamontować krańcówki kaskadowo. 1 na elastycznej blaszce nad drugą. Opuszczasz i załącza ta na blaszce a za chwile blaszka załącza drugą. Przy puszczaniu to samo tylko kolejność odwrotna. Krańcówki łączysz równolegle.
  • #4
    Loker
    Level 39  
    Jeśli nie chcesz się bawić mechaniką (krańcówki) i wykorzystać np. istniejący czujnik zaciągnięcia ręcznego to musisz wstawić pomiędzy istniejący czujnik (przycisk) a USB ZERO DELAY przerzutnik monostabilny wyzwalany zarówno zboczem narastającym jak i opadającym. Np. coś takiego: https://www.elektroda.pl/rtvforum/topic1136619.html
  • #5
    krzysiek_krm
    Level 40  
    Witam,
    z opisu wynika, że tych sygnałów jest kilka lub kilkanaście.

    Moim zdaniem najprościej będzie zastosować jakiś mikrokontroler, choćby proste i tanie jak barszcz Arduino, który będzie monitorował wszystkie sygnały, wykrywał oba przejścia: wyłączony - załączony oraz załączony - wyłączony i w odpowiedzi generował sygnały (impulsy) symulujące wspomniane kliknięcia na klawiaturze.

    Pozdrawiam
  • Computer Controls
  • #6
    ziomek673
    Level 5  
    Dzięki za odpowiedzi,najpewniej skorzystam z Arduino.
    Ale mam kilka pytań odnośnie tego.
    Arduino miałbym używać jako joystick? Jak zrobić taki program?
    I czy może być podróbka Arduino?
  • #7
    krzysiek_krm
    Level 40  
    ziomek673 wrote:
    I czy może być podróbka Arduino?

    Może być, myślę jednak, że nawet podróbkę należy kupić od "porządnego" dostawcy, żeby nie naciąć się na jakieś dziadostwo.

    ziomek673 wrote:
    Arduino miałbym używać jako joystick? Jak zrobić taki program?

    Domyślam się, że w Twoim urządzeniu jest pewna liczba mechanicznych przełączników. Musisz zastosować taką płytkę wspomnianego Arduino, która będzie miała dwukrotnie więcej pojedynczych wejść / wyjść w stosunku do liczby przełączników w Twoim układzie.
    Każdy przełącznik podłączasz do jednego wejścia, stosując zewnętrzny lub wewnętrzny pull-up. Dodatkowo podłączasz inne wyjścia do Twojego interfejsu, tyle wyjść ile jest przełączników.
    Piszesz odpowiedni program.
    Program kręcąc się w pętli sprawdza stan przełączników, maskuje drgania podczas przełączania i wykrywa stany stabilne: stabilnie wyłączony, stabilnie załączony. Mając już te stabilne stany bada przejścia: wyłączony - załączony oraz załączony - wyłączony. W odpowiedzi na te przejścia wysyła na odpowiednie wyjścia dołączone do Twojego interfejsu krótkie impulsy, dajmy na to 0.5 sekundy, które symulują odpowiednie "kliknięcie" zarówno podczas załączania jak również wyłączania poszczególnych przełączników.
  • #9
    krzysiek_krm
    Level 40  
    ziomek673 wrote:
    Ok, ale potem Arduino (chce kupić pro micro) podpinam do tego USB ZERO DELAY?

    Teraz masz podłączone przełączniki.
    Docelowo, zamiast każdego przełącznika, musisz podłączyć oddzielne wyjście Arduino, które będzie generowało krótki impuls "kliknięcia" w odpowiedzi na załączenie lub wyłączenie odpowiedniego przełącznika. Stąd potrzeba dwukrotnie większej liczby wejść / wyjść, na przykład dla jednego przełącznika jednym wejściem Arduino monitorujesz jego stan i jednym wyjściem (zupełnie inna linia) generujesz do Twojego interfejsu impuls "kliknięcia".
    Tak z innej beczki.
    Sprawdź może, czy Twój interfejs nie da się skonfigurować tak, aby rozpoznawał zarówno wciśnięcie jak i puszczenie przycisku.
    Ponadto, wyczuwam, że Twój system ma jeden słaby punkt, musisz na starcie ustalić początkowy stan każdego przycisku. Chodzi mi o to, że jeżeli ustawisz odwrotnie, urządzenie będzie działało odwrotnie, to znaczy, że gdy wyłączysz na przykład hamulec, interfejs uzna go za włączony i odwrotnie.
  • #11
    krzysiek_krm
    Level 40  
    ziomek673 wrote:
    Ale Arduino musiałoby zamykać obwód a nie wysyłać impuls bo ten interfejs może się uszkodzić

    Da się zrobić, jest na to prosty chwyt.
    Załóżmy, że Twoje przełączniki zwierają do masy.
    Na początku "kliknięcia" ustawiasz pin jako wyjście ze stanem niskim, wyjściowy tranzystor zwiera linię do masy. Na końcu "kliknięcia" ustawiasz linię jako wejście, przestawia się w stan wysokiej impedancji, praktycznie jest to rozwarcie.
    Możliwe jednak, że Twój interfejs stosuje pull-up do wyższego napięcia niż zasilanie Arduino, na przykład interfejs 5 V a Arduino 3.3 V, wtedy trzeba każde wyjście Arduino wyposażyć w tranzystor NPN albo N-Mosfet, który będzie albo zwierał do masy albo rozwierał, nie będzie w stanie podać na linię Twojego interfejsu żadnego napięcia.
  • #13
    D214d3k
    Level 39  
    Enkoder, przełącznik obrotowy, wybierak albo potencjometr ze spreparowaną płytką w miejsce tej z napyloną ścieżką oporową i przyłożyć osią do osi obrotu "łyżki".
    Ewentualnie programator krzywkowy (nie wiem jak to się po polsku nazywa ale można znaleźć wpisując "cam timer") pozbawić silnika, złączyć osie i zaprogramować impulsy na krzywkach.
    Budowa symulatora samochodu i elektronika
  • #14
    krzysiek_krm
    Level 40  
    ziomek673 wrote:
    Chyba jednak będę wolał pobawić się w mechanikę...


    Moim zdaniem czysto elektroniczne rozwiązanie z mikrokontrolerem jest proste, eleganckie i wymaga stosunkowo małych nakładów pracy.
    Oczywiście dla kogoś kto jest biegły w mechanice, rozwiązanie mechaniczne będzie łatwiejsze.
  • #15
    tzok
    Moderator of Cars
    Dziwi mnie ten problem akurat z ręcznym - przecież przycisk wciśnięty = ręczny w grze aktywowany, przycisk zwolniony = ręczny nie aktywny. To jest tylko kwestia mapowania tego przycisku w grze.
  • #16
    krzysiek_krm
    Level 40  
    tzok wrote:
    Dziwi mnie ten problem akurat z ręcznym - przecież przycisk wciśnięty = ręczny w grze aktywowany, przycisk zwolniony = ręczny nie aktywny. To jest tylko kwestia mapowania tego przycisku w grze.

    Zupełnie nie znam się na grach, z opisu Autora rozumiem jednak na czym polega problem. Te gry zapewne nie są przystosowane do pracy z takim symulatorem, ich działanie polega na jakiejś emulacji klawiatury. W tym przypadku musi to działać na zasadzie: jeden "klik" coś włącza, kolejny "klik" wyłącza. Gdyby działało to na zasadzie badania poziomu: aktywny - nieaktywny, załączony hamulec wymagałby ciągłego trzymania jakiegoś klawisza w stanie wciśniętym. Sam hamulec raczej nie byłby problemem, gdyby tych włączników miało być więcej, graczowi mogłoby zabraknąć palców do jednoczesnego wciskania wielu klawiszy.
  • #18
    tzok
    Moderator of Cars
    krzysiek_krm wrote:
    W tym przypadku musi to działać na zasadzie: jeden "klik" coś włącza, kolejny "klik" wyłącza.
    Sęk w tym, że w znanych mi symulatorach - trzymam spację = hamulec jest "zaciągnięty", puszczam ją = hamulec się zwalnia. Podobnie działa obsługa hamulca ręcznego z pada - działa jak przycisk jest wciśnięty, zwalnia się kiedy zwolni się przycisk.

    Zgoda, że Arduino w takim zastosowaniu to lekkie nieporozumienie, zwłaszcza jako "proteza" do USB ZERO DELAY, a nie jako samodzielne urządzenie HID. Z jednej strony walka o minimalne opóźnienia, a z drugiej pakujemy powolne Arduino.
  • #19
    ziomek673
    Level 5  
    Np. W Euro Truck Simulator 2 dzialana zasadzie - jeden klik -jest hamulec - drugi klik - nie ma hamulca.
    Problem z hamulcem rozwiązany teraz kierunki...
  • #20
    krzysiek_krm
    Level 40  
    pawel1029384756 wrote:
    Arduino to śmiech do takiego problemu. Musimy wygenerować impuls kiedy klikamy przycisk i kiedy go puszczamy, czyli impuls powstaje w chwili zmiany stanu. Czyli układ wykrywający zbocze spełnia nasze wymagania.

    tzok wrote:
    Zgoda, że Arduino w takim zastosowaniu to lekkie nieporozumienie, zwłaszcza jako "proteza" do USB ZERO DELAY, a nie jako samodzielne urządzenie HID. Z jednej strony walka o minimalne opóźnienia, a z drugiej pakujemy powolne Arduino.

    Nie jestem entuzjastą tej platformy, wręcz przeciwnie, z doświadczeń (na szczęście cudzych a nie własnych) wiem, że tu i ówdzie w bardziej wymagających aplikacjach po prostu "wysiada".
    W tym przypadku nie jest to jednak złe rozwiązanie.
    Po pierwsze, w tak prostym urządzeniu, nie trzeba nic robić w sensie sprzętowym, żadnych płytek uniwersalnych, trawienia, świdrowania, lutowania, itp.
    Po drugie, płytki są dosyć tanie a płytki "zgodne z oryginałem" wręcz tanie jak barszcz, łatwo je uzyskać: zamawiamy, płacimy, następnego dnia kurier z towarem puka do drzwi.
    Po trzecie, wszystko jest zrealizowane programowo, jeżeli coś trzeba zmienić, po prostu modyfikujemy program, zamiast rwać na przykład 15 płytek.

    To dość powolne Arduino jest i tak (lekko licząc) kilkaset razy szybsze niż mechaniczne, stykowe przełączniki. Podejrzewam, że ten USB ZERO DELAY to pewien chwyt marketingowy, każde urządzenie klasy HID (myszka, klawiatura, itp.) jest w gruncie rzeczy "zero delay".
  • #21
    Fredw
    Level 22  
    ETS i hamulec postojowy to trochę coś innego niż ręczny w wyścigówce :D
    W zasadzie to powinieneś mieć osobny przycisk do tej gry ;)

    Luzem zerknąłem na ten wynalazek na USB i on zgłasza się jako joystick z 12 przyciskami.
    Jak dokładnie masz zrobiony ten ręczny? Nie przerabiałeś go jakoś? Bo jeśli ma on przełącznik chwilowy to powinno to działać, o ile same gry nie obsługują tego w dziwny sposób.