2 servo motoren bewegen uit zichzelf

Arduino specifieke Software
Berichten: 3
Geregistreerd: 16 Feb 2013, 20:22

2 servo motoren bewegen uit zichzelf

Berichtdoor stellaferox » 16 Feb 2013, 20:37

Hallo,

Nieuw hier op het forum met een vraag. Ik heb volgende code op een Arduino Uno lopoen met een joystick en 2 servomotoren (pan & tilt). Het besturen gaat goed maar de servo's bewegen vaak na en gaan soms uit zichzelf naar een kant zonder dat ik stuur. De servo's zijn 3.2 kg/cm plastic en de joystick is een Keyes.
Iemand idee waarom dit is? het delay verlengen helpt niet.
Alvast dank,

Marc

#include <Servo.h>

const int servo1 = 4; // first servo
const int servo2 = 10; // second servo
const int joyH = 3; // L/R
const int joyV = 4; // U/D

int servoVal,servoValue1,servoValue2; // variable to read the value from the analog pin

Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo



void setup() {

// Servo
myservo1.attach(servo1); // attaches the servo
myservo2.attach(servo2); // attaches the servo

// Inizialize Serial
Serial.begin(9600);
servoValue1 = 90;
servoValue2 = 90;
}


void loop(){

// Display Joystick values using the serial monitor
//outputJoystick();

// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 0, 180); // scale it to use it with the servo (result between 0 and 180)
if (servoVal > 90)
{
servoValue1 += 1;
}
else if (servoVal < 90)
{
servoValue1 -= 1;
}
myservo2.write(servoValue1); // sets the servo position according to the scaled value

// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // scale it to use it with the servo (result between 70 and 180)
if (servoVal > 90)
{
servoValue2 += 1;
}
else if (servoVal < 90)
{
servoValue2 -= 1;
}
myservo1.write(servoValue2); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

}

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor pjh » 16 Feb 2013, 22:52

ik zou ook de variabele servoVal opdelen in servoVal1 en servoVal2. Echt compleet twee zaken van maken. Nu loopt het via deze variabele toch via één gelijk pad. Kan fout gaan...

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor Karel » 16 Feb 2013, 23:09

Wat doe je als de gelezen servoVal ==90? Dat wordt in de if/else niet afgevangen.
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 3
Geregistreerd: 16 Feb 2013, 20:22

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor stellaferox » 16 Feb 2013, 23:35

Als servoVal == 90 dan verandert servoValue niet en da's ook de bedoeling. Het vervangen van servoVal dor servoVal1 en servoVal2 voor elk van de servo's heeft geen effect. Zou dit storing kunnen zijn door de PWM pinnen? En zo ja, hoe ondervang je dat? Of zou een goed gemikte vertraging softwarematig dan wel een weerstand ergens kunnen helpen. Heb werkelijk geen idee hierover!

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor pjh » 16 Feb 2013, 23:56

probeer dit:
Code: Alles selecteren
myservo2.write(servoValue1);

te vervangen door:
Code: Alles selecteren
myservo2.attach(servo1);
myservo2.write(servoValue1);
myservo2.detach(servo1);


en dan ook voor ...servo1 natuurlijk.
en waarschijnlijk de attach uit de setup halen.
Weet niet hoor. Misschien helpt het.

Berichten: 3
Geregistreerd: 16 Feb 2013, 20:22

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor stellaferox » 17 Feb 2013, 00:18

@pjh

Dan doet de servo helemaal niets meer. Het detach commando is myservo2.detach() overigens. Ik lees wel e.e.a. over storingen op de signaaldraad van de servo's maar heb geen idee hoe ik dit weg moet halen

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor Karel » 17 Feb 2013, 19:17

Je zou, naast het schrijven van commando's naar de servo's, ook een melding naar de IDE kunnen schrijven met serial.write. Dan kan je zien of het de software is die 'op hol slaat' (je IDE loopt ook vol met meldingen) of dat het de servo's zelf zijn die aan de haal gaan (servo's bewegen, maar geen meldingen in je IDE).
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: 2 servo motoren bewegen uit zichzelf

Berichtdoor astrofrostbyte » 19 Feb 2013, 12:25

Je gaat ervanuit dat in rust de twee joystick assen '90' terug geven na schaling.
Als je servo's spontaan gaan lopen zou je denken dat deze ruststand niet meer aanwezig is.
Je hebt mischien wel wat storing op de analoge ingang van de joystickjes.

servoVal even renamen naar JoyStickPos ofzo.
servoValue2 , servoValue1 kunnen under-/overflowen ze worden ge-increment/decrement maar nergens gelimiet voordat ze de servo ingaan.
ik weet niet wat myservo1.write( ) mag/wil hebben als input.
Code ff posten met code /code tags leest wat makkelijker voor ons.

Zoals karel aangeeft, met serial meekijken of de waarden zich wel gedragen als je verwacht.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten