26-08-2014, 04:56 PM
Buenas a tod@s:
Con el código que me ha facilitado Jero, el Arduino emite un pitido, pero los motores funcionan de forma correcta.
Sin embargo, cuando implanto el código en el original, ocurre lo siguiente:
Se toman las 3 medidas con normalidad y cuando es hora de arrancar los motores se emite un pitido de medio segundo y no arrancan los motores y se vuelven a tomar las 3 medidas como si el robot hubiese avanzado.
A qué se debe?
Porque emite ese sonido el Arduino? He buscado por internet y no he encontrado nada.
Aquí os dejo el código que tendría que ser el definitivo y es el que me da este problema que os comento:
Si pongo el código que me ha pasado Jero funcionan los motores, es decir que solo dejan de funcionar en este (y antes de hacer los cambios de ENA y ENB funcionaban y no emitía ningun pitido).
Muchas gracias.
Revisaré el código, porque la tensión de alimentación me da 11.80V.
Como curiosidad me he fijado que el Led "L" de la placa, está encendido. Debería estar apagado, verdad? Entonces porque se enciende? Queda encendido de forma permanente desde el instante que se enciende el Arduino.
Con el código que me ha facilitado Jero, el Arduino emite un pitido, pero los motores funcionan de forma correcta.
Sin embargo, cuando implanto el código en el original, ocurre lo siguiente:
Se toman las 3 medidas con normalidad y cuando es hora de arrancar los motores se emite un pitido de medio segundo y no arrancan los motores y se vuelven a tomar las 3 medidas como si el robot hubiese avanzado.
A qué se debe?
Porque emite ese sonido el Arduino? He buscado por internet y no he encontrado nada.
Aquí os dejo el código que tendría que ser el definitivo y es el que me da este problema que os comento:
Código:
#include <Servo.h>
long distancia1;
long distancia2;
long distancia3;
long tiempo;
Servo servo;
int IN3 = 4;
int IN4 = 7;
int IN1 = 2;
int IN2 = 12;
int ENA = 5;
int ENB = 6;
void setup(){
Serial.begin(9600);
pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
servo.attach(10);
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);
}
void loop(){
servo.write(10);
delay(500);
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia1= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.print("Distancia 1 ");
Serial.print(distancia1);
Serial.println(" cm");
delay(750);
servo.write(90);
delay(500);
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia2= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.print("Distancia 2 ");
Serial.print(distancia2);
Serial.println(" cm");
delay(750);
servo.write(180);
delay(500);
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia3= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.print("Distancia 3 ");
Serial.print(distancia3);
Serial.println(" cm");
delay(750);
servo.write(90);
delay(500);
if (distancia2 >= distancia1 && distancia2 >= distancia3) //Va hacia delante
{
Serial.print("Distancia 2 en moviment ");
Serial.print(distancia2);
Serial.println(" cm");
delay(750);
digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite(ENA,50);
analogWrite(ENB,50);
delay (1000);
digitalWrite (IN3, LOW);
digitalWrite (IN1, LOW);
delay(250);
}
if (distancia1 >= distancia2 && distancia1 >= distancia3) //Va hacia la dereha
{
Serial.print("Distancia 1 en moviment ");
Serial.print(distancia1);
Serial.println(" cm");
delay(750);
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite(ENA,50);
analogWrite(ENB,50);
delay (200);
digitalWrite (IN4, LOW);
digitalWrite (IN1, LOW);
delay(350);
}
if (distancia3 >= distancia1 && distancia3 >= distancia2) // Va hacia la izquierda
{
Serial.print("Distancia 3 en moviment ");
Serial.print(distancia3);
Serial.println(" cm");
delay(750);
digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW);
analogWrite(ENA,50);
analogWrite(ENB,50);
delay(200);
digitalWrite (IN3, LOW);
digitalWrite (IN2, LOW);
delay(350);
}
if (distancia2 <= 5)
{
digitalWrite (IN4, HIGH); //Va hacia atrás
digitalWrite (IN3, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW);
analogWrite(ENA,50);
analogWrite(ENB,50);
delay(500);
digitalWrite (IN4, LOW);
digitalWrite (IN2, LOW);
delay(350);
}
}
Si pongo el código que me ha pasado Jero funcionan los motores, es decir que solo dejan de funcionar en este (y antes de hacer los cambios de ENA y ENB funcionaban y no emitía ningun pitido).
Muchas gracias.
Revisaré el código, porque la tensión de alimentación me da 11.80V.
Como curiosidad me he fijado que el Led "L" de la placa, está encendido. Debería estar apagado, verdad? Entonces porque se enciende? Queda encendido de forma permanente desde el instante que se enciende el Arduino.