Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Controlador Arduino Home activado por Alexa

Componentes y suministros

Arduino Yun
× 1
ControlEverything.com CONTROLADOR DE RELÉ DE 4 CANALES PARA I2C
× 1
Sensor de temperatura y humedad DHT11 (4 pines)
× 1
Resistencia de 10k ohmios
× 2
SparkFun RedBot Buzzer
× 1
Transistor de uso general NPN
× 1
LM2596 DC to DC Buck Converter
× 1
Amazon Alexa Echo Dot
× 1
Arduino Proto Shield
× 1
Usb WebCam
× 1
Caja de conexiones blanca 200mmx155mmx80mm
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE
Kit de habilidades de Alexa de Amazon Alexa
Amazon Web Services AWS Lambda
PubNub Publish / Subscribe API

Acerca de este proyecto

Descripción general

Cuando Amazon lanza al mercado Alexa y dispositivos como Amazon Echo Dot abren un número infinito de opciones para hacer un gran hogar inteligente controlado por comandos de voz usando un lenguaje natural.

Este proyecto crea un controlador Arduino Home que puede conectar muchos sensores y dispositivos a Internet y puedes controlarlos usando una habilidad de Amazon Alexa.

Puedes instalar y habilitar mi habilidad " Arduino Home Controller "el paso fácil, o puede hacer que su habilidad sea guiada por este tutorial.

Por ahora controlaremos:

  • Cuatro luces en la habitación, el garaje, la cocina y la sala.
  • Sensor de temperatura y humedad.
  • Timbre de alarma.
  • WebCam para tomar una foto de seguridad y enviarla por correo electrónico.

Puede ver Arduino Home Controller en acción en este breve vídeo de demostración. Para la demostración y la propuesta de video utilizo cuatro leds en prothoboard simulando bombillas en las habitaciones de cada casa.

Si desea utilizar módulos remotos para activar sus luces, puede ver mis Módulos remotos del controlador doméstico Arduino proyecto en esta URL.

Diagrama de bloques

En la imagen del diagrama de bloques podemos ver los cuatro componentes principales de este proyecto:

1.- Amazon Echo Dot para recibir comandos de voz y enviarlos a AWS (Amazon Web Service).

2.- AWS con una habilidad de Amazon y una función Lambda para interpretar todos los comandos.

El nombre de la habilidad es " Arduino Home Controller "puedes activarlo más tarde.

3.- Un Broker MQTT utilizando PubNub (c) en la nube.

Este corredor recibirá los mensajes de control en dos canales, uno para los valores establecidos y otro para leer los valores de los sensores.

No necesita crear una cuenta en PubNub, puede usar mi cuenta para propuestas de demostración.

4.- Controlador de casa usando Arduino Yun.

Usaremos Arduino Yun porque tiene un escudo ethernet en su interior y tiene una pequeña máquina Linux donde ejecutaremos Python para manejar algunas acciones.

Controla los relés de las luces, lee el sensor de temperatura y humedad, enciende el timbre de la alarma y manipula una cámara web para tomar una foto de seguridad.

Para los módulos remotos, consulte mis Módulos remotos del controlador doméstico Arduino complementarios. proyecto en esta URL.

Instale todo el software necesario

En este punto, puede tomar dos opciones, una para proponer una demostración, usar mi habilidad de Alexa, instalarla y usarla o la opción dos puede hacer su habilidad personal.

Explore la aplicación Alexa con esta url , en esa sección, seleccione Habilidades en el menú, busque Arduino y en la lista verá que la habilidad con el nombre es " Arduino Home Controller ", haga clic en la tarjeta de habilidades y haga clic en el botón" Habilitar "para instalar.

O debe ir a Amazon Skill Store usando este enlace y presione el botón "Habilitar"

Necesita vincular su cuenta de Amazon porque usaremos su dirección de correo electrónico como una identificación para todos los comandos enviados a Arduino. Tenga en cuenta que no usaremos esta dirección para enviar correos electrónicos, solo la usaremos como una identificación.

Skill está instalado y vinculado a la cuenta de Amazon y conectado a mi función lambda en la nube de AWS.

1.- Crear a habilidad

Necesita registrarse y crear una cuenta de desarrollador gratuita en el sitio https://developer.amazon.com/home.html

1.1.- Una vez que el inicio de sesión va a Alexa opción de menú y seleccione en Alexa Skills Kit el botón "Comenzar"

1.2.- Luego haga clic en el botón "Agregar una nueva habilidad" para crear una nueva habilidad.

