Maker Zone https://sg.com.mx/ en Plataformas IoT para Dummies https://sg.com.mx/revista/57/plataformas-iot-dummies <span class="field field--name-title field--type-string field--label-hidden">Plataformas IoT para Dummies</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/2018-09/zonamaker-fig1.jpg" width="1001" height="978" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 09/02/2018 - 19:49</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/57" hreflang="zxx">SG #57</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/buzz/seccion-revista/maker-zone" hreflang="und">Maker Zone</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/andres-sabas" hreflang="und">Andrés Sabas</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Es común que al iniciar en el mundo del Internet de las cosas te encuentres con el problema de que no dominas muy bien el hacer hardware o software o ninguna de las dos áreas, o también puede pasar que simplemente quieres prototipar algo rápido para validar la solución a un problema sin invertir tanto tiempo.</p> <p dir="ltr">En uno de mis artículos anteriores en Software Guru hablé herramientas y plataformas de hardware para iniciarse en el mundo del IoT. En esta ocasión platicaré sobre plataformas de software que se utilizan para gestionar y comunicar dispositivos IoT entre sí.</p> <p dir="ltr">Me enfocaré en las plataformas que considero más sencillas y que no requieren muchos conocimientos de programación, base de datos o protocolos de comunicación. Este tipo de plataformas típicamente están dirigidas a estudiantes así como entusiastas (hobbistas) y consumidores en general. Es por ello que dejaré de lado a plataformas más poderosas y sofisticadas como podrían ser Azure IoT Hub de Microsoft, AWS IoT y Google Cloud IoT, entre otras.</p> <h3 dir="ltr">IFTTT</h3> <p dir="ltr"><a href="https://ifttt.com">IFTTT</a> es un servicio web gratuito que permite fácilmente conectar aplicaciones y dispositivos diversos por medio de recetas (llamadas applets).</p> <p dir="ltr">Las recetas siguen el formato “si sucede esto, entonces haz esto otro”. De hecho, de ahí se deriva el nombre IFTTT que corresponde a las siglas de “if this then that”. Así que básicamente escoges cuál es el evento que quieres detectar y cuál es la acción que deseas realizar como consecuencia.</p> <p dir="ltr">Originalmente, el servicio se utilizaba más que nada para conectar acciones entre aplicaciones de software; por ejemplo, que cuando subes un video a YouTube se publique automáticamente en Facebook o Twitter. Sin embargo, IFTTT hoy soporta una gran variedad de servicios y dispositivos IoT que incluyen electrodomésticos, wearables, aplicaciones de negocio e incluso servicios de transporte.</p> <p dir="ltr">En el caso de proyectos maker, la figura 1 muestra una lista de las plataformas maker soportadas hasta el momento de forma directa, pero también puedes incorporar tu proyecto DIY usando Webhooks, tanto para poder enviar como recibir mensajes.</p> <p dir="ltr"><img height="712" src="https://lh4.googleusercontent.com/X6krxlruA8m38evXmI1brTXtWFAxiNSgNoVAi7eMsZetI6nlEF_9AE-RXMlXYnO8iQbE28mlEndMq_8So62ugHW1Dqs50vwQOTRTHXHe1SUoCXTojxC9Vax1ya4qN5JZ4uqoSc1V" width="730" /></p> <p dir="ltr"><em>Figura 1. Opciones DIY soportadas directamente en IFTTT.</em></p> <p dir="ltr">Toda la creación de recetas en IFTTT se realiza desde el navegador. Lo único que haces es decir que quieres crear un nuevo applet, das click para indicar el evento que deseas escuchar (hay cientos de servicios así que usas un campo de búsqueda) y luego de la misma forma seleccionas la acción que se debe disparar. Incluso ya hay una gran cantidad de applets hechos por la comunidad que puedes reutilizar, solo es cosa de que lo selecciones y lo configures para que quede conectado con tus servicios o dispositivos. Todo esto hace que IFTTT sea una plataforma muy sencilla para conectar dispositivos IoT y por lo tanto ha cobrado gran popularidad en el último par de años.</p> <p dir="ltr">Como ya mencioné, IFTTT es gratuito así que si deseas probar la plataforma, no hay razón para esperar. Crea una cuenta en <a href="https://ifttt.com">https://ifttt.com</a> y empireza a crear tus propios applets.</p> <p dir="ltr">Si tienes dudas sobre como publicar a un Webhook de IFTTT, he creado un pequeño programa disponible en <a href="http://swgu.ru/x0">http://swgu.ru/x0</a> que muestra como conectarse por WiFi a IFTTT y publicar un mensaje. Solo necesitas configurarlo con la información de conexión de WiFi así como la llave para publicar a IFTTT.</p> <h3 dir="ltr">Blynk</h3> <p dir="ltr"><a href="http://www.blynk.cc">Blynk</a> es una plataforma diseñada específicamente para interactuar con tus proyectos maker desde tu teléfono móvil. Con Blynk puedes controlar tu hardware remotamente, almacenar o mostrar datos de sensores, y muchas cosas más.</p> <p dir="ltr">La figura 2 ilustra cómo funciona Blynk. En nuestro smartphone (ya sea Android o iPhone) instalamos la Blynk app que se comunica con un servidor intermedio que interactúa con los proyectos y dispositivos IoT haciendo uso de las bibliotecas de Blynk.</p> <p dir="ltr"><img src="https://lh5.googleusercontent.com/q48KXemBlGm1yYwALl-VwTjqQ5eriHR7HdEgkcCVZZyV6ykF2v3ZT48cZBlJpH5BN2jRYig5y3KmUwxBaLeCHztfWwHKTYWpKk08nyO9Kawq7GIR7b8Sn599VqBkc1W2Nrq5-asn" /></p> <p dir="ltr"><em>Figura 2. Arquitectura de Blynk.</em></p> <p dir="ltr">En la Blynk app puedes construir la interfaz de usuario a tus necesidades, haciendo uso de widgets prehechos como botones e indicadores que simplemente arrastras hacia tu interfaz. La figura 3 muestra un ejemplo de cómo se construye la interfaz.</p> <p dir="ltr">Por otro lado, el Blynk server es open source así que puedes descargarlo e instalarlo en tu propia infraestructura o puedes utilizar Blynk cloud, que provee un nivel básico gratuito y niveles con mayor capacidad con costo.</p> <p>&nbsp;</p> <p dir="ltr"><img src="https://lh5.googleusercontent.com/ZRVZPcNzzly75IIS6SA2sDhH0VwzzTgQU2JrLuBgGgnYvpb_URgbFFle0thqHWii_G2yzaILUeXb9xYOyZqFsLLZlKGaA6bOJxdrvh_utT9jETr7V3MyQQbTNRIv8L3EeeZ4LPSb" /></p> <p>&nbsp;</p> <p dir="ltr"><em>Figura 3. Widgets en Blynk app.</em></p> <p dir="ltr">Algo interesante de Blynk es que soporta distintos mecanismos de conexión con tu hardware tales como Bluetooth, WiFi, Ethernet, red celular, USB y vía serial. Cuenta con una biblioteca para usar con Arduino y un generador de código online para crear tus primeros sketchs.</p> <p dir="ltr">Si todo esto suena interesante ya tienes ganas de empezar a jugar con Blynk, dirígete a <a href="http://www.blynk.cc/getting-started/">http://www.blynk.cc/getting-started</a> y sigue los pasos.</p> <h3 dir="ltr">Cayenne</h3> <p dir="ltr">Cayenne es una gran opción para aquellos interesados en visualizar datos generados por dispositivos IoT. Cuenta con soporte para distintos protocolos (ej. MQTT) y tecnologías de comunicación (ej. LoRaWAN), así como bibliotecas para distintos lenguajes de programación. Su filosofía es ser la manera de sencilla de crear un dashboard donde puedas visualizar todos los datos de tu sensores solo arrastrando y soltando los datos deseados. Además de todo, es un servicio gratuito (hasta el momento).</p> <p dir="ltr">La figura 4 muestra un ejemplo de un dashboard en Cayenne.</p> <p dir="ltr"><img height="428" src="https://lh4.googleusercontent.com/nAg1_6ASMZ4wQtJfYQBlkj6wXkAIjAplWL5lMunDN6NB9coLoqllNIOGCkGW2txbw1lCXPcpFsC3G_xVlDPz0bvp2DgNqzcmoU5vweaV7TvoEIja7NmmMjF89lMRidzsccXICoB4" width="730" /></p> <p dir="ltr">Figura 4. Dashboard en Cayenne.</p> <p>&nbsp;</p> <p dir="ltr">Algo interesante de la plataforma es que ha implementado la especificación “PSO Smart Objects” para envío de datos en IoT. Esto hace que cada tipo de datos recibido es reconocido automáticamente, ya sea temperatura, humedad, presión, entrada analógica genérica o entrada digital genérica y se le asigna un gráfico predefinido para ese tipo de dato.</p> <p dir="ltr">Para conocer más, visita <a href="https://mydevices.com/cayenne/docs/intro/">https://mydevices.com/cayenne/docs/intro</a></p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Andres Sabas es Director de Electronic Cats. Es un maker apasionado y cofundador de The Inventor’s House Hackerspace en Aguascalientes.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Mon, 03 Sep 2018 00:49:01 +0000 sg 8339 at https://sg.com.mx https://sg.com.mx/revista/57/plataformas-iot-dummies#comments Tecnologías Inalámbricas para el Internet de las Cosas https://sg.com.mx/revista/56/tecnologias-inalambricas-iot <span class="field field--name-title field--type-string field--label-hidden">Tecnologías Inalámbricas para el Internet de las Cosas</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/56-maker.jpg" width="400" height="266" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 03/18/2018 - 23:00</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/56" hreflang="und">SG #56</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/buzz/seccion-revista/maker-zone" hreflang="und">Maker Zone</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/andres-sabas" hreflang="und">Andrés Sabas</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr">Mucho se ha hablado del internet de las Cosas en los últimos años, de sus ventajas y beneficios a múltiples sectores, pero realmente se habla poco de cómo implementar de forma práctica esa gran red de sensores y actuadores para al campo, las ciudades y la industria</p> <p dir="ltr">Estas redes implican retos significativos debido a que entre otras cosas requieren soportar un gran número de dispositivos conectados con muy alta confiabilidad y bajo consumo de recursos. Afortunadamente ya existen tecnologías diseñadas para superar estos retos, y en este artículo compartiré un panorama de estas.</p> <p dir="ltr">Antes de comenzar, repasemos algunos criterios clave que debemos considerar al evaluar tecnologías para comunicación inalámbrica:</p> <ul> <li dir="ltr"> <p dir="ltr">Transferencia de datos: Capacidad de transferencia de datos por nodo</p> </li> <li dir="ltr"> <p dir="ltr">Bajo consumo de energía: Energía requerida para transmitir o recibir datos</p> </li> <li dir="ltr"> <p dir="ltr">Costo: Costo de implementación y renta del servicio &nbsp;por nodo</p> </li> <li dir="ltr"> <p dir="ltr">Alcance: Distancia máxima de conexión entre emisor y receptor.</p> </li> </ul> <h3 dir="ltr">WiFi</h3> <p dir="ltr">Una de las tecnologías más conocidas y adoptadas. Entre sus principales ventajas está una gran capacidad para transferencia de datos, lo cual permite enviar video, audio y otros archivos de gran tamaño. Existe una gran variedad de módulos, sensores y actuadores que trabajan con esta tecnología y van desde los más económicos que no pasan los 5 dólares como lo son el ESP8266 o el RTL8710 hasta los más completos y como el ArduinoMKR1000.</p> <p dir="ltr">Una de las grandes desventajas de esta tecnología es el alcance de cobertura. Aunque es posible realizar enlaces punto a punto de varios kilómetros, para redes de sensores donde es necesario tener una conexión multipunto su rango no pasa de los 100 metros, provocando no sea idónea para soluciones donde se requiere un gran cobertura.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭✭✭✭</td> </tr> <tr> <td>Bajo consumo de energía</td> <td>✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>2.4 Ghz y 5 Ghz las más comunes</td> </tr> <tr> <td>Alcance</td> <td>&lt; 100 m.</td> </tr> </tbody> </table> <h3 dir="ltr">Bluetooth Low Energy</h3> <p dir="ltr">La tecnología Bluetooth también es muy conocida debido a que se utiliza en una gran cantidad de dispositivos como teléfonos, audífonos o cámaras. Pero si vamos a utilizar Bluetooth para IoT debemos hablar de la versión 4.0 o BLE (Bluetooth Low Energy), especialmente creada para wearables y todo dispositivo que requiere estar enviando información de manera constante pero requiere minimizar el consumo de energía ya que típicamente son dispositivos que operan en base a baterías.</p> <p dir="ltr">BLE provee tasas de transferencia de datos de poco menos de 1 Mbps, lo cual lo pone en un rango medio. Una característica muy especial de BLE es el modo beacon que permite rastrear otros dispositivos BLE y que funciona muy bien en interiores.</p> <p dir="ltr">Entre los dispositivos más comunes para construir soluciones con BLE están las familias nRF51 y nRF52 de Nordic Semiconductor, así como la serie ESP32 de Espressif.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>2.4 Ghz</td> </tr> <tr> <td>Alcance</td> <td>&lt; 100 m.</td> </tr> </tbody> </table> <h3 dir="ltr">4G</h3> <p dir="ltr">La red de telefonía celular también puede ser una opción para soluciones IoT. Sus grandes ventajas son la gran cobertura con múltiples proveedores, y muy buen ancho de banda (~1Gbps).</p> <p dir="ltr">Su gran punto débil es el costo, ya que requiere usar un plan de datos con un proveedor celular (existen planes específicos para IoT). Adicionalmente, el consumo de energía necesario es mayor que el de otras opciones listadas. Adicionalmente, es una tecnología que eventualmente será reemplazada por 5G, cuyas características son más adecuadas para IoT.</p> <p dir="ltr">Uno de los dispositivos recomendables para iniciar de manera sencilla con esta tecnología son es el LE910 de Telit.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭✭✭</td> </tr> <tr> <td>Bajo consumo de energía</td> <td>✭✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>1,700-2,100 Mhz</td> </tr> <tr> <td>Alcance</td> <td>&lt; 10 km.</td> </tr> </tbody> </table> <h3 dir="ltr">&nbsp;<br /> LoRa</h3> <p dir="ltr">LoRa es una tecnología de tipo Low-Power Wide-Area Network (LPWAN) que aún no hemos visto mucho en latinoamérica y que apenas se está abriendo paso. Sus fortalezas son bajo consumo de energía y largo alcance, con un rango de aproximadamente 20Km de cobertura por antena es ideal para construir redes públicas o privadas para esas ciudades inteligentes de las que tanto se habla.</p> <p dir="ltr">Un punto débil de LoRa podría ser su baja transferencia de datos (~50 Kbps). Así que si lo que queremos enviar es audio o video no sería viable, pero para datos ligeros —que es lo que típicamente se requiere en escenarios IoT— es una gran opción.</p> <p dir="ltr">En ocasiones te encontrarás con el término LoRaWAN en lugar de LoRa. La diferencia es que LoRa es la tecnología de bajo nivel que habilita el enlace, mientras que LoRaWAN es el protocolo de comunicación y arquitectura para la red.</p> <p dir="ltr">Los dispositivos disponibles para iniciar de una manera sencilla con esta tecnología son: RFM95, RN2903A, Feather Adafruit RFM95, Arduino LoRa Node y Arduino LoRa gateway.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭✭</td> </tr> <tr> <td>Bajo consumo de energía</td> <td>✭✭✭✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>915 América, 868 Europa</td> </tr> <tr> <td>Alcance</td> <td>&lt; 20 km.</td> </tr> </tbody> </table> <h3 dir="ltr">SigFox</h3> <p dir="ltr">SigFox es otra tecnología de tipo LPWAN. Aunque existen algunas diferencias técnicas respecto a LoRa, el enfoque general es similar: comunicación a gran distancia de datos ligeros con bajo consumo de energía. La diferencia respecto a LoRa es principalmente en cuanto a su modelo de negocio. En el caso de SigFox, la red es operada por un proveedor/carrier y uno simplemente conecta sus dispositivos a esta red, similar a lo que sucede en la red celular. Esto puede ser una ventaja si la zona donde estás ya tiene cobertura, pero una desventaja en caso de no ser así. En cambio, LoRa permite que cualquiera pueda crear una red privada y no depende de un carrier.</p> <p dir="ltr">Entre los dispositivos disponibles para iniciar de una manera sencilla con esta tecnología destaca el Arduino MKRFox1200, que básicamente es un MKR1000 con conectividad a la red Sigfox.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭</td> </tr> <tr> <td>Bajo consumo de energía</td> <td>✭✭✭✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>915 América, 868 Europa</td> </tr> <tr> <td>Alcance</td> <td>Hasta 15 km.</td> </tr> </tbody> </table> <h3 dir="ltr">5G</h3> <p dir="ltr">5G es la siguiente generación de redes de comunicación móvil. Ofrecerá mejoras significativas en latencia y ancho de banda respecto a 4G, habilitando escenarios de comunicación con grandes cantidades de datos en tiempo real. De hecho, uno de los escenarios de uso que se contempla que soporten las redes 5G es la conectividad de automóviles autónomos.</p> <p dir="ltr">La tecnología ya está siendo piloteada en algunos lugares, y se espera que esté disponible al público en general a partir del 2020. Los operadores de telefonía en EUA prometen precios muy bajos para aplicaciones de IoT. Habrá que ver qué opciones ofrecen en México.</p> <table align="center" border="0" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td width="50%">Transferencia de datos</td> <td>✭✭✭✭✭</td> </tr> <tr> <td>Bajo consumo de energía</td> <td>✭✭✭</td> </tr> <tr> <td>Costo</td> <td>✭✭✭</td> </tr> <tr> <td>Frecuencia de trabajo</td> <td>3 a 30 GHz</td> </tr> <tr> <td>Alcance</td> <td>Hasta 1 km.</td> </tr> </tbody> </table> <p dir="ltr">&nbsp;</p> <h3 dir="ltr">Conclusión</h3> <p dir="ltr">En este artículo conocimos las principales tecnologías utilizadas para comunicar dispositivos en soluciones IoT. Espero que esta información te sea de ayuda para entender qué tecnología sea adecúa mejor a las necesidades de tu próximo proyecto IoT.</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p dir="ltr">Andres Sabas (@sabasacustico) es Director de Electronic Cats. Es un maker apasionado y cofundador de The Inventor’s House Hackerspace en Aguascalientes.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Mon, 19 Mar 2018 05:00:37 +0000 sg 8027 at https://sg.com.mx https://sg.com.mx/revista/56/tecnologias-inalambricas-iot#comments Hola Mundo IoT https://sg.com.mx/revista/51/hola-mundo-iot <span class="field field--name-title field--type-string field--label-hidden">Hola Mundo IoT</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/maker-meme2.jpg" width="459" height="333" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 07/02/2016 - 12:57</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/51" hreflang="und">SG #51</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/buzz/seccion-revista/maker-zone" hreflang="und">Maker Zone</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/pedro-galvan" hreflang="und">Pedro Galván</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr">En el mundo maker, lo más cercano a un “hola mundo” es hacer que un microcontrolador prenda y apague un diodo emisor de luz (LED). Si llevamos esto a un contexto de Internet de las Cosas, el “hola mundo” sería lograr que dicho microcontrolador prenda y apague el LED en base a mensajes enviados por un dispositivo remoto.</p><p dir="ltr">Así que eso es justamente lo que haremos en este tutorial. Tendremos un microcontrolador que prenderá y apagará un LED en base a mensajes generados remotamente desde un Raspberry Pi.</p><h3 dir="ltr">Eligiendo el protocolo de comunicación</h3><p dir="ltr">Lo primero que tenemos que decidir es cómo haremos para que nuestros dispositivos puedan enviar y recibir mensajes.</p><p dir="ltr">Quienes vienen del desarrollo web probablemente consideren que lo más sencillo sería implementar un servidor web que maneje peticiones REST sobre HTTP. Cuando se trata de dispositivos con alto poder de cómputo y un canal de comunicación con buen ancho de banda, esto tiene sentido. Pero en la mayoría de los casos de IoT, esto no sería ideal ya que HTTP es un protocolo relativamente pesado, además de que no es eficiente para escenarios de comunicación uno a muchos (se necesitaría hacer un POST a cada cliente).</p><p dir="ltr">Es aquí cuando nos encontramos con MQTT, &nbsp;un protocolo de comunicación M2M (machine-to-machine) donde dispositivos se comunican entre sí utilizando un patrón publicar/suscribir. Es muy ligero, por lo que es de especial utilidad en casos donde se requiere un muy bajo consumo de energía y ancho de banda. MQTT es un estándar ISO, así que tiene un gran respaldo.</p><p dir="ltr">Por sus características, MQTT es un protocolo ideal para soluciones de Internet de las Cosas, así que es lo que utilizaremos para nuestro “hola IoT”.</p><h3 dir="ltr">Funcionamiento de MQTT</h3><p dir="ltr">Conozcamos los componentes y acciones clave de MQTT.</p><ul><li>Cliente: un dispositivo que puede publicar mensajes, suscribirse para recibir mensajes, o ambos.</li><li>Broker: el broker es el servidor que acepta mensajes publicados por clientes y los difunde entre los clientes suscritos.</li><li>Publicar: cuando un cliente envía un mensaje al broker.</li><li>Tópico: los mensajes deben estar etiquetados con algún tópico o tema. Los clientes se suscriben a tópicos específicos, de manera que solo reciben los mensajes publicados con dichos tópicos. Un tópico puede a su vez contener subtópicos.</li></ul><h3 dir="ltr">Mapeando los componentes</h3><p dir="ltr">Para este tutorial tendremos 3 elementos:</p><ul><li>Una computadora personal, que operará como servidor (broker).</li><li>Un Raspberry Pi que por medio de un programa en Python enviará mensajes al broker pidiendo que se prenda o apague el LED.</li><li>Un módulo ESP8266 que recibe los mensajes y realiza la acción deseada con el LED.</li></ul><h3 dir="ltr">Mosquitto</h3><p dir="ltr">Ya comentamos que MQTT es el protocolo que utilizaremos, pero ahora hay que escoger un servidor o implementación específica de broker MQTT. Existen diversas opciones instalables como Mosquitto, HiveMQ y VernMQ por mencionar algunas. También hay servicios de broker MQTT en la nube —por ejemplo AWS IoT e IBM Bluemix— listos para usarse.</p><p dir="ltr">En este caso utilizaremos Mosquitto, que es un servidor MQTT open source bastante popular. En <a href="http://mosquitto.org">http://mosquitto.org</a> puedes descargar el instalador para Windows. En Mac puedes instalarlo con Homebrew, y en Linux encontrarás el paquete mosquitto o mosquitto-mqtt en los repositorios de tu sistema operativo.</p><p dir="ltr">Una vez que tengamos Mosquitto instalado, podemos arrancar el broker simplemente con el comando mosquitto, aunque es buena idea agregarle la bandera -v de “verbosidad” para que nos muestre el detalle de lo que esté sucediendo.</p><p dir="ltr"><img src="https://lh5.googleusercontent.com/S3NGGY3uR24sE5y_OjpFmOh_u5NY3wW4RY--vEy_h4afjkcy3nRgVkXdXkW_P64qJq3mkxUQqOhM90Iyqr-TpeQZTt2wFhgArTiJBe1H8FnOLyN6OhP7C_B_uyxStDnAOcegxS7t" alt="" width="624" height="120" /></p><p dir="ltr"><em>Figura 1. Arrancando el servidor de mosquitto.</em></p><p dir="ltr">La configuración default de mosquitto opera en el puerto 1883 prácticamente con ninguna seguridad. Esto es válido para propósitos de nuestro tutorial, pero una vez que nos dispongamos hacer un proyecto real, es altamente recomendable cambiar la configuración y restringir el acceso.</p><p dir="ltr">Una vez que está corriendo nuestro servidor, podemos suscribirnos para recibir mensajes sobre algún tópico. Antes de hacer la conexión desde dispositivos remotos, vamos a probar desde la misma computadora donde tenemos el servidor. Abrimos una nueva terminal y ejecutamos el comando mosquitto_sub:</p><p><code dir="ltr">$ mosquitto_sub -h 127.0.0.1 -t prueba -i testSub</code></p><p dir="ltr">En este caso estamos indicando que deseamos conectarnos al servidor en la ip 127.0.0.1 al tópico prueba y que nuestro identificador es testSub (este último parámetro es opcional, sino lo usamos, el servidor nos asigna algún identificar). Al ejecutar este comando, veremos en nuestra consola del servidor que ha recibido la petición de suscripción (ver figura 2).</p><p dir="ltr"><img src="https://lh6.googleusercontent.com/BG4tU0Ky-DYWTwGNgua1q8QC0bF-z9LerYAqKPb2u_1LK0uHEsrrbG0RUSqm9bZrlZhWjeCKWdy4QD6d-_zb14zfuZaDlophEY7To7p9RdogFOmP6lvV3hoYJj7oa9iXaejNeQo9" alt="" width="624" height="132" /></p><p dir="ltr"><em>Figura 2. Servidor mostrando suscripción.</em></p><p dir="ltr">Noten que el tópico “prueba” no se había definido previamente en el servidor, sino que se crea automáticamente cuando un cliente pública o se suscribe a él.</p><p dir="ltr">Ahora haremos la prueba de publicar un mensaje al tópico prueba. Así que desde otra terminal de comando ejecutamos el comando mosquitto_pub:</p><p><code dir="ltr">$ mosquitto_pub -h 127.0.0.1 -i testPub -t prueba -m 'Hola IoT'</code></p><p dir="ltr">Como podemos ver en la figura 3, el servidor recibe la conexión de testPub que publica un mensaje en el tópico prueba. Dado que testSub está suscrito a este tópico, el servidor le envía el mensaje.</p><p dir="ltr">Por último, en la figura 4 podemos apreciar que el cliente que está escuchando el tópico prueba recibe el mensaje publicado.</p><p dir="ltr"><img src="https://lh3.googleusercontent.com/eL5USPxetpL7_QsZWwQkVCC5kvLyyM8kXbRvyLvQg5zQfZKRVv3ikthjQPAGQINUv5j7prPlwSVLjpomq5YCy-VNqDVEeYMQeWYx4Ndwe4W6ULTJtcWbr_3E3wiaYlpX1uoI-edQ" alt="" width="624" height="79" /></p><p dir="ltr"><em>Figura 3. Servidor recibe conexión para publicar.</em></p><p dir="ltr"><img src="https://lh4.googleusercontent.com/xNUJ-qkJh2KHHhoE2syeDyIximE6AH-18kL9j3TIEcjddqN0AW9_LZDLgDdMk1snYhpf9ITfP8c0uSaotX9sl8sVFK-j87Jw536ZHHWr-O4IU3tpWvr97qEr2DeOVYiS9_6LdtCS" alt="" width="624" height="65" /></p><p dir="ltr"><em>Figura 4. Suscriptor recibiendo el mensaje publicado.</em></p><h3 dir="ltr">Publicar desde la Raspberry Pi</h3><p dir="ltr">Para publicar mensajes desde la Raspberry Pi podríamos simplemente instalar mosquitto y utilizar el comando mosquitto_pub tal y como lo hicimos en la prueba anterior. Sin embargo, para hacerlo de forma programática es mejor utilizar una librería para el lenguaje de programación de nuestra preferencia. En este caso mostraremos como hacerlo desde Python.</p><p dir="ltr">El proyecto Eclipse Paho provee clientes y librerías open source para MQTT en una gran variedad de lenguajes de programación. Podemos visitar <a href="https://eclipse.org/paho/">https://eclipse.org/paho/</a> y descargar el cliente para nuestro lenguaje, o en el caso de Python podemos hacerlo todavía más sencillo usando pip:</p><p><code dir="ltr">$ pip install paho-mqtt</code></p><p dir="ltr">Una vez que tengamos instalado Paho, podemos utilizar la librería en nuestro programa. El listado 1 muestra el código en python para publicar un mensaje.</p><p dir="ltr"><script type="text/javascript" src="https://gist.github.com/pedrogk/9fee1c85ceafb9289f4633c331edc862.js"></script></p><p dir="ltr"><em>Listado 1. Programa para publicar mensaje con Python.</em></p><p dir="ltr">Como podemos ver, es muy sencillo. Simplemente importamos la librería publish de Paho y utilizamos la operación single para publicar un mensaje. Como parámetro enviamos el nombre del tópico (ledStatus), el mensaje (0 ó 1), y el servidor.</p><h3 dir="ltr">Recibir el mensaje en microcontrolador</h3><p dir="ltr">Una vez que hicimos el programa en nuestra Raspberry Pi para enviar mensajes, vamos a hacer el programa en nuestro microcontrolador para recibir los mensajes y prender o apagar el LED. En este caso usamos un ESP8266 ya que es un módulo muy económico con conectividad WiFi, pero podríamos usar cualquier Arduino con un shell Ethernet o WiFi.</p><p dir="ltr">Así como en la Raspberry Pi nos apoyamos en una librería, haremos lo propio del lado del microcontrolador. Utilizaremos PubSubClient, un cliente MQTT para Arduino. Puedes descargar PubSubClient desde <a href="http://pubsubclient.knolleary.net">http://pubsubclient.knolleary.net</a> o instalarlo desde el administrador de paquetes del Arduino IDE.</p><p dir="ltr">El listado 2 muestra el código para el microcontrolador Arduino que se conecta al servidor de MQTT, se suscribe al tópico y en base al mensaje recibido, prende o apaga el LED. Vale la pena recalcar que hicimos la prueba con un ESP8266 Huzzah de Adafruit que tiene invertida la acción de los LED, cuando mandas HIGH se apaga y cuando mandas LOW se prende. Esto puede ser distinto en el microcontrolador específico que utilices.</p><p dir="ltr"><script type="text/javascript" src="https://gist.github.com/pedrogk/9e96d0983dc03c352b12f860a42ba7b6.js"></script></p><p dir="ltr"><em>Listado 2. Código para ESP8226</em></p><h3 dir="ltr">Conclusión</h3><p dir="ltr">En este tutorial he mostrado un ejemplo muy sencillo de cómo dispositivos remotos pueden enviarse mensajes entre sí por medio de un servidor MQTT. Te recomiendo que conozcas más sobre MQTT ya que es un protocolo muy útil.</p><p dir="ltr">Si no deseas instalar tu propio servidor MQTT, te recuerdo que también hay servicios en la nube. De hecho, por el momento Eclipse ofrece un sandbox de MQTT abierto disponible en “iot.eclipse.org” con el puerto 1883 así que podrías intentar los ejercicios de este tutorial utilizando “iot.eclipse.org” como servidor MQTT y deberían funcionar.</p><p dir="ltr"><strong>Referencias</strong></p><ol><li>J. Lewis. “MQTT Tutorial for Raspberry Pi, Arduino and ESP8266”. <a href="http://swgu.ru/rh">http://swgu.ru/rh</a></li></ol><p>&nbsp;</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p dir="ltr">Pedro Galván es cofundador y director editorial de SG Software Guru.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Sat, 02 Jul 2016 17:57:06 +0000 sg 6532 at https://sg.com.mx https://sg.com.mx/revista/51/hola-mundo-iot#comments Guía para Makers Primerizos https://sg.com.mx/revista/49/guia-para-makers-primerizos <span class="field field--name-title field--type-string field--label-hidden">Guía para Makers Primerizos</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/zonamaker-1.jpg" width="600" height="600" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Tue, 12/22/2015 - 18:08</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/49" hreflang="und">SG #49</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/buzz/seccion-revista/maker-zone" hreflang="und">Maker Zone</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/andres-sabas" hreflang="und">Andrés Sabas</a></li> <li><a href="/buzz/autores-sg/pedro-gonzalez" hreflang="und">Pedro A. Gonzalez</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Desde hace tiempo&nbsp;tienes pendiente entrarle al “mundo maker” pero no estás seguro de qué herramientas y accesorios necesitas tener para iniciar, y la variedad existente intimida más de lo que ayuda. No te preocupes, sabemos cómo te sientes y estamos aquí para ayudarte.</p><p>Debemos aclarar que saber electrónica no implica ser maker, hay makers de distintas áreas como carpintería, metal o biología, para ser maker no es necesario saber manejar electrónica pero ayudará mucho a que tus proyectos se vean más vistosos y tengan nuevas funcionalidades.</p><h3>Microcontroladores y tabletas (boards)</h3><p>Un componente esencial de un proyecto es una tableta con microcontrolador. El microcontrolador es el cerebro de nuestro proyecto que programamos para lograr el comportamiento deseado.</p><p><strong>Arduino</strong>.&nbsp;Las tabletas Arduino son la referencia del mundo maker por su facilidad de uso, bajo costo y amplio ecosistema. El modelo más popular es la tableta Arduino UNO (ver figura 1), que utiliza un microcontrolador ATmega328P que opera a una frecuencia de 16 MHz e incluye 32KB de memoria. Sí, como te podrás dar cuenta, no es un procesador muy poderoso, pero es más que suficiente para la mayoría de los proyectos (por ejemplo: detectar la señal de un sensor y disparar una acción). Cabe mencionar que estos son microcontroladores que se programan directamente, es decir que no ejecutan un sistema operativo (a excepción de modelos específicos como el Yun).</p><p>A raíz de su éxito, se han diseñado distintos modelos de tabletas Arduino para atender necesidades específicas. Algunas de las más conocidas son:</p><ul><li>Mega: hermano mayor del Arduino UNO. Cuenta con un mayor número de entradas y salidas digitales, analógicas y puertos de comunicación.</li><li>Lilipad: una edición creada en exclusiva para wearables, su forma es circular y tiene conectores especialmente diseñados para hilo conductivo. La tienda Adafruit cuenta con una versión similar llamada FLORA que ya tiene un adaptador para baterías recargables y pequeñas. Es excelente para colocarlo en gorras, playeras o zapatos.</li><li>Yun: versión diseñada para escenarios de internet de las cosas. Incluye nativamente comunicación WiFi, puerto USB OTG para conectar dispositivos USB, un puerto ethernet y un sistema embebido Linux en el que puedes almacenar una página web y datos de sensores o actuadores.</li><li>101: la más reciente creación de Arduino en conjunto con Intel. Utiliza un sistema en chip Quark de 32-bit (“Intel Curie”) que le da bastante poder con un bajo uso de energía. Además incluye conectividad Bluetooth 4.0, acelerómetro de 6 ejes, circuito de carga de baterías y procesador de señales.</li><li>Nano: una versión más pequeña del Arduino UNO, cuenta con prácticamente las mismas características que éste pero es mucho más pequeño lo que permite desarrollar proyectos a una menor escala.</li><li>ATTiny85: ideal para la miniaturización de proyectos, el ATTiny85 es un microcontrolador del tamaño de una uña, comparable con el circuito integrado 555 por sus 8 patillas.</li></ul><p>Dado que Arduino es hardware abierto, es posible comprar tabletas similares hechas por distintos fabricantes. No es que sean copias “piratas”, sino que simplemente cada fabricante puede hacer su propia implementación, siempre y cuando respete las especificaciones del hardware y de uso de la marca Arduino.</p><p>Dependiendo del modelo y fabricante, una tableta Arduino típicamente se puede adquirir por entre 10 y 40 dólares.</p><p><strong>Raspberry Pi</strong>. Otro producto con gran popularidad es la Raspberry Pi. A diferencia de Arduino, que es un “single-board microcontroller”, Raspberry Pi es un “single-board computer”, es decir una computadora completa (con procesador, memoria, almacenamiento, soporte para monitor externo, entrada para teclado y mouse, etcétera) integrada en una tableta casi del tamaño de una tarjeta de crédito. Cuenta con procesador de hasta 1 GHz y hasta 1GB de RAM de capacidad, así que no es tan poderosa como tu computadora personal, pero sí tiene el poder suficiente para correr versiones optimizadas de Linux y funcionar como servidor de propósito específico. Otra diferencia de Raspberry Pi con tu computadora personal es que tienes a tu disposición sus pines digitales (GPIO) para controlar leds, motores, sensores y comunicarte con otros dispositivos usando los programas que regularmente encuentras en tu computadora con Linux. Actualmente existen tres modelos:</p><ul><li>B+: cuenta con un procesador a 700MHz y 512MB en RAM. Tiene un precio de lista en Estados Unidos de 30 dólares y en México se puede conseguir por alrededor de 800 pesos.</li><li>Pi 2: el modelo más poderoso, con procesador Dual Core a 1GHz y 1GB de RAM. 40 dolaritos en EUA o alrededor de 900 pesos en tiendas locales.</li><li>Zero: el modelo más reciente, compacto y económico. Procesador a 1GHz y 512MB en RAM, puerto mini USB y mini HDMI. Su tamaño es tal que la puedes llevar en tu bolsillo o de llavero. Pero lo mejor es su precio, tan solo 5 dólares. Viene para hacer realidad que todos tengamos una computadora en nuestro bolsillo.</li></ul><p>La Raspberry Pi es ideal para montar centros de entretenimiento, así como servidores con Asterisk o NodeJS. Otro uso común es en kioscos o computadoras de propósito específico.</p><p>Dada la popularidad tanto de Arduino como de Raspberry Pi, es común encontrarse con la pregunta ¿cuál es mejor? o ¿cuál debo usar para empezar? La respuesta es que no hay punto de comparación, ya que Arduino UNO es un microcontrolador de 8 bits enfocado a funciones sencillas y de bajo consumo de energía, mientras que Raspberry Pi es una computadora completa con sistema operativo. No se pueden comparar porque no tienen las mismas funciones, al contrario se complementan y podrás encontrar varios proyectos en la red donde se usan ambas.</p><p><strong>Intel Edison</strong>.&nbsp;Otro producto notable es Intel Edison, un módulo de cómputo miniatura (alrededor de una estampilla postal) que contiene un procesador Atom dual core a 500MHz, 1GB de RAM y 4GB de memoria flash, conectividad WiFi y Bluetooth 4, USB OTG y 40 pines GPIO. Dado que solo es un módulo de cómputo, es necesario empotrarlo en una tarjeta (breakout board) para poder darle energía e interacción con periféricos. Edison es compatible con Arduino por lo que puedes programarlo con el mismo IDE, y utilizar los mismos periféricos.</p><p><strong>ESP8266</strong>.&nbsp;Es un “system-on-a-chip” para conectividad WiFi (802.11 b/g/n). Su gran atractivo es su precio, de tan solo 7 dólares. También es compatible con Arduino así que puede integrarse fácilmente con tabletas y periféricos para este sistema. Se puede utilizar en escenarios stand-alone o como módulo auxiliar para brindar conectividad WiFi a otros dispositivos.</p><h3>Periféricos</h3><p>Ya vimos qué necesitamos para construir el cerebro y cuerpo de nuestra creación, pero ahora necesitamos que pueda interactuar con el exterior.</p><p><strong>Sensores</strong>.&nbsp;Los sensores son pequeños dispositivos que dotan de “sentidos” a nuestras creaciones para que puedan ver, escuchar, sentir y medir lo que sucede en el mundo físico.&nbsp;Entre los sensores más comunes están los de temperatura, luz, movimiento (acelerómetro), ubicación (GPS), peso, humedad, gas, fuego, acidez, etcétera. Los sensores pueden ser digitales (la señal que entregan es 1s y 0s) o analógicos. La mayoría tienen librerías para controlarlos de manera sencilla.</p><p><strong>Actuadores</strong>.&nbsp;Una vez que nuestra creación conoce el entorno que lo rodea por medio de los sensores, típicamente queremos realizar alguna actividad dependiendo de ciertos eventos. Por ejemplo, “si se elevó la temperatura entonces activa un ventilador”, “si hay demasiada humedad entonces enciende el foco”. Modificamos nuestro entorno por medio de actuadores que son los “brazos” de nuestra creación. Algunos de los más comunes son: LEDs, pantallas LCD, motores (servomotores, motores a pasos, brushless o de corriente directa), relevadores, ventiladores, timbres (buzzer). Existe una gran variedad de actuadores, pero ten cuidado porque algunos no se pueden conectar directamente a tu tarjeta y tendrás que usar algun circuito de control o acoplamiento para no dañar el circuito. Siempre lee antes la documentación de tu sensor o actuador.</p><p><strong>Shields</strong>.&nbsp;Si soldar cables no es tu fuerte, no temas. La comunidad ha desarrollado para Arduino lo que se llaman shields, que son módulos compatibles con Arduino que se conectan fácilmente y expanden sus funcionalidades. En el mercado hay una gran cantidad de shields compatibles con Arduino que fácilmente dan capacidades como: GPS, Ethernet, WiFi, motores, comunicación por red celular.</p><p><strong>HATs</strong>.&nbsp;Los hats (sombreros) son como los shields pero para Raspberry Pi. Se pueden encontrar en dos variedades: con memoria o sin memoria. Los que tienen memoria permiten que la Raspberry Pi reconozca por medio de device tree el tipo de HAT que es, el fabricante, configuración inicial e información adicional para facilitar su interoperación.</p><p><strong>Fuentes</strong>.&nbsp;Nuestras creaciones requieren energía para operar. Existen distintas opciones dependiendo de las necesidades. Para proyectos que pueden estar en un lugar fijo y tienen acceso a una toma de corriente, se puede usar una fuente con un adaptador que típicamente alimenta a nuestra tableta por medio de un puerto microUSB o una entrada dedicada para energía; solo hay que tener cuidado de que el voltaje sea el adecuado y que puede entregar el amperaje requerido. Para proyectos portátiles típicamente se utilizan baterías; solo ten cuidado porque algunas son flamables e incluso puede llegar a explotar. Un buen maker también busca reciclar baterías existentes de otros dispositivos que ya no se utilicen, como tabletas, celulares y laptops; solo ten mucho cuidado al experimentar y fíjate bien en las especificaciones. En internet puedes encontrar cargadores genéricos para cargar baterias LiPo. Otra posibilidad más es la de utilizar celdas solares; también se pueden usar en complemento con baterías.</p><p><strong>littleBits</strong>. Si tienes miedo a todo lo mencionado anteriormente, o estás buscando algo para los más pequeños de la familia, litteBits puede ser una excelente opción (ver figura 5). Estos pequeños bloques electrónicos incluyen imanes para simplificar al máximo la conexión de componentes (no queremos que tu primera experiencia sea un corto). Hay bloques con sensores, motores, leds e incluso de Arduino, todos lo módulos son open source y la compañía ya cuenta con una gran comunidad que está generando tutoriales de como iniciar y crear cosas geniales.</p><h3>Lenguajes y herramientas de programación</h3><p>¿Qué lenguajes y herramientas utilizamos para programar? A continuación listo las principales opciones.</p><p><strong>C</strong>.&nbsp;El lenguaje C es la base de la programación para sistemas embebidos debido a su alto desempeño y eficiencia, además de que permite llegar a bajo nivel para acceder al hardware.</p><p><strong>IDE Arduino</strong>.&nbsp;No es un lenguaje de programación como tal, pero es una excelente opción para nuevos makers. El lenguaje que utiliza se llama Processing, y es muy similar a C pero más sencillo. Es software libre, multiplataforma y tiene un gran soporte por la comunidad.</p><p><strong>Python</strong>.&nbsp;Es un lenguaje excelente para enseñar a programar por su limpia sintaxis. La mayoría de los ejemplos y librerías de Raspberry Pi utilizan este lenguaje por default.</p><p><strong>Javascript</strong>.&nbsp;Hoy en día encontramos javascript en todos lados, incluyendo los dispositivos embebidos. Esto se logra por medio herramientas como johnny five o directamente podemos utilizarlo en sistemas con sistema operativo Linux con nodejs con bibliotecas como MRAA que soporta tarjetas como Intel Edison, Galileo, Banana Pi, Beagle Bone o Raspberry Pi, si eres programador de web esto te facilitará la curva de aprendizaje y es una buena opción para iniciar.</p><p><strong>Scratch</strong>.&nbsp;Es un ambiente de programación visual con bloques creado para enseñar a los niños la logica de programacion con una interfaz divertida. Tiene soporte oficial en Raspberry Pi y hay herramientas para adaptarlo a Arduino.</p><p><strong>TouchOSC</strong>.&nbsp;Es una aplicación que trabaja con el protocolo OSC (Open Sound Control). Este protocolo permite la comunicación por WiFi entre dispositivos como Arduino, Raspberry Pi, BeagleBone o incluso con la computadora, por medio de un smartphone o tablet. Ideal para el control de carritos, drones, robots, leds, secuencias, etcétera. Si buscas integrarlo con Arduino, busca información en la web sobre cómo hacer esto con una aplicación en Processing; necesitarás la librería osc5, que puedes encontrar fácilmente en internet. La conexión con Raspberry Pi es más sencilla, pero requiere saber programar en Python y usar el módulo pyOSC.</p><p><strong>Processing</strong>.&nbsp;Para proyectos que requieren de interfaces controladas desde la computadora, te lo recomiendo. Su IDE es sumamente parecido al IDE de Arduino por lo que no te será muy complicado de entender. Para el control de dispositivos se requiere de una librería llamada controlP5, que también puedes encontrar muy fácil en internet. Como nota adicional, existe un protocolo llamado Firmata, el cual puedes cargar a tu tableta desde el IDE de Arduino y te servirá para controlar tu Arduino desde Processing.</p><h3>Donde comprar</h3><p>Algunas tiendas geniales con productos para tus proyectos, tutoriales, buen soporte y que hacen envíos a México, son:</p><ul><li>330 ohms (México)</li><li>5Hertz (México)</li><li>Talos Electronics (México)</li><li>Banshee (México)</li><li>Adafruit (EUA)</li><li>SparkFun (EUA)</li><li>SeedStudio (China)</li></ul><p>Por último, si tienes dudas acércate a tu hackerspace o makerspace más cercano. Vía internet también puedes hacerlo a través del grupo de facebook “Makers México” donde encontrarás una gran comunidad con gente dispuesta a ayudarte, e información sobre eventos y charlas relacionadas al DIY.</p><p>¡Hasta la proxima, makers!</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Andrés Sabas (@sabasacustico) es un maker apasionado y cofundador de The Inventor’s House Hackerspace y Coworking en Aguascalientes.</p><p>Pedro A. González (<a href="https://twitter.com/piridoxina/" rel="user" target="_blank" data-user-name="piridoxina">@piridoxina</a>) es un Ing en Mecatrónica, entusiasta del desarrollo de sistemas open hardware y miembro activo de la comunidad tecnológica Tequila Valley Cancún.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Wed, 23 Dec 2015 00:08:00 +0000 sg 6210 at https://sg.com.mx https://sg.com.mx/revista/49/guia-para-makers-primerizos#comments Generación de Mapas de Alta Resolución con Drones https://sg.com.mx/revista/47/generacion-mapas-alta-resolucion-drones <span class="field field--name-title field--type-string field--label-hidden">Generación de Mapas de Alta Resolución con Drones</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/dron-fig1.png" width="1420" height="800" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 05/22/2015 - 15:41</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/47" hreflang="und">SG #47</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/buzz/seccion-revista/maker-zone" hreflang="und">Maker Zone</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores-sg/quauhtli-martinez" hreflang="und">Quauhtli Martínez</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr">El campo de los vehículos aéreos no tripulados, conocidos como drones, ha cobrado gran interés en los últimos años. Una aplicación común de los drones es la Ortofotografía, es decir la generación de mapas digitales. Tradicionalmente, estos mapas se han generado utilizando avionetas, globos aeroestáticos, y satélites. Sin embargo, hoy en día es perfectamente factible hacer esto con drones, con un costo mucho menor que las opciones anteriores.</p><h3 dir="ltr">Componentes de un dron</h3><p dir="ltr">Antes de entrar en detalle, es importante dar a conocer cómo está construido un dron comercial. A grandes rasgos, un dron consta de los siguientes componentes:</p><ul><li dir="ltr"><p dir="ltr">Motores.</p></li><li dir="ltr"><p dir="ltr">Carcaza (frame).</p></li><li dir="ltr"><p dir="ltr">Hélices (propellers).</p></li><li dir="ltr"><p dir="ltr">Distribuidores de corriente eléctrica (Power Board).</p></li><li dir="ltr"><p dir="ltr">Controladores de velocidad (Electronic Speed Controls).</p></li><li dir="ltr"><p dir="ltr">Radio transmisores/receptores por Radio Frecuencia.</p></li><li dir="ltr"><p dir="ltr">Controlador de Vuelo (Flight Controller) con puertos de entrada y salida para conectar los diferentes dispositivos.</p></li><li dir="ltr"><p dir="ltr">Baterías y sus respectivos cargadores.</p></li></ul><p dir="ltr">Adicionalmente, existe una gran cantidad de componentes opciones para tareas específicas, tales como sensores de diversos tipos (posicionamiento, temperatura, presión, etcétera), cámaras, pinzas electromecánicas, sistemas de telemetría, por mencionar algunos.</p><h3 dir="ltr">Caso de estudio</h3><p dir="ltr">En el presente caso de estudio se utilizó un dron tipo “cuadricóptero”, con un controlador de vuelo (“Pixhawk”) con capacidad de ejecutar vuelos autónomos a través de coordenadas geo-referenciadas vía GPS. Las imágenes se capturaron con una cámara Canon S100 modificada (vía software) que guarda la latitud, longitud y altura del punto geográfico donde fue tomada cada fotografía. La cámara se instaló en el cuadricóptero utilizando un soporte especial diseñado e impreso a la medida mediante una impresora 3D. La figura 1 muestra el dron utilizado, el objeto azúl en la parte inferior del dron es el montaje con la cámara, cuyo detalle se muestra en el recuadro.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig1.jpg" alt="" width="700" height="394" /></p><p dir="ltr">Figura 1. Dron con montaje de cámara.</p><p dir="ltr">El área de vuelo corresponde a un parque público en construcción en la ciudad de Navojoa, Sonora.</p><p dir="ltr">El procedimiento utilizado para la obtención de la ortoimagen y del modelo tridimensional del parque en construcción contó con cinco etapas:</p><ol><li dir="ltr"><p dir="ltr">Inspección física del espacio a volar.</p></li><li dir="ltr"><p dir="ltr">Planeación y diseño de vuelo y parámetros de fotografía</p></li><li dir="ltr"><p dir="ltr">Ejecución del vuelo y captura de imágenes aérea</p></li><li dir="ltr"><p dir="ltr">Procesamiento de imágenes y validación de la calidad</p></li><li dir="ltr"><p dir="ltr">Generación del modelo tridimensional y análisis.</p></li></ol><h3 dir="ltr">Inspección física del espacio a volar</h3><p dir="ltr">En la primera etapa se realizó la inspección física del espacio a volar con el objetivo de identificar elementos físicos que pudieran causar una interrupción no deseada al vuelo del dron, por ejemplo, árboles muy altos, antenas, fuentes de electromagnetismo, edificios, etcétera.</p><p dir="ltr">Con esta inspección fue posible detectar una antena cuya altura llegaba hasta los 30 metros de altura, parámetro que se utilizó como base para programar posteriormente el vuelo del dron a una altura de 40 metros para estar siempre por encima de la antena.</p><h3 dir="ltr">Planeación y diseño de vuelo</h3><p dir="ltr">Una vez realizada la inspección física, se llevó a cabo la planeación y el diseño del vuelo, así como la configuración de los parámetros de fotografía, los cuales son adaptados a las distintas condiciones del plan de vuelo, por ejemplo: la superficie a cubrir (que afecta a la rapidez con la que se deben tomar las fotografías), la velocidad de vuelo, la luz del día del vuelo (que afecta a los parámetros del obturador de la cámara), entre otros.</p><p dir="ltr">Para esta fase, se utilizó una aplicación compatible con el controlador de vuelo del dron, esta aplicación se conoce como “Mission Planner”, es de código abierto y está disponible para la comunidad interesada. &nbsp;Dadas las restricciones del tiempo de vuelo por batería del dron (10-15 a quince minutos por cada carga), la zona de vuelo que consta de un perímetro aproximado de 313 metros x 190 metros se dividió en dos partes para poder hacer un intercambio de baterías una vez terminada la primera parte del vuelo.</p><p dir="ltr">Para ambas secciones, se programó un vuelo autónomo a 40 metros de altura. La velocidad se ajustó a 5 metros por segundo y se utilizó un intervalómetro en la cámara (vía un script enviado a la cámara a través del “Canon Hack Development Kit”) para que las imágenes se capturaran cada 3 segundos. En otros casos, es posible capturar las imágenes cada determinada distancia, en vez de un intervalómetro, para ello se utilizan cables especiales “disparadores” conectados al controlador de vuelo y a la cámara. Con estos parámetros, se buscaba obtener, en un vuelo por sección de no más de 10 minutos con un 80% de traslape en las imágenes capturadas, lo cual es un parámetro de suma importancia para producir una imagen final de calidad.</p><p dir="ltr">Los recuadros morados de la figura 2 muestran el nivel de traslape esperado en las imágenes capturadas. La intensidad del color morado refleja qué tanto traslape se espera en cada cuadro. Los cuadros con mayor traslape generan una imagen de mayor calidad, aunque necesitan mayor procesamiento para ser generados. En estas aplicaciones, 80% se considera un buen porcentaje de traslape en las imágenes.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig2.jpg" alt="" width="700" /></p><p dir="ltr">Figura 2. Nivel de traslape esperado.</p><h3 dir="ltr">Ejecución del vuelo</h3><p dir="ltr">Una vez construidos los planes de vuelo, estos fueron enviados al UAV a través del Mission Planner que comunicamos con el dron mediante un módulo de telemetría via USB que utiliza el protocolo MavLink. En estos planes de vuelo, entre otras cosas, se encontraba la trayectoria geo-referenciada de cada punto por el cual el dron debía volar.</p><p dir="ltr">Una vez que el plan se envió al dron, se ejecutó el vuelo de manera autónoma, con el intervalómetro de la cámara accionado para tomar las imágenes cada 3 segundos. Esto significaba que, una vez despegado, el dron alcanzó cada punto geo-posicionado sin necesidad de ser controlado por el piloto a través un control remoto con radio-frecuencia,</p><p dir="ltr">Se utilizó el Mission Planner para supervisar en tiempo real las condiciones del UAV durante el vuelo, así como para validar la trayectoria que seguía, entre otros datos. En la figura 3 se muestra un ejemplo de cómo se obtiene la información “en vivo” del dron en un vuelo autónomo.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig3.jpg" alt="" width="700" height="321" /></p><p dir="ltr">Figura 3. Monitoreo de captura de datos en vivo.</p><h3 dir="ltr">Procesamiento de imágenes</h3><p dir="ltr">Una vez capturadas las imágenes, se utilizó la aplicación Agisoft PhotoScan Pro para realizar el procesamiento, verificar la calidad de las imágenes adquiridas (a través de un reporte de traslape), generar el ortomapa final, así como el modelo tridimensional y la exportación de un archivo KML para alimentar a Google Earth.</p><p dir="ltr">Las imágenes individuales contaban con una resolución de 1200 x 1600 pixeles. La herramienta utilizada para el procesamiento de las imágenes reportó una resolución de 2.5 cm por pixel. Para el cálculo exacto de la relación de centímetros por pixel, existen técnicas formales más avanzadas, sin embargo, estas quedaron fuera del alcance de este caso de estudio.</p><p dir="ltr">El primer paso para la generación de la ortoimagen y del modelo tridimensional es la importación de las imágenes al software de procesamiento. Una vez hecho esto, se puede observar sobre el mapa los puntos geográficos donde fueron tomadas cada una de las fotografías tal y como se muestra en la figura 4.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig4.jpg" alt="" width="400" /></p><p dir="ltr">Figura 4. Puntos donde se tomaron las fotografías.</p><p dir="ltr">A partir de estas fotografías, la aplicación realizó un intenso procesamiento en el que “analizó” cada pixel de cada una de las imágenes capturadas en el cual encuentra similitudes y continuidades; con ello, la aplicación, crea un mosaico &nbsp;en el que queden unidas todas las fotografías en una única imagen, manteniendo la coherencia y la resolución en la imagen final (ortoimagen).</p><p dir="ltr">Para verificar la calidad de la imagen final, además de revisar ocularmente la ortoimagen generada, es posible verificar vía la herramienta el traslape de imágenes (el cual se buscó que fuera de un 80%). En la figura 5 se puede observar el nivel de traslape obtenido con las imágenes capturadas. Las áreas rojas muestran los puntos donde sólo se utilizó una imagen; y las áreas azules oscuro, más de 9 imágenes. Al tomar una muestra de cada una de las zonas se pude observar el porqué de las variaciones en el traslape: en la parte coloreada con verde intenso, se observa que el dron capturó más imágenes que en la parte de color amarillo.</p><p dir="ltr">De manera general, el porcentaje de traslape obtenido fue lo suficientemente bueno para generar una ortoimagen coherente y con calidad suficiente para realizar este estudio. Para trabajos que requieren una mayor calidad, este porcentaje de traslape probablemente no hubiese sido suficiente.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig5.jpg" alt="" width="624px;" height="460px;" /></p><p dir="ltr">Figura 5. Nivel de traslape de imágenes.</p><h3 dir="ltr">Generación de modelo tridimensional y análisis</h3><p dir="ltr">Una vez construida la ortoimagen, se generó a través de la misma herramienta el modelo tridimensional, el cual, añade volumen a los objetos de la ortoimagen. Este modelo puede ser exportado y utilizado en cualquier otra herramienta para manipulación de imágenes tridimensionaes. En este caso, se utilizó el servicio en la nube Sketchfab para que el modelo pudiera ser consultado vía web a través del siguiente sitio &nbsp;Web<a href="http://goo.gl/3oCgta"> http://goo.gl/3oCgta</a>.</p><p dir="ltr"><img src="/sites/default/files/images/stories/sg47/dron-fig6.jpg" alt="" width="624px;" height="479px;" /></p><p dir="ltr">Figura 6. Ortoimagen final.</p><h3 dir="ltr">Conclusiones</h3><p dir="ltr">Al tener una imagen geo-referenciada y un modelo tridimensional a escala, es posible utilizar estos modelos para diferentes propósitos. Por ejemplo, en la construcción y arquitectura, estas imágenes pueden ser importadas en aplicaciones tipo CAD o GIS para realizar diferentes mediciones como superficies, distancias y volúmenes, además de la posibilidad de inspeccionar visualmente el avance de la obra y detectar anomalías que, a simple vista, no podrían ser detectadas debido a la perspectiva a nivel de suelo que comúnmente se tiene. Otro ejemplo de caso de uso, sería en la conservación de sitios arqueológicos, de hecho, ya hay empresas que se dedican exclusivamente a ofrecer servicios para la arqueología utilizando drones y fotografía aérea geo-referenciada [3].</p><p dir="ltr">Por otro lado, para tener una mayor precisión en la generación de un modelo tridimensional y en una ortoimagen, es importante recalcar la importancia de la fase de captura de imágenes. En el caso estudiado en este artículo, el modelo tridimensional generado no fue lo suficientemente rico como para ser utilizado en una aplicación profesional, esto debido a que no hubo suficientes imágenes para generar los volúmenes de los objetos contenidos en la imagen con una mayor precisión, para ello es necesario fotografiar el sitio a diferentes alturas y perspectivas.</p><p dir="ltr">Finalmente, como se pudo apreciar en el artículo, el uso de drones para la construcción de ortoimágenes y modelos tridimensionales a escala, ya es algo al alcance de cualquier usuario que pueda adquirir equipo como los que se utilizaron en este estudio (2 mil dólares aproximadamente, incluyendo la cámara), siendo esto algo muy novedoso, con múltiples aplicaciones y con el potencial para generar nuevos negocios en estos momentos.</p><p dir="ltr">Referencias</p><ol><li dir="ltr"><p dir="ltr">Orto-imagen del parque.<a href="https://mangomap.com/maps/34662/Mapa-Parque-Navojoa"> https://mangomap.com/maps/34662/Mapa-Parque-Navojoa</a></p></li><li dir="ltr"><p dir="ltr">Modelo tridimensional del parque.<a href="http://goo.gl/3oCgta"> http://goo.gl/3oCgta</a></p></li><li dir="ltr"><p dir="ltr">Aerial Digital Archeology &amp; Preservation. <a href="http://dronearchaeology.com">http://dronearchaeology.com</a></p></li><li dir="ltr"><p dir="ltr">Mission Planner. <a href="http://planner.ardupilot.com/?lang=en">http://planner.ardupilot.com/?lang=en</a></p></li><li dir="ltr"><p dir="ltr">Agisoft PhotoScan. <a href="http://www.agisoft.com">http://www.agisoft.com</a></p></li><li dir="ltr"><p dir="ltr">Protocolo MavLink. <a href="http://qgroundcontrol.org/mavlink/start">http://qgroundcontrol.org/mavlink/start</a></p></li><li dir="ltr"><p dir="ltr">Controlador de vuelo PixHawk. <a href="https://pixhawk.org/">https://pixhawk.org/</a></p></li><li dir="ltr"><p dir="ltr">Canon Hack Development Kit. <a href="http://chdk.wikia.com/wiki/CHDK">http://chdk.wikia.com/wiki/CHDK</a></p></li><li dir="ltr"><p dir="ltr">KAP UAV Exposure Control Script.<a href="http://chdk.wikia.com/wiki/KAP_UAV_Exposure_Control_Script"> http://chdk.wikia.com/wiki/KAP_UAV_Exposure_Control_Script</a></p></li></ol><p dir="ltr">&nbsp;</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Quauhtli Martínez (@quauhtlimtzz) es director en SOA Software Factory y cofundador de Droneware, empresa especializada en la creación de soluciones usando drones. <a href="http://droneware.mx">http://droneware.mx</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 22 May 2015 20:41:32 +0000 sg 5871 at https://sg.com.mx https://sg.com.mx/revista/47/generacion-mapas-alta-resolucion-drones#comments