Pages: [1]   Go Down
Author Topic: Problema programación barrido de servo con lectura  (Read 472 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
#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
« Last Edit: July 16, 2013, 12:38:35 pm by ToniRuiz » Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Palencia, Spain
Online Online
Sr. Member
****
Karma: 25
Posts: 479
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eso haré, gracias!!! smiley-grin
Logged

Pages: [1]   Go Up
Jump to: