Robot Linefollower de Arduino y la basura - pensamientos y código (5 / 5 paso)

Paso 5: Código Arduino - robot funcionando

/***
Seguidor de línea robot operación script
Braian
***/

/ * motores de salida pines * /
const int Señor = 6; Pin delantero motor derecho
const int ML = 5;  Eje delantero motor izquierdo

/ * entrada de sensor pernos * /
const int sensorPins [] = {A0, A1, A2}; derecha, centro, izquierda

/ * otros pines de entrada y salida * /
const int ledPin = 13; LED indica si el modo de búsqueda está en
const int potPin = A5; para ajustar el error de izquierda a derecha

/ * arrays para almacenar sensor y computarizada de datos * /
int sensorReadings [3]; lecturas del sensor a la derecha, centro, izquierda
Float sensorValues [3]; lecturas del sensor a la derecha, centro, izquierda
int potAdjust = 0; balance del sensor con el valor del potenciómetro de ajuste

/ * contadores, ayudantes etc. * /
int i; contador general en bucles
int unknownCount = 0; contador de sucesivos Estados de línea-desconocido
int s; valor de PWM para la velocidad

/ *** CONFIGURACIÓN *** /
const int turnThreshold = 15; en que la diferencia entre izquierda y derecha para sensorreadings Inicio torneado liso (1000 unidades de escala de forma de blanco a negro)
const int quickturnThreshold = 20; que diferencia entre izquierda y derecha sensorreadings comenzar giro escarpado
const int indicateThreshold = 2; que lectura de consideramos línea conocida
const int moveLength = 55; Cuánto tiempo debe un movimiento tomar después de que ha ganado velocidad (depende de la raíz de tres variables)
y antes de que se convoque nueva verificación del estado del sensor (en milisegundos)
tiempo tarda en ganar velocidad = [(maxSpeed-startSpeed) / speedStep] (en millis) actuales: 9
const int maxSpeed = 160; máximo valor PWM para motores
para empezar mejor aumentamos el valor PWM en tiempo:
const int startSpeed = 80; PWM de para empezar, por ejemplo a 1/2 del máximo
const int speedStep = 10; cuántos valores PWM a aumentar después de cada 1 milisegundo
const int pauseLength = 140; pausa entre movimientos para mejor lectura del sensor
int unknownMax = 25; después cuántas mediciones sucesivas línea"desconocido" para empezar la búsqueda línea rutina

/ * SENSOR correcciones para punto blanco y "pasos de unidad": derecha, centro, izquierda
COPIAR ESTOS VALORES DE CALIBRACIÓN PROGRAMA SALIDA SERIAL * /
const int correcciones [3] = {38,38,31};
const float unitSteps [3] = {0.06,0.01,0.02};
const float betweenReadings [2] = {219.30,233.33};

/**/

void setup() {}
/ * motor de pasadores /
pinMode (Señor, salida);
pinMode (ML, salida);
/ * pines del sensor * /
pinMode (sensorPins [0], entrada);
pinMode (sensorPins [1], entrada);
pinMode (sensorPins [2], entrada);
pinMode (potPin, entrada);

} / / instalación

void loop() {}

readSensors();
If
(
sensorValues [0] + sensorValues [1] < 0.1 * betweenReadings [0] ||
sensorValues [1] + sensorValues [2] < 0.1 * betweenReadings [1] ||
sensorValues [0] < indicateThreshold ||
sensorValues [1] < indicateThreshold ||
sensorValues [2] < indicateThreshold
) {
unknownCount ++;
}
Else {}
unknownCount = 0;
}
Si (unknownCount < = unknownMax) {}
rideLine();
}
Else {}
searchLine();
}

} / / / lazo

void readSensors() {//sets matriz sensorValues [] a las lecturas del sensor con correcciones calculadas
para (i = 0; i < = 2; i ++) {}
sensorReadings [i] = analogRead(sensorPins[i]);
sensorValues [i] = (sensorReadings [i] - corrections[i]) / unitSteps [i];
}
potAdjust = (analogRead(potPin) - 45) * 10;
} / / /readSensors

void goStraight() {}
aumentar la velocidad poco a poco
para (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (Señor, s);
analogWrite (ML, s);
Delay(1);
}
velocidad máxima
analogWrite (Señor, s);
analogWrite (ML, s);
Delay(moveLength);
digitalWrite (Señor, LOW);
digitalWrite (ML, baja);
parada
Delay(pauseLength);
}

