Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
INSTITUTO POLITÉCNICO NACIONAL Unidad Profesional Interdisciplinaria de ingeniería campus coahuila DISEÑO DE SISTEMAS DIGITALES Tercer semestre de IIA grupo 01 Profesor: Jesus Alvares Proyecto: Conectar Luces Led a un Asistente virtual Equipo 3: ● GLORIA ARISBETH ALVARADO GUZMAN ● ÁNGEL DEHESA NIEVES ● IBRAHIM ABRAHAM HERNANDEZ LUCIO ● DIEGO OMAR MATIAS CRUZ ● DANIELA MENDOZA BEDOLLA ● SABRINA MICHAUS GUTIERREZ Introducción Este proyecto tiene como objetivo conectar una placa Arduino a una Alexa Smart Home. Esto se hace usando una Alexa Smart Home y un Arduino registrado con IoT Thing. En el siguiente diagrama, puede ver todas las partes principales de este proyecto involucradas en encender la luz. Donde en este documento hablaremos de los elementos que usamos tanto físicos como instrumentos web para la elaboración, del proyecto a recrear, justificando el porqué de nuestro proyecto y analizando los materiales que ocupamos en ello, desde lo más básico que cabe en un protoboard como leds, resistencias y pulsadores, hasta elementos más complejos como la conexión NINA de nuestro Arduino. Nuestro desarrollo se basa en programar dentro de la nube Arduino IoT para lograr la conexión con la Alexa Smart Home a el Editor Web Arduino donde se visualiza la configuración que le hemos dado a nuestro arduino. Pretendemos dar la serie de instrucciones que seguimos para dar este proceso y el código con el que logramos este proceso. Desarrollo Hemos decidido dividirlo en varias partes Haremos una habilitación de hogar inteligente, crea una función Lambda y vincula estos dos juntos. Tenemos que asegurarnos de seguir los pasos de LWA para que su ID y de que se utilice la configuración de habilitación. En esta etapa, si se puede iniciar sesión en el tablero de Alexa y descubrir su nuevo dispositivo doméstico inteligente (solo una respuesta de la función Lambda), ha tenido un buen comienzo.Usaremos Python o C La siguiente parte crear una cosa de IoT Usaremos la "Sombra de cosa" de lo que crea, que es una copia del estado de una cosa, junto con los cambios deseados. El Arduino se tiene que suscribir a una fuente de notificación que publica los cambios ("delta") a esta Thing Shadow. Una vez creada Thing, tenemos que ir a la pestaña de seguridad en el panel web de Thing IoT y descargar la clave pública, la clave privada y el certificado. Una vez hecho esto, Tuvimos que hacer clic en (Activar), que le dará la clave de la autoridad de certificación raíz que tiene que ser guardado igual. Estos serán utilizados por Arduino para autenticarse en la sombra de IoT. En esta parte vamos a hacer la conexión lambda a su cosa. Ya teniendo en cuenta el caso, ahora se puede actualizar el código Lambda para actualizar la sombra de la cosa. También debe asegurar de que su rol de AWS IAM esté asociado con la función Lambda tenga permisos de "AWSIoTFullAccess". Se puede ver la función en la parte inferior del panel web de configuración de Lambda. Este permiso le permite conectarse a AWS IoT Thing. Una vez hecho esto, tiene que ir a la página de configuración de la función Lambda. En la pestaña de prueba de la función, agregamos una directiva llamada "TurnOff" con el siguiente JSON específico de v3. También se puede agregar una segunda prueba llamada "Activar" donde simplemente cambia el nombre del encabezado a "Activar". Cuando se ejecute la prueba de TurnOn y TurnOff, Tiene que ver qué Thing Shadow de información del estado deseado ya con eso sabemos que es correcto. Configuración del Arduino. Se tiene que configurar el hardware del Arduino. Hay unas notas que pueden servir, si estas usando Windows, el de formatear la SD,asegúrese de usar FAT32 (el exFAT no es compatible).Tampoco pude ver la página de "actualización" correctamente hasta que me conecté con ethernet. Una vez configurado, wifi funcionó bien. Marco Teórico Nuestro trabajo se enfoca en la elaboración de un proyecto que nos ayude a comprender y practicar el uso de nuestra tarjeta arduino usando los conocimientos que previamente adquirimos, por ello nos damos a la tarea de investigar que con esta tarjeta podemos conectar nuestras asistentes virtuales como Alexa o Ok google a nuestros trabajos en protoboards, gracias al uso de NINA-W10 series que puede desarrollar aplicaciones avanzadas que se ejecutan en la MCU de 32 bits de doble núcleo y la radio proporciona compatibilidad con Wi-Fi. También debe poder ingresar con éxito a su Arduino. Recomendaría ejecutar "df -h" también y buscar un volumen que sugiera que se ha agregado su tarjeta SD. Abrir el IDE de Arduino y verificar que puede ejecutar ya sería un avance de la etapa. Conectar con AWS loT. Con el Arduino en funcionamiento, hagámoslo hablar con IoT Thing. Esto se hace instalando AWS Arduino IoT SDK y ejecutando un boceto de ejemplo para monitorear los deltas de Thing Shadow. Recomiendo utilizar un tutorial que guíe a través del proceso de instalación del SDK. Nota para los usuarios de Windows, si está usando cygwin, simplemente siga las instrucciones de Mac/Linux. Cuando el tutorial termina agregando AWS-IoT-SDK al IDE de Arduino. Cuando abra el IDE de Arduino, debería encontrar el ejemplo de ShadowThing en Archivo->Ejemplos->AWS-IoT-Arduino-Yun-Library. Se tiene que editar el archivo aws_iot_config.h para que contenga los puntos finales y certificados/nombres clave relevantes. La ejecución de este trabajo debería mostrarle una salida en serie que indica que el estado de la conexión fue exitoso. Si cambia la sombra de su cosa en el tablero de IoT, debería recibir una notificación en el registrador en serie. Si tiene problemas en esta etapa, asegúrese de que sus certificados estén en las rutas correctas y verifique que haya editado correctamente el texto de la CA raíz en un archivo. Circuito con protoboard LED Un led es un diodo (permite el paso de la corriente en un solo sentido) que emite luz cuando está polarizado directamente. Las siglas LED significan Diodo Emisor de Luz, y cuentan con 2 patitas de conexión: una larga y otra corta, la larga es positiva y la corta negativa. Su símbolo dentro de los circuitos es: RESISTENCIAS Como mencionamos en el tutorial de arduino #1 anterior, la resistencia nos sirve para limitar la corriente que llega un componente electrónico, en este caso el led. Sabemos que el led rojo opaco que vamos a utilizar funciona con 15mA es decir: 0.015 amperios. Por ejemplo si queremos utilizar un led rojo opaco en un circuito alimentado por 5V entonces, según la ley de ohm tendriamos que utilizar una resistencia de 330 Ω: PULSADORES Los pulsadores son componentes electrónicos que permiten el paso de la corriente mientras son accionados, si se deja de presionar deja de permitir el paso de los electrones. Un botón o pulsador puede ser normalmente abierto o normalmente cerrado. Conección Wifi NINA-W10 series El módulo MCU (unidad de control principal) multiradio independiente de la serie NINA-W10 que integra un potente microcontrolador (MCU) y una radio para comunicación inalámbrica. El módulo tiene una serie de características de seguridad importantes integradas, incluido el arranque seguro, iniciando solo en presencia de software autenticado. Se ocupa en: ● Internet de las Cosas (IoT) ● Redes WiFi ● Aplicaciones de Bluetooth y Bluetooth de bajo consumo ● Telemática ● Punto de venta ● Redes médicas e industriales ● Acceso a computadoras portátiles, teléfonos móviles y dispositivos de consumo similares ● Automatización de viviendas/edificios ● Puerta de enlace Ethernet/inalámbrica Nube Arduino IoT Tenemos varias maneras de monitorizar los datos que captamos a través de los sensores. La más básica y que requiere tener el dispositivo conectado a un ordenador es a través del monitor serie. Si tenemos algún display como un LCD o una pantalla TFT, ya podremos desconectar el Arduino del ordenador y llevarlo a cualquier sitio. Pero existe una tercera opción, quizás la más idónea, para poder ver los datos y la información, utilizar una plataforma para proyectosde IoT. Editor web de Arduino El editor web de Arduino es un sustituto online del IDE. Sirve para compilar sketches y cargarlos a las placas compatibles con Arduino, sin instalar el IDE en la computadora. Solamente debemos instalar un plugin que se hará cargo de la conexión con la placa de Arduino. Conectividad Utilizando una versión anterior de la API se puede tomar como un gran punto de partida y con el Arduino dirigido a IoT. Con esto se le puede dar un sistema Linux y un microcontrolador para hacerlo más práctico aunque no es el caso particular.. Con solo decir "palabra" las habilidades del hogar inteligente pueden activarse en nuestros led. Usando la voz podemos controlar el apagado y encendido de un LED. Con una matriz de LED de 2x3, podemos decidir encenderla y apagarla por puntos de estilo. Crear una Skill de hogar inteligente y un Lambda conectado es prioritario para el desarrollo del proyecto, después se necesita de hacer una “cosa” de IoT para poder conectarla, Con su cosa en su lugar, ahora puede actualizar su código Lambda para actualizar la sombra de la cosa. Una vez realizado podemos configurar el arduino y conectarlo con la “cosa” de IoT como se explicó con anterioridad. Código Fuente aws_iot_mqtt_client myClient; char JSON_buf[100]; int cnt = 0; int rc = 1; bool success_connect = false; const int NUM_PINS=10; int ledPins[NUM_PINS] = {4,5,6,7,8,9,10,11,12,13}; int i = 0; bool print_log(const char* src, int code) { bool ret = true; if(code == 0) { #ifdef AWS_IOT_DEBUG Serial.print(F("[LOG] command: ")); Serial.print(src); Serial.println(F(" completed.")); #endif ret = true; } else { #ifdef AWS_IOT_DEBUG Serial.print(F("[ERR] command: ")); Serial.print(src); Serial.print(F(" code: ")); Serial.println(code); #endif ret = false; } Serial.flush(); return ret; } void toggle_light(uint8_t state) { int i = 0; for (i = 0; i < NUM_PINS; i++) { digitalWrite(ledPins[i], state); } } void msg_callback_delta(char* src, unsigned int len, Message_status_t flag) { if(flag == STATUS_NORMAL) { print_log("getDeltaKeyValue", myClient.getDeltaValueByKey(src, "light", JSON_buf, 100)); Serial.println(JSON_buf); if (strcmp(JSON_buf, "on") == 0) toggle_light(HIGH); else toggle_light(LOW); String payload = "{\"state\":{\"reported\":"; payload += "{\"light\":\""; payload += JSON_buf; payload += "\"}}}"; payload.toCharArray(JSON_buf, 100); Serial.println(JSON_buf); print_log("update thing shadow", myClient.shadow_update(AWS_IOT_MY_THING_NAME, JSON_buf, strlen(JSON_buf), NULL, 5)); } } void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); int i = 0; for (i = 0; i < NUM_PINS; i++) { pinMode(ledPins[i], OUTPUT); } char curr_version[80]; snprintf_P(curr_version, 80, PSTR("AWS IoT SDK Version(dev) %d.%d.%d-%s\n"), VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_TAG); Serial.println(curr_version); if(print_log("setup...", myClient.setup(AWS_IOT_CLIENT_ID, true, MQTTv311, true))) { if(print_log("config", myClient.config(AWS_IOT_MQTT_HOST, AWS_IOT_MQTT_PORT, AWS_IOT_ROOT_CA_PATH, AWS_IOT_PRIVATE_KEY_PATH, AWS_IOT_CERTIFICATE_PATH))) { if(print_log("connect", myClient.connect())) { success_connect = true; digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); print_log("shadow init", myClient.shadow_init(AWS_IOT_MY_THING_NAME)); print_log("register thing shadow delta function", myClient.shadow_register_delta_func(AWS_IOT_MY_THING_NAME, msg_callback_delta)); } } } } void loop() { if(success_connect) { if(myClient.yield()) { Serial.println(F("Yield failed.")); } delay(1000); // check for incoming delta per 100 ms } } Bibliografía https://secmotic.com/encender-bombilla-con-un-modulo-wifi-esp8266-arduino/#gref https://www.u-blox.com/en/product/nina-w10-series-open-cpu https://jonathanmelgoza.com/blog/primer-circuito-con-protoboard-arduino/ https://create.arduino.cc/projecthub/303628/arduino-iot-cloud-amazon-alexa-integrati on-4e6078?ref=part&ref_id=115656&offset=0 https://secmotic.com/encender-bombilla-con-un-modulo-wifi-esp8266-arduino/#gref https://www.u-blox.com/en/product/nina-w10-series-open-cpu https://jonathanmelgoza.com/blog/primer-circuito-con-protoboard-arduino/ https://create.arduino.cc/projecthub/303628/arduino-iot-cloud-amazon-alexa-integration-4e6078?ref=part&ref_id=115656&offset=0 https://create.arduino.cc/projecthub/303628/arduino-iot-cloud-amazon-alexa-integration-4e6078?ref=part&ref_id=115656&offset=0
Compartir