Kitabı oku: «Taller de Arduino. Experimentando con Arduino MKR 1010», sayfa 2
1.2.2 Instalación de controladores para el MKR 1010
En un principio, la placa por defecto seleccionada al iniciar por primera vez el IDE (entorno de desarrollo) es la de Arduino UNO/Genuino. Si busca en la barra de desplazamiento el modelo 1010, no lo encontrará. Es necesario conectarse a Internet y abrir el menú Herramientas y, dentro del mismo, acudir a la opción: “Gestor de tarjetas”. Introduzca la palabra SAMD en la caja de búsqueda, tal como se observa en la figura 1.8.
Proceda a instalar este controlador (driver) o paquete adicional, que le proporcionará casi todos los modelos Arduino de la nueva familia MKR.
Ahora ya tiene disponible en la selección de placas Arduino MKR 1010, que debe seleccionar para realizar una primera práctica de iniciación y verificación del correcto funcionamiento del mismo (figura 1.9).
Un controlador de dispositivo (llamado normalmente controlador, en inglés, driver) es un programa informático que permite al sistema operativo interaccionar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz para usarlo. Se puede esquematizar como un manual de instrucciones que le indica cómo se debe controlar y comunicarse con un dispositivo en particular. Por tanto, es una pieza esencial, sin la cual no se podría usar el hardware.
Se recuerda a aquellos lectores que han trabajado hace tiempo con Arduino que con los sistemas operativos Windows 7 y 10 la instalación de los drivers se hace de forma automática cuando instala el software de desarrollo IDE. Tan solo pregunta de vez en cuando, durante el proceso de instalación, si confía en la empresa para proceder a instalar los drivers de Arduino y nada más. Es decir, lo que antes había que realizar por separado, ahora se simplifica y se hace en una sola vez. En la mayoría de los casos, el usuario no tiene por qué preocuparse de este asunto.
Más adelante, cuando trabaje con los populares nodeMCU tendrá que volver a la opción de gestión de tarjetas para instalar los drivers correspondientes.
1.3 Una primera práctica: parpadeo de un LED
Llegó la hora de realizar la primera práctica. Va a hacer parpadear un diodo led conectado a una patilla digital de MKR 1010. La tarea es sencilla, pero no trivial. Aprenderá el procedimiento general de realización de proyectos con Arduino. Se aplicará este método a todos los diseños que se lleven a cabo a lo largo de todo el libro.
Lo primero que hay que hacer es abrir el IDE y comprobar que ha seleccionado el tipo de Arduino MKR 1010 y el puerto al que está conectado. Un truco que empleo a menudo cuando no me acuerdo del número del puerto serie al que está conectado Arduino, es desconectarlo del PC y observar la lista de puertos series en el IDE. A continuación, vuelvo a conectar Arduino y veo de nuevo la lista de los mismos. Aparecerá un nuevo puerto al final de esa lista. Ahí es donde está Arduino (figuras 1.10 y 1.11).
La palabra española “led” proviene del acrónimo inglés: LED (light-emitting diode: diodo emisor de luz). Los ledes se usan como indicadores y en iluminación. Existe una forma básica de conocer la polaridad de un led. La pata más larga siempre va a ser el ánodo y la más corta, el cátodo.
El 1010 incorpora de serie un led que puede utilizar en esta primera práctica para realizar un parpadeo continuo del mismo. Esta luz está conectada internamente al pin 6 de la placa (figura 1.12).
El siguiente paso es escribir el código que subirá a Arduino y hará parpadear el led interno. Para ello, o bien abre el sketch (programa) llamado blink.pde (los programas de Arduino tienen la extensión pde) desde la opción Archivo->Ejemplos bajo el menú de opciones (figura 1.13) o bien escribiendo el código mostrado en la figura 1.14. Recomiendo llevar a cabo esto último para que se acostumbre a utilizar el lenguaje de programación de Arduino. Para ello debe abrir un fichero nuevo en blanco desde la opción Archivo->Nuevo.
Un programa para ejecutarse en Arduino se conoce como sketch. Podría traducirse como “boceto” o “borrador”. Un sketch siempre tiene la misma estructura. Lo que se escriba entre las llaves que acompañan al nombre setup, se ejecuta una única vez siempre que se encienda o resetee la placa. Lo que se escriba dentro de las llaves que acompañan al nombre loop se ejecutará constantemente hasta que se apague Arduino.
Como se aprecia en la figura 1.15, la estructura básica de un programa consta de en cuatro bloques. El primero es opcional y contiene una barra inclinada seguida de un asterisco: “/*” para abrir el bloque y una segunda barra y asterisco para cerrarlo: “*/”. Contiene texto en el que puede escribir una referencia al autor (puede que sea usted mismo), la fecha de creación, a quién va dedicado, etc. En el siguiente bloque, definirá las variables que utilizará en el sketch. Más adelante, se explica lo que es una variable. El tercer bloque es importante porque en él se define la configuración del hardware de la placa. En este caso, el pin 6 funcionará como salida, ya está conectado el led. El cuarto bloque repetirá continuamente, y en bucle, las instrucciones que contiene entre las llaves (de ahí el nombre de loop).
Práctica 1.1 Parpadeo de un led (encabezado)
/* Parpadeo. Encienda y apague un led con intervalos de 1 segundo */
El encabezado contiene solo información y no se ejecuta. En este caso, informa de lo que hace el programa.
Práctica 1.1a Parpadeo de un led (inicialización)
En este bloque setup() (inicialización) se establecen las variables que utilizará durante todo el programa. Se define una variable llamada led de tipo entero int y le asigna el número 6. De ahora en adelante, cada vez que aparezca la palabra “led”, se hará referencia al número 6. Debe de fijarse que todas las sentencias o instrucciones que contenga su programa acaban en un punto y coma. Esto es una regla del lenguaje de programación C obligatoria. Observará también un comentario de texto: “// El led está conectado al pin 6”. Aclara que el led está conectado a dicho pin o patilla de Arduino. Es recomendable añadir de vez en cuando comentarios al programa para clarificar el código.
Las instrucciones o funciones que van entre llaves solo se ejecutan una sola vez y configuran el hardware de Arduino. En este caso, se tiene solo una: pin-Mode (número de pin, entrada o salida).
.-.pinMode es una función que configura uno de los pines digitales de Arduino como entrada o salida. En el caso de Arduino MKR 1010 se disponen de ocho pines digitales. Pues bien, pinMode establece que “tal pin” sea entrada o salida. La palabra INPUT establece entrada y la palabra OUTPUT inicializa el pin como salida. Así que para configurar el pin 6 como salida tendrá que escribir:
pinMode(6, OUTPUT);
Si lo quisiera configurar como entrada tendría que escribir:
pinMode(6, INPUT);
De esta forma tan sencilla se pueden configurar todos los pines digitales de Arduino para que actúen como entradas o salidas, dependiendo de lo que tenga conectados a los mismos.
Práctica 1.1b Parpadeo de un led (bloque repetitivo)
Dentro de la estructura loop() (repetitivo) y también entre llaves, aparece el fragmento de programa que se va a repetir continuamente. Ahora se dispone de una nueva función llamada digitalWrite (número de pin, estado alto o bajo).
Esto guarda relación con las señales digitales. Como sabe, las señales digitales binarias representan dos estados: un estado bajo, conocido como 0, apagado u OFF; y un estado alto conocido como 1, encendido u ON. El estado alto o HIGH se representa con 5 V y el estado bajo o LOW se representa con 0 V.
.-.digitalWrite es una función que necesita dos parámetros: el primero, una vez más, es el número de pin digital y el siguiente es el estado lógico que queremos mantener en ese pin, por lo tanto, si quiero enviar un valor alto al pin 6 tendrá que escribir:
digitalWrite(6, HIGH);
Si quiero tener 0 V en el pin 6 escribirá:
Delay es una función muy sencilla. Hace que toda la ejecución de Arduino pare o se detenga durante los milisegundos que le indique como parámetro.
Por lo tanto, si quiere esperar medio segundo escribirá:
delay(500);
Si desea esperar diez segundos escribirá:
deLay(10000);
Por tanto, echando un nuevo vistazo al bloque loop(), observará que el diodo LED conectado a la patilla 6 se va a encender (estado HIGH) durante 1 segundo y se va a apagar (estado LOW) durante otro segundo, consiguiendo el ansiado efecto de parpadeo.
Lo que resta por hacer es subir el código a la placa Arduino y comprobar si funciona. Para ello, presione el botón de compilación y subida de código indicado en la figura 1.16. Si todo va bien verá una lucecita (el diodo led) en la placa que parpadea durante un momento. Esto indica que el programa está cargándose en el microcontrolador de Arduino. Este breve parpadeo es un importante aviso de que las cosas van por buen camino. La placa está conectada correctamente al puerto serie y el código del sketch no tiene errores de sintaxis. Si algo de esto fuera mal observaría errores en la ventana de mensajes del entorno de desarrollo IDE (figura 1.17).
Observará que el error cometido se muestra con una barra de color amarillo a continuación de la línea de programa responsable del mismo.
Por otra parte, si quiere en algún momento comprobar o verificar si el código está bien escrito porque se ha olvidado algún punto y coma o si, por ejemplo, ha escrito digitalwrite en vez digitalWrite, puede recurrir al botón de verificación de programa que le avisará si todo va bien (figuras 1.18 y 1.19).
Realice el mismo montaje anterior, pero utilizando el pin 5 para conectar un diodo led externo.
Con el montaje anterior haga que el led esté encendido 1 segundo y apagado 2.
1.4 La familia Arduino MKR
Dado el éxito de Arduino, la compañía reconoció la necesidad de una versión estándar más pequeña que el modelo UNO. Además, se estaban imponiendo en el mercado una serie de placas competidoras que brindaban excelentes capacidades para el desarrollo de aplicaciones en el terreno del internet de las cosas (IoT). Por ello, se apresuraron a diseñar la serie MKR de Arduino con un objetivo en mente: el IoT. La compañía empezó a plantearse seriamente dejar de fabricar modelos “experimentales” por así decirlo, como Arduino YUN y shields como wifi o Ethernet, que no podían competir en precio con otros fabricantes más baratos como Raspberry Pi o Banana Pi.
Dada la naturaleza más pequeña de las aplicaciones de IoT más simples, donde la potencia y el tamaño del hardware son siempre una preocupación, Arduino diseñó la serie MKR, que aún empaqueta 28 pines en menos de la mitad del área total. Por otra parte, la conectividad inalámbrica era una barrera conocida para Arduino UNO, por lo que, naturalmente, la serie MKR se tomó la libertad de integrar todas las opciones de conectividad de IoT a través de los diferentes miembros de esta familia. En la figura 1.20 se observa dónde la compañía encuadra la familia MKR.
Algunos de los tipos de MKR que contiene la figura anterior son experimentales y posiblemente desaparezcan con el paso del tiempo o incluso sean reemplazados por nuevas revisiones, como es el caso de Arduino YUN revisión 2, que mejora considerablemente al anterior. Sin embargo, se verán los que a mi juicio son claramente ganadores en esta nueva familia. Además, se desarrollarán algunas prácticas para incitar al lector a adquirir alguno de estos modelos y darse cuenta de que realmente la empresa ha apostado fuerte en este sentido.
Arduino MKR1000 WiFi
El 9 de diciembre de 2015 se presentó Arduino MKR1000 y el 2 de abril de 2016 salió a la venta para todo el público. ¿Qué tiene de especial esta placa? Lo más llamativo es que viene integrada con un wifi abriendo las puertas de la comunicación a todo el mundo. No hay que olvidar que, gracias a Arduino, la robótica, la electrónica y la programación son accesibles a todo el mundo, principalmente por tres razones. La primera, el bajo coste que supone en la actualidad competir claramente con otras placas del mercado. La segunda es su facilidad de uso y programación. Se continúa utilizando el mismo entorno IDE de programación, de tal manera que los clásicos usuarios del UNO no tengan que adaptarse a nuevos ambientes de trabajo. Y la tercera, y la más importante, la gran comunidad que existe detrás de esta nueva placa.
Características de Arduino MKR1000
Como toda placa de prototipado o desarrollo, es necesario conocer las características más importantes. En este caso verá las que incluye Arduino MKR1000. En la figura 1.21 se observa su apariencia física y su aspecto virtual para el diseño de proyectos utilizando el fritzing.
Arduino MKR1000 se ha diseñado para ofrecer una solución práctica y rentable para los fabricantes que buscan agregar conectividad wifi a sus proyectos con una experiencia previa mínima en redes. Está basado en el Atmel ATSAMW25 SoC (system on chip), que forma parte de la familia SmartConnect de dispositivos inalámbricos Atmel, diseñada específicamente para proyectos y dispositivos IoT. El ATSAMW25 se compone de tres bloques principales:
SAMD21 Cortex-M0 + MCU de bajo consumo de 32 bits
WINC1500 de baja potencia; 2.4 GHz IEEE® 802.11 b/g/n WiFi
ECC508 Crypto Authentication
El ATSAMW25 incluye también una sola antena de PCB de flujo 1×1. El diseño incluye un circuito de carga Li-Po que permite que el MKR1000 funcione con batería o con 5 V externos, cargando la batería Li-Po mientras funciona con energía externa. El cambio de una fuente a otra se realiza de forma automática. Una buena potencia de cómputo de 32 bits, el amplio conjunto habitual de interfaces de E S, wifi de baja potencia con un Cryptochip para una comunicación segura. Exactamente igual que su hermano el MKR 1010, con el que desarrollará la mayoría de los proyectos de este libro, es posible suministrar energía de tres maneras. Se puede hacer a través del puerto microUSB o alimentarlo a través del pin VIN. En los dos casos se requiere de una diferencia de potencial de 5 V. Si desea crear un dispositivo autónomo puede hacer uso de una batería, dispone de pines de conexión para baterías. La recomendación del fabricante es que utilice una batería de 3.7 V y, como mínimo, 700 mAh (miliamperio hora). Es sencillo calcular la duración en horas de su batería si conoce el con-sumo máximo de corriente (mA) y la capacidad de la batería (mAh).
La multiplicación por el factor 0.7 se lleva a cabo debido a los factores externos que pueden afectar a la duración de la batería. Algo a muy a tener en cuenta y con la que debe tener mucha precaución es la diferencia de potencial que suministra a las entradas. Funcionan con 3.7 V y la recomendación es que no debe de suministrar el valor típico de 5 V a ninguna entrada. Esto puede dañar la placa. En la figura 1.22 se observa un ejemplo de alimentación con una Li-Po.
Microcontrolador | SAMD21 Cortex-M0 + MCU de bajo consumo de 32 bits |
Fuente de alimentación de la placa (USB/VIN) | 5 V |
Batería soportada (*) | Li-Po de una celda, 3.7 V, 700 mAh mínimo |
Voltaje de funcionamiento del circuito | 3.3V |
Pernos digitales de E/S | 8 |
PWM pines | 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 - o 18 -, A4 - o 19) |
UART | 1 |
SPI | 1 |
I2C | 1 |
Clavijas de entrada analógica | 7 (ADC 8/10/12 bits) |
Pernos de salida analógica | 1 (DAC 10 bits) |
Interrupciones externas | 8 (0, 1, 4, 5, 6, 7, 8, A1 -o 16-, A2 - o 17) |
Corriente DC por pin de E/S | 7 mA |
Memoria flash | 256 kB |
SRAM | 32 kB |
EEPROM | no |
Velocidad de reloj | 32.768 kHz (RTC), 48 MHz |
Led_BUILTIN | 6 |
Dispositivo USB de velocidad completa y host integrado | |
Longitud | 61.5 mm |
Anchura | 25 mm |
Peso | 32 g |
Arduino MKR WiFi 1010
El MKR WiFi 1010 es una mejora significativa en el MKR1000 WiFi. Está equipado con un módulo ESP32 hecho por u-blox. Esta placa tiene como objetivo acelerar y simplificar la creación de prototipos de aplicaciones de IoT basadas en wifi gracias a la flexibilidad del módulo ESP32 y su bajo consumo de energía. En la figura 1.23 se observa su apariencia física y su aspecto virtual para el diseño de proyectos utilizando el fritzing.
Características del Arduino MKR 1010
La placa está compuesta por tres bloques principales:
* SAMD21 Cortex-M0 + MCU de bajo consumo de 32 bits;
* u-blox Serie NINA-W10 de baja potencia de 2.4 GHz IEEE® 802.11 b/g/n wifi, y
* ECC508 Crypto Authentication.
El MKR WiFi 1010 incluye potencia de cómputo de 32 bits, el rico conjunto usual de interfaces de E/S y wifi de baja potencia con un Cryptochip para una comunicación segura mediante el cifrado SHA-256. Además, ofrece la facilidad de uso del software de Arduino (IDE) para el desarrollo de código y programación. Su puerto USB se puede utilizar para suministrar alimentación (5 V) a la placa.
Tiene un circuito de carga Li-Po que permite que el Arduino MKR WiFi 1010 funcione con energía de la batería o con una fuente externa de 5 V, cargando la batería Li-Po mientras funciona con energía externa. El cambio de una fuente a otra se hace automáticamente.
Su puerto USB se puede utilizar para suministrar alimentación (5 V) a la placa. Tiene un circuito de carga Li-Po que permite que Arduino MKR WiFi 1010 funcione con energía de la batería o con una fuente externa de 5 V, cargando la batería Li-Po mientras funciona con energía externa. El cambio de una fuente a otra se hace automáticamente.
Microcontrolador | SAMD21 Cortex-M0 + MCU de bajo consumo de 32 bits |
Fuente de alimentación de la placa (USB/VIN) | 5V |
Batería soportada (*) | Li-Po Single Cell, 3.7V, 700 mAh mínimo |
Voltaje de funcionamiento del circuito | 3.3 V |
Pines digitales de E/S | 8 |
PWM pines | 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 - o 18 -, A4 - o 19) |
UART | 1 |
SPI | 1 |
I2C | 1 |
I2S | 1 |
Conectividad | Wifi |
Pines de entrada analógica | 7 (ADC 8/10/12 bits) |
Pines de salida analógica | 1 (DAC 10 bits) |
Interrupciones externas | 8 (0, 1, 4, 5, 6, 7, 8, A1 -o 16-, A2 - o 17) |
Corriente DC por pin de E/S | 7 mA |
Memoria flash | 256 kB |
SRAM | 32 kB |
EEPROM | No |
Velocidad de reloj | 32.768 kHz (RTC), 48 MHz |
LED_BUILTIN | 6 |
Dispositivo USB de velocidad completa y host integrado | Incluido |
LED_BUILTIN | 6 |
Longitud | 61.5 mm |
Anchura | 25 mm |
Peso | 32 g |
Arduino MKR1200 WIFI
Arduino MKRFOX1200 (figura 1.24) ha sido diseñado para ofrecer una solución práctica y rentable a los fabricantes que buscan agregar conectividad Sigfox en sus proyectos con una mínima experiencia previa en redes. Está basado en el módulo Atmel SAMD21 y ATA8520 Sigfox. La placa Arduino MKRFOX1200 es una de las placas de prototipado más dotadas para el internet de las cosas o IoT. Con capacidad para conectarse a la red de Sigfox, pone a su alcance el poder de las redes LPWAN para conectarse a grandes distancias y muy bajo consumo.
Existen placas más económicas, como el ESP8266 o el ESP32. Incluso el Arduino MKR1000 explicado anteriormente puede ser un gran rival. Sin embargo, utilizan tecnologías diferentes de comunicación. Y aunque estas placas son muy versátiles, su función no tiene nada que ver con despliegues masivos de dispositivos del IoT. No cumplen las premisas de bajo consumo y un amplio alcance de cobertura. Sin embargo, placas compatibles con LoRaWan o Sigfox, cumplen con creces estas premisas.
Arduino MKRFOX1200 es una potente placa que combina la funcionalidad del Arduino Zero y la conectividad de Sigfox. Es la solución ideal para crear dispositivos de IoT de forma fácil y sencilla. La placa incluye 2 años de suscripción gratuita a Sigfox (con un máximo de 140 mensajes al día) y acceso gratuito a Spot’it, un servicio de geolocalización para ubicar la placa sin GPS extra. El Arduino MKRFOX1200 se ha diseñado para ofrecer una solución eficiente y de bajo coste para realizar proyectos con la conectividad Sigfox. Se basa en un potente microcontrolador Atmel SAMD21 y un módulo Sigfox ATA8520. Se puede alimentar con 2 pilas AA de 1.5 V, con baterías AAA o con una alimentación externa de 5 V. A diferencia de otras placas Arduino y Genuino, el MKRFOX1200 funciona con 3.3 V. El máximo voltaje aplicable a los pines I/O es de 3.3 V. Si se aplican voltajes superiores a 3.3 V a cualquiera de los pines se puede dañar la placa y anular la garantía. El plan de datos de Sigfox incluido se activa automáticamente al enviar el cuarto mensaje en la red. Se pueden enviar hasta 140 mensajes por día durante un año. La placa necesita una antena GSM 868 MHz (no incluida por defecto) para poder funcionar correctamente. Se recomienda un modelo que incluya el conector UFL.