Go Down

Topic: Projekt fl-alphaBot - Problem (Read 428 times) previous topic - next topic

topgunfb

Jan 17, 2010, 02:19 pm Last Edit: Jan 17, 2010, 02:20 pm by topgunfb Reason: 1
Hi@all,

ich habe ein kleines Problem mit zwei gehackten Servos. Na ja, eigentlich bin ich galube ich nur zu dumm...

Dezeit arbeite ich an meinem fl-alphaBot. Bilder werden folgen...

Ich habe zwei Servos, die als Antrieb fungieren sollen. Leider laufen beide in die entgegengesetzte Richtung. Ist an sich ja auch klar, denn beide bekommen die selben Befehle. Würde man sie übereinander anordnen, wäre alles gut. Aber dann wären sie kein Antrieb mehr.

Mein Code ist auch recht simpel... (siehe unten)
Leider drehen beide Servos niemals in die selbe Richtung.
Was mache ich falsch?
Ich habe überlegt, den Motor von einem Servo "umzudrehen". (Laienhaft...;-) )
Wie kann ich dies programmiertechnisch lösen?

Hier der Code:
Code: [Select]

#include <Servo.h>

Servo links;
Servo rechts;

//int forward;
//int backward;
int hindernis_l = 0;
int hindernis_r = 0;

const int us = 8;
int ir_l = 5;
int ir_r = 4;
int pos;

void setup()
{
 links.attach(9);
 rechts.attach(10);
}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / 29 / 2;
}

void forward_l()
{
 int pos_l;
 for(pos_l = 0; pos_l < 180; pos_l +=1)
 {
   links.write(pos_l);
 }
}

void forward_r()
{
 int pos_r;
 for(pos_r = 180; pos_r >= 1; pos_r -=1)
 {
   rechts.write(pos_r);
 }
}

void loop()
{
 // Ultraschall-Erkennung
 long duration, cm;

  pinMode(us, OUTPUT);
  digitalWrite(us, LOW);
  delayMicroseconds(2);
  digitalWrite(us, HIGH);
  delayMicroseconds(5);
  digitalWrite(us, LOW);

  pinMode(us, INPUT);
  duration = pulseIn(us, HIGH);
  cm = microsecondsToCentimeters(duration);
 
  // US-Ende
 
  // IR-Erkennung
 
  hindernis_r = analogRead(ir_r);
  hindernis_l = analogRead(ir_l);
 
 while(cm >= 80 && hindernis_r <= 150 && hindernis_l <= 150)
{
 
  forward_l;
  forward_r;
 
 }  
}



Ich weiß, es sind einige Prozeduren enthalten, die augenblicklich keinen Sinn ergeben. (Ultraschall und IR) Das kommt aber noch... Erstmal das Servo-Problem lösen.

Bitte um Hilfe...

Danke
topgunfb
Sie haben die maximale Anzhal an Credits abgeschöpft. -HÄ-?!?

Nachtwind

hm... interessante idee das mit servos zu loesen..

Am simpelsten waere es das folgendermassen zu loesen:

(Pseudocode)

void set_servos(position -{1 bis 360})
{
  servo1.write(position); //Der der in die richtige richtung dreht
  servo2.write(360-position); //Falschdrehender Servo
}


Wenn ich mich nicht irre sollten die dann entsprechend der 'Position' gedreht werden - und das entsprechend in die richtige Richtung.

Falls ich mich jetzt mathematisch blamiert haben sollte - das passt ;0)
Believe me, Mike, I calculated the odds of this succeeding against the odds I was doing something incredibly stupid[ch8230] and I went ahead

Go Up