Sei sulla pagina 1di 29

UTEC - UNIVERSIDAD TECNOLÓGICA

PROYECTO INTEGRADOR IV
AUTO SEGUIDOR DE LINEAS “CUCARACHA ONE”.

Informe del proyecto presentado en la Facultad de Ingeniería UTEC.


Universidad tecnológica del Uruguay.
Por:
Bruno Donato, Uriel Ferro, Cristian Rodríguez y Joaquín Quinteros.

En cumplimiento parcial de los requisitos para la obtención del título


Tecnólogo en Mecatrónica.

TUTORES
Daniel Bau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTEC
Santiago Tucci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTEC

Fray Bentos – Uruguay


Junio de 2019.

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.

El presente documento describe la construcción de un prototipo con componentes de


bajo costo existentes en el mercado con fines educativos, diseñados para trabajar en conjunto
lo cual facilita el ensamblaje, compatibilidad de los componentes y cálculos de
dimensionamiento mecánico y eléctrico (componentes Arduino).

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 1. Componentes del auto autónomo...........................…….7

TABLA 2. Componentes……………………………................................... 8

TABLA 3. Abreviaturas……………………………………….….................... 16

TABLA 4. Condiciones de Salto……………………………….................... 18

TABLA 5. Detalles de costo……………………………….......................... 29

Símbolos

Lista de los símbolos más relevantes de lo trabajo

3
Tabla de Contenidos
Agradecimientos ....................................................................................................... 2
ABSTRACT................................................................................................................... 3

Lista de tablas ........................................................................................................... 3


Símbolos.................................................................................................................... 3

1. Introducción .................................................................................................... 5
1.1 Objetivo....................................................................................................... 6

2. Fundamentos teóricos ..................................................................................... 6

2.1 Parte eléctrica y control ............................................................................... 6


2.2 Neumática ................................................................................................. 13
2.3 Parte de Control ........................................................................................ 14

Referencias bibliográficas ........................................................................................ 23


7 APÉNDICES ........................................................................................................... 24
Código de Control...................................................................................................................................... 24

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.

La corrección de posición de dicho vehículo se realiza comandando los motores DC de


ambas ruedas que traccionan en función a lo que los sensores digitales infrarrojos le indican. El
vehículo deberá de seguir una línea negra que se coloque en un piso, utilizando 2 sensores para
comprobar la parte clara y un sensor que compruebe la línea negra. Por otra parte, contará con
dos sensores infrarrojos adicionales los cuales serán para detectar las trayectorias “falsas” las
cuales queremos evitar que las transite.

En base a proyectos de otras Universidad, y la existencia de competencias de este tipo de


vehículos entre centros educativos, y dada la facilidad de compartir información en internet, se
allano el camino en el diseño y construcción del mismo.

Este tipo de proyecto, integradores, fomentan el trabajo grupal, ampliando la visión de la


profesión que se ejercerá en un futuro, ayudando a generar una lógica racional para resolución
de problemas en la vida laboral con recursos y tiempos acotados.

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

1. Diseño de la parte motora del móvil y de la pinza neumática.


2. Elija los actuadores necesarios para que el móvil pueda trasladarse.
3. Diseñe e implemente el sistema de control y el circuito eléctrico necesario.
4. Realizar una búsqueda de costos y selección de proveedores de las piezas necesarias en
el mercado uruguayo (o en el exterior) de manera de poder cumplir con el presupuesto
de u$ 5.000 por grupo.
5. Especificar los parámetros que deberá́ cumplir la trayectoria definida, para que el móvil
la pueda seguir.
6. La misma deberá tener una longitud de 3m lineales, y deberá contar con 3 curvas, y al
menos 3 ramificaciones “falsas” el cual el móvil no deberá transitar.
7. Construcción del sistema propuesto, y verificación de su funcionamiento.

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

Sensor seguidor de línea TCRT5000 5

Servo SG 90 1
Tabla 1- Tabla de componentes Auto autónomo

Se realizó la elección de un vehículo con 2 ruedas de tracción en la parte trasera y una


rueda loca en la parte delantera, debido a que permite reducir la cantidad de componentes

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.

Ilustración 1- Vista superior e inferior del vehículo


Tabla 2 -Identificación de partes

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.

Las mismas son:


• Piso plano, sin rugosidad, pendiente <2%, de color uniforme claro (sin rayas) con
diferencias de altura inferior a 2mm en juntas.

