Robot para almacén automatizado («SigueRastro»).
Introducción.
Nuestro proyecto esta basado en un robot para almacén automatizado llamado “SigueRastro”. Este se encarga de moverse según el sensor que tiene, utilizando las lecturas que obtiene de ellos y de esta manera poder seguir un patrón dibujado en el suelo. Dependiendo de dicho patrón avanza en sentido hacia delante o en sentido hacia detrás.
Materiales.
Materiales utilizados en el proyecto:
- Arduino Nano (x1)
- Protoboard (x1)
- Resistencias 10K Ohms (x2)
- Resistencias 330 Ohms (x2)
- Integrado L293D (x1)
- Motores (x2)
- Sensor CNY 70 (x2)
- Cables varios (x1)
- Chasis (x1)
Montaje.
El método de construcción del proyecto fue incremental y por partes separadas para posteriormente ser unificadas en el circuito final. La tarea inicial fue montar los motores y definir la correspondencia de pines del circuito y código. Como se muestra en la siguiente imagen:
|
Montaje de los motores. |
La segunda tarea se corresponde con el montaje de un sensor infrarrojos como se muestra en la siguiente imagen:
|
Montaje de los sensores. |
El siguiente paso consiste en unificar las partes anteriores y añadir el sensor que falta basándonos en el montaje de la imagen anterior, resultando el siguiente circuito:
|
Unificación
de los montajes anteriores (del motor y del sensor). |
Por último, por cuestiones de espacio, peso y estética decidimos reducir el circuito implementado utilizando un Arduino Nano para compactar el circuito de manera que sea equivalente, resultando es el circuito final que se muestra en la siguiente imagen:
|
Unificación
del montaje anterior con el Arduino (nano). |
Por simplicidad se pueden obviar los montajes anteriores y pasar directamente a montar el circuito final.
Código
A continuación, explicaremos el código implementado y las soluciones aplicadas.
Para que el programa pueda utilizar adecuadamente los pines, tanto de entrada como de salida, declaramos seis constantes encargadas de la gestión de los motores. Por otro lado, tenemos cuatro variables dos para los sensores infrarrojos y otras dos para los valores de lectura que estos generan.
En la función “Setup” utilizamos un bucle “for” para inicializar los pines de los motores como pines de salida y otro bucle del mismo tipo para inicializar los pines de los sensores como pines de entrada.
En la función “Loop” recogemos los datos de lectura de los sensores y gestionamos el movimiento del robot con una estructura “If-Else” con los siguientes casos teniendo en cuenta que la zona negra toma valor cero y la
zona blanca toma valor uno:
Los dos sensores en zona negra por lo que avanza el robot con la función “avanzar_motores ()” que será explicada más adelante.
Sensor derecho en zona negra e izquierdo en zona blanca por lo que el robot detiene el motor derecho y avanza con el izquierdo; esto genera el giro necesario para volver a la zona negra.
Sensor izquierdo en zona negra y derecho en zona blanca por lo que el robot detiene el motor izquierdo y avanza con el derecho; esto genera el giro necesario para volver a la zona negra.
Ambos sensores se encuentran en zona blanca por lo que retrocede el motor.
Pasamos a definir las funciones utilizadas en los casos anteriores.
- Avanzar motores: es una función que gobierna el movimiento de ambos motores valiéndose de las constantes “ENABLE_DERECHO” y “ENABLE_IZQUIERDO”.
Activando a nivel alto (HIGH) las constantes “AVANZAR_DERECHO” y “AVANZAR_IZQUIERDO” y desactivando a nivel bajo (LOW) el retroceso de ambos.
- Retroceder motores: es una función que gobierna el movimiento de ambos motores valiéndose de las constantes “ENABLE_DERECHO” y “ENABLE_IZQUIERDO”.
Activando a nivel alto (HIGH) las constantes “RETROCEDER_DERECHO” y “RETROCEDER_IZQUIERDO” y desactivando a nivel bajo (LOW) el avance de ambos.
- Detener motores: es una función que gobierna ambos motores valiéndose de las constantes “ENABLE_DERECHO”, “AVANZAR_DERECHO”, “RETOCEDER_DERECHO”, “ENABLE_IZQUIERDO”, “AVANZAR_IZQUIERDO”, “RETOCEDER_IZQUIERDO” que desactiva cualquier tipo de movimiento por lo que los motores se detienen.
Avanzar derecho y Detener Derecho: son las funciones que se encargan de realizar los giros necesarios para devolver el robot a la zona negra utilizando las constantes “ENABLE_DERECHO” activada a nivel alto y “ENABLE_DERECHO” activada a nivel bajo, respectivamente. Y activando o desactivando la constante “AVANZAR_DERECHO”, según el movimiento ejecutado.
- Avanzar izquierdo: es una función que gobierna del motor izquierdo valiéndose de las constantes activadas a nivel alto (HIGH) “ENABLE_IZQUIERDO” y “AVANZAR_IZQUIERDO”. Y desactivando a nivel bajo (LOW) la constante de “RETROCEDER_IZQUIERDO”.
- Detener izquierdo: es una función que gobierna del motor izquierdo valiéndose de las constantes desactivadas a nivel bajo (LOW) “ENABLE_IZQUIERDO” y “AVANZAR_IZQUIERDO” y “RETROCEDER_IZQUIERDO”.
Conclusión
El montaje del robot requiere de mucha paciencia y una organización metódica de trabajo. Para comprar los componentes nos desplazamos a una tienda de electrónica y para el chasis optamos por la tienda de Amazon. El montaje del circuito una vez decididos los componentes tuvo una dificultad media/alta que nos llevó unas horas, siendo la parte más difícil el montaje de los sensores. En cuanto a la codificación lo más complicado fue decidir los pines que serían utilizados y hacerlos corresponder con el circuito.
MEMORIA