LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM CAPÍTULO III ARDUINO 1 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM 3.1 ¿Qué es Arduino? Una placa hardware libre que incorpora un microcontrolador reprogramable y añade ciertos pines que permiten conectar ciertos sensores, actuadores y módulos de una forma simple. Placa hardware se refiere a una PCB. Las PCBs son placas echas de un material no conductor sobre las cuales por medio de pistas de material conductor se conectan, a través de los caminos, los componentes electrónicos soldados a ella. La placa Arduino no es más que una PCB que implementa un diseño de circuitería. Aunque existen varios modelos de Arduino los microcontroladores de estas placas pertenecen a la misma “familia”, dado esto su funcionamiento es similar. todos los microcontroladores de estas placas son de tipo AVR. Ilustración 1 Arduino Figura 3.1 Arduino Fuente: https://dronprofesional.com/wpcontent/uploads/2018/04/arduino-cursos450.jpg 3.2 Origen “El proyecto se inició en la ciudad de Ivrea, talia, en 2005, con la intención de interactuar en proyectos escolares de forma que estos se pudieran obtener con menor presupuesto que otros sistemas de prototipado disponibles en aquella época. Su éxito fue reconocido con el recibimiento de una mención honrosa en la categoría Comunidades Digitales en 2006, por la Prix Ars Electronics, además de las más de 50.000 placas vendidas hasta octubre de 2008. Actualmente, su hardware se realiza a través de un microcontrolador Atmel AVR, siendo este que no es un requisito formal y pudiendo ser extendido si la herramienta alternativa soporta el lenguaje Arduino y son aceptadas por su proyecto. Considerando esta característica, muchos proyectos paralelos se inspiran en copias modificadas con placas de expansiones, y acaban recibiendo sus propios nombres. A pesar de que el sistema puede ser montado por el propio usuario, los soportes técnicos tienen un servicio de venta del producto pre- 2 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM montado, a través de ellos mismo y también por distribuidores oficiales con puntos de venta en todo el mundo.” (Garrido, 2015) 3.3 características del microcontrolador Existen varios tipos de placas Arduino, cada una con características específicas. No obstante, existe un modelo “estándar” de placa. En cuanto al encapsulado del microcontrolador la única diferencia entre el encapsulado del microcontrolador es que ambas tienen el mismo modelo, pero la placa tiene diferente tipo de montado siendo estos el formato DIP (“Dual Inline Package”) y la placa SMD lo lleva en formato SMD (“Surface Mount Device”). Ilustración 2 ATmega Figura 3.2 ATmega Fuente: https://http2.mlstatic.com/atmega328atmega328p-au-avr-atmega-328-smd-arduinonubbeo-D_NQ_NP_888601MLA20370664702_082015-F.webp Una diferencia importante entre el formato SMD y el DIP es que el primero está soldado a la superficie de la placa, mientras que el segundo está conectado a la placa mediante una serie de pines metálicos que se pueden separar fácilmente y que permiten la substitución del microcontrolador por otro si fuera necesario. 3.4 modelo de microcontrolador El microcontrolador que lleva la placa es el modelo ATmega328P de la marca Atmel. La “P” del final significa que este chip incorpora la tecnología “Picopower” la cual permite un consumo eléctrico sensiblemente menor comparándolo con el modelo equivalente sin “Picopower”, el Atmega328. De todas formas, aunque el ATmega328P pueda trabajar a un voltaje menor y consumir menos corriente que el Atmega328 ambos modelos son funcionalmente idénticos. El ATmega328P tiene una arquitectura de tipo AVR, arquitectura desarrollada por Atmel y en cierta medida “competencia” de otras arquitecturas como por ejemplo la PIC del fabricante Microchip. El ATmega328P pertenece a la subfamilia de microcontroladores “megaAVR”. 3 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM 3.5 memorias del microcontrolador Memoria Flash: memoria persistente donde se almacena permanentemente el programa que ejecuta el microcontrolador. En el caso del ATmega328P tiene una capacidad de 32KB. Memoria SRAM: memoria volátil donde se alojan los datos que en ese instante el programa necesita crear o manipular para su correcto funcionamiento. Estos datos suelen tener un contenido variable a lo largo del tiempo de ejecución del programa y cada uno es de un tipo concreto. Independientemente del tipo de dato, su valor siempre será eliminado cuando se deje de alimentar eléctricamente al microcontrolador. Esta memoria tiene una capacidad de 2KB. Memoria EEPROM: memoria persistente donde se almacenan datos que se desea que permanezcan grabados una vez apagado el microcontrolador para poderlos usar posteriormente en siguientes reinicios. En el caso del ATmega328P esta memoria tiene una capacidad de 1 KB. 3.6 Arduino IDE El IDE de Arduino es un software con un lenguaje bastante simple. Fue diseñado para ser una interfaz amigable para personas que no tienen conocimiento en el desarrollo de software y por lo tanto es una plataforma de desarrollo bastante intuitiva. Fue desarrollado en Java y tiene características simples destacando el uso de ciertas palabras clave y una Ilustración 3 Arduino IDE Figura 3.3 Arduino IDE Fuente: propia 4 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM base con diversos códigos de programación de ciertos dispositivos básicos listos para servir como un ejemplo además de una base de datos en la cual se encuentran librerías para su uso. Además del espacio en el que se escribirá el código, hay 7 botones en la parte Superior de este: Verify, Stop, New, Open, Save, Upload y Serial Monitor. Estos sirven para verificar si el programa tiene errores, detener la ejecución del código actual, crear un nuevo documento, abrir un documento ya existente, enviar los datos al Arduino y el último es un monitor para los datos serie que se mandan a través del puerto en el que el Arduino esté conectado. En la parte inferior, existe también una consola que informa al usuario de los errores o la ejecución del programa. 3.7 Lenguaje de programación El lenguaje de programación utilizado por Arduino es C y C ++. Prácticamente todos los comandos utilizados en C y C ++ se pueden utilizar para configurar el comportamiento del circuito, lo que facilita su uso, incluso si no se tiene conocimiento sobre programación y lenguajes, ya que este software es muy sencillo e intuitivo. Este software compila código escrito en lenguaje C/C++ a código binario AVR. Ya que el lenguaje Arduino no es un lenguaje como tal, sino que es simplemente un conjunto de instrucciones C y C++ que están siendo camufladas, diseñadas para simplificar el desarrollo de programas en esta plataforma. Esto significa que cuando estamos escribiendo nuestro programa en lenguaje Arduino, en realidad estamos programando en lenguaje C/C++ simplificado. 3.8 C Y C++ C es un lenguaje de programación creado por Dennis Ritchie entre 1969 y 1972 en los Laboratorios Bell. C es apreciado por la eficiencia del código que produce y es el lenguaje de Ilustración 4 Lenguaje C programación más popular para crear software Figura 3.4 Lenguaje C de sistemas, aunque también se utiliza para crear Fuente: https://es.wikipedia.org/wiki/C_(lenguaje_de _programaci%C3%B3n)#/media/File:The_C _Programming_Language_logo.svg aplicaciones. Se trata de un lenguaje de tipos de datos estáticos, de medio nivel, ya que dispone de 5 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM las estructuras típicas de los lenguajes de alto nivel, pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Tiene un núcleo del lenguaje simple, con funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con múltiples estilos además de tener Acceso a memoria de bajo nivel mediante el uso de punteros. Un conjunto reducido de palabras clave. Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas. A pesar de su bajo nivel es el lenguaje más usado en existencia, habiendo compiladores para casi todos los sistemas conocidos. C++ es un lenguaje de programación, creado a mediados de 1980 por Bjarne Strousstrup, como extensión del lenguaje C. Este lenguaje abarca tres paradigmas de la Programación Estructurada, Programación Genérica, Programación Orientada a Objetos, C++ es un lenguaje versátil, potente y general. La intención de su creación fue extender al lenguaje de programación C a la manipulación de objetos. En ese sentido el C++ es un lenguaje híbrido. Ilustración 5 C++ Figura 3.5 C++ Fuente: https://es.wikipedia.org/wi ki/Archivo:ISO_C%2B%2 B_Logo.svg Posteriormente se añadieron facilidades de programación genérica y programación orientada a objetos. Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos que se comporten como tipos fundamentales. El nombre "C++" fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. 3.9 Placas Arduino Arduino Mega 2560 Placa basada en el microcontrolador ATmega2560. Tiene 54 pines de entrada/salidas digitales 16 entradas analógicas y 4 receptores/transmisores serie TTL-UART. Consta de una memoria Flash de 256 Kilobytes (de los cuales 8 están reservados para el bootloader), una memoria SRAM de 8 KB y una EEPROM de 4 KB. Su voltaje de trabajo es igual al del modelo UNO: 5 V. Arduino Mega ADK 6 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM Placa muy similar a la Mega 2560. La diferencia principal está en que la Mega ADK es capaz de funcionar como un dispositivo de tipo “host USB”. En una comunicación USB entre diferentes dispositivos siempre existe uno que actúa como “maestro” y el otro –u otros– que actúan como “esclavos”. El “host” es el único que puede iniciar y controlar la transferencia de datos entre el resto de dispositivos conectados, mientras que los “periféricos” tan solo pueden responder a las peticiones hechas por el “host” y poca cosa más. Los dispositivos “host” disponen de un conector USB de tipo A, y los dispositivos “periféricos” disponen de un conector USB de tipo B, mini-B o micro-B. Un “host” típico es un computador, al cual se le pueden conectar varios “periféricos”, como lápices de memoria, cámaras de fotos o video, teléfonos móviles de última generación, etc. La placa Arduino ADK puede funcionar como periférico USB igual que el resto de placas Arduino pero también como host USB. Arduino Ethernet Al igual que el modelo UNO, la placa Ethernet está basada en el microcontrolador ATmega328P, y también tiene el mismo número de pines de entrada/salida digitales y de entradas analógicas. El resto de características también es muy similar al modelo UNO. La mayor diferencia que existe con la placa UNO es que la placa Ethernet incorpora un zócalo de tipo RJ-45 para poder conectarse mediante el cable adecuado a una red de tipo Ethernet. Arduino Fio Esta placa contiene un ATmega328P funcionando a 3,3 V y a 8 MHz. Tiene 14 agujeros que pueden utilizarse como pines de entrada/salida digital también tiene 8 agujeros preparados para utilizarse como entradas analógicas y un botón de reinicio, todo ello dentro de un tamaño muy reducido. Ilustración 6 ARDUINO 1 Figura 3.6 ARDUINO1 Fuente: https://cdntienda.bricogeek.com/2827 -thickbox_default/arduinouno.jpg Arduino Pro Esta placa viene en dos “versiones”: ambas contienen un microcontrolador Atmega328P SMD, pero una funciona con 3,3 V y a 8 MHz y la otra funciona con 5 V y a 16 MHz. Dispone de 14 agujeros pensados para funcionar como pines de 7 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM entrada/salida digital, 6 agujeros para entradas analógicas, agujeros para montar un conector de alimentación de 2,1 mm, un zócalo JST para una batería LiPo externa, un interruptor de corriente, un botón de reinicio, un conector ICSP y los pines necesarios para conectar un adaptador o cable USB-Serial y así poder programarla además de alimentarla directamente vía USB. Arduino Lilypad La placa Arduino LilyPad está diseñada para ser cosida a material textil. Permite además conectarle mediante hilos conductores fuentes de alimentación, sensores y actuadores de forma que se puedan “llevar encima”, haciendo posible la creación de vestidos y ropa “inteligente”. Además, se puede Ilustración 7 Lyly pad Figura 3.7 Lyly pad Fuente: https://cdn.sparkfun.com//assets/parts/1/ 0/6/5/0/13342-01.jpg lavar. Esta placa incorpora el microcontrolador ATmega328V una versión de bajo consumo del Atmega328P, el cual se programa acoplando a la placa un adaptador o cable USBSerie. Arduino Nano La característica más destacable de esta placa es que a pesar de su tamaño, sigue ofreciendo el mismo número de salidas y entradas digitales y analógicas que la Arduino UNO y la misma funcionalidad que esta. La consecuencia más evidente de su reducido tamaño es que carece del conector de alimentación de 2,1 mm e incorpora un conector USB mini-B en vez del conector USB tipo B. Otra diferencia es que, aunque la placa Arduino Nano se sigue basando en el microcontrolador ATmega328P, el conversor USBSerie que lleva incorporado es el chip FTDI FT232RL y no el ATmega16U2. Arduino Mini Esta placa es muy parecida a la placa Arduino Nano: está basada igualmente en el microcontrolador ATmega328P SMD funcionando a 16MHz, tiene 14 pines de 8 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM entrada/salidas digitales y 8 entradas analógicas. Y al igual que la placa Arduino Nano, la Arduino Mini está especialmente pensada para conectarla a una breadboard mediante los pines que sobresalen de su parte posterior, pudiendo formar parte así de un circuito complejo de una manera relativamente fija. La diferencia más importante con la placa Arduino Nano está en que la Arduino Mini no incorpora ningún chip conversor USB-Serie. Debido a ello, para su programación se necesita utilizar un adaptador USB-Serial externo. En concreto, se recomienda el uso de uno específico y oficial: el llamado “Mini USB”, basado en el chip FTDI FT232RL. Arduino Pro Mini Esta placa tiene el mismo tamaño que una placa Arduino Mini, y una disposición compatible de pines. Viene en dos “versiones”: ambas contienen un microcontrolador ATmega168 pero una funciona con 3,3 V y a 8 MHz y la otra funciona con 5 V y a 16 MHz. También incorpora un botón de reinicio y los pines necesarios para conectar un adaptador o cable USB-Serie y así poder programarla además de alimentarla directamente vía USB. También se puede alimentar eléctricamente mediante una fuente externa conectada al pin “Vcc”. Esta placa está pensada para instalarse de forma semipermanente en objetos o exhibiciones. Por eso no viene con los pines montados, sino que hay colocar en los agujeros los pines-hembra de plástico “a mano”. De esta manera, se permite el uso de diferentes tipos de configuraciones según las necesidades. Arduino Leonardo La gran novedad de esta placa es que el microcontrolador ATmega32U4, que el cual incorpora tiene es el todas las funcionalidades que ofrece el Atmega328P pero incorpora además 0,5 kilobytes más de memoria Ilustración 8 Arduino leonardo SRAM y sobre todo, soporta comunicaciones USB Figura 3.8 Arduino leonardo directamente. Otras diferencias con la placa UNO Fuente: https://cdn.sparkfun.com//assets/parts/1/0/6/ 5/0/13342-01.jpg es que la placa Leonardo incorpora un pin-hembra digital más que la UNO para ser usado como salida PWM y 6 entradas analógicas extra más, las cuales están situadas físicamente en los pines hembras digitales marcados con un puntito en el exterior de la placa. 9 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM Arduino Micro Esta placa ofrece las mismas funcionalidades que la Arduino Leonardo tiene el mismo microcontrolador ATmega32U4 a 16MHz, los mismos 32KB de memoria Flash y 2,5 KB de memoria SRAM, el mismo bootloader, el mismo voltaje de trabajo 5 V, ideal para ser ubicado sobre una breadboard sin ocupar apenas espacio. Al igual que el modelo Leonardo, se puede programar a través de una conexión USB, pudiendo funcionar además como teclado o ratón simulado. Arduino Due Esta placa pertenece a una familia totalmente distinta de la del resto de placas Arduino. Incluye el microcontrolador SAM3X8E, el cual, aunque fabricado también por Atmel, es de una arquitectura Ilustración 9 Arduino due Figura 3.9 Arduino DUE interna muy diferente a la AVR y, además, sus registros son cuatro veces más grandes de lo habitual en las otras placas de 32 bits. Fuente: https://images-na.ssl-imagesamazon.com/images/I/51Fgzvx5l6L._SX425_.jpg Su velocidad de reloj está también muy por encima del resto de placas Arduino, 84 MHz. Además, el microcontrolador SAM3X8E dispone de muchas más memorias concretamente, 96 KB de SRAM y 512 KB de memoria Flash y también de un circuito especializado llamado controlador “DMA” que permite a la CPU acceder a la memoria de una manera mucho más rápida. 101 Esta placa tiene los pines y aspecto de un Arduino UNO pero con un procesador de 32 bits, Curie de Intel de 31 MHz y doble core, que corre a 3.3V. Pero además de cumplir con la norma Arduino tambien incorpora varias cosas de lo mas interesantes, incluidas en el procesador entre los que se cuentan conexión Bluetooth LE 4.0 integrada. Otra de las características de esta placa y procesador es que incorpora un giróscopo 10 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM acelerómetro de 6 grados de libertad que permite hacer proyectos muy interesantes y nuevas posibilidades. 3.10 Tabla comparativa de Arduino Tabla 1 Tabla comparativa de Arduino nombre procesador Voltaje Veloci Entradas/sal I/O, PMW EEPROM DIGITALES [kB] 6/0 14/4 - 1/0 3/2 0.5 de dad idas entrada del analógicas CPU 101 Gemma LilyPad Intel® Curie 3.3 V/ 32MH 7-12V z 3.3 V / 8 4-16 V MHz ATmega168V 2.7-5.5 8MHz 6/0 14/6 0.512 ATmega328P V/ 2.7-5.5 8 4/0 9/4 1 V/ MHz 4/0 9/4 1 16/0 54/15 4 12/0 20/7 1 7/1 8/4 - ATtiny85 2.7-5.5 V LilyPad ATmega328P SimpleSnap 2.7-5.5 V LilyPad ATmega32U4 3.3 V / 8 3.8-5 V MHz 5 V / 7- 16 12 V MHz 5 V / 7- 16 12 V MHz SAMD21 3.3 V/ 48MH Cortex-M0+ 5V z USB Mega 2560 Micro MKR1000 ATmega2560 ATmega32U4 11 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM Pro ATmega168 3.3 V / 8 ATmega328P 3.35-12 MHz V 16 5 V / 5- MHz 6/0 14/6 0.512 1 12 V Pro Mini ATmega328P 3.3 V / 8 3.35-12 MHz V 16 5 V / 5- MHz 6/0 14/6 1 6/0 14/6 1 6/1 14/10 - 12/2 54/12 - - - 1 6/0 14/4 1 12/0 20/7 1 16/0 54/15 4 8/0 14/6 1 8/0 14/6 0.512 12 V Uno Zero Due Esplora Ethernet Leonardo Mega ADK Mini Nano Yùn ATmega328P 5 V / 7- 16 12 V MHz 3.3 V / 48 7-12 V MHz 3.3 V / 84 7-12 V MHz 5 V / 7- 16 12 V MHz 5 V / 7- 16 12 V MHz 5 V / 7- 16 12 V MHz 5 V / 7- 16 12 V MHz 5 V / 7- 16 9V MHz ATmega168 5 V / 7- 16 ATmega328P 9V MHz ATmega32U4 5V 16 ATSAMD21G18 ATSAM3X8E ATmega32U4 ATmega328P ATmega32U4 ATmega2560 ATmega328P AR9331 Linux 1 12/0 20/7 1 MHz 400M Hz 12 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM Arduino ATmega32u4 5V Robot 16 6/0 20/6 MHz 1 KB (ATmega32u4) 512 Kbit (I2C) MKRZero SAMD21 3.3 V Cortex-M0+ 48 7 (ADC MHz 8/10/12 22/12 32bit low power bit)/1 ARM MCU (DAC 10 bit) No Tabla 3.1 Arduino 1 Fuente: http://www.clipartpal.com/_thumbs/pd/crux_black.png Tabla 2 Tabla comparativa de Arduino 2 nombre SRAM [kB] Flash [kB] USB UART 101 24 196 Regular - Gemma 0.5 8 Micro 0 LilyPad 1 16 - - LilyPad 2 32 - - 2.5 32 Micro - Mega 2560 8 256 Regular 4 Micro 2.5 32 Micro 1 MKR1000 32 256 Micro 1 Pro 1 16 - 1 2 32 Pro Mini 2 32 - 1 Uno 2 32 Regular 1 Zero 32 256 2 Micro 2 Due 96 512 2 Micro 4 Esplora 2.5 32 Micro - Ethernet 2 32 Regular - Leonardo 2.5 32 Micro 1 SimpleSnap LilyPad USB 13 LOCALIZADOR DE COCHES GPS PROGRAMADO CON GSM Mega ADK 8 256 Regular 4 Mini 2 32 - - Nano 1 16 Mini 1 2 32 2.5 32 Micro 1 16MB 64MB Arduino 2.5 KB 32 KB 1 1 Robot (ATmega32u4) (ATmega3 1 1 Yùn 2u4) o con 4 KB usando el bootloader MKRZero 32 KBARM 256 KB MCU Tabla 3.2 Arduino 2 Fuente: http://www.clipartpal.com/_thumbs/pd/crux_black.png 14