1.3.- En Crea una nueva habilidad de Alexa sección debe:

  • Seleccione: Modelo de interacción personalizado
  • Idioma inglés de EE. UU.
  • Nombre TestSkill es el nombre de la habilidad que se usa para buscar en la tienda.
  • Nombre de invocación Prueba de habilidad es el nombre para iniciar comandos de voz como Alexa Ask, Test Skill para activar la alarma
  • Todos los campos globales configuran todo como Ninguna opción
  • Haga clic en "Guardar"

Se creó la nueva habilidad y verá un nuevo campo ID de la aplicación

  amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb  

Se usa para vincular la habilidad y la función lambda, lo usaremos más adelante en la sección 2.5 del tutorial.

1.4.- Modelo de interacción aquí define cómo interactúas con la habilidad en base a la definición de intenciones, espacios y expresiones.

En Modelo de interacción opción de menú copiar y pegar este esquema Json en Intent Schema.

  {"intents":[{"slots":[{"name":"light", "type":"States"}, {"name":"which", "type":" HabRooms "}]," intent ":" LightIntent "}, {" slots ":[{" name ":" alarm "," type ":" States "}]," intent ":" AlarmIntent "}, {" intent ":" TakePhotoIntent "}, {" intent ":" GetTemperatureIntent "}, {" intent ":" GetHumidityIntent "}, {" intent ":" AboutIntent "}, {" intent ":" AMAZON.HelpIntent "}, {"intent":"AMAZON.CancelIntent"}, {"intent":"AMAZON.StopIntent"}]}  

Defina algunos espacios necesarios como Estados y HabRooms en Tipos de espacios personalizados.

Defina todas las expresiones como un modelo de conversación en Expresiones de muestra , copia y pega esta lista.

  LightIntent Turn {which} light {light} LightIntent Establecer {which} light {light} AlarmIntent Turn alarm {alarm} TakePhotoIntent Tomar una fotoTakePhotoIntent Tomar seguridad PhotoGetTemperatureIntent Leer temperaturaGetHumidityIntent Leer humedadAboutIntent Cuéntame acerca de  

Antes continúa con la siguiente sección, Configuración necesitamos haber creado nuestra función Lambda porque necesitamos vincular tanto la habilidad como la función lambda.

2.- Crea una función Lambda

Debe registrarse y crear una cuenta en la URL de uso de la consola de AWS https://aws.amazon.com/console/

2.1.- Seleccione Servicios en arriba menú y Lambda en el menú de la barra izquierda.

2.2.- Seleccionar en la barra izquierda Función y haga clic en el botón "Crear función".

2.3.- Establecer estos datos:

  • Haga clic en Autor desde cero
  • Nombre: TestSkillLambda
  • Tiempo de ejecución: Node.js.6.10
  • Rol: Crear función personalizada

Esto abrirá una nueva ventana donde debe seleccionar los siguientes valores:

  • Función de IAM: Lambda_Basic_Execution
  • Nombre de la política: "Crear nueva política de rol", luego edite la política y pegue lo siguiente:
  {"Version":"2012-10-17", "Statement":[{"Effect":"Allow", "Action":["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"], "Resource":"arn:aws:logs:*:*:*"}, {"Effect":"Allow", "Action":["iot:UpdateThingShadow"], "Resource" :"*"}]}  

Para guardar, presione el botón "Agregar" y vuelva a Crear función página y seleccione lambda_basic_execution en función existente campo.

2.4.- La TestSkillLambda se creó la función y ves su página de diseñador.

2.5.- Seleccione de la barra de menú izquierda Alexa Skills Kit y agréguelo a agregar activadores área delimitada.

Haga clic en Kit de habilidades de Alexa y desplácese hacia abajo hasta Configurar activadores opción, seleccione Habilitar y en Skill ID campo copiar y pegar ID de la aplicación valor guardar más tarde, consulte la sección número 1.3 del tutorial.

En este momento estamos vinculando la función lambda con la habilidad usando la aplicación o ID de habilidad.

Presiona el botón "Guardar" y Alexa Skills Kit se guardan y funcionan la habilidad conocida de lambda y están vinculados.

2.6.- Desplácese hacia abajo hasta Código de función sección y establecer campos:

  • Tipo de entrada de código: Cargar un archivo .zip
  • Tiempo de ejecución: Node.js 6.10
  • Presione el botón " Subir "para cargar el código de función usando el archivo data.zip .

Se abrirá el editor de código y verá las carpetas y archivos subidos.

Seleccione el archivo index.js contiene toda la implementación de la función lambda.

Debe cambiar la línea 23, copiar y pegar el mismo ID de aplicación usado más adelante en la sección número 1.3 del tutorial.

