Motorbesturing met analoge joystick

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 3
Geregistreerd: 18 Feb 2016, 09:03
Woonplaats: Rotterdam

Motorbesturing met analoge joystick

Berichtdoor Peter48 » 23 Feb 2016, 18:26

Hallo Arduino liefhebbers,
Dit is mijn eerste projecten, hoop dat ik het goed heb gedaan met het plaatsen.
had er ook nog foto's bij willen voegen maar dat lukte niet omdat de bestanden te groot waren. weet iemand daar een makkelijke oplossing voor en worden eventueel foto's automatisch aangepast ?
Graag wil ik weten of ik het goed heb gedaan en of er verbeteringen kunnen worden aangebracht in het programma. de installatie werkt uitstekend
cpp code
// de joystick moet een motor aansturen mbv L293DNE voeding IC =5 V
// middenstand "0"= stop
// dejoystick voorwaarts (led rood) motor richting 2
// de joystick achterwaarts (led geel)is motor richting 1
// de joystick aangesloten op 5V stuurt een spanning uit van 1,9V tot 3,18V
// het berekende setpoint voor PWM pin 11 moet proef ondervindelijk worden bewerkt met een bepaalde factor
// is afhankelijk van karakter motor en de toepassing Ik gebruik een motor 9 V van Fischertechnik met wormwiel
// en standaard tandwielkast om een giek van ca 70 cm voeding = ca 10V
// omhoog of omlaag te regelen de giek werd belast met ca 500 gram (1/2 liter water)

int setpoint; //pwm pin 11
int pin =0;
int potpin;
void setup() {
pinMode(2,OUTPUT); // "0"stand led groen joystick ongeveer
pinMode(3,OUTPUT);// rechts om led rood joystick > ca 512
pinMode (4,OUTPUT);//links om led geel joystick < ca 512
pinMode (11,OUTPUT); //pwm output 11
}

void loop(){
digitalWrite (2,LOW);
potpin = analogRead (pin); // inlezen waarde joystick op A0
if ( potpin >=504 && potpin <=518 ) { // "0" stand = 512 is gelijk aan 2,5 volt( weerstandafwijking veroorzaakt verschillen)
digitalWrite(2,HIGH);// joystick in "0" stand (led groen aan)
digitalWrite(4,LOW);//
digitalWrite (3,LOW);
}
potpin = analogRead (pin);//inlezen waarde joystick <512
if (potpin <=504 ){
setpoint = 0;
digitalWrite(4,HIGH); // gele led aan draairichting 1
//potmeter loopt nu in weerstand omlaag vanuit middenstand
setpoint=(518-potpin)+518;// berekende waarde is setpoint voor de PWM pin 11
analogWrite (11,setpoint*1.57);// afhankelijk van soort motor en belasting kunnen we het setpoint bewerken
}
potpin =analogRead (pin);//inlezen joystick voor bereik > 512 tot oplopend
if (potpin >=520 ){
setpoint=0;
digitalWrite (3,HIGH);// rode led aan draairichting 2
setpoint=(potpin -518)+518; // berekende waarde setpoint PWM pin 11
analogWrite (11,setpoint*1.5);

}
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Motorbesturing met analoge joystick

Berichtdoor nicoverduin » 23 Feb 2016, 21:06

Als ik kleinere foto's wil maak ik gebruik van "easy thumbnails"
En als je code wilt hebben zoals ik met jouw code heb gedaan, dan moet je voor de code [ code2=cpp ] zetten en aan het einde [ /code2 ]. Je moet het wel neer zetten ZONDER de spaties.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Motorbesturing met analoge joystick

Berichtdoor shooter » 23 Feb 2016, 22:12

haal de waarde maar een keer binnen want dat is voldoende.
verder zie ik overal <= of >= staan om het netjes te maken moet je eentje <= en de andere > dan weet je tenminste wat er gebeurt als de waarde precies gelijk is aan een grens.

kijk ook eens naar map dan hoef je geen rare berekeningen te maken.
zet 504 en 518 of als define of als constante in je programma dan hoef je dit maar op 1 plaats te veranderen.
je kunt de nulwaarde ook in setup binnen halen dan heb je een zo groot mogelijk bereik.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 18 Feb 2016, 09:03
Woonplaats: Rotterdam

Re: Motorbesturing met analoge joystick

Berichtdoor Peter48 » 24 Feb 2016, 02:12

Bedankt voor de tips en inderdaad je hoeft de waarde maar 1x in te lezen ook de <= tekens zal ik de nodige aandacht schenken
Wat ik wel vreemd vind is dat als ik een voltmeter aansluit op de pwm uitgang dat ik een negatieve en een positieve waarde meet hoe komt dat? De positieve spanning begrijp ik maar waar komt die negatieve spanning vandaan op de pwm pin 11 ?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Motorbesturing met analoge joystick

Berichtdoor nicoverduin » 24 Feb 2016, 09:29

Afhankelijk van het type motor krijg je een inductie puls terug. Of je zit AC te meten. Moet wel DC zijn. Of je meter is niet "geweldig"
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Motorbesturing met analoge joystick

Berichtdoor shooter » 24 Feb 2016, 10:43

eerst even een schema maken van je opstelling.
want op een pin een negatieve spanning meten is funest voor de UNO.

verder zijn de meeste meters redelijk in gelijkspanning (maar dat is het niet want het zijn allemaal pulsen.
en in AC meten helpt ook al niet door de filter die in de meter zit, sommige doen nog wel RMS van een sinus en heel dure meters doen TRMS, maar een bloksignaal is voor de meeste meters te moeilijk zelfs dure flukes.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 18 Feb 2016, 09:03
Woonplaats: Rotterdam

Re: Motorbesturing met analoge joystick

Berichtdoor Peter48 » 24 Feb 2016, 18:56

Die negatieve spanning was een meetfout ik was vergeten de meetpen terug te plaatsen aan de massa,
Ik had eerst een meting gedaan aan het motortje en was vergeten de andere pen weer aan de massa te bevestigen :D Maar nu lees ik wel de gemiddelde waardes uit van de pwm pln 11 met een fluke

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Motorbesturing met analoge joystick

Berichtdoor shooter » 24 Feb 2016, 20:45

ook met een fluke meet je geen mooie gemiddelde waarde bij pwm dus als deze ergens tussen 0 en 5 volt staat betekent dat niet gelijk het percentage dat de pwm uitstuurt.
dit kun je eigenlijk alleen goed meten met een oscilloscoop.

dan nu de volgende stap:
de ingang is inderdaad van 0 tot 1024 (die twee buitengrenzen moet je overigens ook nog meten.
dus het kan goed zijn dat de lage kant van 15 tot 504 loopt en de hoge van 518 tot 1011 oid.
die stop je in een map dus
byte uit= byte(map(setpoint, 15,504,0,255)); // dat kunnen beter variabelen zijn maar dat mag je zelf doen
en de hoge is dan
byte uit= byte(map(setpoint,518,1011,0,255));
dan uiteraard analogWrite(11,uit);
en je moet de richting van de motor nog omdraaien ergens met een pin, (zelfde als de leds. die je trouwens wel uit moet zetten dus een led aan en de andere uit.)


er zijn hiervan overigens in voorbeelden,examples prima codes te vinden, maar is wel leuk natuurlijk om het zelf uit te zoeken.
paul deelen
shooter@home.nl

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten