AWS IoT, Raspberry Pi 4 : Obteniendo datos de un sensor de ultrasonido en tiempo real

Luis Grados Salinas
Feb 21, 2020 · 13 min read
Image for post
Image for post
Diagrama de arquitectura de una solución IoT

Actualmente, uno de los términos que se viene escuchando es el IoT, o más conocido como el Internet de las Cosas.

Para IBM, el IoT se refiere a la creciente gama de dispositivos conectados que envían datos a través de Internet y también añade que una “cosa” es cualquier objeto con electrónica integrada que puede transferir datos a través de una red, sin ninguna interacción humana.

Se dice que este 2020 serán más de 50 mil millones de dispositivos conectados a internet.

Gartner dice que más del 40 por ciento de las organizaciones esperan que proyectos IoT transformen su negocio y ofrezcan nuevas oportunidades significativas de ingresos o ahorros de costos en los próximos tres años.

Casos de uso donde el IoT nos puede ayudar:

  • Detección de personas desconocidas (en viviendas, empresas, universidades, etc) con alertas en tiempo real.
  • Prevención de incendios con sensores de humo.
  • Desarrollo de soluciones de Digital Twins.
  • Control de las luces, el aire acondicionado desde tu celular.
  • Ahorro de electricidad al ajustar automáticamente el brillo de las luces de las calles en función de la presencia de automóviles y peatones.
  • Desarrollo de soluciones de Smart Cities.
  • Notificar automáticamente cuando es hora de tomar medicamentos o cuando el paciente omite la dosis.
  • Transmisión de la biometría del rendimiento atlético, como la frecuencia cardíaca, la intensidad del movimiento y la producción de energía de las personas al realizar deporte.
  • Monitoreo en tiempo real de máquinas para saber si algún componente presenta un desperfecto.
  • Monitoreo de llenado y peso de contenedores de residuos urbanos.
  • Monitoreo de la ubicación de tu bicicleta si es que te gusta el ciclismo.
  • Detección del nivel de la humedad del suelo, para activar el sistema de riesgo en un cultivo.
  • Detección de gases, humo, polvo, etc.
  • Etc.

Como bien hemos enumerado, existen múltiples casos de uso donde el IoT puede ayudarnos.

En este breve post, explicaremos como realizar una solución IoT que obtenga los datos de un sensor de ultrasonido (HC-SR04) conectado a una Raspberry, que a su vez envía datos a AWS IoT, y los datos ya estando en AWS, se puedan analizar (Kinesis Data Analytics) los valores medidos por el sensor y de acuerdo a un valor específico se pueda notificar por correo y SMS (SNS) y registrar los datos en una tabla en DynamoDB.

Para hacerlo un poco más dinámico y divertido lo que se realizará es obtener los datos del sensor de ultrasonido, de acuerdo a la distancia (en cm) en la que se encuentra un funko de Forrest Gump a la meta (pensemos que a Forrest lo han mandado a una maratón), cabe destacar que este sensor estará midiendo la distancia cada 2 segundos, y una vez que llegue a la meta dejará de enviar los datos a AWS IoT.

Image for post
Image for post
Obtención de la distancia en cm entre Forrest Gump y la meta con el sensor de ultrasonido.
Image for post
Image for post
Funko de Forrest Gump llegando a la meta

Para esta solución se ha empleado lo siguiente:

  1. Raspberry Pi 4 Modelo B

Es uno de los ordenadores más básicos que podemos encontrar, también uno de los más vendidos de toda la historia informática. Su atractivo precio ha hecho que se vendan millones y millones de unidades generación tras generación.

La Raspberry con la que se va a trabajar ya tiene instalado el SO Raspbian dentro de la memoria micro SD.

Image for post
Image for post
Raspberry PI 4 Modelo B

2. Sensor de ultrasonido HC-SR04

Es un sensor de distancia de bajo costo que utiliza ultrasonido para determinar la distancia de un objeto en un rango de 2 a 400 cm. Destaca por su pequeño tamaño, bajo consumo energético, buena precisión y excelente precio. El sensor HC-SR04 es el más utilizado dentro de los sensores de tipo ultrasonido, principalmente por la cantidad de información y proyectos disponibles en la web.

Este sensor consta de 4 pines, alimentación (Vcc), un disparador (Trig), el receptor (Echo) y masa (GND). Para el correcto funcionamiento del sensor es necesario el conectar estos 4 pines.

Image for post
Image for post
Sensor de ultrasonido HC-SR04

Las características básicas de este sensor son las siguientes:

Image for post
Image for post

¿Cómo funciona este sensor?

El principio en el que se basa su funcionamiento es muy sencillo, tan solo hay que generar una onda sónica en el emisor mediante un pulso en la patilla que pone “trig” (trigger o disparador), esta onda al encontrarse con algún obstáculo rebotará, volviendo al sensor y siendo registrada por el receptor, traduciéndose esta en un pulso en la patilla “Echo”.

Image for post
Image for post

Con esto podemos hacer dos cosas, detectar un obstáculo esperando simplemente que la Raspberry reciba un “Echo” o contar el tiempo que transcurre desde que se manda el pulso por el trigger hasta que se recibe, de esta forma, y conociendo cual es la velocidad del sonido, podemos determinar de forma muy sencilla la distancia exacta a la que se encuentra el objeto en el que esta rebotando la señal.

3. Servicios de AWS

3.1. AWS IoT

Es una plataforma que permite conectar dispositivos a servicios de AWS y a otros dispositivos, proteger datos e interacciones, procesar y actuar sobre datos de dispositivos y habilitar las aplicaciones para que interactúen con dispositivos aunque no estén conectados.

En este caso lo usaremos para poder enviar los datos obtenidos del sensor de ultrasonido mediante el protocolo MQTT.

3.2. Kinesis Data Streams

Es un servicio de streaming de datos en tiempo real con un alto nivel de escalabilidad y durabilidad. KDS puede registrar de manera continua gigabytes de datos por segundo de cientos de miles de orígenes, como transmisiones de clics de sitios web, transmisiones de eventos de bases de datos, transacciones financieras, etc.

Los datos recopilados se encuentran disponibles en milisegundos para posibilitar los casos de uso de análisis en tiempo real, como paneles en tiempo real, detección de anomalías en tiempo real y precios dinámicos, entre otros.

En este caso se usará Kinesis Data Streams para recibir los datos que envía AWS IoT luego de haber leído los datos del sensor desde la Raspberry.

3.3. Kinesis Data Analytics

Es un servicio que te permite analizar datos de streaming, obtener información procesable y atender las necesidades de los clientes y su negocio en tiempo real. Amazon Kinesis Data Analytics reduce la complejidad de construir, administrar e integrar las aplicaciones de streaming con otros servicios de AWS. Puede escribir rápidamente consultas SQL.

Para esta solución, usaremos también Kinesis Data Analyitics que recibirá los datos que se ingesten en Kinesis Data Streams, y de acuerdo a una consulta con un filtro SQL generará una salida para ingestar a otro stream de KDS.

Image for post
Image for post

3.4. Lambda

Es un servicio de informática sin servidor que ejecuta código en respuesta a eventos y administra automáticamente los recursos informáticos subyacentes.

Lambda ejecuta el código en una infraestructura informática de alta disponibilidad y se encarga de la administración integral de los recursos informáticos, con Lambda solo pagas cuando tu código se ejecute, lo cual lo hace eficiente a la hora de reducir costos.

En este caso usaremos una función Lambda que leerá los datos registrados en el segundo stream (output) de Kinesis Data Streams, luego insertará un ítem en DynamoDB y enviará una notificación por correo y SMS mediante SNS indicando que Forrest Gump llegó a la meta.

3.5. DynamoDB

Es un servicio flexible de bases de datos no relacionales para cualquier escala. DynamoDB permite a los clientes evitar la carga administrativa que supone tener que utilizar y escalar bases de datos distribuidas, de lo que pasa a encargarse AWS. De esta manera, no tienen que preocuparse del aprovisionamiento, la instalación ni la configuración del hardware, ni tampoco de la planificación de la capacidad de procesamiento, la replicación, los parches del software o el escalado de clústeres.

Usaremos una tabla en DynamoDB para grabar los datos de la llegada de Forrest Gump.

3.6. SNS

Es un servicio de mensajería de publicación/suscripción completamente administrada, de alta disponibilidad, seguro y con durabilidad que permite desacoplar microservicios, sistemas distribuidos y aplicaciones sin servidor.

SNS lo usaremos para enviar notificaciones por correo y SMS cuando Forrest Gump haya llegado a la meta.

3.7. CloudWatch

Es un servicio de monitorización y observación creado para ingenieros de DevOps, desarrolladores, ingenieros de fiabilidad de sitio (SRE) y administradores de TI. Es importante considerar el uso de CloudWatch para el monitoreo de toda la solución.

Implementando la solución IoT

a. Integración entre el sensor de ultrasonido y la Raspberry

Para iniciar con el desarrollo de esta solución IoT, primero debemos realizar la conexión del sensor de ultrasonido con la Raspberry Pi 4B.

Para esto usaremos:

  • Protoboard
  • Resistencia de 1K Ω
  • Resistencia de 2K Ω
  • Cables macho-macho y macho-hembra