void goLeft (int turnspeed) {//turnspeed = 0 -> torneado liso, otra manera escarpada torneado
digitalWrite (ML, baja);
aumentar la velocidad poco a poco
para (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (Señor, s);
{if(turnspeed==0)}
analogWrite (ML, s * 0.4);
}
Delay(1);
}
velocidad máxima
analogWrite (Señor, s);
{if(turnspeed==0)}
analogWrite (ML, s * 0.4);
}
Delay(moveLength);
digitalWrite (Señor, LOW);
digitalWrite (ML, baja);
parada
Delay(pauseLength);
}

void goRight (int turnspeed) {//turnspeed = 0 -> torneado liso, otra manera escarpada torneado
digitalWrite (Señor, LOW);
aumentar la velocidad poco a poco
para (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (ML, s);
{if(turnspeed==0)}
analogWrite (Señor, s * 0.4);
}
Delay(1);
}
velocidad máxima
analogWrite (ML, s);
{if(turnspeed=0)}
analogWrite (Señor, s * 0.4);
}
Delay(moveLength);
digitalWrite (ML, baja);
digitalWrite (Señor, LOW);
parada
Delay(pauseLength);
}

void rideLine() {}
que indica la diferencia entre sensores izquierdos y derecho, teniendo en cuenta ajustes de potenciómetro, gire de forma
Si (sensorValues [0] - sensorValues [2] > turnThreshold + potAdjust & & sensorValues [0] - sensorValues [2] < quickturnThreshold + potAdjust) {}
goRight(0);
}
else if (sensorValues [0] - sensorValues [2] > quickturnThreshold + potAdjust) {}
goRight(1);
}
else if (sensorValues [2] - sensorValues [0] > turnThreshold - potAdjust & & sensorValues [2] - sensorValues [0] < quickturnThreshold - potAdjust) {}
goLeft(0);
}
else if (sensorValues [2] - sensorValues [0] > quickturnThreshold - potAdjust) {}
goLeft(1);
}
Else {}
goStraight();
}

} / / /rideLine()

void searchLine() {}
digitalWrite (ledPin, HIGH); indicar el modo de búsqueda con LED
int searchVar = 1; variable auxiliar para aumentar el radio de movimiento de la búsqueda
al mismo tiempo
(
sensorValues [0] + sensorValues [1] < 0.1 * betweenReadings [0] & &
sensorValues [1] + sensorValues [2] < 0.1 * betweenReadings [1] & &
sensorValues [0] < indicateThreshold & &
sensorValues [1] < indicateThreshold & &
sensorValues [2] < indicateThreshold
) {
Si (searchVar < = 5) {//go recto durante un tiempo, en caso de que realmente no se pierde
goStraight();
}
Else {//rightward movimiento con el aumento del radio mediante la inserción de secuencias de recta
para (i = 0; i < 7; i ++) {}
goRight(1);
}
para (i = 0; i < searchVar/5; i ++) {}
goStraight();
}
}
searchVar ++; indicar Estado rutinaria búsqueda completada
readSensors(); obtener nuevas lecturas
}
unknownCount = 0; reiniciar contador
digitalWrite (ledPin, LOW); indicar el final del modo de búsqueda

} / / /searchLine()

Artículos Relacionados

Robot Linefollower de Arduino y la basura - fotos

Robot Linefollower de Arduino y la basura - fotos

esto hice con cerebros Arduino robot linefollower para un concurso donde no hizo muy bien, funcionó hacia fuera de pista. Pero fue el robot más barato allí, y aprendí tanto edificio, tengo algunos pensamientos y código de Arduino para compartir sin i
Construya su propio ROBOT insecto utilizando ARDUINO y SERVO

Construya su propio ROBOT insecto utilizando ARDUINO y SERVO

Hola, estoy con una instructalble más. Voy a enseñarte cómo construir un robot insecto utilizando Arduino y servomotores. Suena cool, verdad?. ¿Qué parece el uso de este robot? Debido a su tamaño compacto que puede ser utilizados en defensa, pueden t
Utilice un controlador de PS3 para controlar un robot NXT de Arduino

Utilice un controlador de PS3 para controlar un robot NXT de Arduino

actualización:Lo he arreglado un par de ejecución errores con el paquete de datos, y he modificado la biblioteca NXTI2CDevice para que sea compatible con Arduino 1.0.El archivo zip adjunto ha1. un nuevo sketch de Arduino2. un nuevo boceto de procesam
ARD-e: el robot con un Arduino como un cerebro

