Paso 3: Programe!
Proyecto 30 - línea siguiente Robot#include < Servo.h >
#define luces 7
int LDR1, LDR2, LDR3; valores de los sensores
compensaciones de calibración
int leftOffset = 0, rightOffset = 0, centro = 0;
partida desplazamiento velocidad y rotación
int startSpeed = 125, gire = 30;
umbral del detector
int umbral = 5;
velocidades iniciales de los motores izquierdos y derecho
int = izquierda startSpeed, derecha = startSpeed;
Izquierdas de servo;
Derechos del servo;
Rutina de calibración del sensor
void calibrate() {}
para (int x = 0; x < 10; x ++) {/ / ejecutar esto 10 veces para obtener el promedio
digitalWrite (luces, alto); luces en
Delay(100);
LDR1 = analogRead(0); leer los 3 sensores
LDR2 = analogRead(1);
LDR3 = analogRead(2);
leftOffset = leftOffset + LDR1; agregar valor de sensor izquierdo total
centro = centro + LDR2; agregar valor del sensor de centro total
rightOffset = rightOffset + LDR3; agregar valor de sensor derecha total
Delay(100);
digitalWrite (luces, baja); Apagar las luces
Delay(100);
}
obtener promedio para cada sensor
leftOffset = leftOffset / 10;
rightOffset = rightOffset / 10;
centro = centro 10;
calcular desplazamientos para sensores izquierdos y derecho
leftOffset = centro - leftOffset;
rightOffset = centro - rightOffset;
}
void setup()
{
Ajuste los pernos motor a salidas
pinMode (luces, salida); luces
calibrar los sensores
Calibrate();
Delay(3000);
digitalWrite (luces, alto); luces en
Delay(100);
conjunto motor hacia adelante
velocidad de ambos motores
lefts.Attach(2);
Rights.Attach(3);
lefts.Write(91);
Rights.Write(91);
}
void loop() {}
hacer que ambos motores misma velocidad
izquierda = startSpeed;
derecha = startSpeed;
leer los sensores y añadir los desplazamientos
LDR1 = analogRead(0) + leftOffset;
LDR2 = analogRead(1);
LDR3 = analogRead(2) + rightOffset;
Si LDR1 es mayor que del sensor de centro + umbral gire a la derecho
Si (LDR1 > (LDR2 + umbral)) {}
rotación = LDR2 - LDR3;
izquierda = startSpeed + girar;
derecha = startSpeed - girar;
}
Si LDR3 es mayor que del sensor de centro + umbral gire a la izquierda
else if (LDR3 > (LDR2 + umbral)) {}
rotación = LDR2 - LDR1;
izquierda = startSpeed - girar;
derecha = startSpeed + girar;
}
Else {}
izquierda = startSpeed;
derecha = startSpeed;
}
enviar los valores de velocidad para los motores
lefts.Write(left);
Rights.Write (180 - a la derecha);
Delay(5);
}