Presione el botón "Guardar" y se activó la función lambda para recibir las comas de habilidad.

  var APP_ID =amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb  

En la parte superior de la página anterior, el botón "Guardar" verá el ARN (Nombre de recurso de Amazon), es el ID de la función lambda que lo usaremos en Configuración sección en la página de Habilidad.

3.- Volver a la definición de habilidad

3.1.- Seleccione Configuración sección, en EndPoint seleccione AWS Lambda ARN, copie y pegue la cadena ARN anterior en Predeterminado campo. Esta es la última acción para vincular la habilidad y la función lambda, la habilidad conoce la función lambda y están vinculadas.

3.2.- Desplácese hacia abajo hasta Enlace de cuenta y copie las dos primeras URL de redireccionamiento los necesita para configurar el perfil de seguridad.

Antes de continuar con la configuración de habilidades, necesitamos definir un perfil de seguridad utilizado para vincular la habilidad y la cuenta de Amazon en la aplicación Alexa.

4.- Crear perfil de seguridad

En la misma consola de desarrollador utilizada para crear una habilidad, seleccione Aplicaciones y servicios y Iniciar sesión con Amazon y presione el botón "Crear a Nuevo Seguridad Perfil "

4.1.- Gestión de perfiles de seguridad La página le permite crear un perfil con toda la seguridad de OAuth 2.0 para vincular la habilidad con su cuenta de Amazon.

4.2.- Complete todos los campos con estos datos:

  • Nombre del perfil de seguridad :TestSkillProfile
  • Descripción del perfil de seguridad :Perfil utilizado por TestSkill
  • URL del Aviso de privacidad de consentimiento :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 este es un ejemplo que debe usar el suyo.
  • Haga clic en el botón "Guardar".

4.3.- Al guardar todos los datos o editar el perfil de seguridad dos nuevos campos muestran datos importantes, ID de cliente y secreto de cliente . Los necesita para la configuración de habilidades finales.

4.4.- Defina las URL de la lista blanca, seleccione la pestaña Configuración web .

  • Orígenes permitidos :https://layla.amazon.com y https://pitangui.amazon.com
  • URL de retorno permitidas :agregue las dos primeras URL de la sección 3.2

5.- Finalización de la creación de habilidades

5.1.- Regrese a la definición de habilidad, seleccione Configuración y desplácese hacia abajo hasta Enlace de cuenta .

  • ¿Permites a los usuarios crear una cuenta? :Seleccione
  • URL de autorización : https://www.amazon.com/ap/oa/?redirect_url=UUUUUU Donde haya "UUUUUU", deberá reemplazarlo por una de las URL de redireccionamiento desde más abajo en la página. El enlace terminará luciendo algo así https://www.amazon.com/ap/oa/?redirect_url=https://layla.amazon.com/api/skill/link/UUUUUU
  • ID de cliente :copie y pegue ID de cliente de la sección 4.3.
  • Alcance : perfil , consulte la explicación en esta URL.

5.2.- Continuar con la vinculación de la cuenta:

  • Tipo de concesión de autorización :Concesión de código de autorización
  • URI del token de acceso :https://api.amazon.com/auth/o2/token
  • Secreto del cliente :copie y pegue Client Secret de la sección 4.3.
  • URL de la política de privacidad :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 este es un ejemplo que debe usar el suyo.
  • Haga clic en los botones "Guardar" y "Siguiente".

5.3.- Campos Globales es la sección que se utiliza para documentar la habilidad.

  • Seleccione la categoría donde encontrar la habilidad en la tienda cuando esté certificada , "Hogar inteligente"
  • Instrucciones de prueba
  • Skill estará disponible en todos los países .
  • Breve descripción
  • Descripción completa de la habilidad
  • Frases de ejemplo
  • Algunas palabras clave que definen la habilidad
  • Icono Png o Jpg 108x108 píxeles
  • Icono Png o Jpg 512x512 píxeles

5.4.- Última sección Privacidad y Cumplimiento

6.- Instala TestSkill en la aplicación Alexa

6.1- Cuando guarde la habilidad puede ir a la aplicación Alexa en https://alexa.amazon.com/ seleccione en el menú de la barra izquierda la opción Habilidades , haz clic en el botón de arriba a la derecha "Tus habilidades" y el filtro Habilidades de desarrollo puedes ver TestSkill tarjeta. Tenga en cuenta el mensaje obligatorio de vinculación de la cuenta.

6.2.- Si hace clic en la tarjeta el TestSkill página de descripción muestra toda la información sobre la habilidad, haga clic en el botón "Habilitar".

6.3.- Debido a la definición requerida de vinculación de cuenta, se lo redireccionó a la página de credenciales de inicio de sesión de Amazon para vincular la habilidad con su cuenta de Amazon.

