Proyecto de Grado Final
Proyecto de Grado Final
Proyecto de Grado Final
Primeramente se hace la descripción del problema que tienen los conductores al momento
de estacionarse y los inconvenientes de los sistemas de estacionamiento disponibles en el
mercado, la delimitación del proyecto, la justificación y los objetivos que se alcanzó al
realizar el sistema de estacionamiento. Posteriormente se realiza estudio a los sistemas
de estacionamiento proporcionados por los fabricantes en cada uno de sus automóviles.
Asimismo se describe los conceptos básicos sobre los elementos que se ha utilizado en
el proyecto y se presenta la propuesta de innovación. Por ello se realiza una investigación
de campo y bibliográfica, la recolección de información indispensable para el sistema de
estacionamiento, finalmente detallando los pasos que se sigue para el desarrollo del
proyecto, haciendo la comparación de cada uno de los dispositivos que se emplea en el
sistema de estacionamiento, el desarrollo de la interface de usuario, el esquema del
circuito de estacionamiento y la instalación del sistema con la estimación del costo de
fabricación.
CAPITULO I
1.1 TEMA
IMPLEMENTACIÓN DE SENSORES DE APROXIMIDAD PARA FACILITAR EL
ESTACIONAMIENTO DEL VEHÍCULO
1.2.1 DIAGNOSTICO
El estacionarse es algo muy habitual para los conductores, cada vez se incrementa el
número de vehículos en la ciudad de El Alto y por lo tanto los espacios para estacionarse
se reducen, y el conductor se ve en la necesidad de realizar nuevas maniobras para poder
evitar accidentes. Al momento que el conductor desea estacionar su vehículo surge el
problema de que no todos los objetos a su alrededor son visibles y no es fácil reconocer
la distancia real por los retrovisores del vehículo y otros objetos posible ubicado a su
alrededor, lo que dificulta el parqueo.
1.2.2 JUSTIFICACIÓN
SOCIAL.
Los beneficiarios son las personas que tengan automóviles, instalados este sistema
electrónico de sensores de aproximidad quienes con este sistema evitarán accidentes
involuntarios por la falta de visibilidad de los objetos que se encuentran al alrededor del
vehículo.
ECONÓMICA.
En la actualidad existen varios sistemas de parqueo los cuales son muy costosos y sus arreglos
consiste en cambiar casi todo el sistema, al ser un producto nacional los costos disminuirán
drásticamente, si se necesita realizar mantenimiento o arreglar un fallo del sistema se dará un
servicio técnico a bajo costo económico.
TÉCNICO/TECNOLÓGICO
Esto se debe a que cada vez existen menos lugares donde estacionarse y los vehículos se
encuentran tan juntos unos a otros, que al momento de salir del estacionamiento
provocan choques con otros vehículos u objetos a su alrededor.
En las calles se observa que los conductores estacionan sus vehículos en espacios
reducidos con mucha dificultad igualmente que al ingreso o salida de los garajes, las
personas dañan o rozan sus vehículos con las paredes u obstáculos causando abolladuras
y rayones en la pintura. Al momento en que un usuario desea estacionar su vehículo surge
el problema, donde no todos los objetos a su alrededor son visibles y no es fácil reconocer
la distancia real entre el vehículo y otro ubicado a su alrededor, lo que dificulta el parqueo,
además existen otros factores adicionales a considerar como: el clima, la lluvia, el polvo,
la neblina, etc. El descuido y otras circunstancias.
Por ello se formula el siguiente problema de ¿Cómo evitar el choque a objetos fijos o
móviles al estacionar el vehiculo?
1.4 OBJETIVOS
1.5.1 MÉTODOS
La investigación del proyecto de grado está orientada en un método de investigación de
tipo descriptivo.
La investigación de tipo descriptiva Según Tamayo y Tamayo M. en su libro proceso de
investigación (pág. 35)
CAPITULO II
El arduino es una placa electrónica para la creación de prototipos las cuales están basadas
en software y hardware libre lo que le hace que sea una plataforma flexible y fácil de
utilizar. El arduino fue diseñado para desarrolladores, aficionados y cualquier persona
interesada en crear proyectos interactivos.1
GRAFICO N°
Placa Arduino mega
Fuente:
https://www.google.com/search?q=arduino+mega&tbm=isch&source=iu&ictx=1
Arduino es una plataforma que toma información de su alrededor por medio de sus pines
de entrada, esto se logra por medio de sensores los cuales accionan actuadores pudiendo
controlar luces, motores, etc. La placa Arduino se programa con el lenguaje de
programación proporcionado por la misma placa el cual está basado en Wiring y consta
de un entorno de desarrollo basado en Processing. Los programas realizados en Arduino
se pueden ejecutar sin necesidad de que esté conectado al ordenador, además puede
comunicarse con diferentes tipos de software: MaxMSP, Processing, Flash, etc.2
1
https://www.arduino.cc
2
Jamangandi2012.blogspot.com
3
Esta disponible en manual de programación arduino de henrry Orozco capitulo 2 pag 5
ingeniero italiano (Guianluca Martino, en 2005)4 con fines docentes y, quizá debido a su
precio asequible y a su carácter open-source (que permite su diseño y distribución libre),
su uso se ha extendido en los últimos años a múltiples proyectos, muchos de ellos
relacionados con el diseño industrial y el arte interactivo. La información oficial de
Arduino se puede encontrar on-line, en su sitio web oficial.
Las placas, pueden construirse a mano o comprarse ya pre ensambladas y el IDE oficial
para trabajar con Arduino, puede descargarse de forma gratuita. Además, los desarrollos
con Arduino pueden requerir de un sistema operativo para ejecutarse e interactuar con un
programa que se está ejecutando en un ordenador.
HARDWARE
4
Se encuentra disponible en docdownloader.com_arduino-manual.pdf
El hardware es el conjunto de componentes que integran la parte material de Arduino5, es
decir, la propia placa de Arduino. Se trata de una tarjeta programable, en forma de circuito
impreso (PCB, Printed Circuit Board), cuya superficie está fabricada de un material no
conductor (resinas de fibra de vidrio reforzada, cerámica o plástico) y trazada con pistas
de un material conductor (cobre, normalmente) que conectan eléctricamente los distintos
componentes soldados a la placa, formando un determinado diseño de circuitería interna,
cuyo elemento principal es el microcontrolador (de Atmel) de 8 bits de resolución (a
excepción del microcontrolador de la placa Arduino DUE, que es de 32 bits). Consta de
tres tipos de memoria, de capacidad variable según el tipo de microcontrolador (en
función del modelo de placa): memoria Flash, con una capacidad de entre 16 y 256[KB],
memoria SRAM (Static Random Access Memory) de 1, 2 u 8[KB], y memoria EEPROM
(Electrically Erasable Programable Read-Only Memory) de 512 bytes, 1024 bytes El
microcontrolador tiene una serie de conectores o pines que se utilizan como entrada o
salida, registros de memoria, un oscilador interno (que facilita al microcontrolador una
serie de pulsos para mantener estable la velocidad de trabajo), e interfaces para la
comunicación serie; entre sus principales componentes.
Por otra parte, la placa Arduino consta también de una serie de entradas y salidas (en
forma de conectores o pines), tanto analógicas como digitales. Los pines de entrada o
salida digital, pueden comportarse, como su propio nombre indica, como entradas o
salidas digitales, según se especifique en el sketch programado en el IDE; las entradas
analógicas aceptan valores analógicos (es decir, lecturas de voltaje desde un sensor) y los
convierten en un valor comprendido entre 0 y 1023; y las salidas analógicas son salidas
digitales reprogramadas para ofrecer valores de salida analógicos mediante el sketch
creado en el IDE.
5
Esta disponible en: docdownloader.com_arduino-manual.pdf (manual de usuario arduino cap.4 pag. 15)
El diseño original de Arduino incluye los componentes electrónicos necesarios para
alimentar y comunicarse con el microcontrolador así que, otras alternativas de diseño
deberían incorporarlos o al menos, mostrar la forma de añadirlos fácilmente. Los diseños
de referencia de Arduino, como ya se ha comentado anteriormente, se encuentran bajo la
licencia de CC BY-SA (2.5 Generic)6
Entradas o salidas
Velocidad de CPU
Voltaje de entrada
funcionamiento [v]
Salida analogicas
Tipo de conexión
microcontrolador
Memoria SRAM
Modelo
EEPROM [kb]
N0 de puertos
Digitales /sal.
[KB]
USB
[KB]
Tensión de
MEMORIA
de placas
[v]
analógica
[MHz]
Entradas
Memoria
FLASH
arduino
UART
PWM
serie
UNO ATmega328 5 7-12 16 6/0 14/6 1 2 32 Regular 1
6 : http://creativecommons.org/licenses/by-sa/2.5/
7
: http://arduino.cc/en/Products.Compare
LilyPad ATmega32u4 3.3 3.8-5 8 4/0 9/4 1 2.5 32 Mini
-
USB
LilyPad ATmega328 2.7-5.5 2.7-5.5 8 4/0 9/4 1 2 32
- -
Simple
LilyPad ATmega328 2.7-5.5 2.7-5.5 8 4/0 9/4 1 2 32
- -
SimpleSnap
SOFTWARE
8 Para obtener más información al respecto, el sitio web de Processing es: http://processing.org/
Las principales diferencias entre Processing y el Arduino Programming Language pueden encontrarse
en: http://arduino.cc/es/Reference/Comparison
9 El sitio web de Wiring es: http://wiring.org.co/
10 El IDE Arduino oficial está disponible en: http://arduino.cc/en/Main/Software
11 en: http://arduino.cc/en/Reference/HomePage
.
bloques (como setup(), loop(), operadores, etc.), valores (variables y constantes) y
funciones. Existen además, gran número de librerías12 para la interacción de Arduino con
determinados tipos de hardware. Y numerosas contribuciones de código por parte la
comunidad.
De esta forma, la placa se puede programar para que interactúe con el mundo real. Pero
las salidas que ofrece la placa Arduino y las entradas ante las que puede reaccionar, son
de naturaleza eléctrica. Por eso, a la hora de enviar o captar señales (ultrasonidos, en el
caso de este proyecto) a través de sensores externos (el sensor HC-SR04, en este caso),
habrá que transformar el valor leído por el sensor en un valor eléctrico, procesarlo
mediante Arduino y transformarlo de nuevo, en algo utilizable para nosotros (que en el
caso de este proyecto, será una distancia en centímetros.
12
Las librerías de Arduino, también se pueden encontrar en: http://arduino.cc/es/Reference/Libraries
13
La configuración completa del compilador, se encuentra en los ficheros “makefile”.
14 compilación de Arduino: http://arduino.cc/en/pmwiki.php?n=Hacking/BuildProcess
En el núcleo de Arduino, el toolchain es la secuencia de programas que se invocan cada
vez que se compila un proyecto, generando el fichero de código máquina con extensión
*.hex que será enviado a la placa Arduino (a su micro) a través de la conexión USB o
serie (o un programador ISP, si no tuviese el bootloader instalado). Durante el proceso de
compilación de Arduino, se compilan tanto el sketch (o los sketches) del proyecto con
extensión *.ino, como las librerías incluidas, y los ficheros que utiliza Arduino. Los
ficheros “*.ino” se fusionan (en un “main sketch file”) antes de ser enviados al compilador
avr-gcc, mientras que los ficheros “*.c” y “*.ccp”, son compilados por separado.
Más tarde, el programa linker une todos los ficheros objeto y los ubica en las posiciones
que ocuparán en la memoria. Mediante “avr-ar”, une los ficheros “*.o” y los comprime
en un fichero “*.a”; y mediante “avr-g++”, genera un fichero de librería estática, “*.elf”
(un estándar de los ficheros ejecutables en UNIX) con todo código objeto generado antes.
El fichero “*.elf” se convierte (a través de “avr-objcopy”) en un fichero “*.hex” (o Intel
Hex Format39) que contiene el código máquina que se cargará y ejecutará en el
15
El código principal del programa que será construido en C++, se encuentra en la carpeta de instalación
de Arduino, en “hardware\arduino\cores\arduino\main.ccp”.
16
El directorio de destino será “Arduino\hardware\arduino\cores\core”
17
El directorio “include avr” se encuentra en “Arduino\hardware\tool\avr\avr\include\”
microcontrolador. Finalmente, se envía el fichero final (con extensión *.hex) a la placa
Arduino.
ELEMENTOS INFORMACION
Microcontrolador Atmega2560
Voltaje de operación 5v
Voltaje de entrada (recomendada) 7-12v
Voltaje de entrada (limite) 6-20 v
Pines de entrada- salida digital 54 (15 pines son PWM)
18
Está disponible en docdownloader.com_arduino-manual.pdf o también véase en Arduino.cl/arduino-
mega-2560/
Pines de entrada analógica 16
Corriente continua por pin IO 20mA
Corriente continua en el pin 3.3v 50nA
Memoria flash 256 KB,8 KB utilizado por el gestor de arranque
SRAM 8KB
EEPROM 4KB
Velocidad del reloj 16MHz
LED_BUILTIN 8
Longitud 101.52 mm
Anchura 53.3 mm
Peso 37 g.
Véase en anexos
19
www.arduino.cc/en/hacking/pinMapping2560
ALIMENTACIÓN DEL ARDUINO
El Arduino Mega puede ser alimentado por la conexión USB o por una fuente de
alimentación externa. El origen de la alimentación es seleccionado automáticamente20
20 www.arduino.cc/en/Main/Boards
La placa puede trabajar con una alimentación externa de entre 6 a 20 voltios. Si el voltaje
suministrado es inferior a 7V el pin de 5V puede proporcionar menos de 5 Voltios y la
placa puede volverse inestable, si se usan mas de 12V los reguladores de voltaje se pueden
sobrecalentar y dañar la placa. El rango recomendado es de 7 a 12 voltios.21
VIN. La entrada de voltaje a la placa Arduino cuando se está usando una fuente
externa de alimentación (en contraposición a los 5 voltios de la conexión USB).
Se puede proporcionar voltaje a través de este pin, o, si se está alimentado a través
de la conexión de 2.1mm, acceder a ella a través de este pin.
3V3. Una fuente de voltaje a 3.3 voltios generada en el chip FTDI integrado en
la placa. La corriente máxima soportada 50mA.
MEMORIA
21
Mas información en: manual arduino.pdf (docdownloader.com_manual-arduino.pdf)
El ATmega2560 tiene 256KB de memoria flash para almacenar código (8KB son usados
para el arranque del sistema. El ATmega2560 tiene 8 KB de memoria SRAM y 4KB de
EEPROM. (que puede ser leída y escrita con la biblioteca EEPROM)22
ENTRADAS Y SALIDAS
Cada uno de los 54 pines digitales en el Mega pueden utilizarse como entradas o salidas
usando las funciones pinMode(), digitalWrite(), y digitalRead() . Las E/S operan a 5
voltios. Cada pin puede proporcionar o recibir una intensidad máxima de 40mA y tiene
una resistencia interna (desconectada por defecto) de 20-50 k Ohms. Además, algunos
pines tienen funciones especializadas.23
22
Docdownloader.com_arduino.pdf o en Mega-2560.hmanueldelgadocrespo.blogspot.com/p/arduino-
tml?m=1
23
Está disponible en: manual de programación arduino.pdf pag.43
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Estos pines soportan
comunicación SPI utilizando la biblioteca de SPI.
LED: 13. Hay un LED integrado en la placa conectado al pin digital 13, cuando
este pin tiene un valor HIGH(5V) el LED se enciende y cuando este tiene un valor
LOW(0V) este se apaga.
El Mega2560 tiene 16 entradas analógicas, cada una de las cuales proporcionan una
resolución de 10 bits (1.024 valores diferentes). Por defecto se miden desde el tierra a 5
voltios, aunque es posible cambiar el extremo superior de su rango utilizando el pin AREF
y función analogReference().
Otros pines
AREF. Voltaje de referencia para las entradas analógicas. Usado por analogReference().
COMUNICACIÓN
24
Se encuentra en: arduino: manual de programación.pdf pag.56
La biblioteca SoftwareSerial permite la comunicación en serie en cualquiera de los pines
digitales del Mega2560.
El ATmega2560 también soporta TWI y la comunicación SPI.
Programación
El ATmega2560 en el Arduino Mega viene precargado con un gestor de arranque
(bootloader) que permite cargar nuevo código sin necesidad de un programador por
hardware externo. Se comunica utilizando el protocolo STK500 original.
También se puede saltar el gestor de arranque y programar directamente el
microcontrolador a través del puerto ISCP (In Circuit Serial Programming).
Reinicio Automático por Software
En vez de necesitar reiniciar presionando físicamente el botón de reset antes de cargar, el
Arduino Mega2560 está diseñado de manera que es posible reiniciar por software desde
el ordenador al que esté conectado. Una de las líneas de control de flujo (DTR) del
ATmega8U2 está conectada a la línea de reinicio del ATmega2560 a través de un
condensador de 100 nanofaradios. Cuando la línea se pone a LOW (0V), la línea de
reinicio también se pone a LOW el tiempo suficiente para reiniciar el chip. El software
de Arduino utiliza esta característica para permitir cargar los sketches con solo apretar un
botón del entorno. Dado que el gestor de arranque tiene un lapso de tiempo para ello, la
activación del DTR y la carga del sketch se coordinan perfectamente.
El Mega2560 contiene una pista que puede ser cortada para deshabilitar el auto-reset. Las
terminaciones a cada lado pueden ser soldadas entre ellas para rehabilitarlo. Están
etiquetadas con "RESET-EN". También se puede deshabilitar el auto-reset conectando
una resistencia de 110 Ω desde el pin 5V al pin de reset.
Características Físicas y Compatibilidad de Shields
La longitud y amplitud máxima de la placa Mega2560 es de 4 y 2.1 pulgadas
respectivamente, con el conector USB y la conexión de alimentación sobresaliendo de
estas dimensiones. Tres agujeros para fijación con tornillos permiten colocar la placa en
superficies y cajas. Se debe tener en cuenta que la distancia entre los pines digitales 7 y 8
es 160 mil (0,16").
El Mega está diseñado para ser compatible con la mayoría de shields diseñados para el
Uno, Diecimila o Duemilanove. Pines digitales 0 a 13 (y los pines AREF y GND
adyacentes), las entradas analógicas de 0 a 5, los conectores de alimentación, y los
conectores ICSP están todos ubicados en posiciones equivalentes. Además la UART
principal (puerto serie) se encuentra en los mismos pines (0 y 1), al igual que las
interrupciones externas 0 y 1 (pines 2 y 3, respectivamente). SPI está disponible a través
de la cabecera ICSP tanto en el Mega2560 y Duemilanove / Diecimila.
Sensores Un sensor (del latín sentĭo, sentir) es un dispositivo electrónico diseñado para
recibir información. Detecta una determinada acción externa y la transmite
adecuadamente. Se encarga, para ello, de transformar las magnitudes físicas o químicas
(variables de instrumentación como la temperatura, la presión, la distancia, el
desplazamiento, la aceleración, inclinación, etc.), en magnitudes, normalmente eléctricas,
que seamos capaces de cuantificar y manipular.
De manera cada vez más frecuente, podemos encontrar sensores aplicados a cualquier
área tecnológica y en muchos de los elementos que nos rodean (semáforos, teléfonos
móviles, industria, vigilancia, etc.). Los dispositivos que incorporan sensores reaccionan
a la información que reciben de ellos. De esta forma, los sensores permiten interactuar
con el entorno, aportando información de ciertas variables que nos rodean, para
procesarlas, generar órdenes o activar procesos.
Suele ser habitual que la señal de salida de un sensor, no sea la adecuada para ser
procesada por los circuitos actuadores, y sea necesario adaptarla y amplificarla. Además,
como también suele ocurrir, si depende de condiciones como la temperatura o la tensión
de alimentación, también es preciso linealizar el sensor y compensar sus variaciones
mediante acondicionadores de señal.
A la hora de elegir un sensor, para utilizarlo en una aplicación concreta, se han de tener
en cuenta aspectos que permitan conseguir el mejor rendimiento para dicha aplicación,
tales como la rapidez de respuesta, la situación en la que utilizarán, el radio de acción que
han de tener, la fiabilidad que se espera para su correcto funcionamiento, las tensiones de
alimentación, el consumo de corriente, los márgenes de temperatura de su
funcionamiento, las posibles interferencias producidas por agentes externos, su
resistencia a dichos agentes externos o la relación calidad precio.
Además, es necesario conocer algunas propiedades del sensor, que dan información en
cuanto a la eficacia que puede tener, principalmente la resolución, la sensibilidad, el grado
de error, de precisión o de repetitividad, entre otros.
25
Atmel es el fabricante del ATMega328P que incorpora la placa ArduinoMEGA
De manera habitual, en función de la aplicación que se vaya a dar al sensor, normalmente
se elige un sensor de un tipo u otro. Por nombrar los más comunes en este sentido, se
puede decir que en iluminación, por ejemplo, se suelen utilizar sensores fotorresistivos o
sensores fotoeléctricos; sin embargo, para trabajar con la temperatura, se utilizan los
termistores. En medición de humedad, se pueden aplicar los sensores resistivos o los
sensores capacitivos. Para medir posiciones o inclinación, es habitual emplear sensores
mecánicos, sensores resistivos, acelerómetros o sensores magnéticos. Relacionados con
la presión, están los sensores piezoeléctricos o los sensores resistivos. Para medir caudal,
existen sensores piezoeléctricos o magnetorresistivos. En detección de presencia, una
buena elección son los sensores magnéticos, los sensores de infrarrojos o los sensores de
ultrasonidos. Y para medición de distancias (objetivo de este proyecto) se puede optar por
servirse de sensores de infrarrojos (Infrared Radiation, IR) o de sensores de ultrasonidos
(ultrasonic rangers).
Entre los sensores de infrarrojos para medición de distancias compatibles con Arduino,
se encuentran los IR analógicos de la gama GP2 de Sharp. Los sensores IR GP2, están
formados por un emisor y un receptor de infrarrojos. Cuando el haz de infrarrojos enviado
por emisor, impacta sobre un obstáculo, rebota en el obstáculo e incide sobre el receptor
con un determinado ángulo a partir del cual se podrá calcular la distancia a dicho
obstáculo, según el voltaje que devuelve el sensor (a través de su conector analógico), el
cual se muestra en una gráfica de la hoja de especificaciones del fabricante del sensor,
cuyo valor será necesario calibrar, en cada caso particular. Otros sensores de infrarrojos
como los QRD (1113/1114)26, similares a los GP2 en cuanto a modo de funcionamiento,
han sido diseñados, más que para medición de distancias, para detección de presencia en
distancias cortas, puesto que su rango de detección va solamente de 0 a 3[cm]. Por otra
parte, para medición de distancias a través de Arduino, los sensores por excelencia (en
cuanto a rendimiento, eficacia y simplicidad a la hora de programarlos con el IDE
Arduino) son los de ultrasonidos. Se explican con más detalle a continuación.
SENSORES DE ULTRASONIDOS
26 La hoja de especificaciones del QRD (113/114) del fabricante QT Optoelectronics, se puede encontrar
en http://pdf.datasheetcatalog.com/datasheet/QT/QRD1113.pdf
La hoja de especificaciones del QRD (113/114) de Fairchild Semiconductor, está disponible en
https://www.fairchildsemi.com/datasheets/QR/QRD1114.pdf
Los ultrasonidos son señales acústicas (vibraciones mecánicas en forma de ondas
elásticas longitudinales) que se propagan en un medio elástico (como el aire) con
frecuencias que superan el rango de las frecuencias perceptibles por el oído humano,
aproximadamente a partir de los 20[kHz] (hasta más de 1[GHz]). Debido a su naturaleza,
pueden sufrir fenómenos de reflexión, refracción y difusión. Suelen emplearse en
medición de distancias o detección de presencia. Y requieren un dispositivo emisor, un
dispositivo receptor y un dispositivo de medición.
Cuando se emiten ultrasonidos, los cuales se propagan a la velocidad constante del sonido
(340[m/s] a 25[°C] de temperatura, ó 343[m/s] a 20[°C]), y chocan perpendicularmente
con un obstáculo, rebotan, a la misma velocidad, pero en dirección contraria
(normalmente con un ángulo, por lo que se ha de introducir un factor de corrección). Los
sensores ultrasónicos se sirven de esta propiedad y calculan el tiempo que tardan las ondas
ultrasónicas desde que son emitidas por el propio sensor hasta que se recibe su rebote.
Para generar los ultrasonidos, los sensores ultrasónicos utilizan campos eléctricos
variables para, basándose en un efecto piezoeléctrico de deformación que experimentan
ciertos cristales al introducirse en un campo eléctrico, hacer oscilar un cristal
(normalmente cuarzo, y a una frecuencia de 40[KHz]). Generalmente están formados por
dos transductores en forma de cápsulas cilíndricas (uno emisor de ultrasonidos y, otro,
receptor del rebote o eco de dichos ultrasonidos) y conectores o pines (de tipo macho) de
entrada o salida digital.
Los sensores de ultrasonidos han sido diseñados para calcular el tiempo transcurrido entre
la emisión y posterior recepción de los ultrasonidos que envía. Así, una vez obtenido
dicho tiempo y conociendo la velocidad de propagación de los ultrasonidos en el aire,
puede calcularse (estimarse) la distancia entre el sensor y el objeto que se encuentra
delante de él y que ha provocado el rebote de los ultrasonidos que envió.
Fuente: www.google.com/search?q=imagenes+sensorhc-sr04
Fuente: www.google.com/search?q=imagenes+de+sensor+srf+05
El sensor PING))) de Parralax28, es otro sensor digital capaz de medir distancias de entre
0’03 y 3[m]. Consta de tres patillas conectoras: GND (tierra), 5V (alimentación) y SIG
(señal). La patilla SIG del sensor será tanto la entrada digital (para activar el sensor desde
un pin digital de salida de la placa Arduino, a través del cual se ha de enviar al sensor un
pulso a nivel alto de 5 microsegundos) como la salida digital (para emitir un pulso, que
se enviará a al mismo pin digital de la placa Arduino, que ahora será de entrada, indicando
que el sensor ha recibido el rebote del ultrasonido, para que a través de Arduino se puedan
empezar a medir las distancias). Por lo tanto, el pin digital de la placa Arduino, al cual
27El fabricante Devantech, ofrece el sensor SRF05 (y otras variantes del mismo, como el SRF08 o el
SRF10) en su sitio web: http://www.robot-electronics.co.uk/acatalog/Ultrasonic_Rangers.html
Fuente: www.google.com/search?q=imagenes+de+sensor+ping)))
Sensor HC-SR04 Para obtener información acerca del mismo, se ha de consultar la hoja
de especificaciones29 (datasheet) que proporcione su fabricante o distribuidor acerca de
las características y el modo de funcionamiento de este sensor. El sensor HC-SR04 es de
color azul y plateado (como la tarjeta Arduino). Sus dimensiones son de 4,3 x 2 x 1,5[cm]
aproximadamente. Y su masa de unos 10[g]. Tiene este aspecto:
2[cm]
4.3 [cm]
Fuente: https://docs.google.com/document/d/1Y-yZnNhMYy7rwhAgyL_pfa39RsB-
x2qR4vP8saG73rE/edit?pli=1
29 El sensor HC-SR04 se puede conseguir a través de diversos distribuidores, como pueden ser: Opiron
(opiron.com/tienda/es/sensores/11-sensor-ultrasonidos-hc-sr04.html)
Está formado esencialmente por transmisores y receptores ultrasónicos y circuitos
internos de control.
Las características principales del sensor HC-SR04 se pueden resumir así:
Fuente: www.google.com/search?q=sensor+hc-sr04graficos
Los pines de conexión del HC-SR04 a través de los cuales se ha de conectar a la placa
Arduino son: el pin VCC (+5[V] DC) se unirá a la salida de 5V de la tarjeta Arduino que
suministrará alimentación eléctrica al sensor para su funcionamiento; el pin Trig, para
enviar la señal de trigger (de emisión), se conectará al pin digital de la placa Arduino
encargado de la emisión o disparo del ultrasonido; el pin Echo, para la señal de echo (de
recepción), irá unido al pin digital de entrada de la placa Arduino destinado para la
recepción del ultrasonido; y el pin GND, a la toma de tierra de la tarjeta Arduino.
El sensor HC-SR04 funciona como lo haría un sónar. Permite estimar la distancia a un
punto, a través del sistema de medición de tiempo que incorpora, mediante el cual, calcula
la diferencia de tiempo que se sucede entre que transmite y recibe los pulsos digitales que
envía y captura a través de los transductores cilíndricos que lleva acoplados a su
superficie. En los cronogramas de las hojas de especificaciones se gráficamente y se
explica cómo han de ser dichos pulsos.
2.1.3 SERVOMOTOR
FIGURA Nro.
Fuente: www.nova.com.bo/motor-servo-mg995-15kg-cm.html
30
Se encuentra disponible en: servomotor.pdf (catalogoDA65.3-2004)
mantenerse fijo en una posición. Al hablar de un servomotor se hace referencia a un
sistema compuesto por componentes electromecánicos y electrónicos.
El motor en el interior de un servomotor ese un motor DC común y corriente, 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,
el sircuito electrónico es el encargado de manejar el movimiento y la posición del motor
Fuente: www.google.com/search?q=funcionamiento+interno-mg995
TIPOS DE SERVOMOTORES
Estos colores dependerán del fabricante pero difícilmente nos equivoquemos a la hora
de reconocer los terminales de un servo, la necesidad de una señal de control para el
funcionamiento de este tipo de motores hace que sea imposible utilizarlos sin un circuito
de control adecuado, esto se debe a que para el circuito de control interno funcione es
necesaria una señal de control modulada. Para esto se utiliza modulación por ancho de
pulsos es decir PWM
El diagrama de bloque del servomotor representa de forma visual el servomotor como
un sistema. El circuito electrónico es el encargado de recibir la señal PWM y traducirla
en movimiento del motor DC el eje del motor esta acoplado a un potenciómetro el cual
permite formar un divisor de voltaje, el voltaje en la salida del divisor varia en función
de la posición del eje del motor.
Los servomotores de rotación continua desacoplan el potenciómetro del eje del motor,
esto impide que el circuito de control pueda leer la posición del eje por lo cual provoca
un movimiento continuo al no ser capaz de cumplir la condición para que el servo se
detenga, los servomotores de rotación continua normalmente pueden girar en un sentido
o en otro y detenerse, podemos modificar la velocidad de giro pero no podemos lograr,
por ejemplo, que el servo se mueva una determinada cantidad de grados y luego se
detenga.
Las señales de PWM requeridas para que el circuito de control electrónico son similares
para la mayoría de los modelos de servo. Esta señal tiene la forma de onda cuadrada
dependiendo del ancho de pulso, el motor adoptara una posición fija.
La duración del ciclo de trabajo varía entre 15 a 20 milisegundos, este tren de pulsos
puede ser generado por un circuito oscilador como un microcontrolador es decir con
arduino podemos controlar fácilmente un servomotor, de hecho que en arduino ya existen
librerías para el control de servos de forma nativa.
Consumo de energía
La energía consumida por una carga eléctrica será igual a la potencia (producto del
voltaje por la corriente que entra a la carga) multiplicado por el tiempo de uso del servo,
debido a que los servomotores son alimentados entre 4 y 6 voltios, es posible asumir que
el voltaje de alimentación es casi constante para la mayoría de los modelos, lo que no
es igual para alguno de los modelos de servos es el consumo de corriente, la corriente
demandada por un servomotor depende de diferentes parámetros:
- Fabricante y modelo del servo
- La inercia acoplada al eje del motor, esto incluye la inercia del sistema de
engranajes y la de la carga que este acoplada al motor
- La velocidad de rotación aplicada al aje del servo
A mayor consumo de corriente mayor demanda de potencia y por extensión mayor
consumo de energía, esto es especialmente importante a la hora de controlar este tipo de
motores con un microcontrolador, el consumo de corriente de un servo casi siempre es
superior a la capacidad máxima del microcontrolador por lo que se recomienda utilizar
fuentes externas.
Los microcontroladores no han sido diseñados para entregar corriente a una carga sino
para entregar señales de control, estas señales de control se utilizan para activar o
desactivar transistores (BJT o MOSFET) los cuales han sido especialmente diseñados
para manejar grandes corrientes o voltajes.
Cuando se conecta arduino MEGA, mediante un cable con conector USB a una
computadora (Windows, Mac OS X, o Linux) con el IDE Arduino, se comporta ante la
computadora, como un puerto serie a través del cual la placa y la computadora pueden
transmitirse información entre sí. El sistema de transmisión de información en este caso
es una comunicación serie UART (Universal Asyncronus Receiver/Transmiter) a través
de la cual, la comunicación serie se realiza de forma asíncrona, es decir, sin una señal de
reloj que indique a determinar la velocidad de transmisión de información (cada vez que
se realizan las lecturas o escrituras) y sincronice la transmisión de información entre la
placa Arduino y la computadora. La placa y el IDE Arduino instalado en la computadora
tendrán que coincidir en la velocidad, a la cual se lleva a cabo la transmisión de
información determinada por los baudios o [bps], (unidades de señal). En esencia, cuanto
mayor es el número de baudios elegido, menos tiempo de transmisión de información y,
por lo tanto, más información se puede transmitir respecto al tiempo. En términos de bits,
si cada baudio equivale a 1 bit, los baudios indicarán los bits que se transmiten por
segundo. De esta forma, se puede calcular cuánto tiempo lleva la transmisión de 1 bit.
Así, si se configura una comunicación con una velocidad de transmisión de 9600 baudios
(la establecida por defecto en el monitor serial del IDE, y la más habitual), 1 bit será
transmitido aproximadamente cada 104,17[μseg] (ya que 1[seg] / 9600[baudios] =
1,0417x10-4[seg]).
En este proyecto, Arduino tendrá dos tareas principales: medir la distancia desde el sensor
hasta un obstáculo (gracias al sensor ultrasónico HC-SR04) y comunicar al ordenador
dicha distancia (mostrándola en el monitor serie del IDE de Arduino). Pero como no
realiza estas tareas de forma simultánea, cuanto más tiempo se ocupe en una, menos
tiempo tendrá para realizar la otra, es decir, cuántos más sean los bits que se transmiten
por segundo (a más baudios en el sketch y el monitor serial del IDE) entra la placa y el
IDE, mientras la placa y el sensor estén tomando las medidas de la distancia, menos
tiempo tardarán en transmitir dicha información al ordenador (y mostrarlo en el monitor
serial). Para este proyecto, se ha decido utilizar el máximo de baudios posible en Arduino,
que son 115200[bps], una velocidad de transmisión que permite visualizar de forma
pausada cada una de las medidas de la distancia tomadas, en el monitor serial del IDE.
ALCANCE
Detección de distancia: de 2[cm] a 4,5[m]. A más de 4[m] puede haber detección,
pero no se garantiza una buena medición.
Precisión: puede variar, entre los 2 ó 3 [mm].
Ángulo de medición: 30° (efectivo: < 15°)
RESTRICCIONES
Se puede descargar de forma gratuita31. La última versión estable es Arduino 1.8.5 así
que se ha optado por ella para realizar este proyecto.
Para ejecutar el entorno de desarrollo, simplemente hay que dirigirse al directorio donde
se descomprimió el IDE Arduino y seleccionar el fichero la aplicación Arduino
(Arduino.exe). Se abrirá una ventana con un aspecto similar al que muestra la siguiente
imagen, donde podremos empezar a escribir el código del programa ejecutable por
Arduino.
Fuente: propia
Para comenzar con la programación de la placa a través del IDE Arduino, se debe
comprobar en la ventana del IDE, en el menú Herramientas>Tarjeta, que la placa
seleccionada es Arduino MEGA, y en menú Herramientas>Puerto serial, seleccionar el
mismo puerto COM que el que se habilitó en la instalación de los drivers para la
comunicación serie entre la placa y la computadora (COM4).
La ventana principal del IDE se encuentra dividida en cinco secciones que, de arriba hacia
abajo son: una barra de menús, una sección de botones, un editor de texto, una sección y
consola de mensajes y una barra de estado. Se explican con más detalle a continuación.
En la parte superior del IDE aparece la barra de menú que, para complementar las
funciones que se pueden realizar con la sección de botones, se divide en cinco entradas
principales:
- Archivo (file). Ofrece distintas acciones, algunas estándar (Nuevo, Abrir, Guardar,
Cargar en la memoria del micro, Imprimir y Cerrar) y otras específicas, como:
- Editar (edit). Permite realizar acciones típicas de cualquier editor de textos (como
pueden ser copiar, pegar, seleccionar, comentar, buscar o buscar y reemplazar) y otras
interesantes:
Copiar como HTML, para pegarlo en páginas web.
Copiar para el Foro, para pegarlo en el foro oficial de Arduino y poder recibir
ayuda de la comunidad Arduino.
- Programa, Sketch. Ofrece distintas opciones relacionadas con el sketch con el que se
está trabajando. Opciones para verificar (y compilar) el código, abrir la carpeta donde se
encuentra el sketch “*.ino” que se está editando, añadir una nueva pestaña “sketch.ino”
dentro del proyecto del sketch actual, o importar librerías (para reutilizar código de las
librerías oficiales que ofrece Arduino o instalando las realizadas por nosotros o por un
tercero) que en el sketch aparecen al principio del código del programa, como “#include
<librería.h>”.
- Ayuda (help). Permite acceder off-line (es decir, sin conexión a Internet) a varias
secciones del sitio web de Arduino, con artículos, tutoriales y ejemplos que pueden servir
de ayuda.
En la misma ventana del IDE, justo debajo de la barra de menú y antes del espacio en
blanco para empezar a editar el programa, aparecen una serie de botones:
- Verificar (verify). Es el primer botón que se debe pulsar para probar cualquier
modificación que se haga en el sketch, ya que comprueba que la sintaxis del código es
correcta y si lo es, lo compila.
- Subir (upload). Es el botón que se pulsa después de guardar y verificar el código (y una
vez comprobado que el modelo de Arduino y el puerto al que está conectado son los
correctos). Al pulsarlo, se activa el bootloader del microcontrolador (que se reinicia
automáticamente) e, invocando internamente al comando “avrdude”, se envía (carga) el
programa, anteriormente verificado y compilado, a la memoria del micro de la placa
Arduino que tenemos conectada al computador.
- Abrir (open): muestra, en un menú, los sketches disponibles para abrir (los de ejemplo,
o los propios creados anteriormente y disponibles en el sketchbook).
- Monitor Serial (serial monitor): sirve para depurar el programa. Se pueden introducir
datos para enviárselos a Arduino, mostrar los mensajes enviados por el puerto serie o
USB desde Arduino, activar o no el desplazamiento automático del área de salida de
mensajes según éstos vayan saliendo, controlar el comportamiento de la nueva línea o
retorno del carro (con las distintas opciones del selector), y configurar la velocidad de
comunicación, en baudios (que son el número de cambios de estado de los bits por
segundo. Es decir, que la opción de 9600 baudios, por ejemplo, significa que cada
segundo se transmitirán 9600 caracteres). Por defecto, los sketches no envían ni reciben
datos al monitor serie, hay que programarlo.
IMAGEN??????
Para entender mejor el funcionamiento interno del sensor y según el datasheet del sensor
HC-SR04, en siguiente cronograma, se puede ver la representación de los pulsos con los
que trabaja el sensor.
Fuente: www.google.com/search?q=funcionamiento+interno-sensor-hcsr04
De esta forma, y una vez obtenido el tiempo que ha medido el sensor, se puede calcular
la distancia hasta un obstáculo, mediante la fórmula: Distancia [cm] = ½ (Ancho de pulso
de la señal de eco [μs])*(Velocidad del sonido [m/s]), a partir de la cual se desarrolla el
programa (sketch)
Por otra parte, el sensor, como Arduino funciona a nivel TTL. Esto quiere decir que, a
0[V], o nivel bajo (LOW), el sensor HC-SR04 está en reposo; y a 5[V], o nivel alto
(HIGH) se encuentra en funcionamiento. Además, sabiendo que el circuito consume la
siguiente energía tal que potencia [W] = Tensión [V] * Intensidad [mA], a través de un
polímetro32, se podría medir el consumo del circuito.
Arduino tiene que enviar al sensor una señal para que el sensor entre en funcionamiento.
Para ello, y según la hoja de especificaciones del sensor HC-SR04, se ha de enviar un
pulso de, al menos, 10[μs] desde el pin TRIG.
El pin TRIG es la E/S digital que funciona como trigger o disparador. Este pin es a través
del cual Arduino ha de enviar al sensor la señal de comienzo (el pulso de 10[μs]) para
indicar al sensor que empiece a funcionar. Es por lo tanto un pin de salida (output) digital
de Arduino y un pin de entrada digital del sensor. Mediante código se configura este pin
de la siguiente forma: pinMode(PIN_TRIG,OUTPUT);
A través del pin TRIG se ha de que enviar información al sensor, es decir habrá que
escribir a través de ese pin. La información que se ha de enviar, es un pulso, por lo tanto,
habrá que escribir un pulso a nivel alto (HIGH), es decir un 1 lógico, que a su vez
corresponde con 5[V] de tensión (1 corresponde a 5[V] porque Arduino y el sensor
trabajan a nivel TTL). Mediante código se realiza así: digitalWrite(PIN_TRIG,HIGH);
Ya que el pulso del pin configurado como TRIG ha de ser de, al menos, 10[μs], este será
el tiempo que se ha de mantener el pulso a nivel alto. Se puede esperar con esta
instrucción: delayMicroseconds(10);
Finalmente, se terminará dicho pulso. Para terminar el pulso, ha de ponerse a nivel bajo
(LOW), es decir un 0 lógico, que a su vez corresponde con 5[V] de tensión (0 corresponde
a 0[V] TTL). digitalWrite(PIN_TRIG,LOW);
32
Un polímetro o multímetro digital es simplemente un instrumento que sirve para medir magnitudes,
entre otras, relacionadas con la ley de Ohm, V[V] = I[A]*R[Ω], es decir, el voltaje entre dos puntos de un
circuito, V; la intensidad de la corriente que fluye a través del circuito, I; o la resistencia que ofrece algún
componente, R.
Como la comunicación serie en Arduino se realiza de forma asíncrona, es necesario
indicar la velocidad a la que queremos que se comunique con el sensor y con el PC. Se
ha optado por una velocidad de transmisión información de 115200 baudios, que permite
que los datos aparezcan más lentamente en el monitor serie del IDE, y así, mayor
comodidad a la hora de realizar las pruebas. Cada vez que se envíen datos desde la placa
al monitor serial, parpadeará el led TX de la placa. Serial.begin(115200);
En cuanto el sensor detecte que Arduino le ha enviado un pulso, es decir, cuando haya
terminado el pulso de 10[μs], el sensor entrará en funcionamiento. El sensor comienza a
funcionar enviando, a través del transductor cilíndrico (a modo de altavoz emisor) que
incorpora, una ráfaga de 8 pulsos de ultrasonidos a 40[KHz] (lo cual se indica en el
datasheet del sensor). Para entendernos, es como si enviase, 8 ultrasonidos (sonidos a una
frecuencia que el oído humano no puede percibir).
Una vez emitidos los 8 pulsos de 40[KHz], el sensor espera un tiempo hasta que le llegue,
a través del transductor cilíndrico (a modo de micrófono receptor), el eco del ultrasonido
que ha generado. Desde que envía el primer pulso de la ráfaga de ultrasonidos, hasta que
le llega el primer eco proveniente del rebote de los ultrasonidos al chocar con un
obstáculo, se inicia en el sensor un conteo del tiempo en microsegundos.
Para que el sensor ultrasónico pueda detectar un objeto debe ejecutar algunos parámetros
que son:
Luego envía 8 pulsos de 40KHz y coloca su salida Echo a alto (seteo), en ese
instante se detecta este evento e inicia un conteo de tiempo.
La salida Echo se mantiene en alto hasta recibir el eco reflejado por el obstáculo
a lo cual el sensor pondrá su pin Echo en bajo, es decir, termina de contar el
tiempo.
Donde:
V = velocidad del sonido (345m/s) o que es lo mismo 0.0345cm/microsegundos
T = tiempo del pulso del trigger 10 ms
La distancia total es la distancia que tarde en ir y regresar la señal por lo tanto al dividirlo
para dos nos proporciona la distancia real del objeto detectado.
Para empezar se incluyen las librerías predeterminadas por arduino. El primer paso dentro
de la función setup será definir las variables (variables enteras, variables servo y vectores
float) e inicializar algunas de ellas para el caso del servo.
Para obtener los valores reales que habrá que introducir en las funciones de escritura basta
con entender el funcionamiento de dichas funciones además de conocer el rango de
valores en el que trabaja cada uno de los elementos.
Por ejemplo, la función que se utiliza para posicionar los servos acepta valores entre 0 y
180, siendo estos los valores reales en ángulos. El valor 0 será girar 90º en sentido anti
horario, partiendo desde la posición intermedia, y el valor 180 será girar 90º en sentido
horario. Lógicamente el valor 90 será la posición intermedia, y si el servo está centrado
significa que no girará.
En cuanto a toda la programación que se necesita para el sistema de estacionamiento se
realizó conjuntamente con todos los componentes que es de programar como ser la
programación de los cinco sensores ultrasónicos, buzer y los cinco leds. que determinaran
las distancias cada una de ellas.
Se condicionaron a los sensores valores de medición en centímetros, se harán las lecturas
desde los 80 cm. y disminuyendo hasta los 50 cm debido al reglamento de tránsito en
Bolivia.
Asimismo el servomotor actúa de acuerdo a la distancia que proporciona los cinco
sensores y también es condicionado, para entrar en funcionamiento a menor de 32
centímetros, distancia que fue dada por el investigador. El servo se accionara cuando la
distancia hacia un objeto es menor a los 32 cm.
𝒘 32 𝑐𝑚
𝒅= 𝒏
Formula 2 d= 2
= 16 𝑐𝑚
Donde:
d = distancia entre sensores
w = ancho del vehículo 32 cm
n = número de sensores 2
Por lo tanto la distancia entre sensores es 16 cm, entonces de la parte central de vehículo
se mide 8 cm a la izquierda y 8 cm a la derecha y se ubican los sensores.
Se realiza el mismo proceso que la parte delantera utilizando la fórmula (2), solo que este
caso el número de sensores es 3.
Por lo tanto la distancia de los sensores en la parte trasera del vehículo es de 10.6 cm. Y
de los dos extremos de los sensores la distancia al final es de 5.4 cm a ambos lados.
Cabe mencionar que los sensores deben colocarse en línea horizontal y paralelo al suelo
para evitar errores de medición.
RESULTADOS ESPERADOS
CONCLUSIONES Y RECOMENDACIONES
CONCLUSIONES:
Los tres sensores en la parte trasera de nuestro vehículo prototipo tienen una separación
de 10.4 cm entre ellos para obtener un área de detección equitativa, con el mismo
propósito se ubicó dos sensores en la parte frontal del vehículo los cuales se encuentran
separados a una distancia de 8 cm.
Se determinó la fórmula para ubicar correctamente los sensores ya sea para la parte trasera
como delantera del vehículo la cual es: dividir el ancho del vehículo por el número de
sensores a utilizar, en cuanto a la ubicación del servomotor no se hizo medición de
distancias se ubicó en forma paralela al pedal de freno y a un ángulo apropiado para que
el servo tenga un trabajo efectivo.
RECOMENDACIONES:
Instalar todos los dispositivos del sistema de estacionamiento propuesto debido a que si
falta algún elemento del mismo podría funcionar de forma errónea.
Ubicar los sensores uno a continuación de otro a una distancia igual, si se coloca a
diferentes distancias existirán áreas más grandes donde los sensores no podrán detectar
ningún objeto.
Es necesario mencionar que la fórmula obtenida para colocar correctamente los sensores
sirve tanto para vehículos livianos como para vehículos pesados.
ANEXOS