• Línea negra con un ancho constante de 18mm + - 2mm.


• En la trayectoria deberan marcarse previamente con lineas negras
perpendiculares al recorrido el aviso de ramificaciones falsas.
• Al final del recorrido se deberá trazar un linea perpendicular que cubra el
ancho de los 5 sensores.
• Curvas en la trayectoria con un radio de giro superior a la distancia media entre
rueda delantera y sensores a una de las rueda de pivot (rueda que no tracciona)
197mm.
• El objeto a transportar deberá ser de forma cilindrica el cual se apoye sobre una
de las cara circulares, con un diametro mayor a 20mm y menor que 50mm, con
una altura minima de 50mm y maxima de 150mm y el peso del objeto debera ser
menor de 50g .
• Velocidad constante.
• Autonomía batería <15 min.

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

Modulo controlador puente H L298N 2

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

• Chip del controlador: Doble H puente controlador


L298N chip
• Alimentación: +5V - +35V
• Corriente Io: 2A/Puente
• Rango de la fuente de alimentación: 4.5V - 5.5V
• Consumo máximo de energía: 20W
• Temperatura de almacenamiento: 25º - 130º Ilustración 4- Puente H
• Tamaño de la placa de accionamiento: 55mm x 60 mm x 30 mm
• Peso del tablero: 33g

10
Arduino Nano 3

Es la nueva generación de placas que permite realizar rápidos prototipos sobre


protoboard.

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

• RESET automático al descargar el programa


• LED azul en la base para indicar el encendido
• LED Verde (TX), Rojo (RX) y Naranja (L)
• Jumper para +5V conectado a AREF Ilustración 5- Arduino Nano
• Regulador de tensión integrado
• Conector mini-B USB para programación y comunicación serie integrado en placa
• Conector ICSP para programación
• Pines con espaciado de 0.1" DIP para insertarlo directamente sobre una protoboard
• Botón de reset integrado
• Bootloader integrado que permite programarlo con el entorno de desarrollo Arduino
sin necesidad de un programador externo.

Sensor seguidor de línea 4

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

• Sensor TCRT 5000.


• Distancia de detección 1mm a 25mm.
• Método de detección Reflectivo.
• Voltaje 3.3 a 5V.

Ilustración 6- Sensor seguidor de Linea

• Tamaño impreso 3,1cm x 1,4cm.

Motor servo SG 90 5

Un servomotor (servo) es un tipo de motor con


características especiales de control de posición. Está formado
por un sistema compuesto por componentes
electromecánicos y electrónicos.

El motor en el interior de un servomotor es un motor DC de imanes permanentes. El eje


del motor se acopla a una caja de engranajes similar a una transmisión. Esto se hace para
potenciar el torque del motor y permitir mantener una posición fija cuando se requiera.

Ilustración 7- Diagrama interno de servo

Características Técnicas

• Micro Servo Tower-pro


• Velocidad: 0.10 sec/60° @ 4.8V
• Torque: 1.8 Kg-cm @ 4.8V Ilustración 8- Servo Sg90

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

Sensor de proximidad KY-032 6

Sensor infrarrojo para evitar obstáculos, capaz de detectar un cuerpo en un rango de 2 a


40 cm.

Características

• Tensión de alimentación: 3.3V-5V


• Consumo: ≥ 20mA
• Rango de operación: -10 ℃ – +50 ℃
• Distancia de detección :2-40cm
• Señales: (GND / VCC/ OUT / EN)
• Señal OUT: Nivel bajo hay un obstáculo.
• Ángulo de medición: 35°
• Tamaño: 28mm × 23mmP Ilustración 9- Sensor KY 032
• Peso: 9g

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.

2.3 Parte de Control


Se pensó en utilizar una máquina de estados (FSM) para la parte de
automatización del vehículo, ya que con ella se simplifica gran parte del proceso. Con
este tipo de lógica de diseño de sistema se genera un diagrama con la estructura del
proceso a seguir el cual hace más sencilla la creación del código fuente, y a su vez es
facilita 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.

En muchos casos simplifica la comprensión del funcionamiento a técnicos ajenos


a al proceso de creación original. Otro aspecto 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. 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 e ir monitoreando que se puede mejorar para
hacerlo más eficiente.

Se opto por el lenguaje C ya que es de alto nivel y reconocido en este tipo de