Si se valida la información de inicio de sesión, verá esta página que indica que la habilidad está vinculada con su cuenta de Amazon.

6.4.- La habilidad está terminada, instalada y vinculada a su cuenta de Amazon y conectada a la función Lambda.

Puedes probar, di Alexa, pregunta Prueba de habilidad y verá la bienvenida a Arduino Home Controller porque todos los cuadros de diálogo son iguales.

Configurar Arduino Yun

Si es la primera vez que usa Arduino Yun, debe prepararlo antes de cargar el boceto.

Sugiero ver la guía o el tutorial de Greg Baugues Introducción a Arduino Yun:el Arduino con WiFi. Gracias al usuario de Hackster @BenEagen por encontrar esta guía.

Para tomar una foto y enviar un correo electrónico con ella, necesitamos instalar un software adicional. También vamos a probar la cámara USB para ver si los controladores funcionan correctamente. Conecte la cámara web USB en el puerto USB de Arduino Yun.

Para hacer eso, conéctese a Arduino Yun con una terminal:

  ssh [email protected]  

La contraseña predeterminada es arduino.

Si la conexión está bien, verá el indicador de OpenWRT Linux:

Instalar generación de imágenes software

Comience con una actualización del administrador de paquetes:

  actualización de opkg  

Instale los controladores UVC:

  opkg install kmod-video-uvc  

Instale el paquete python-openssl:

  opkg instalar python-openssl  

También necesitamos la utilidad fswebcam que usaremos para tomar fotografías desde el terminal:

  opkg install fswebcam  

Asegúrese de que la tarjeta SD esté montada en Arduino Yun, puede probarla ejecutando este comando:

  montar  

Si ve en la lista de dispositivos uno como / dev / sda1 en / mnt / sda1 escriba vfat La tarjeta SD está bien.

Probar la cámara y tomar una foto, es realmente fácil. Simplemente escriba:

  cd / mnt / sda1fswebcam test.png  

Debería ver que se muestra cierta información, junto con algunos errores, pero no se preocupe por ellos. Lo importante es ver estas líneas:

  --- Abriendo /dev/video0...Probando el módulo fuente v4l2 ... / dev / video0 abierto.  

Para comprobar que la foto se tomó correctamente, retire la tarjeta SD del Arduino Yun y léala con su computadora. Debería ver la imagen que aparece en la raíz de la tarjeta SD " test.png ".

Simplemente ábralo para asegurarse de que se tomó correctamente y de que no está dañado.

Instalar enviar software de correo electrónico

Con la SD en su computadora, copie el archivo python AHC_SendEmail.py y cambie su correo electrónico y contraseña de una cuenta de Gmail en las líneas 11, 12 y 13, si tiene otro proveedor de correo electrónico, cambie la información del servidor en la línea 36.

Extraiga la SD de la computadora e insértela en la ranura SD en Arduino Yun. En el terminal conectado a Arduino Yun, ejecute los comandos:

  cd / mnt / sda1python /mnt/sda1/AHC_SendEmail.py / mnt / sda1 / test.png  

Si todo está bien, debe recibir un correo electrónico con su foto.

Conecta todos los dispositivos a Arduino Yun

Basado en el esquema electrónico, conecte todos los dispositivos, especialmente el sensor DHT11 porque lo necesitamos para leer la temperatura y la humedad y el zumbador para probar el sonido de la alarma.

Instalar el boceto archivo ArduinoHomeMQTT.ino

Creo un libraries.zip archivo con todas las bibliotecas que necesita este archivo, puede descargarlo de mi sitio GitHub y descomprimirlo en el directorio de bibliotecas IDE de Arduino.

Bibliotecas incluidas en libraries.zip dentro de ArduinoHomeMQTT carpeta.

  ArduinoJson -> utilizado para manipular el contenido de JsonDHT_sensor_library -> utilizado para manejar DHT sensorpubsubclient-master -> utilizado para conectarse, publicar y suscribirse a PubNub (c)  

Abra Arduino IDE 1.6.x, en herramientas seleccione "Placa:Arduino Yun".

Cargue el archivo ArduinoHomeMQTT.ino y en el IDE modifique la línea 16 con su correo electrónico de Amazon utilizado cuando la cuenta vinculada en la habilidad de la aplicación de Amazon está habilitada.

Esta opción identifica su controlador cuando AWS envía un mensaje MQTT al corredor.

Cambie la línea 50 con su uuid para identificar su controlador en PubNub (c), puede ir a este sitio y copie un uuid de pegado generado en línea.