La conexión que se debe realizar es la siguiente, la resistencia que está en forma vertical es de 1K Ω y la de forma horizontal es de 2K Ω.

Image for post
Image for post
Diagrama realizado en el software Fritzing.
Image for post
Image for post
Integración física entre la Raspberry Pi 4B y el sensor de ultrasonido

b. Uso de los servicios de AWS

Luego, accedemos a la consola de AWS, e ingresamos al servicio de AWS IoT.

Los dispositivos conectados a AWS IoT están representados por objetos de IoT en el registro de AWS IoT. El registro le permite mantener un registro de todos los dispositivos que están registrados a su cuenta de AWS IoT.

Image for post
Image for post

En este caso necesitamos registrar la Raspberry en AWS IoT para que pueda enviar los datos obtenidos por el sensor de ultrasonido.

Clic en Administración -> Objetos -> Crear

Aparecerá la siguiente pantalla, clic en Crear un solo objeto

Image for post
Image for post

Nos aparece la siguiente pantalla, le damos clic en Siguiente:

Image for post
Image for post

Clic en Crear un certificado, esto generará un certificado X.509 y un par de claves.

Image for post
Image for post

Los certificados se han generado, descargar los 3 archivos.

Elija Descargar para la CA raíz de Amazon. Se muestra una nueva página web. Elija RSA 2048 bit key: Amazon Root CA 1 (Clave RSA de 2048 bits: Amazon Root CA 1). Se abrirá otra página web; elija CA Certificates for Service Authentication (Certificados de CA para autenticación del servicio). En la siguiente página web, seleccione Amazon Root CA 1 (CA 1 raíz de Amazon) para mostrar una página con el texto del certificado de CA raíz. Copie este texto y péguelo en un archivo denominado Amazon_Root_CA_1.pem.

Todos estos archivos subirlos a la Raspberry.

Clic en Activar y siguiente.

Image for post
Image for post

Ahora crearemos una política en AWS IoT.

Image for post
Image for post

Agregamos los siguientes valores a la política y clic en Crear.

Image for post
Image for post

Añadimos la política al certificado.

Image for post
Image for post

Asociamos la política que hemos creado.

Image for post
Image for post

Seleccionamos la política y clic en Asociar.

Image for post
Image for post

Ahora nos vamos al servicio de Kinesis Data Streams para crear dos streams, ambos stream solo deben tener 1 shard, para evitar cobros indebidos.

El primer stream (input-stream-forrest) recibirá los datos que envíe el servicio de AWS IoT.

El segundo stream (output-stream-forrest) recibirá los datos que Kinesis Data Analytics filtre de acuerdo a una condición SQL.

Image for post
Image for post

Regresamos al servicio de AWS IoT, para añadir una regla que enviará los datos recbidos del sensor al primer stream input-stream-forrest.

Clic en Actuar -> Reglas -> Crear

Image for post
Image for post

Definir un nombre para la regla.

Image for post
Image for post

En Instrucción de consulta de regla, escribir lo siguiente:

SELECT * FROM ‘raspi4/forrest’

Luego clic en Añadir acción.

Image for post
Image for post

Seleccionar la opción: Envía mensajes a un flujo de Amazon Kinesis y clic en Configurar acción.

Image for post
Image for post

Seleccionamos el stream input-stream-forrest, en el campo Clave de partición: ${newuuid()} y elegimos una política, sino existe la creamos, clic en Añadir.

Image for post
Image for post

Subir el archivo python ReadSensorForrest.py al nivel donde se subieron los certificados.

Lo dejamos ejecutando, para configurar el siguiente paso de la solución.

Image for post
Image for post

Nos dirigimos al servicio de Kinesis Data Analytics, para crear una aplicación.

El nombre de la app puede llamarse: app-analytics-forrest, clic en Crear aplicación.

Image for post
Image for post

Clic en Connect streaming data.

Image for post
Image for post

Elegimos el primer stream input-stream-forrest.

Image for post
Image for post

Clic en Discover schema.

Image for post
Image for post

Aparecerán los valores obtenidos desde la Raspberry que se integra con el sensor. Clic en Save and continue.

Image for post
Image for post

Clic en Go to SQL editor y clic en Yes, start application.

Image for post
Image for post

Pegar el siguiente script sql:

CREATE OR REPLACE STREAM “DESTINATION_SQL_STREAM” (
“value_sensor” DOUBLE,
“date_reg” TIMESTAMP,
“name” varchar(20));

