Paso 6: codificación
Código está por debajo de
Código de explicó:
Los servos continuados toman un dato de entrada como servos normales, pero en lugar de otro interpretar los datos como un ángulo interpretan esos datos como velocidad. Para servos más continuas el ángulo (90) es parada, (0) es completo velocidad inversa y (180) es velocidad máxima hacia adelante. El coche del ejemplo había utilizado servos continuo que utiliza (95) para la parada, (0) para revers de velocidad completa y (190) para velocidad máxima hacia adelante. Usted puede tiene que tomar esto en cuenta y editar el código basado en su elección de servo. En el ejemplo de código la dirección de avance es (75) y (115). Esto es porque los servos montados duplicada entre sí. Así que adelante para uno es inverso del otro.
Los sensores se leen en el código. Ellos le darán un valor entre 0-1023. Cuando el valor devuelto es bajo el sensor ve un color claro (blanco). Cuando el valor de retorno es alto el sensor ve un color oscuro (negro). El código utiliza "k" que es una afinación constante. "k" es la cortada de la determinación de si el color es negro. Esto se puede ajustar en base de iluminación de entorno y reflectividad superficial. El coche de ejemplo utiliza un corte fuera de 500.
Hay 3 sensores en el coche. Derecha, izquierda y centro. El concepto general de este algoritmo es que el coche está tratando de mantener siempre los sensores izquierdo y derecho en cada lado de la línea y el centro de la línea en sí.
- Si la derecha e izquierda ven blanco y el centro ve negro que el coche se pone en marcha.
- Si la derecha y centro ven negro y blanco ve a la izquierda el coche avisos de vuelta a la derecha y gira a la derecho.
Si la izquierda y centro ven negro y blanco ve a la derecha el coche avisos de vuelta a la izquierda y gira a la izquierda.
- Si el centro ve a la derecha en todo, se da cuenta de como a prueba de fallos que es fuera de la pista y respalda por.8 segundos para volver a la pista.
La serie impresión salidas son solo para pruebas y ajustes el valor "k" si es necesario. No sirven a ninguna función para el rendimiento real del coche sí mismo.
#include
Servo servoLeft; Definir servoRight de Servo servo izquierdo; Definir el servo derecho int k = 500; Calibración del blanco/negro cortado
void setup() {servoLeft.attach(10); / / servo izquierdo para pin digital 10 servoRight.attach(9); / / Set servo derecho digital pin 9 Serial.begin(9600);}
void loop() {/ / leer la entrada en el pin analógico 0: int sensorleft = analogRead(A0); int sensorright = analogRead(A1); int sensorcenter = analogRead(A2); / / derecho
Si (sensorleft < k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(75); FWD servoRight.write(115); }
izquierda
Si (sensorleft > k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(55); servoRight.write(90) izquierda; } / / derecha
Si (sensorleft < k & & sensorright > k & & sensorcenter > k) {}
servoLeft.write(100); derecho servoRight.write(135); }
seguridad fuera de pista
Si (sensorcenter < k) {}
servoLeft.write(100); re servoRight.write(90); Delay(800); }
Serial.Print(sensorleft); Serial.Print(""); Serial.Print(sensorright); Serial.Print(""); Serial.Print(sensorcenter); Serial.Print("");
}