arduino joystik

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

arduino joystik

#1 Příspěvek od BigSandy »

Zdar tu všicí.
Jsem koupil od Číňanu joystik KY-023 pro ovadaní Motor Driver BTS7960

Nějak se s ním nemohu domluvit.
Každý den má úplně jíné klidové hodnoty.

Včera X: 531 Y : 528
Dnes X: 564 Y: 547

Doporučte nějaký, co by normálně fungoval.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#2 Příspěvek od Zaky »

Měl bys sem dát schéma zapojení, alespoň okolí toho joysticku. Je to mechanická záležitost, tak nečekej, že bude návrat do neutrálu vždy tip ťop na stejnou hodnotu. Neutrály je prostě potřeba ošetřit softwarově pro určitý rozsah hodnot. Uváděnou chybu máš okolo 6%, což sice na jednu stranu není málo, na druhou stranu je to u této kategorie výrobku dost možná normální. Pro vyloučení vlivu nevhodného zapojení můžeš zkusit na potenciometr zapojit ohmmetr a vždy po zakvrdlání joystickem odečíst odpor, uvidíš, jaké rozdíly naměříš.
Uživatelský avatar
rnbw
Příspěvky: 37418
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#3 Příspěvek od rnbw »

Je to asi rovnaka vlastnost ako u analogoveho joysticku na PC. Jednoducho su to dva potenciometre a z principu je to nepresne. Musi sa to osetrit v SW - stredovu polohu si nakalibruj po zapnuti a pridaj k nej nejaku toleranciu.
Uživatelský avatar
_luky_
Příspěvky: 747
Registrován: 28 led 2009, 00:00
Bydliště: okres Beroun, kraj Středočeský

#4 Příspěvek od _luky_ »

Přesně tohle jsem někdy v dubnu řešil na "profi" joysticku. Vyvedl jsem si hodnotu z AD převodníku na seriovou linku a čtvrt hodiny jsem tady s tim kvedlal, abych zjistil, co všechno může být klidová poloha. K tomu jsem ještě kousek přidal (pro sichr) a funguje to skvěle.
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

#5 Příspěvek od BigSandy »

Vyřešeno :D
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

#6 Příspěvek od BigSandy »

By byl dotaz.
Půjde toto nějak pořešít?

Středova hodnota joystiku vlevo - vpravo je 510.
Tedy 2 podmínky

Kód: Vybrat vše

if (joystick[1] > 520)
{
int vpravo = ????
}

Kód: Vybrat vše

if (joystick[1] < 500)
{
int vlevo = ????
}

Půjde v těchto podmínkách souřadnice joystiku nějak přepočítat, tak abych v každé proměnné mněl hodnotu 0 - 100?

PS: řeším otáčení vozítka přes Motor Driver BTS7960 43A.
Dopředu 0 - 255
Dozadu 0 - 255
Bych chtěl, aby při naklonění joystiku třeba do leva na 50%, odečítat s driveru co řídí levé kolo těch 50%
Naposledy upravil(a) BigSandy dne 30 črc 2017, 08:48, celkem upraveno 1 x.
Uživatelský avatar
misocko
Příspěvky: 1528
Registrován: 26 čer 2009, 00:00
Bydliště: Hlohovec (Sk)

#7 Příspěvek od misocko »

Skusil by som funkciu map.
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

#8 Příspěvek od BigSandy »

misocko píše:Skusil by som funkciu map.

:D
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

#9 Příspěvek od BigSandy »

By mně zajímalo, kde dělám kopanec.

Kód: Vybrat vše

////////////////////////////////////////////////////////////
// leve kolo
if (joystick[1] <= 500)
{
 vlevo = map(joystick[1], 0, 500, 100, 0);
}
else
{
 vlevo = 0;
}

///////////////////////////////////////////////////////////////
// Dopředu

if (joystick[0] >= 535)
                     {                       
                       dopreduPWM_pravekolo = map(joystick[0], 535, 1023, 0, 255);
                       dopreduPWM_levekolo = map(joystick[0], 535, 1023, 0, 255);
                       
                       int le = (dopreduPWM_levekolo/100)* vlevo;
                       
                       Serial.print(dopreduPWM_levekolo);
                       Serial.print("  ---  ");
                       Serial.print(vlevo);
                       Serial.print("  ---  ");
                       Serial.println(le);


Když mam joy úplně vpředu a vlevo, přes ser to vypisuje 255 --- 100 --- 200

int le = (dopreduPWM_levekolo/100)* vlevo;
dopreduPWM_levekolo/100 je 255/100, a mame jedno procento což je 2,55.
2,55 * 100 je zase 255 a ne 200
Uživatelský avatar
_luky_
Příspěvky: 747
Registrován: 28 led 2009, 00:00
Bydliště: okres Beroun, kraj Středočeský

#10 Příspěvek od _luky_ »

Počítáš to jako "int" což je celé číslo. A tedy 255/100 je 2, nikoli 2.55. Já jsem se trápil s úplně tím samým (joystick + pohon dvěma pásy). Musíš nejdřív násobit a pak teprve dělit, aby ses vyhnul desetiným číslům. A pozor na maximální hodnotu - aby ti to nepřeteklo.
Uživatelský avatar
BigSandy
Příspěvky: 894
Registrován: 28 črc 2015, 00:00

#11 Příspěvek od BigSandy »

Dik :wink:
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“