Ahora guarde y cargue el boceto y cuando abra la ventana del monitor IDE de Arduino podrá ver Arduino Yun conectado a PubNub (c) broker y sensor inicializado.

Pruebe todas las expresiones de Alexa Echo Dot

La habilidad de Alexa " Arduino Home Controller "habilidad manejar esta lista de expresiones , puede verlos en la habilidad de la aplicación Alexa en la sección de descripción. Puede probar todo y ver en el monitor serial de Arduino ID todos los mensajes recibidos y enviarlos al broker PubNub (c).

Control de luces:

  ==> "Alexa, pide a arduino home que encienda la luz de la habitación" ==> "Alexa, pide a arduino home que apague la luz de la habitación" ==> "Alexa, pide a arduino home que encienda la luz de la cocina "==>" Alexa, pide a arduino home que apague la luz de la cocina "==>" Alexa, pide a arduino home que encienda la luz del garaje "==>" Alexa, pide a arduino home que apague la luz del garaje "==>" Alexa, pide a arduino home que encienda la luz de la sala de estar "==>" Alexa, pide a arduino home que apague la luz de la sala de estar " 

Control de alarma:

  ==> "Alexa, pide a arduino home que active la alarma" ==> "Alexa, pide a arduino home que apague la alarma"  

Temperatura y humedad de escaneo:

  ==> "Alexa, pide a arduino home que lea la temperatura" ==> "Alexa, pide a arduino home que lea la humedad"  

Toma una foto de seguridad:

  ==> "Alexa, pídele a arduino que te tome una foto"  

Acerca de y ayuda

  ==> "Alexa, pregunta a arduino home sobre" ==> "Alexa, pide ayuda a arduino home"  

Detalles del software

Puede descargar todos los archivos para este proyecto desde mi sitio de Github.

Carpetas contiene explicación

ArduinoHomeMQTT -> archivo ino y bibliotecas para Arduino Yun Home Controller

lambda -> La función Lambda en Node.js se implementará en AWS Lambda, incluye todos los módulos node_modules necesarios, consulte la opción 2 en la sección instalar todo el software.

pitón -> archivo Python para enviar correo electrónico con foto adjunta.

esquemático -> Archivo de esquema electrónico Fritzing (c).

Flujo de trabajo del controlador doméstico Arduino mostrar usted cómo interactúan los archivos .

(1) Amazon Echo Dot envía comando de voz y es recibido por habilidad Arduino Home Controller.

(2) El archivo de función Lambda de llamada de habilidad index.js .

(3) El archivo de función Lambda se desarrolla en Node.Js, usa algunos módulos de nodo y estaba alojado en Amazon Web Service (AWS).

(4) La función lambda interpreta todos los intentos y los convierte en un mensaje MQTT Json y lo envía al corredor PubNub (c). Este mensaje tiene el formato:

  {"topic":Topic_xxxx, "command":activado o desactivado, "id":dirección de correo electrónico}  

El tema Topic_xxxx puede ser:

  Topic_room -> encender / apagar la luz de la habitaciónTopic_livingroom -> encender / apagar la luz de la sala de estarTopic_kitchen -> encender / apagar la luz de la cocinaTopic_garage -> encender / apagar la luz del garajeTopic_alarm -> encender / off alarmTopic_temperature -> leer temperatureTopic_humidity -> leer humedadTopic_photo -> tomar y enviar una foto por correo electrónico  

El comando puede estar activado o desactivado .

(5) El mensaje se envía mediante el canal AHC_IOC_01. Canal AHC_IOC_02 se utiliza para recibir valores de temperatura o humedad.

(6) El boceto de Arduino Yun ArduinoHomeMQTT.ino conéctese al corredor y suscríbase o publique en canales y reciba o envíe mensajes.

(7) Usando un puente the arduino sketch communicate with linux OpenWRT for wan or lan connect and to execute some commands.

( 8 ) If arduino need send an email uses the python file AHC_SendEmail.py , if needs take a photo call fswebcam programs located inside linux OpenWRT.

Hardware details

The heart of hardware is the Arduino Yun.

It uses several digital pins to control each device :

Pin 2 :connected to DHT11 sensorPin 8 :activate the buzzer alarm with help of NPN transistor Pin 9 :control room lightPin 10:control kitchen lightPin 11:control garage lightPin 12:control living room light 

The webcam is connected to usb port.

To power all devices the controller use 12 volts Dc power and convert to 5 volts using an Dc to Dc power converter.

I make an arduino shield using the Arduino Proto Shield with all connectors and interface electronic to sensor, buzzer alarm and power supply. It have space for new sensors to extending the controller.