aplicaciones, sistemas embebidos.

Su sintaxis determina la rápida comprensión en comparación a un lenguaje de


mas bajo nivel como lo es Assembler.

La experiencia previa en este entorno de programación alentó al desarrollo del


código empleado.

14
Metodología
El proyecto se dividió en múltiples etapas con plazos de cumplimientos establecidos.

Etapa 1: Creación de lógica.


Se realizó la lógica del auto seguidor de líneas basado en máquinas
de estados.

De esta forma se diseñó el comportamiento básico del auto:


movimiento hacia adelante, movimiento hacia la izquierda y
movimiento hacia la derecha.

Etapa 2: Selección de componentes vehículo y adquisición.


Se realizó una búsqueda de componentes en el laboratorio de UTEC
de anteriores proyectos. El 90% son componentes reutilizados.

Etapa 3: Circuito básico.


Se montó sobre el protoboard el Arduino Nano, 2 leds que
representaban los motores de las ruedas.

Por medio de 3 pulsadores se simularon los sensores para comprobar


que cuando se accionaba el sensor izquierdo el auto girara hacia la
izquierda y viceversa.

Etapa 4: Programación de movimientos básicos.


Se programó en lenguaje C, utilizando el Atmel Studio como entorno
de desarrollo, una FSM con 4 estados, ESPERA, ADELANTE, DERECHA
E IZQUIERDA.

El código programado fue simple, el objetivo principal fue que el auto


sea capaz de mantenerse sobre la línea negra sin mayores
dificultades.

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.

Etapa 6: Diseño circuito neumático


Cuenta de un recipiente de aluminio con válvula de una vía integrada
la cual inyecta aire sobre un pistón (jeringa) de accionamiento simple
con retorno por muelle.

Etapa 7: Adquisición y construcción de componentes neumáticos


Todos los componentes se obtuvieron de reciclaje domiciliario.

Etapa 8: Reconocimiento de trayectorias falsas

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).

También se encuentra censando en todo momento el detector de proximidad encargado


de parar el vehículo en cualquier estado en el que se encuentre. De esta manera, al encontrarse
frente a cualquier objeto comienza la función “Pinza()” dicha función detiene la FSM por
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 el control del servo. Se optó 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” ya que en la


trayectoria existira una linea perpendicular gruesa que permita dejar en este estado a todos los
sensores, 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.

También se encuentra censando en todo momento el detector de proximidad encargado


de parar el vehículo en cualquier estado en el que se encuentre. De esta manera, al encontrarse
frente a cualquier objeto comienza la función “Pinza()” dicha función detiene la FSM por

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.

Presentación de los datos, Análisis, Discusión

La velocidad máxima obtenida en trayectoria recta es de 0,25 𝑚/𝑠.

Calculo autonomía de funcionamiento.

Ic = corriente consumo del vehículo = 445𝑚𝐴

Cuando traccionan con los 2 motores el consumo es de 445𝑚𝐴, si lo hace con una sola
rueda la corriente decae 380𝑚𝐴.

Para una batería conformada por pilas de Ni-Cd(4𝑥1,2𝑉𝑥1200𝑚𝐴)se considera una


capacidad de descarga del 60%.
B,C . EFG.HFIJKLF B,C . OPBBQR
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑎𝑢𝑡𝑜𝑛𝑜𝑚í𝑎 = MN
= SSTQR
= 1,62ℎ𝑠

En las condiciones impuestas se tomó como máximo 15 minutos de autonomía para


minimizar el peso de la batería. A consecuencia que la batería que se dispuso en un primer
momento fue de 4,8𝑉 y 1200𝑚𝐴, se optó por esta.

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.

Lo cual a futuro permitirá rediseñar la FSM y optimizarla. Obteniendo una referencia de


desempeño para mejorar el control de esta.

Inicialmente se experimento con un recipiente de aluminio de 150 𝑐𝑚# , para


almacenamiento de aire comprimido con 6 bar de presión inicial, logrando hacer funcionar un
embolo de 60 𝑐𝑚# durante 6 extensiones. Esto posibilita utilizar un pistón de 5 𝑐𝑚# durante una
autonomía de unas 20 extensiones, pero usando resortes de extensión para retornar a su
posición inicial (retraído), lo cual disminuye la cantidad de ciclos operativos.

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.

La arquitectura de control empleada en la toma de decisiones de la FSM resulto


