Pages: [1]   Go Down
Author Topic: Projekt fl-alphaBot - Problem  (Read 417 times)
0 Members and 1 Guest are viewing this topic.
Rottenburg a.N. - Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 16
robotin
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: January 17, 2010, 08:20:41 am by topgunfb » Logged

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

Bonn, Germany
Offline Offline
God Member
*****
Karma: 2
Posts: 903
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

Believe me, Mike, I calculated the odds of this succeeding against the odds I was doing something incredibly stupid[ch8230] and I went ahead

Pages: [1]   Go Up
Jump to: