Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROYECTO INTEGRADOR IV
AUTO SEGUIDOR DE LINEAS “CUCARACHA ONE”.
TUTORES
Daniel Bau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTEC
Santiago Tucci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTEC
1
Agradecimientos
Agradezco a al estado uruguayo que esta haciendo posible el estudio terciario
en el interior del país.
Con una mención especial al Sr. Jose Mujica impulsor de esta iniciativa.
RESUMEN
En la última década la evolución tecnológica ha permitido que con mayor frecuencia
vehículos autónomos formen parte de nuestra vida cotidiana. Es así que en países desarrollados
se ha implementado el transporte de personas, como así también en sistema de movimientos
de cargas de proceso productivos o almacenamiento, incrementando la confiabilidad y
productividad de estos procesos.
Visto los objetivos planteados por los docentes y utilizando etapas evolutivas con alcances
de menor a mayor complejidad, se realizó el proceso de diseño y construcción, facilitando el
proyecto. Cubriendo las áreas de Electrónica, Control, Neumática, Programación y Maquinas
eléctricas.
2
ABSTRACT
In the last decade, technological evolution has allowed autonomous vehicles to become
part of our daily lives more frequently. Thus, in developed countries, these kind of technologies
became part of public transportation, as well as in the system of movements of productive
process loads or storage, increasing the reliability and productivity of these processes.
This document describes the construction of a prototype, with low cost components
existing in the market for educational purposes, designed to work together which facilitates the
assembly, compatibility of the components and calculations of mechanical and electrical sizing
(Arduino components).
Having the objectives set by the teachers and using evolutionary stages with scopes of
less to greater complexity, the design and construction process of the car was carried out,
facilitating the project. Covering the areas of Electronics, Control, Pneumatics, Programming and
Electrical Machines.
Lista de tablas
TABLA 2. Componentes……………………………................................... 8
TABLA 3. Abreviaturas……………………………………….….................... 16
Símbolos
3
Tabla de Contenidos
Agradecimientos ....................................................................................................... 2
ABSTRACT................................................................................................................... 3
1. Introducción .................................................................................................... 5
1.1 Objetivo....................................................................................................... 6
ANEXO 1 .................................................................................................................. 29
Materiales ................................................................................................................................................. 29
4
1. Introducción
El diseño de un Auto autónomos permite consolidar el conocimiento de varias materias
de la carrera, aportando al aprendizaje de los estudiantes. Es por eso qué se ha propuesto la
creación de un auto autónomo seguidor de líneas, el cual sea capaz de corregir su dirección de
forma automática, haciendo que en ningún momento se aparte de una línea negra (la cual es su
camino a recorrer), ignorando trayectorias falsas. A su vez, este vehículo deberá ser capaz de
recoger una carga que se le coloque en su camino, y transportarla hasta el final de éste,
emitiendo una señal de culminación de trayecto.
5
1.1 Objetivo
GENERALES
Creación de un Auto autónomo, el cual debe ser capaz de seguir una trayectoria no
predefinida, además debe de transportar una carga hasta el final del recorrido.
ESPECIFICOS
2. Fundamentos teóricos
2.1 Parte eléctrica y control
Basados en componentes disponibles en nuestro mercado, compatibles con
Arduino, tratando de minimizar la complejidad del diseño y realizada una búsqueda sobre
vehículos de estas características, sumado a las condicionantes impuestas para el proyecto, se
optó por los siguientes componentes.
6
Descripción Cantidad
Arduino nano 1
Batería 6LR61 9V 1
Batería Ni CD AA 1,2v- 1200mA X 4 (4,8V) 1
Buzzer activo 1
Cable de conexionado -
Depósito de Aluminio 150 𝑐𝑚# 1
Elementos de fijación 8
Elementos de fijación (tornillos, tuercas,
1
arandelas)
Jeringa 5 𝑐𝑚# 1
Led blanco 2
Módulo controlador puente H L298N 1
Motor EK1701 DC 3v-6v con reductor
2
48:1 c/rueda
Placa de 65x45 1
Pulsador N/A 1
Rectángulo de madera terciado
1
3,5x120x180mm
Resorte 3
Rueda loca de base metálica, diámetro
1
40mm
Sensor de proximidad KY032 1
Servo SG 90 1
Tabla 1- Tabla de componentes Auto autónomo
7
eléctricos/electrónicos, y a su vez simplifica la programación del controlador de dicho auto. Por
otra parte, la corrección de posición del vehículo es mas rápida y efectiva.
Numero Nombre
1 Sensores de señales
2 Bateria 9v
3 Rueda loca
4 Microcontrolador
5 Motorreductores
6 Puente H
7 Bateria 5v
8 Servomotor
9 Valvula de accionamiento
10 Tubo conector
11 Resortes de extención
12 Pinza mecánica
13 Actuador neumático
14 Tanque presurizado
15 Sensores de linea
16 Sensor detector de objetos
Tabla 2- Tabla de componentes
8
Condiciones de diseño
A consecuencia de los componentes que se utilizaron en la construcción, se impusieron
condiciones para cumplir los objetivos pautados.
9
Ilustración 2- Señalización de caminos falsos
Descripción de componentes
Motor EK1701 DC 3-6V 1
Este motor DC posee una caja reductora integrada que le permite entregar un buen
torque en un pequeño tamaño y bajo voltaje. La carcasa del motor es de plástico resistente, no
toxico y de color amarillo. La llanta de goma posee un excelente agarre en superficies de
cemento, madera y acrílico. Incluso le permiten soportar cierto nivel rebote.
Características técnicas
• Voltaje de Operación: 3V – 6V
• Velocidad Angular nominal: 125 RPM
• Reducción: 48:1
• Consumo máximo de corriente: 150mA
• Diámetro Exterior de Llanta: 65 mm
• Diámetro eje de llanta: 6mm
• Peso: 50g Ilustración 3- Motor-Reductor
Permite obtener del módulo una tensión de 5V, perfecta para alimentar nuestro Arduino.
Eso sí, este regulador sólo funciona si alimentamos el módulo con una tensión máxima de 12V.
Características Técnicas
10
Arduino Nano 3
Esta vez, incorpora un conector mini USB, un chip ATMega328p, 2 entradas analógicas y
un conector ICSP para programarlo mediante un programador externo si se desea, sin necesidad
de cablear el conector externamente.
Características Técnicas
11
Es un dispositivo que es utilizado normalmente para la detección de la línea negra o blanca
en robots seguidores de línea. El módulo posee un sensor infrarrojo TCRT5000, un comparador
de voltaje y un trimmer para ajustar la sensibilidad de detección del sensor.
Características Técnicas
Motor servo SG 90 5
Características Técnicas
12
• Voltaje de funcionamiento: 3.0-7.2V
• Temperatura de funcionamiento: -30 ℃ ~ 60 ℃
• Ángulo de rotación: 180°
• Ancho de pulso: 500-2400 µs
• Longitud de cable de conector: 24.5cm
Características
2.2 Neumática
Se utilizó un recipiente de aluminio correspondiente a un desodorante comercial,
almacenando un máximo de 6 bares de presión. La válvula del desodorante se activa por una
palanca la cual es accionada por el servo motor.
13
La válvula inyecta aire mediante una manguera a un pistón (jeringa descartable) de 5
#
𝑐𝑚 de capacidad.
Dicho pistón acciona un mecanismo que extiende y cierra 2 brazos que son capaces de
sujetar un objeto.
No se realizaron cálculos para dimensionar la pinza, debido a que el peso del cuerpo a
levantar es despreciable con relación a la resistencia de los materiales empleados.
14
Metodología
El proyecto se dividió en múltiples etapas con plazos de cumplimientos establecidos.
Etapa 5: Montaje y puesta en marcha. Seguir una línea con leves curvas sin
ramificaciones.
Se montaron las ruedas, protoboard con el Arduino, puente H y
sensores sobre un rectángulo de madera con el fin de simular el auto.
15
Se agregan sensores para reconocer las trayectorias falsas y por ende
se modifica la FSM agregando 4 estados para saber como procesar
la informacion brindada por esos sensores nuevos. Estos sensores
detectan las alertas en la trayectoria de la excistencia de trayectorias
falsas.
Se pensó en utilizar una máquina de estados (FSM) para la parte de automatización del
vehículo, ya que con ella se simplifican bastante algunas cosas. Por ejemplo, con este tipo de
programación, se sigue una lógica previamente diseñada en papel, la cual hace más sencilla la
creación del código fuente, y a su vez es mucho más fácil a la hora de agregar o sacar actuadores
o periféricos (sensores, motores, actuadores, etc.) ya que es solo seguir el diagrama de flujo de
la FSM y modificar la parte en la cual se requiere que esto accione, o tome decisiones a partir de
lo que el entorno le brinda.
A su vez, es algo que lleva un orden lógico, por lo que lo hace más efectivo a la hora de la
explicación de este hacia personas que están por fuera de este rubro y que quieren entender
cómo funciona el auto. Por otro lado, un tema importante es que como esto sigue un flujo ya
determinado, es mucho más fácil depurar el programa para la detección de fallas, o para la
optimización de este, ya que es posible aplicar diferentes métodos con este fin. Por ejemplo, es
posible enviar datos por el puerto serie (USART) y observar que acción está tomando (mediante
la ventana serial del entorno Arduino) o que parte del programa se está ejecutando, o depurar
cada estado paso a paso e ir viendo que se puede mejorar para hacerlo más eficiente o encontrar
alguna falla que esté presente y este haciendo fallar el vehículo en cuestión.
Componentes FSM
16
Descripción Entrada /Salida
Abreviatura
Sensor Izquierdo SI E
Sensor señal derecha SSD E
Sensor señal izquierda SSI E
Buzzer activo Beep S
Servomotor SVM S
Sensor de proximidad KY_DET E
Sensor Derecho SD E
Sensor Medio SM E
Pulsador P E
Motor Derecho MD S
Motor Izquierdo MI S
Tabla 3- Abreviaturas en FSM
17
Ilustración 10- Diagrama de estados
18
Num. Condición de Salto
1 SD=SM=SI=SSD=SSI=1
2 SD=SI=0 / P=SM=1
3 SD=SI=SM=P=0
4 SM=SD=0 / Conti=1
5 SM=SI=0 / Contd=1
6 SI=1 (SM=1/0) / Conti=SD=0
7 SD=1 (SM=1/0) / Contd=SI=0
8 SD=0 / Conti=SM=1
9 SI=0 / Contd=SM=1
10 SM=1 / Contd=SD=SI=0
11 SM=1 / Conti=SD=SI=0
12 SSI=1 / Conti=0
13 SSD=1 / Contd=0
14 SSI=1 / Conti=1
15 SSI=1 / Contd=1
16 Delay=10ms
17 Delay=10ms
18 Delay=10ms
19 Delay=10ms
20 SSD=1 / Contd=0
21 SSI=1 / Conti=0
22 SSI=Conti=1
23 SSD=Contd=1
24 SSI=Conti=1
25 SSD=Contd=1
26 SSI=1 / Conti=0
27 SSD=1 / Contd=0
Tabla 4- Condiciones de salto
19
Descripción del flujo de la máquina de estados:
Al encender el auto ira automáticamente al estado ESPERA. Para comenzar a ejecutarse
la FSM, se debe cumplir con determinadas condiciones de los sensores utilizados para el
seguimiento de la línea (SI - SM - SD) y un pulsador P. Dicha condicion deberá tener el sensor SM
detectando la línea negra y el pulsador de inicio con la condición “High”, (digitalmente hablando
SM = 1 y P = 1). Cuando esto sucede, pasara al siguiente estado que es ADELANTE, en donde se
activan los dos motores MD (derecho) y MI (izquierdo). A partir de este estado tenemos dos
caminos, uno es el que viene dado por los sensores seguidores de línea y otro es el censado por
los sensores de señales (SSI - SSD), esta información recopilada por los sensores de línea y de
señales es otorgada a la FSM para que así pueda ir saltando entre estados y ejecutando las
diferentes correcciones necesarias para el seguimiento y la ejecución de todo su proceso.
Por un lado, tendremos dos tipos de correcciones, que serán en base a los datos de los
sensores de línea. Las mismas serán ejecutadas en los estados DERECHA e IZQUIERDA, dentro
de los cuales se activan o desactivan los motores derecho e izquierdo. De esta manera la FSM
corrige su posición dentro del camino, volviendo una vez finalizada la corrección al estado
ADELANTE.
Por otra parte, están los sensores de señales (SSI - SSD) que al mismo tiempo que los de
línea y con igual orden de jerarquía en la lectura de datos, le comunican a la FSM las futuras
ramificaciones falsas. Por cada sensor de señales existe un contador en el software encargado
de guiar al auto por el verdadero camino. Por ejemplo, el sensor SSI al detectar una señal del
lado izquierdo, incrementa el contador izquierdo (conti) en uno. Esto permite una configuración
de saltos de estados diferente a la que se venía utilizando para seguir la línea cuando no existen
ramificaciones, en la cual la condición del sensor SI cambió, para que no corrija hacia este lado,
de esta manera el auto sigue la trayectoria sin tomar el próximo camino izquierdo. Una vez que
el auto pasa por encima de la ramificación se vuelve a poner el contador en cero y vuelve a seguir
su recorriendo con normalidad. Caso análogo es para el sensor SSD con su respectivo contador
(contd).
20
completo, ya que se adueña de la CPU para realizar la parte de sujetar, levantar y mantener
levantado el objeto hasta el final del camino. Esta función, da inicio a un PWM generado por
Hardware, el cual será utilizado para la alimentación del servo. Optamos por generar el PWM de
esta forma, ya que el mismo sigue generándose aunque la CPU este ocupada en otra parte del
proceso, a diferencia de la generación por Software que ahí sí, requiere de la CPU para su
generación.
Al finalizar el recorrido todos los sensores se encontraran en “High” por lo que la FSM se
dirigirá al estado ESPERA, y el PWM se desactivara, haciendo que la pinza deposite el objeto en
el suelo y a su vez sonara una alarma como señal de finalización del proceso.
Cuando traccionan con los 2 motores el consumo es de 445𝑚𝐴, si lo hace con una sola
rueda la corriente decae 380𝑚𝐴.
Una mejora en este prototipo seria, obtener numéricamente del controlador del Arduino
el error cometido en la trayectoria recorrida. Utilizando los datos obtenidos en el proceso
durante la corrección derecha-izquierda de la máquina de estado, realizando la sumatoria del
tiempo empleado en los estados derecha-izquierda sobre el tiempo mínimo en recorrer la
misma distancia, indicara un índice de error en el proceso.
21
Consideraciones Finales
El esquema lógico de diseño aplicado resulto adecuado y fructífero. La familia de
componentes seleccionada agilizó la construcción y el diseño de este.
22
Referencias bibliográficas
[1] MOTORREDUCTORES
http://www.eneka.com.uy/robotica/motores/motorreductores/motor-dc-3-6v-con-reductor-
48-1-con-rueda-detail.html Extraído el 07/06/19
[2] PUENTE H
http://www.eneka.com.uy/robotica/motores/controladores-motor/m%C3%B3dulo-
controlador-motor-pap-dual-puente-h-l298n-detail.html Extraído el 07/06/19
http://www.eneka.com.uy/robotica/tarjetas-de-desarrollo/tarjetas-arduino/arduino-nano-v3-
atmega328-detail.htmlExtraído el 07/06/19
http://www.eneka.com.uy/robotica/sensores/optico/m%C3%B3dulo-sensor-de-distancias-hc-
sr04-7391-7538-7546-detail.html Extraído el 07/06/19
[5] SERVO SG 90
http://www.eneka.com.uy/robotica/motores/servomotores/motor-servo-micro-sg90-
detail.html Extraído el 07/06/19
http://static.wixstatic.com/media/adc9df_820966b1881a49cbb7c3c44cd0f35ade~mv2.jpg/v1/
fit/w_500,h_500,q_90/file.jpg Extraído 07/06/19
23
7 APÉNDICES
Código de Control
/*Cucaracha One*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define SM_NEGRO (PINB & (1 << 3))
#define SM_BLANCO (!(PINB & (1 << 3)))
#define PULSADOR_ON (PINB & (1 << 5))
#define SI_NEGRO (PIND & (1 << 5))
#define SI_BLANCO (!(PIND & (1 << 5)))
#define SD_NEGRO (PINB & (1 << 4))
#define SD_BLANCO (!(PINB & (1 << 4)))
#define SSI_BLANCO (!(PIND & (1 << 2)))
#define SSI_NEGRO (PIND & (1 << 2))
#define SSD_BLANCO (!(PIND & (1 << 3)))
#define SSD_NEGRO (PIND & (1 << 3))
#define MI_MD_OFF (PORTB = PORTB & ~((1 << 0)|(1 << 1)))
#define MI_MD_ON (PORTB = (1 << 0) | (1 << 1))
#define MD_OFF (PORTB = PORTB & ~(1 << 1))
#define MI_OFF (PORTB = PORTB & ~(1 << 0))
#define KY_DETECT (!(PIND & (1 << DDD7)))//D7
enum SEGUIDOR{
ESPERA, ADELANTE, DERECHA, IZQUIERDA, SSI, SSD, SSI_0, SSD_0, ESTADO_MAX
};
void espera();
void adelante();
void derecha();
void izquierda();
void ssi();
void ssd();
void ssi_0();
void ssd_0();
void init();
void pinza();
void init_pwm();
void pwm_on();
void pwm_off();
int main(void)
{
init();
while (1)
{
ptrFunc[estado]();
24
if (KY_DETECT && (habilitacion == 1)){
pinza();
}
}
return 0;
}
void espera(){
MI_MD_OFF; //apago MI y MD
conti = contd = habilitacion = 0;
if (recorrido == 1){
if(SM_NEGRO && PULSADOR_ON && SI_BLANCO && SD_BLANCO)//leo que sensor SM vea
negro, y Pulsador sea 1
estado = ADELANTE;
}
void adelante(){
MI_MD_ON;//enciendo MI y MD
habilitacion = 1;
25
}
else if(SSD_NEGRO && (contd == 1)){
estado = SSD_0;
}
}
void derecha(){
MD_OFF; //apago solo MD
void izquierda(){
MI_OFF; //apago solo MI
26
estado = SSD_0;
}
}
void ssi(){
conti = 1;
void ssd(){
contd = 1;
void ssi_0(){
conti = 0;
void ssd_0(){
contd = 0;
void init(){
DDRB |= ((1 << 0) | (1 << 1)); //seteo como salidas estos pines, PB0 = MI,
PB1 = MD, PD5 = SI, PB3 = SM, PB4 = SD, PB5 = P, PD2 = SSI y PD3 = SSD.
DDRD |= (1 << 4); //D4 como salida para BEEP
conti = contd = delay = recorrido = habilitacion = 0;
27
ptrFunc[ESPERA] = espera;
ptrFunc[ADELANTE] = adelante;
ptrFunc[DERECHA] = derecha;
ptrFunc[IZQUIERDA] = izquierda;
ptrFunc[SSI] = ssi;
ptrFunc[SSD] = ssd;
ptrFunc[SSI_0] = ssi_0;
ptrFunc[SSD_0] = ssd_0;
}
void pinza(){
init_pwm();
_delay_ms(2000);
pwm_on();
}
void init_pwm(){
//PWM no invertido
TCCR1A &= ~(1 << COM1B0);
TCCR1A |= (1 << COM1B1);
void pwm_on(){
//pongo en 0 el contador
TCNT1 = 0x0000;
void pwm_off(){
TCCR1B &= ~(1 << CS10);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << CS12);
}
28
ANEXO 1
Materiales
Esta tabla de valores se presenta con el fin de cumplir con formalidad requerida y
demostrar que no se superó la cifra preestablecida de $5000 pesos uruguayos.
29