ser adecuada y confiable.

Teniendo en consideración lo previamente mencionado, es posible afirmar que


todos los objetivos han sido alcanzados, respetando los tiempos planificados.

De existir a futuro una posible aplicación especifica en algún proceso, se deberá


rever el diseño del dimensionamiento de éste (capacidad de carga de traslado,
capacidad de levantamiento de carga, autonomía), ya que el dimensionamiento de este
prototipo fue específicamente diseñado para cumplir con lo solicitado y no funcional
para el mercado.

Una de las dificultades que se experimentó fue la falta de adherencia de las


ruedas en las superficies donde se lo probo, a pesar de ser una dificultad trivial generó
dudas respecto a que si la parte del motivo de la falla era el sistema de control empleado
o solo se trataba de la falta de tracción. Ocasionando “zigzagueo” los cuales quitaban de
la zona de trabajo a los sensores de línea. Increntando notablemente el error respecto
a la trayectoria a seguir.

Se decidió iluminación blanca permanente en la zona de sensores para mantener


el nivel de iluminación constante, evitando así falsas detecciones por parte de sensores
por cambio de tonalidad en el piso.

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

[3] ARDUINO NANO

http://www.eneka.com.uy/robotica/tarjetas-de-desarrollo/tarjetas-arduino/arduino-nano-v3-
atmega328-detail.htmlExtraído el 07/06/19

[4] SENSOR SEGUIDOR DE LINEAS

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

[6] SENSOR DETECTOR DE OBSTACULOS

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

int contd, conti, delay, recorrido, habilitacion;

enum SEGUIDOR{
ESPERA, ADELANTE, DERECHA, IZQUIERDA, SSI, SSD, SSI_0, SSD_0, ESTADO_MAX
};

char estado = ESPERA; //estado en que se encuentra la maquina

void (*ptrFunc[ESTADO_MAX])(void); //primer void es lo que devuelve la funcion, el


segundo es lo que toma la funcion

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){

PORTD = (1 << DDD4);


_delay_ms(1000);
pwm_off();
PORTD = PORTD & ~(1 << DDD4);
recorrido = 0;
}

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;

if((conti == 0) && (contd == 0) && SI_BLANCO && (SM_NEGRO || SM_BLANCO) &&


SD_NEGRO){
estado = DERECHA;
}
else if((contd == 1) && SI_BLANCO && SM_BLANCO){
estado = DERECHA;
}
else if((conti == 1) && SD_NEGRO && (SM_BLANCO || SM_NEGRO)){
estado = DERECHA;
}
else if((conti == 0) && (contd == 0) && SI_NEGRO && (SM_NEGRO || SM_BLANCO)
&& SD_BLANCO){
estado = IZQUIERDA;
}
else if((contd == 1) && SI_NEGRO && (SM_NEGRO || SM_BLANCO)){
estado = IZQUIERDA;
}
else if((conti == 1) && SM_BLANCO && SD_BLANCO){
estado = IZQUIERDA;
}
else if(SM_NEGRO && SI_NEGRO && SD_NEGRO && SSD_NEGRO && SSI_NEGRO){
estado = ESPERA;
recorrido = 1;
}
else if(SSI_NEGRO && (conti == 0)){
estado = SSI;
}
else if(SSD_NEGRO && (contd == 0)){
estado = SSD;
}
else if(SSI_NEGRO && (conti == 1)){
estado = SSI_0;

25
}
else if(SSD_NEGRO && (contd == 1)){
estado = SSD_0;
}
}

void derecha(){
MD_OFF; //apago solo MD

if((conti == 0) && (contd == 0) && SI_BLANCO && SD_BLANCO && SM_NEGRO){


estado = ADELANTE;
}
else if((contd == 1) && SI_BLANCO && SM_NEGRO){
estado = ADELANTE;
}
else if((conti == 1) && SD_BLANCO && SM_NEGRO){
estado = ADELANTE;
}
else if(SM_NEGRO && SI_NEGRO && SD_NEGRO && SSD_NEGRO && SSI_NEGRO){
estado = ESPERA;
recorrido = 1;
}
else if(SSI_NEGRO && (conti == 0)){
estado = SSI;
}
else if(SSD_NEGRO && (contd == 0)){
estado = SSD;
}
else if(SSI_NEGRO && (conti == 1)){
estado = SSI_0;
}
else if(SSD_NEGRO && (contd == 1)){
estado = SSD_0;
}
}