CREATE OR REPLACE PUMP “OUTPUT_PUMP” AS INSERT INTO “DESTINATION_SQL_STREAM”
SELECT STREAM “value_sensor”,”date_reg”,”name” FROM “SOURCE_SQL_STREAM_001” where “value_sensor” < 5
WINDOW FIVE_SECOND_SLIDING_WINDOW AS (RANGE INTERVAL ‘5’ SECOND PRECEDING);

Lo que hace este script cada 5 segundos, obtiene los datos del stream input-stream-forrest, y filtra si hay un valor menos de 5, en este caso solo filtra cuando se haya llegado a la meta.

Clic en Save and run SQL, clic en Destination.

Image for post
Image for post

Seleccionar Kinesis data stream y elegir el streams output-stream-forrest y clic en Save and continue.

Image for post
Image for post

Ahora crearemos una función Lambda que obtenga los datos que se registren en el segundo stream output-stream-forrest.

La función puede llamarse (opcional): ReadKinesisForrest

Con el lenguaje de programación : Python 3.7

Image for post
Image for post

Agregar un desencadenador a la función Lambda para que se ejecute automáticamente, clic en Añadir desencadenador.

  • Servicio : Kinesis,
  • Flujo de Kinesis : output-stream-forrest
  • Consumidor : Sin consumidor
  • Tamaño del lote : 100
  • Intervalo del lote : 0
Image for post
Image for post

Editar el las políticas asociadas al rol de la función Lambda, reemplazarla por contenido del archivo policy-lambda.json.

En la línea 11 y 27 reemplazar las XXXXXXXXXXXX por el id de cuenta.

Crearemos una tabla en DynamoDB llamada maratonforrest con la principal id de tipo Cadena.

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Ahora, crearemos un tema en SNS llamado SnsTopicForrest.

Image for post
Image for post

Escribir el nombre del tema y clic en Crear un tema.

Copiar el ARN del tema en un notepad, pues lo usaremos en un momento.

Image for post
Image for post

Es necesario, crear una suscripción para notificar mediante correo cuando Forrest Gump haya llegado a la meta, clic en Crear una suscripción.

Image for post
Image for post

Seleccionamos en protocolo correo electrónico y en punto de enlace nuestro correo, clic en Crear una suscripción.

Image for post
Image for post

Aparecerá la siguiente pantalla.

Image for post
Image for post

Ahora necesitamos confirmar la suscripción. Entramos a nuestro correo y abrimos el correo que nos ha enviado AWS, lo confirmamos así podremos recibir mensajes de correo.

Image for post
Image for post

Y procedemos a confirmar, dando clic en Confirm suscription.

Por último volvemos a la función Lambda y pegamos el código que se encuentra en el archivo lambda.txt.

En la línea 36, agregamos nuestro ARN del tema que creamos anteriormente.

Image for post
Image for post

Al ejecutar en la Raspberry el siguiente comando:

python3 ReadSensorForrest.py

Image for post
Image for post

Como la distancia es menor a 5cm quiere decir que se llegó a la meta, también hemos recibido un correo electrónico y un SMS.

Image for post
Image for post

El SMS es el siguiente:

Image for post
Image for post

Verificamos si se agregó un ítem en la tabla maratonforrest en DynamoDB.

Image for post
Image for post

IMPORTANTE: Al finalizar esta solución, eliminar los stream de Kinesis Data Streams, la aplicación de Kinesis Data Analytics y la tabla maratonforrest en DynamoDB, esto es para que AWS no nos cobre.

En un próximo post realizaré una nueva solución IoT, usando los servicios que ofrece Google Cloud Platform.

Si te pareció interesante este post, puedes compartirlo.

#aws #iot #realtime #iot #Raspberry Pi

Disruptiva by DataHack Formation

Compartiendo conocimiento en #Data #Analytics #Cloud en español

Sign up for Data Padawan

By Disruptiva by DataHack Formation

Sigue aprendiendo sobre Data, Analytics y Cloud y lo mejor ¡En nuestro idioma! Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Luis Grados Salinas

Written by

#aws #bigdata #cloud #serverless #gcp https://www.linkedin.com/in/luisgrados

Disruptiva by DataHack Formation

Escribimos con ❤️ desde LATAM sobre Analytics, Cloud, Data y Machine Learning en nuestro idioma. Aprende, certifícate y trabaja en proyectos de Data y Analytics en Cloud, empieza en https://fb.com/datahackformation

Luis Grados Salinas

Written by

#aws #bigdata #cloud #serverless #gcp https://www.linkedin.com/in/luisgrados

Disruptiva by DataHack Formation

Escribimos con ❤️ desde LATAM sobre Analytics, Cloud, Data y Machine Learning en nuestro idioma. Aprende, certifícate y trabaja en proyectos de Data y Analytics en Cloud, empieza en https://fb.com/datahackformation

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store