Put the Arduino Yun, Proto shield, Relays and power regulator inside a plastic box with alarm, webcam and sensor outside, and make all connections like mention in electronic schematic.

For demo and video propose I use four leds in prothoboard simulating light bulbs in each house rooms.

Thanks for read this guide, I appreciate your time, If you have any suggestions please contact me.

I make this project in memory of my Dad, he dieds last year, R.I.P Dad.

Código

  • ArduinoHomeMQTT.ino
  • AHC_SendEmail.py
  • index.js
ArduinoHomeMQTT.inoArduino
Arduino Yun software for Home Controller
//// ArduinoHomeMQTT// v2.1//// Copyright (C)2018 Jose Cruz. All right reserved// web:https://sites.google.com/view/raeiot/home//#include #include #include #include #include // Your Amazon email linked skill#define MyID "YOUR AMAZON EMAIL LINKED IN ALEXA APP"// DHT11 sensor data pin#define DHTPIN 2// DHT 11 sensor type#define DHTTYPE DHT11// Initialize DHT sensorDHT dht(DHTPIN, DHTTYPE);// Alarm control pin#define alarm 8// Light control pins#define room_light 9#define kitchen_light 10#define garage_light 11#define livingroom_light 12// PubNub MQTT Server address and portint mqtt_server_port =1883;const char* mqtt_server ="mqtt.pndsn.com";// Suscribe topicconst char* topic ="AHC_IOT_01";// Publish topicconst char* topic2 ="AHC_IOT_02";// PubNub publisher ID// pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/// PubNub suscriber ID// sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/// UUID generated onlyne https://www.uuidgenerator.net/// // PubNub Client ID// clientId =pubID + subID + uuid;c onst char* clientId ="pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/YOUR UUID GENERATED";// Define de Yun ethernet clientYunClient ethClient;// Define PubNub pub and sub clientPubSubClient client(ethClient);// Picture processProcess picture;// FilenameString filename;// Path for image fileString path ="/mnt/sda1/";// Create an image file and sent by emailvoid TakePhoto() { // Generate filename with timestamp filename =""; picture.runShellCommand("date +%s"); while (picture.running()); while (picture.available()> 0) { char c =picture.read(); filename +=c; } filename.trim(); filename +=".jpg"; // Take picture picture.runShellCommand("/usr/bin/fswebcam -i 0 --jpeg 95 --no-banner --fps 1 -S 1 -r 352x288 --save " + path + filename); while (picture.running()); //Send it by email picture.runShellCommand("python /mnt/sda1/AHC_SendEmail.py " + path + " " + filename); while (picture.running());}//***********************// Send temperature//***********************void SendTemperature(){ char cstr[16]; // Read temperature as Celsius (the default) float t =dht.readTemperature(); // Serial.print("Temperature:"); // Serial.print(t); // Serial.println(" *C"); client.publish(topic2, itoa(t, cstr, 10)); //Serial.print("Temperature sent..."); //Serial.println(cstr);}//***********************// Send humidity//***********************void SendHumidity(){ char cstr[16]; flotar h =dht.readHumidity (); //Serial.print("Humidity:"); //Serial.print((int)h); //Serial.print(" %\t"); client.publish(topic2, itoa(h, cstr, 10)); //Serial.print("Humidity sent..."); //Serial.println(cstr);}//Callback function for msg receive handlevoid callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i =0; i  jsonBuffer; JsonObject&root =jsonBuffer.parseObject((char[])payload); String alexa_topic =root["topic"]; String alexa_command =root["command"]; String alexa_id =root["id"]; //Serial.println(alexa_topic); //Serial.println(alexa_command); if (alexa_id.equals(MyID)) { //Handle all received msgs topic from MQTT if (alexa_topic.endsWith("Topic_room")) { digitalWrite(room_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_kitchen")) { digitalWrite(kitchen_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_garage")) { digitalWrite(garage_light, (alexa_command.endsWith("on") ? LOW :HIGH )); } else if (alexa_topic.endsWith("Topic_living room")) { digitalWrite(livingroom_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_temperature")) { SendTemperature(); } else if (alexa_topic.endsWith("Topic_humidity")) { SendHumidity(); } else if (alexa_topic.endsWith("Topic_alarm")) { digitalWrite(alarm, (alexa_command.endsWith("on") ? HIGH :LOW)); } else if (alexa_topic.endsWith("Topic_photo")) { TakePhoto(); } }}//Reconnect to MQTT broker if lost connectionvoid reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(clientId)) { Serial.println("MQTT broker connected"); client.subscribe(topic); } else { Serial.print("Failed, rc ="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } }}void setup(){ Bridge.begin(); retraso (2000); Serial.begin (115200); Serial.println("Init Arduino Home Controller v2.1..."); pinMode(alarm, OUTPUT); pinMode(room_light, OUTPUT); pinMode(kitchen_light, OUTPUT); pinMode(garage_light, OUTPUT); pinMode(livingroom_light, OUTPUT); digitalWrite(room_light, HIGH); digitalWrite(kitchen_light, HIGH); digitalWrite(garage_light, HIGH ); digitalWrite(livingroom_light, HIGH); // Define PubNub MQTT broker client.setServer(mqtt_server, mqtt_server_port); client.setCallback(callback); client.connect(clientId); Serial.println("Connected to PubNub MQTT broker OK ..."); client.subscribe(topic); Serial.println("Suscribe to topic at MQTT broker Ok ..."); dht.begin(); //Wait for sensor initialize delay(4000); Serial.println("DHT sensor Ok ...");}void loop(){ if (!client.connected()) { reconnect(); } client.loop();}
AHC_SendEmail.pyPython
File to be installed in Arduino Yun OpenWRT linux to help send email with attached photo
import smtplibimport sysimport timefrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEText import MIMETextfrom email.MIMEBase import MIMEBasefrom email import encoders fromaddr ="[email protected]"toaddr ="[email protected]"emailpassword ="YOUR PASSWORD"subject ="Arduino Home Controller by Alexa Skill"body ="Photo taken in " + time.strftime('%a, %d %b %Y %H:%M:%S %Z(%z)')filedir =sys.argv[1]filename =sys.argv[2]msg =MIMEMultipart() msg['From'] =fromaddrmsg['To'] =toaddrmsg['Subject'] =subject msg.attach(MIMEText(body, 'plain')) attachment =open(filedir + filename, "rb") part =MIMEBase('application', 'octet-stream')part.set_payload((attachment).read())encoders.encode_base64(part)part.add_header('Content-Disposition', "attachment; filename=%s" % filename) msg.attach(part) server =smtplib.SMTP('smtp.gmail.com', 587)server.starttls()server.login(fromaddr, emailpassword)text =msg.as_string()server.sendmail(fromaddr, toaddr, text)server.quit()
index.jsJavaScript
AWS Lambda Function if you select option 2, build your own skill
// Alexa SDK for Arduino Home Controller// Copyright (c) 2014-2015 Amazon.com, Inc. or its affiliates. Reservados todos los derechos. Use is subject to license terms.// Jose Cruz https://sites.google.com/view/jriot // Define connection to PubNub var PubNub =require("pubnub");var pubnub =new PubNub({ ssl:true, publish_key:"pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7", subscribe_key:"sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb", uuid:"YOUR UUID"});// Define the PubNub channelvar channel ='AHC_IOT_01';// Used to receive some values (temperature, humidity)var channel2 ='AHC_IOT_02';// Define slot states for light and alarm turn on/offvar slotStates =['on', 'off'];// App ID for the skillvar APP_ID ='YOUR APP ID FOR THE SKILL';// The AlexaSkill prototype and helper functionsvar AlexaSkill =require('./AlexaSkill');var ArduinoHomeSkill =function() { AlexaSkill.call(this, APP_ID);};//Listener for suscribe and receive temperature and humidityvar mqttListener;var access_token;var url;var https =require("https");function SendMessage(topicname, commandvalue, speechOutput, iresponse) { https.get(url, res => { res.setEnc oding("utf8"); let body =""; res.on("data", data => { body +=data; }); res.on("end", () => { pubnub.publish({ //Publishes the turn message to my PubHub Device. channel:channel, message:{ "topic":topicname, "command":commandvalue, "id":JSON.parse(body).email } }).then((response) => { console.log("message Published w/ timetoken", response.timetoken); if (speechOutput) iresponse.tell(speechOutput); }).catch((error) => { console.log("publishing failed w/ status:", error); iresponse.ask("Sorry, I didn't catch what you said"); }); }); });}/// Extend AlexaSkillArduinoHomeSkill.prototype =Object.create(AlexaSkill.prototype);ArduinoHomeSkill.prototype.constructor =ArduinoHomeSkill;ArduinoHomeSkill.prototype.eventHandlers.onSessionStarted =function(sessionStartedRequest, session) { // SetUserID(); console.log("ArduinoHomeSkill onSessionStarted requestId:" + sessionStartedRequest.requestId + ", sessionId:" + session.sessionId); // console.log("Init..."); //Delete all listeners and suscribes defined pubnub.removeListener(mqttListener); pubnub.unsubscribeAll(); // console.log("Init...Ok");};//-------->This is invoked by invocation word "Arduino Home"ArduinoHomeSkill.prototype.eventHandlers.onLaunch =function(launchRequest, session, response) { console.log("ArduinoHomeSkill onLaunch requestId:" + launchRequest.requestId + ", sessionId:" + session.sessionId); //if no amazon token, return a LinkAccount card if (session.user.accessToken ==undefined) { response.tellWithCardLink('To start using this skill, please use the companion app to authenticate on Amazon.'); regreso; } var speechOutput ="Welcome to Arduino Home Controller. What would you like to do?"; var repromptText ="I am ready"; response.ask(speechOutput, repromptText);};ArduinoHomeSkill.prototype.eventHandlers.onSessionEnded =function(sessionEndedRequest, session) { console.log("ArduinoHomeSkill onSessionEnded requestId:" + sessionEndedRequest.requestId + ", sessionId:" + session.sessionId); console.log("End...");};//*** Define all intent handlersArduinoHomeSkill.prototype.intentHandlers ={ //*** AboutIntent handler "AboutIntent":function(intent, session, response) { var myText; console.log("in about"); myText ="Arduino Home Controller skil let you control internet connected devices. It controls Lights at room, kitchen, garage or living room), read a temperature sensor to scan home temperature, read Humidity sensor to scan home humidity, uses webcam to take a home security photo and sent it by email and activate an alarm to alert some events. It uses PubNub site to manipulate all messages send by Alexa with Lambda function. Please check information at skill page for more details. What would you like to do?"; response.ask(myText); regreso; }, //*** LightIntent handler "LightIntent":function(intent, session, response) { var slotHabRooms =['room', 'kitchen', 'garage', 'living room']; var lightSlot =intent.slots.light; var lightSlotValue =lightSlot ? lightSlot.value :""; var whichSlot =intent.slots.which; var whichSlotValue =whichSlot ? whichSlot.value :""; if (lightSlotValue &&whichSlotValue &&slotStates.indexOf(lightSlotValue.toLowerCase())> -1 &&slotHabRooms.indexOf(whichSlotValue.toLowerCase())> -1) { SendMessage('Topic_' + whichSlotValue, lightSlotValue, "The light is now " + lightSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** AlarmIntent handler "AlarmIntent":function(intent, session, response) { var alarmSlot =intent.slots.alarm; var alarmSlotValue =alarmSlot ? alarmSlot.value :""; if (alarmSlotValue &&slotStates.indexOf(alarmSlotValue.toLowerCase())> -1) { SendMessage('Topic_alarm', alarmSlotValue, "The alarm is now " + alarmSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** TakePhotoIntent handler "TakePhotoIntent":function(intent, session, response) { SendMessage('Topic_photo', 'take', "Taken home photo ", response); }, //*** GetTemperatureIntent handler "GetTemperatureIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Temperature is " + message.message + " degrees C"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_temperature', 'Ok', null, response) }, //*** GetTemperatureIntent handler "GetHumidityIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Humidity is " + message.message + " %"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_humidity', 'Ok', null, response) }, //*** HelpIntent handler "AMAZON.HelpIntent":function(intent, session, response) { response.ask("With Arduino Home Controller skill and Alexa you can control internet connected devices using an Arduino Yun or Arduino with Ethernet Shield. Please check information at skill page for more details. What would you like to do?"); }, //*** StopIntent handler "AMAZON.StopIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, //*** StopIntent handler "AMAZON.CancelIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, default:function(intent, session, response) { response.ask("Try again"); },};// Create the handler that responds to the Alexa Request.exports.handler =function(event, context) { try { access_token =event['context']['System']['user']['accessToken']; url ='https://api.amazon.com/user/profile?access_token=' + access_token; //console.log("Access Token:", access_token); } catch (error) { console.log(error); } // Create an instance of Arduino Home Skill var ArduinoHomeControl =new ArduinoHomeSkill(); ArduinoHomeControl.execute(event, context); //console.log('AWSrequestID =', context.awsRequestId);};
Github
https://github.com/jcruzp/ArduinoHomeController

Esquemas

Main board with reles, temperature and humidity sensor, buzzer alarm and webcam.

Proceso de manufactura

  1. Controlador DMX operado por la web
  2. Dados digitales Arduino
  3. Controlador de juego Arduino
  4. Pixel Chaser Game
  5. Sistema de riego de plantas domésticas
  6. Levitación electromagnética repulsiva Arduino
  7. Controlador de pantalla fluorescente al vacío
  8. Robot asistente doméstico autónomo
  9. NeoMatrix Arduino Pong
  10. Controlador de tester Arduino DMX-512
  11. Juego de ruleta LED