void izquierda(){
MI_OFF; //apago solo MI

if((conti == 0) && (contd == 0) && SI_BLANCO && SD_BLANCO && SM_NEGRO){


estado = ADELANTE;
}
else if((contd == 1) && SI_BLANCO && SM_NEGRO){
estado = ADELANTE;
}
else if((conti == 1) && SD_BLANCO && SM_NEGRO){
estado = ADELANTE;
}
else if(SM_NEGRO && SI_NEGRO && SD_NEGRO && SSD_NEGRO && SSI_NEGRO){
estado = ESPERA;
recorrido = 1;
}
else if(SSI_NEGRO && (conti == 0)){
estado = SSI;
}
else if(SSD_NEGRO && (contd == 0)){
estado = SSD;
}
else if(SSI_NEGRO && (conti == 1)){
estado = SSI_0;
}
else if(SSD_NEGRO && (contd == 1)){

26
estado = SSD_0;
}
}

void ssi(){
conti = 1;

if(delay <= 9){


delay += 1;
_delay_ms(1);
}
else if(delay >= 10){
delay = 0;
estado = ADELANTE;
}

void ssd(){
contd = 1;

if (delay <= 9){


delay += 1;
_delay_ms(1);
}
else if(delay >= 10){
delay = 0;
estado = ADELANTE;
}
}

void ssi_0(){
conti = 0;

if (delay <= 9){


delay += 1;
_delay_ms(1);
}
else if(delay >= 10){
delay = 0;
estado = ADELANTE;
}
}

void ssd_0(){
contd = 0;

if (delay <= 9){


delay += 1;
_delay_ms(1);
}
else if(delay >= 10){
delay = 0;
estado = ADELANTE;
}
}

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(){

DDRB |= (1 << DDB2);//D10 como salida de PWM

//PWM no invertido
TCCR1A &= ~(1 << COM1B0);
TCCR1A |= (1 << COM1B1);

//Modo Fast PWM


TCCR1A &= ~(1 << WGM10);
TCCR1A |= (1 << WGM11);

//Tope maximo (frecuencia = 50)


ICR1 = (F_CPU / 1024 / 50) - 1;

//Comparador (25% on)


OCR1B = (((F_CPU / 1024 / 50) - 1) * 25) / 100;
}

void pwm_on(){
//pongo en 0 el contador
TCNT1 = 0x0000;

//Pongo clock / 1024


TCCR1B |= (1 << CS10);
TCCR1B &= ~(1 << CS11);
TCCR1B |= (1 << CS12);
}

void pwm_off(){
TCCR1B &= ~(1 << CS10);
TCCR1B &= ~(1 << CS11);
TCCR1B &= ~(1 << CS12);
}

28
ANEXO 1
Materiales

Propietario Descripción Cant. Precio unitario U$ Precio total U$


UTEC Motor EK1701 DC 3v-6v con reductor 48:1 c/rueda 2 188 375
UTEC Sensores seguidores de línea 3 62 186
Estudiante Sensores seguidores de línea 2 62 124
UTEC Módulo controlador puente H L298N 1 268 268
Estudiante Arduino nano 1 455 455
Estudiante Pulsador N/A 1 50 50
UTEC Servo tower pro 1 552 552
UTEC Detector de Obstaculos Frontales 1 64 64
Estudiante Rueda loca de base metalica, díametro 40mm 1 80 80
Estudiante Bateria Ni CD 1,2v- 1200mA X 4 (4,8V) 1 600 600
Estudiante Cable de conexionado 22 10 220
Estudiante Rectagulo de madera terciado 3,5x120x180mm 1 50 50
Estudiante Elementos de fijación(tornillos, tuercas, arandelas) 1 50 50
Estudiante Jeringa 6cc/tubos combustible/recipiente desodorante 1 150 150
Estudiante Planchuela aluminio 1/2"x3mm x 300mm 1 100 100
Total 3325
Tabla 5- Detalle de costos

Varios de los componentes se obtuvieron de proyectos de anteriores semestres


(reciclado) y los restantes fueron aportados por los estudiantes. Luego de culminado el proyecto
dichos ítems retornan a sus propietarios, por lo cual no demanda de una erogación para la
Institución. Los precios de estos corresponden a una cotización actual, referencia Mercado Libre.

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

Potrebbero piacerti anche