ARD-e: el robot con un Arduino como un cerebro

cómo crear un robot de código abierto Arduino controlado por menos de $100.Esperemos que después de leer esto instructable usted será capaz de dar su primer paso en robótica. ARD-e cuesta unos $90 a $130 dependiendo de cuánto electrónica repuesto tie
NECESITA una pareja para mi ROBOT---responde cabeza - Arduino (sin impresora 3D)

NECESITA una pareja para mi ROBOT---responde cabeza - Arduino (sin impresora 3D)

Se trata de un Arduino, servomotores y motion sensor basado responde cabeza de mi robot bípedo llamado AS U deseo.Este es mi primer paso de mi primer bípedo... Por lo tanto, me gustaría mostrar todos... pasos son muy sencillos y lo principal es que,
Joystick control brazo Robot utilizando un Arduino

Joystick control brazo Robot utilizando un Arduino

Propósito y descripción de esta guíaEste instructable es una mano para un proyecto escolar que hemos hecho. El propósito de este proyecto era crear un control de brazo robot utilizando thumbsticks. Tuvimos que utilizar un Arduino Uno para el control
Robot Educativo Fischertechnik Arduino (RAFA)

Robot Educativo Fischertechnik Arduino (RAFA)

Con de robot de la ONU "crear como este proyecto trata de" fines educativos usando el sistema Fishertechnik y potenciandolo con todas las prestaciones de Arduino, con ello conseguimos una plataforma educativa:-muy versátil-adaptable a diferentes
WireBeings beta: un 3D impreso y Robot expandible para Arduino con Android de Control

WireBeings beta: un 3D impreso y Robot expandible para Arduino con Android de Control

http://wirebeings.com/Vea video aquí:Este es un buen proyecto que puede continuar y modificar como aprendes más proyectos de Arduino. Este Instructable pasa a través de la construcción completa para el robot de tecnología bluetooth en la primera mita
Guía paso a paso al controlador de robot mago Micro (Arduino compatible)

Guía paso a paso al controlador de robot mago Micro (Arduino compatible)

el Micro mago de DAGU es un bajo costo Arduino compatible controlador diseñado especialmente para principiantes que quieren construir un pequeño robot. El Consejo tiene una serie de accesorios útiles construido en forma que en la mayoría de los casos
Con Bluetooth Robot controlado por Arduino mediante aplicación Android

Con Bluetooth Robot controlado por Arduino mediante aplicación Android

Después de intentar robot seguimiento remoto por mando a distancia IR. He proceder para controlar la misma plataforma del robot por BluetoothControlador Arduino a través de la aplicación para Android. Este método es más confiable, más distancia, mejo
(Sin embargo, otro) Chasis de plataforma-un Robot robótica Arduino DIY de piezas de repuesto

(Sin embargo, otro) Chasis de plataforma-un Robot robótica Arduino DIY de piezas de repuesto

Dio a mi sobrino un kit del arrancador Arduino hace unos meses. Le pregunté a mi hermana lo que estaba haciendo con él y dijo que había tenido algunos problemas de calcular hacia fuera. Veremos le la semana después de Navidad, así que le dije a traer
Línea Robot seguidor sin Arduino o microcontrolador

Línea Robot seguidor sin Arduino o microcontrolador

aquí expliqué un robot seguidor de línea sin microcontroladores o Arduino. Este es un proyecto muy simple para principiantes. Aquí tienes la necesidad de no tener ningún conocimiento de programación. así que deja probarlo...Paso 1: Recoger el materia
Brazo robot controlado por Arduino voz

Brazo robot controlado por Arduino voz

¿Te has sentido fustrated haciendo cosas que tenía un lado más?Bien, esto le ayudará.Se trata de un robot que puede hacer lo que quieres solo habla que por ejemplo se puede decir "arriba" y el robot hará un poco de movimiento hacia el lado que d
GOduino III - controlador del robot basada en Arduino protoboard-ambiente

GOduino III - controlador del robot basada en Arduino protoboard-ambiente

versiones16 de noviembre de 2012 aparece en DangerousPrototypes.com http://goo.gl/N4DIC03 de octubre de 2012: he diseñado un adaptador PCB a posición IR y 90 grados de sensores ultrasónicos para breadboard para apoyar proyectos de robot de GOduino II