Witam.
Chciałbym się przyczynić do zbudowania własnej kierownicy z Arduino Uno. Widziałem różne filmiki na yt ale to były po angielsku i za bardzo nie rozumiem. Próbowałem robić to samo co oni ale nie wychodziło. Tą kierownicę to chce zrobić z 4 potencjometrów (kierownica, gaz, hamulec i sprzęgło). Mam nadzieję, że może się ktoś znajdzie, który mi powie co i jak krok po kroku to zrobić.
Kontrolery idzie bardzo prosto wykonać używając potencjometrów lub czujników analogowych Halla np. A1324 z magnesami neodymowymi. Sposób podłączenia tradycyjnego potencjometru do Arduino
Code:
int odczytanaWartosc = 0;
void setup() {
Serial.begin(9600); //Uruchomienie komunikacji przez USART
}
void loop() {
odczytanaWartosc = analogRead(A5); //Odczytujemy wartość napięcia
Serial.println(odczytanaWartosc); //Wysyłamy ją do terminala
delay(200); //Czekamy, aby wygodniej odczytywać wyniki
}
-zamiast (200) w opcji "delay" można umieścić mniejsza liczbę 20,50,80,100
forbot.pl Info. - podłączenie i test potencjometru w roli dzielnika napięcia. Arduino - rysowanie wykresów
Kontrolery typu Joystick, Wolanty, Kierownice, itp. można podłączyć do Arduino Leonardo/Micro PRO z CHIP-em ATmega32u4/ AT90usb646/At90usb1286 za pomocą gotowego programu o nazwie [MMJoy2 ver-20160818] info. MMJoy/MMjoy2 - Build your own USB controller
W Arduino UNO masz CHIP ATmega328, to raczej ten MMJoy2 może nie zadziałać, bo trzeba wybrać z menu MMJoy2 dla Chipów -ATmega32u4/ AT90usb646/At90usb1286.
Jest możliwość wykonania kontrolera na bibliotece "Joystick.h", czyli w środowisku IDE dla Arduino. Aby się bawić w budowę kontrolera to musimy posiadać prosty miernik "MULTIMETR i tu lepiej wybrać Buzerem -20-35zł oraz switch(przecisk ), dioda, potencjometr oraz jakieś kable do połączenia dobrze byłoby mięć jakąś płytę stykową do wykonywania prototypów.
- potencjometr -B50K, B10K lub podobny o charakterystyce liniowej
- switch -przycisk
- dioda
A.
Przycisk "switch" w tym projekcie zawsze "+5V" łączymy przez diadą i podobnie diodę LED "świecącą" przez rezystor
przykład.
B.
Potencjometr tradycyjny -czyli analogowy o charakterystyce liniowej.
1 - masa (GND)
2 - wyjście (OUT) czyli do Arduino wpinamy w piny analogowe od A0-A5
3 - VCC(np.+5V)z arduino
1 i 3 nie ma znaczenia można podałczyć odwrotnie.
Arduino i kod programu w środowisku IDE jako kontroler widoczny Windows- Ikona "Kontroler gier" - w "Urządzenia i drukarki W środowisku Arduiono IDE możemy napisać kod programu na bibliotece joystick.h dla przycisków,osi, przepustnic, kierownic, itp. wymaga pobrania biblioteki ArduinoJoystickLibrary-version-2.0.zip dla Windows i jest dostępna jako Ikona "Kontroler gier" - w "Urządzenia i drukarki "
Info. Arduino Leonardo/Micro As Game Controller/Joystick
KOD- podstawowy biblioteki Joystick dla Osi X i Y
Code:
#include <Joystick.h>
Joystick_ Joystick;
void setup() {
//------------------------------------
Joystick.begin(); // ---- tu info. >>> http://www.instructables.com/id/Arduino-LeonardoMicro-as-Game-ControllerJoystick/
//------------------------------------
}
void loop(){
//------------------- Osie dla Joystika X,Y
//------------- os X
int xAxis=analogRead(A0);// pin Analogowy
xAxis=map(xAxis,0,1023,-127,127);
Joystick.setXAxis(xAxis);
//-------------- os Y
int yAxis=analogRead(A5); //pin Analogowy
yAxis=map(yAxis,0,1023,-127,127);
Joystick.setYAxis(yAxis);
//----------------------------------------
}
Fragment działającego KOD-u przycisku
Code:
Joystick.begin();
pinMode(3,INPUT_PULLUP); //-------- inicjacja jednego przycisku switch dla pin Digital nr 3
}
void loop(){
//---------------------przycisk Switch dla pin nr 3
int button0Val=digitalRead(3); // perzyciski od nr 1- 32, ustawienie dla - !buttonXXVal(0-31)
Joystick.setButton(0, !button0Val); //przycisk 1,
}
Tak możesz zrobić więcej osi tyle ile potrzebujesz i masz wolnych pinów pisałem np. od A0 do A5 czyli 5 osi. Tylko w Joystiku są tylko dwie osie X i Y trzecią osią moze być orczyk, przepustnica gazy podobnie w kierownicy
Fragment dla trzech osi X, Y, Z
Code:
void loop(){
//------------------- Osie dla Joystika X,Y
//------------- os X
int xAxis=analogRead(A0);// pin Analogowy
xAxis=map(xAxis,0,1023,-127,127);
Joystick.setXAxis(xAxis);
//-------------- os Y
int yAxis=analogRead(A5); //pin Analogowy
yAxis=map(yAxis,0,1023,-127,127);
Joystick.setYAxis(yAxis);
//------------- os Z
int zAxis=analogRead(A3); //pin Analogowy
zAxis=map(zAxis,0,1023,-127,127);
Joystick.setZAxis(zAxis);
//----------------------------------------
Przy projektowaniu kontrolerów można zastosować układy "scalaki", do których można podłączyć więcej elementów przycisków i potencjometrów, a przez to zaoszczędzić w Arduino piny analogowe lub cyfrowe. Jednak wymaga to większej wiedzy na temat pisania Kodu. Zauważyłeś pewnie, ze jeden przycisk wymaga 2 żył kabli (GND, pin Arduino) jak potrzebujesz np. 23 przycisków to już może być problem z budową takiego kontrolera np. Joysticka. W jaki sposób przedostać te 23 zył plus Vcc i GND przez trzpień rekojeśći Josticka do plytki PCB. Rozwiązano to za pomocą układów, które redukują ilość żył od 3-5 i jest to świetna metoda na budowanie rożnego rodzaju skompilowanych kontrolerów.
Przyciski układy CD4021 Rejestr przesuwny - łączenie do max. 8 układów co daje 64 przyciski i tylko 5 kabli (VCC,GND, DigitalPin, CLOCK, DigitalPin) info. Shifting In & the CD4021B PCB dwustronna z ukł. 2x 4021 info. Strona z PCB Strona-1 PCB Strona-2 PCB
74HC165 rejestr - przesuwny podobny jak 4021
74HC595 rejestr przesuwny
PCF8574N - ekspander 8bit -8szt. przycisków i tylko 4 zyły GND,VCC, SCL,SDA w Arduino UNO nie korzystasz jednoczenie z pinów A4(SCL) i A5(SDA)
MCP23017- ekspander- 16szt. przycisków
Potencjometry Układ MCP 3201/3202/3204/3208
Wykonanie potencjometrów z magnesami neodymowymi o średnicy fi6 ( MP 6Ax2x2,5-N38)- potencjometry bezstykowe układ KMZ60, TLE 5010/5011 - cyfrowe
układ czujnik Halla A1324 - analogowe (3 pinowe)- element najczęściej wykorzystywane do budowania -potencjometru bezstykowego.
Czyli wychodzi na to że muszę kupić Leonardo lub Micro?
NIE! musisz kupować Leonardo/Micro jak piszesz w środowisku IDE Arduino. Kupujesz Arduino Leonardo/Micro PR (ATmega32u4) tylko i wyłącznie jak chcesz wykorzystać w aplikacji MMJoy2
Sprawdź, czy w Menu->PLIK-> Przykłady- >Masz "Joystick"w graną Biblotekę jak nie to trzeba ręcznie w rozpakować a następnie skopiować zawartość z "ArduinoJoystickLibrary-version-2.0.zip" do katalogu (Win7) C:\Users\Twoja nazwa PC\Documents\Ardiuno\libraries\ -czyli powinieneś mieć te katalog/pliki w tym katalogu "\libraries ". Jak to zrobisz to po uruchomieniu środowisko IDE Arduino powiennieś mieć biblotekę "Joystick" w przykładach.
Mam tą bibliotekę "Joystick" w przykładach, ale jak próbuję wgrać jakiś przykład w płytkę to mam ten sam błąd. Ja coś myślę, że to nie działa na UNO tylko na Leonardo , Mikro, etc.
WAŻNA UWAGA: Ten artykuł dotyczy Arduino IDE w wersji 1.6.6 (lub nowszej). Aby dodać kontroler gier USB do Arduino Leonardo lub Micro za pomocą Arduino IDE w wersji 1.6.5 (lub niższej) zapoznaj się z poniższą instrukcją: Dodaj kontroler gier USB do Arduino Leonardo / Micro.
Po wyjęciu z pudełka Arduino Leonardo i Arduino Micro pojawiają się na komputerze głównym jako ogólna klawiatura i mysz. W tym artykule omówiono, w jaki sposób Arduino Leonardo i Arduino Micro mogą pojawiać się jako ogólny kontroler gier lub joystick. Ten projekt będzie działać tylko z produktami Arduino opartymi na mikrokontrolerach ATmega32u4 (np. Arduino Leonardo i Arduino Micro). Nie będzie działać z Arduino UNO, ponieważ jest oparty na mikrokontrolerze ATmega328
Witam wszystkich.
Robię prosty projekt pedałów (oś x, y) do rajdów pod Richard Burns Rally. Zaczęło się wszystko od dramatycznej czułości pedałów oryginalnych.
Kierownica jako tako działa... Postanowiłem zrobić osobny kontroler do pedałów.
Mam :
win 7, 64
płytka Arduino Micro Pro
2 potencjometry liniowe: B10K
Wszystko połączone wg schematów - łączy się z Arduino IDE po USB
Połączenie analogowe na pinach A0 i A2 - monitor wskazuje zakres 0-1023
I tu niby wszystko ok, ale problem zaczyna się po włączeniu gry - czułość jest dalej dramatyczna - w sumie to ruch ok 30 stopni potencjometra powoduje praktycznie max gaz - brak możliwości gry
Próbowałem wielu kodów do arduino IDE - bez zmian...
Postanowiłem połączyć płytkę Arduino z programem MMJoy2 - ponieważ ma duże możliwości kalibracji.
Załadowałem firmware MMJoy2 i jestem na etapie: Connected to VID [8888] PID [8888] MMJ-reset
Czytałem, że trzeba teraz załadować JoyLoader - jest w katalogu MMJoy2 - ale nie wiem jak go zainstalować...
Nie wiem czy dobrze rozumiem, że na tym etapie już nie współpracuję z Arduino IDE, tylko ten JoyLoader załatwia sprawę ?
Po załadowaniu firmware MMJoy2 miałem chwilę ale nagle straciłem kontroler w win7 i Arduino IDE nie widzi portu, więc nie da się załadować kodu - czy JoyLoader to wszystko załatwi?
Proszę o wskazówki - z góry dziękuję.
Pozdro
Jak jest załadowany Firmware z MMJoy-2 rozpoznawany i widoczny w Menadżer Urządzeń jako Arduino na Porcie COM. A za to będzie widoczny w Panel sterownia >Sprzęt i Dźwięki>Urządzenia i drukarki, jako kontroler np. u mnie jest pod nazwą Joy-orczyk
Przed wgraniem firmware MMJoy2 miałem w Menadżerze Urządzeń sterownik SparkFun na Porcie COM. Po wgraniu MMJoy2 zniknął sterownik z Managera i pojawił się kontroler "MMJ-reset" - tak jak napisałeś , MMJoy teraz nie widzi portu COM, ale działa. Ustawiam oś X i Y ( pedał i hamulec): Int Sensor - MCUPort - F5, F7 (odpowiedniki dla płytki SparkFun Micro Pro), precyzja 10 bit Value row i Value Processed (podczas kręcenia potencjometrem pokazuje 0-1023) Wygląda na to, że jest OK W celu ustawienia czułości, ustawiłem "spec. function" (standardowe ustawienie jest na 200 - to właśnie powoduje pełny zakres w krótszym czasie)(wszystko na 100 - uzyskuję 100% liniowości) i zaznaczam #2 w ustawieniach osi. Ustawień kalibracji i filtrów na razie nie ruszałem, żeby nie zmieniać na raz za dużo parametrów. I tutaj może być mój błąd - zapisuję ustawienia: "Save set to device" - nie mam żadnych reakcji w grze na jakiekolwiek zmiany. Piszesz, że trzeba zapisać: "Save set to file" - myślałem, że to zapis do prywatnych celów. - zrobię próbę i odpiszę... Jeszcze jedno pytanko: MMJoy2 setup ma być włączony podczas korzystania z gry? Pozdro
Dodano po 38 [minuty]:
Niestety bez zmian...
Po zapisie do pliku, utworzyło mi w katalogu MMJoy2 plik: Pedały.mmjoy - typ pliku MMJoy Config file.
Może trzeba ten plik przekierować gdzieś, żeby go widziało?
W programie MMJoy wszystko ładnie działa - kręcenie potencjometrem daje wartości maksymalne w przy pełnych obrotach potencjometru (ok. 220 stopni skrętu...
W grze nadal pełny zakres gazu to ok 30 stopni skrętu potencjometrem, początkowo nic potem nagłe uderzenie (full gaz) potem skręt już bez reakcji.
Coś jest nie tak, zastanawia mnie jeszcze jedno - w ustawieniach po prawej na górze mam "Ok. Used axis 0, buttons 128." - dziwne bo osie X, Y mam zdefiniowane a tu jakby nie widział tego...
Dodano po 14 [minuty]:
Dodano po 55 [minuty]:
jeszcze czytałem o tym, że koledzy nieużywane piny analogowe zwierają do masy... co myślicie o tym?
jeszcze czytałem o tym, że koledzy nieużywane piny analogowe zwierają do masy... co myślicie o tym?
Nie zwieram do masy zostawiam.
kroplaxer1 wrote:
Niestety bez zmian...
Po zapisie do pliku, utworzyło mi w katalogu MMJoy2 plik: Pedały.mmjoy - typ pliku MMJoy Config file.
Może trzeba ten plik przekierować gdzieś, żeby go widziało?
Jak wcześniej pisałem po zimnach ustawień trzeba wykonać nowy zapis - czyli "Save set to
device"
Oznaczenia pinów w Leonardo Micro Pro (ATmega34U4).
Dodano po 54 [minuty]:
Sprawdzasz sobie jak działają potencjometry w DIView-MMJ narzędzie w MMjoy-2 w katalogu Tools później się kalibruje jak każdy kontroler z poziomu Windows
Witam.
Jeśli mogę dołączyć po dość długim czasie do dyskusji, jakie przerobić kod, aby potencjometr skonfigurowany pod oś Z działał płynnie, chodzi mi o płynne przesuwanie się słupka we właściwościach kontrolera?
jakie przerobić kod, aby potencjometr skonfigurowany pod oś Z działał płynnie, chodzi mi o płynne przesuwanie się słupka we właściwościach kontrolera?
Płynnie ? Sprawdz połaczenia lutowane lub mozę byc uszkodzona ścieżka w potencjometrze. Jak uzywasz MMJoy-2 (ustawiasz centrum)to później jeszcze kalibrujesz w Windows.
Właściwie w grze słupek działa płynnie, jedyne co, to zakres potencjometru przekracza słupek w konfiguracji kontrolera, zaczyna od połowy, dochodzi do końca, następnie od początku do końca i znowu od początku do jakiejś 1/3 słupka. Nie mogę poradzić sobie z parametrami w linijce
zAxis = map(zAxis, 0, 1023, -127, 127);
Zmieniałem parametry wielokrotnie i zawsze jest inaczej niż bym chciał. Chcę, aby zakres potencjometru równał się długości słupka. Jest to potencjometr z zestawu Arduino.
Po przeładowaniu gry, słupek odpowiada zakresowi potencjometru. Dokładnie tak mam podłączony, potencjometr ustawiony na środku, słupek też. Środek to 0 (zero), kręcę w lewo, wartość na monitorze portu szeregowego płynnie spada do -127, powrót do 0, kręcę w prawo, wartości początkowo płynnie się zwiększają, po czym następuje bardzo szybki przeskok na wartość maksymalną. Po zmianie zakresu na 0-1023, jest to skok rzędu około 130 przy minimalnym ruchu potencjometrem, potem ponad 200 i 500. Nie mam pojęcia, o co chodzi?