Go Down

Topic: Problema programación barrido de servo con lectura (Read 621 times) previous topic - next topic

ToniRuiz

Jul 16, 2013, 07:35 pm Last Edit: Jul 16, 2013, 07:38 pm by ToniRuiz Reason: 1
Saludos, soy un principiante en esto de Arduino y tengo bastantes dudas y problemas.
Un problema que me ha surgido es este:
Estoy programando un robot que detecte obstáculos, con un sensor IR sharp pegado a un servo. La idea es que el servo gire dando barridos y el sensor lea la distancia.
He conseguido hacer que el sensor lea y que el servo gire( tampoco hay que ser un manitas jeje) pero al ensamblarlo, juntar los dos programas no consigo lo que quiero

El único resultado que he conseguido es que dé un barrido hasta los 140º del extremo (lo he limitado a 140º) lea la distancia, dé el barrido para el lado contrario y lea la distancia.

Yo lo que quiero es que a medida que va girando el servo, dando el barrido, el sensor vaya tomando lectura. Ya sea grado a grado, cada 3 grados, no importa.

Les dejo los dos programas que quiero unir. De momento solo quiero conseguir solucionar el problema que planteo

el del sensor
Code: [Select]

#include <DistanceGP2Y0A21YK.h>

DistanceGP2Y0A21YK Dist;
int distance;

void setup()
{
  Serial.begin(9600);
  Dist.begin(A5);
}

void loop()
{
  distance = Dist.getDistanceCentimeter();
  Serial.print("\nDistance in centimers: ");
  Serial.print(distance); 
  delay(500); //make it readable
}


el del servo


Code: [Select]
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created

int pos = 0;    // variable to store the servo position

void setup()
{
  myservo.attach(3);  // attaches the servo on pin 9 to the servo object
}


void loop()
{
  for(pos = 0; pos < 140; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 140; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}


Gracias de antemano

Heke

Tendras que hacer una pausa para medir ¿no?

Algo asi como:
1.- quiero medir cada grado
2.- muevo el motor un grado y paro
3.- mido distancia
4.- continuo movimiento hasta siguiente grado y vuelta a empezar midiendo distancia.
5.- si he llegado a 140 lo hago a la inversa.

Esto lo traduces al lenguage arduino y listo.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

ToniRuiz

Gracias, eso pensé, pero el problema es si hay que poner cada acción (para medir) hasta los 140 o se puede hacer un bucle? Ya he dicho que me cuesta  :smiley-mr-green:  y no sé como se podría hacer un bucle así

noter

Si miras el código del servo, verás que el (los) bucles ya los tienes y se llaman pos. Lo único que queda es meter el código de lectura de distancia DENTRO de esos bucles, y donde escribes por serial pos, puedes escribir también la distancia. Lo único que te quedaría es buscar un valor para el delay suficiente para que ambos dispositivos se estabilicen tras cada paso. Puedes empezar por el 500 e ir bajando.


Go Up