Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino Home Controller ativado por Alexa

Componentes e suprimentos

Arduino Yun
× 1
ControlEverything.com CONTROLADOR DE RELÉ DE 4 CANAIS PARA I2C
× 1
Sensor DHT11 de Temperatura e Umidade (4 pinos)
× 1
Resistor 10k ohm
× 2
SparkFun RedBot Buzzer
× 1
Transistor de uso geral NPN
× 1
LM2596 DC para DC Buck Converter
× 1
Amazon Alexa Echo Dot
× 1
Arduino Proto Shield
× 1
Usb WebCam
× 1
Caixa de junção branca 200 mm x 155 mm x 80 mm
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino IDE
Amazon Alexa Skills Kit
Amazon Web Services AWS Lambda
PubNub Publish / Assine API

Sobre este projeto





Visão geral


Quando a Amazon lança o Alexa e dispositivos como Amazon Echo Dot no mercado, abre um número infinito de opções para fazer uma grande casa inteligente controlada por comandos de voz usando uma linguagem natural.

Este projeto faz um Arduino Home Controller que pode conectar vários sensores e dispositivos à Internet e você pode controlá-los usando uma habilidade do Amazon Alexa.

Você pode instalar e habilitar minha habilidade " Arduino Home Controller "a etapa fácil, ou você pode tornar sua habilidade guiada por este tutorial.

Por enquanto vamos controlar:
  • Quatro luzes na sala, garagem, cozinha e sala.
  • Sensor de temperatura e umidade.
  • Alarme de campainha.
  • WebCam para tirar uma foto de segurança e enviar por e-mail.

Você pode ver o Arduino Home Controller em ação neste breve vídeo de demonstração. Para demonstração e vídeo, proponho usar quatro leds em prothoboard simulando lâmpadas em cada cômodo da casa.

Se você deseja usar módulos remotos para ativar suas luzes, você pode ver os meus Módulos remotos do Arduino Home Controller projeto neste URL.





Diagrama de blocos


Na imagem do diagrama de blocos podemos ver os quatro componentes principais deste projeto:

1.- Amazon Echo Dot para receber comandos de voz e enviá-los para AWS (Amazon Web Service).

2.- AWS com uma habilidade Amazon e uma função Lambda para interpretar todos os comandos.

O nome da habilidade é " Arduino Home Controller "você pode ativá-lo mais tarde.

3.- Um Corretor MQTT usando a nuvem PubNub (c).

Este corretor receberá as mensagens de controle em dois canais, um para definir os valores e outro para ler os valores dos sensores.

Você não precisa criar uma conta no PubNub, você pode usar minha conta para propostas de demonstração.

4.- Controlador doméstico usando o Arduino Yun.

Usaremos o Arduino Yun porque ele possui um escudo ethernet dentro e uma pequena máquina linux onde executaremos o python para lidar com algumas ações.

Controla relés de luzes, lê sensores de temperatura e umidade, liga a campainha de alarme e manipula uma webcam para tirar fotos de segurança.

Para módulos remotos, consulte o meu complementar, Módulos remotos do controlador doméstico Arduino projeto neste URL.





Instale todo o software necessário


Neste ponto, você pode escolher duas opções, uma para a proposta de demonstração, usar minha habilidade Alexa para instalá-la e usá-la ou a opção dois pode tornar sua habilidade pessoal.

Navegue pelo aplicativo Alexa com este url , nessa seção selecione Habilidades no menu, Pesquisar Arduino e na lista você vê que a habilidade com o nome é " Arduino Home Controller ", clique no cartão de habilidade e clique no botão" Ativar "para instalar.

Ou você precisa ir para a Amazon Skill Store usando este link e pressione o botão "Habilitar"

Você precisa vincular sua conta da Amazon porque usaremos seu endereço de e-mail como um ID para todos os comandos enviados ao Arduino. Observe que não usaremos este endereço para enviar e-mails, apenas como um ID.

O Skill é instalado e vinculado à conta da Amazon e conectado à minha função lambda na nuvem AWS.

1.- Criar a habilidade

Você precisa se registrar e criar uma conta de desenvolvedor gratuita no site https://developer.amazon.com/home.html

1.1.- Assim que o login for para Alexa opção de menu e selecione no Alexa Skills Kit o botão "Começar"

1.2.- Em seguida, clique no botão "Adicionar uma nova habilidade" para criar uma nova habilidade.

1.3.- Em Criar uma nova habilidade Alexa seção você deve:
  • Selecione: Modelo de interação personalizado
  • Idioma Inglês EUA
  • Nome TestSkill é o nome da habilidade usada para pesquisar na loja.
  • Nome de invocação Teste de habilidade é o nome para iniciar comandos de voz como Alexa Ask, Test Skill para ligar o alarme
  • Todos os campos globais definidos como Sem opção
  • Clique em "Salvar"

A nova habilidade foi criada e você verá um novo campo Id do aplicativo
  amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb  

É usado para a ligação entre habilidade e função lambda, vamos usá-lo mais tarde na seção 2.5 do tutorial.

1.4.- Modelo de interação aqui define como você interage com a habilidade com base na definição de intents, slots e enunciados.

Em Modelo de interação opção de menu copie e cole este esquema Json em Esquema de Intenção.
  {"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 alguns slots necessários como Estados e HabRooms em Tipos de slots personalizados.





Defina todos os enunciados como um modelo de conversação em Enunciados de amostra , copie e cole esta lista.
  LightIntent Turn {which} light {light} LightIntent Definir {which} light {light} AlarmIntent Turn alarm {alarm} TakePhotoIntent Tirar uma fotoTakePhotoIntent Tirar foto de segurançaGetTemperatureIntent Ler TemperatureGetHumidityIntent Ler HumidityAboutIntent Sobre  

Antes de continuar com a próxima seção, Configuração, precisamos criar nossa Função Lambda porque precisamos vincular a função habilidade e a função lambda.

2.- Cria uma função Lambda

Você precisa se registrar e criar uma conta no AWS Console use url https://aws.amazon.com/console/

2.1.- Selecione Serviços em topo menu e Lambda no menu da barra esquerda.

2.2.- Selecione na barra esquerda Função e clique no botão "Criar função".



2.3.- Defina estes dados:
  • Clique Autor do zero
  • Nome: TestSkillLambda
  • Tempo de execução: Node.js.6.10
  • Função: Criar papel personalizado

Isso abrirá uma nova janela onde você deve selecionar os seguintes valores:
  • Função IAM: Lambda_Basic_Execution
  • Nome da política: “Criar Nova Política de Função” e, em seguida, edite a política e cole o seguinte:
  {"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 salvar, pressione o botão "Adicionar" e volte para Criar Função página e selecione lambda_basic_execution na função existente campo.

2.4.- O TestSkillLambda função foi criada e você verá sua página de designer.

2.5.- Selecione na barra de menu à esquerda Alexa Skills Kit e adicione-o para adicionar gatilhos área delimitada.

Clique em Alexa Skills Kit caixa e role para baixo até Configurar gatilhos opção, selecione Ativar e em Skill ID campo copiar e colar ID do aplicativo valor salve mais tarde, consulte a seção número 1.3 do tutorial.

No momento, estamos vinculando a função lambda à habilidade usando o aplicativo ou ID de habilidade.

Pressione o botão "Salvar" e Alexa Skills Kit são salvos e funcionam a habilidade conhecida lambda e estão ligados.

2.6.- Role para baixo até Código de função seção e campos definidos:
  • Tipo de entrada de código: Faça upload de um arquivo .zip
  • Tempo de execução: Node.js 6,10
  • Pressione o botão " Upload "para fazer upload do código de função usando o arquivo data.zip .

O editor de código será aberto e você verá os uploads de pastas e arquivos.

Selecione o arquivo index.js ele contém toda a implementação da função lambda.

Você deve alterar a linha 23, copiar e colar o mesmo ID do aplicativo usado posteriormente na seção número 1.3 do tutorial.

Pressione o botão "Salvar" e a função lambda será ativada para receber vírgulas de habilidade.
  var APP_ID =amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb  

No topo da página acima do botão "Salvar" você verá o ARN (Amazon Resource Name), é o ID da função lambda que iremos usar em Configuração seção na página de habilidades.

3.- Retornar à definição de habilidade

3.1.- Selecione Configuração seção, em EndPoint selecione AWS Lambda ARN, copie e cole a string ARN acima em Padrão campo. Esta é a última ação para vincular a habilidade e a função lambda, as habilidades conhecidas funcionam como lambda e estão vinculadas.

3.2.- Role para baixo até Vinculação de conta seção e copie os dois primeiros URLs de redirecionamento você precisa deles para configurar o perfil de segurança.

Antes de continuar com a configuração de habilidade, precisamos definir um perfil de segurança usado para vincular a habilidade e a conta da Amazon no aplicativo Alexa.

4.- Criar Perfil de Segurança

No mesmo console de desenvolvedor usado para criar uma habilidade, selecione Aplicativos e serviços e Faça login com a Amazon e pressione o botão "Criar a Novo Segurança Perfil "

4.1.- Gerenciamento de Perfil de Segurança página permite criar um perfil com toda a segurança OAuth 2.0 para vincular a habilidade com sua conta Amazon.

4.2.- Preencha todos os campos com estes dados:
  • Nome do perfil de segurança :TestSkillProfile
  • Descrição do perfil de segurança :Perfil usado por TestSkill
  • URL do aviso de privacidade de consentimento :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 este é um exemplo que você deve usar o seu.
  • Clique no botão "Salvar".

4.3.- Ao salvar todos os dados ou editar o perfil de segurança dois novos campos mostram os dados importantes, ID do cliente e Segredo do cliente . Você precisa deles para a configuração da habilidade final.

4.4.- Defina os urls da lista de permissões, selecione a guia Configurações da Web.
  • Origens permitidas :https://layla.amazon.com e https://pitangui.amazon.com
  • URLs de retorno permitidos :adicione os dois primeiros urls da seção 3.2

5.- Criação de habilidade de finalização

5.1.- Retorne à definição de habilidade, selecione Configuração seção e role para baixo até Vinculação de conta .
  • Você permite que os usuários criem uma conta :Selecione Sim
  • URL de autorização : https://www.amazon.com/ap/oa/?redirect_url=UUUUUU Onde houver “UUUUUU”, você precisará substituí-lo por um dos URL de redirecionamento mais abaixo na página. O link ficará parecido com este https://www.amazon.com/ap/oa/?redirect_url=https://layla.amazon.com/api/skill/link/UUUUUU
  • ID do cliente :copie e cole o ID do cliente da seção 4.3.
  • Escopo : perfil , veja a explicação neste url.

5.2.- Continue com a vinculação de contas:
  • Tipo de concessão de autorização :Concessão de código de autenticação
  • URI do token de acesso :https://api.amazon.com/auth/o2/token
  • Segredo do cliente :copie e cole o Segredo do cliente da seção 4.3.
  • URL da política de privacidade :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 este é um exemplo que você deve usar o seu.
  • Clique nos botões "Salvar" e "Avançar"

5.3.- Campos globais é a seção usada para documentar a habilidade.
  • Selecione a categoria onde encontrar habilidade na loja quando certificado , "Casa inteligente"
  • Instruções de teste
  • A habilidade estará disponível em todos os países .
  • Breve descrição
  • Descrição completa das habilidades
  • Frases de exemplo
  • Algumas palavras-chave que definem a habilidade
  • Ícone Png o Jpg 108x108 pixeles
  • Ícone Png o Jpg 512x512 pixeles

5.4.- Última seção Privacidade e Conformidade

6.- Instale TestSkill no Alexa App

6.1- Ao salvar a habilidade você pode ir ao Alexa App em https://alexa.amazon.com/ selecionar no menu da barra esquerda a opção Habilidades , clique no botão à direita em "Suas habilidades" e no filtro Dev Skills você pode ver TestSkill cartão. Observe a mensagem necessária para vincular a conta.

6.2.- Se você clicar no cartão o TestSkill página de descrição mostra todas as informações sobre a habilidade, clique no botão "Habilitar".

6.3.- Por causa da definição necessária de vinculação de conta, você deve redirecionar para a página de credenciais de login da Amazon para vincular a habilidade à sua conta da Amazon.

Se as informações de login forem validadas, você verá esta página indicando que a habilidade está vinculada à sua conta Amazon.

6.4.- A habilidade está finalizada, instalada e vinculada à sua conta Amazon e conectada à função Lambda.

Você pode testar, diga Alexa, pergunte Test Skill e você vê as boas-vindas ao Arduino Home Controller porque todos os diálogos são iguais.

Config Arduino Yun

Se for a primeira vez que você usa o Arduino Yun, você precisa prepará-lo antes de fazer o upload do esboço.

Sugiro que consulte o guia ou tutorial de Greg Baugues Introdução ao Arduino Yun - o Arduino com WiFi. Obrigado ao usuário do Hackster @BenEagen por encontrar este guia.

Para tirar uma foto e enviar e-mail com ela, precisamos instalar um software adicional. Também vamos testar a câmera USB para ver se os drivers estão funcionando corretamente. Conecte a webcam USB na porta USB do Arduino Yun.

Para fazer isso, conecte-se ao Arduino Yun com um terminal:
  ssh [email protected]  

A senha padrão é arduino.

Se a conexão estiver ok, você verá o prompt OpenWRT Linux:

Instalar geração de imagem software

Comece com uma atualização do gerenciador de pacotes:
  opkg update  

Instale os drivers UVC:
  opkg install kmod-video-uvc  

Instale o pacote python-openssl:
  opkg install python-openssl  

Também precisamos do utilitário fswebcam que usaremos para tirar fotos do terminal:
  opkg install fswebcam  

Certifique-se de que o cartão SD está montado no Arduino Yun, você pode testá-lo executando este comando:
  montagem  

Se você vir na lista de dispositivos um como / dev / sda1 em / mnt / sda1 digite vfat O cartão SD está OK.

Testar a câmera e tirar uma foto é muito fácil. Basta digitar:
  cd / mnt / sda1fswebcam test.png  

Você deverá ver algumas informações sendo exibidas, junto com alguns erros, mas não se preocupe com eles. O importante é ver estas linhas:
  --- Abrindo /dev/video0...Tentando o módulo de origem v4l2 ... / dev / video0 aberto.  

Para verificar se a foto foi tirada corretamente, remova o cartão SD do Arduino Yun e leia-o usando seu computador. Você deve ver a imagem que aparece na raiz do cartão SD " test.png "

Basta abri-lo para se certificar de que foi tirado corretamente e de que não está corrompido.

Instalar software de envio de e-mail

Com o SD em seu computador, copie o arquivo python AHC_SendEmail.py e altere seu e-mail e senha de uma conta do gmail nas linhas 11, 12 e 13, se você tiver outro provedor de e-mail, altere as informações do servidor na linha 36.

Extraia o SD do computador e insira no slot SD no Arduino Yun. No terminal conectado ao Arduino Yun, execute os comandos:
  cd / mnt / sda1python /mnt/sda1/AHC_SendEmail.py / mnt / sda1 / test.png  

Se tudo correr bem você deverá receber um e-mail com sua foto.

Conecte todos os dispositivos ao Arduino Yun

Com base no esquema eletrônico conecte todos os dispositivos em especial o sensor DHT11, pois precisamos dele para ler a temperatura e umidade e buzzer para testar o som do alarme.

Instalar o esboço arquivo ArduinoHomeMQTT.ino

Eu crio um libraries.zip arquivo com todas as bibliotecas necessárias para este arquivo, você pode baixá-lo do meu site GitHub e descompactar no diretório de bibliotecas do IDE do Arduino.

Bibliotecas incluídas em libraries.zip dentro de ArduinoHomeMQTT pasta.
  ArduinoJson -> usado para manipular Json contentDHT_sensor_library -> usado para lidar com DHT sensorpubsubclient-master -> usado para conectar, publicar e assinar PubNub (c)  

Abra o Arduino IDE 1.6.x, nas ferramentas selecione "Placa:Arduino Yun".

Carregue o arquivo ArduinoHomeMQTT.ino e no IDE modifique a linha 16 com seu e-mail da Amazon usado quando a conta vinculada na habilidade do aplicativo Amazon estiver habilitada.

Esta opção identifica seu controlador quando a AWS envia uma mensagem MQTT para o corretor.

Mude a linha 50 com seu uuid para identificar seu controlador no PubNub (c), você pode acessar este site e copie um uuid de pasta gerado online.

Agora salve e carregue o esboço e quando abrir a janela do monitor do IDE do Arduino, você pode ver o Arduino Yun conectado ao intermediário PubNub (c) e o sensor inicializado.

Teste todas as expressões do Alexa Echo Dot

A habilidade Alexa " Arduino Home Controller "habilidade para lidar com esta lista de enunciados , você pode vê-los na habilidade Alexa App na seção de descrição. Você pode testar tudo e ver no monitor serial de ID do Arduino todas as mensagens recebidas e enviadas para o broker PubNub (c).

Controle de luzes:
  ==> "Alexa, peça ao arduino casa para ligar a luz da sala" ==> "Alexa, peça ao arduino casa para desligar a luz da sala" ==> "Alexa, peça ao arduino casa para ligar a luz da cozinha "==>" Alexa, peça ao arduino home para desligar a luz da cozinha "==>" Alexa, peça ao arduino home para ligar a luz da garagem "==>" Alexa, peça ao arduino home para desligar a luz da garagem "==>" Alexa, peça ao arduino home para ligar a luz da sala de estar "==>" Alexa, peça ao arduino home para desligar a luz da sala de estar " 

Controle de alarme:
  ==> "Alexa, peça ao arduino home para ligar o alarme" ==> "Alexa, peça ao arduino home para desligar o alarme"  

Temperatura e umidade da varredura:
  ==> "Alexa, peça ao Arduino para casa para ler a temperatura" ==> "Alexa, peça ao Arduino para casa para ler a umidade"  

Tire uma foto de segurança:
  ==> "Alexa, peça ao Arduino para casa para tirar uma foto"  

Sobre e ajuda
  ==> "Alexa, ask arduino home about" ==> "Alexa, ask arduino home help"  





Detalhes do software


Você pode baixar todos os arquivos para este projeto do meu site Github.

Pastas contém explicação

ArduinoHomeMQTT -> arquivo ino e bibliotecas para o controlador Arduino Yun Home

lambda -> Função Lambda em Node.js a ser implantada no AWS Lambda, inclui todos os node_modules necessários, consulte a opção 2 na seção de instalação de todo o software.

python -> arquivo python para enviar e-mail com foto anexada.

esquemático -> Arquivo esquemático eletrônico Fritzing (c).

Fluxo de trabalho do controlador doméstico Arduino mostrar você como os arquivos interagem .

(1) Amazon Echo Dot envia voz de comando e é recebido pela habilidade do Arduino Home Controller.

(2) O arquivo de função Lambda de chamada de habilidade index.js .

(3) O arquivo de função Lambda é desenvolvido em Node.Js, usa alguns módulos de nó e foi hospedado no Amazon Web Service (AWS).

(4) A função lambda interpreta todos os intents e os converte em mensagem MQTT Json e envia para o corretor PubNub (c). Esta mensagem tem o formato:
  {"topic":Topic_xxxx, "command":on ou off, "id":email address}  

O tópico Topic_xxxx talvez:
  Topic_room -> ligar / desligar a luz da salaTopic_livingroom -> ligar / desligar a luz da sala de estarTopic_kitchen -> ligar / desligar a luz da cozinhaTopic_garage -> ligar / desligar a luz da garagemTopic_alarm -> ligar / desligado alarmTopic_temperature -> ler temperaturaTopic_humidity -> ler umidadeTopic_photo -> tirar e enviar foto por e-mail  

O comando pode estar ativado ou desligado .

(5) A mensagem é enviada usando o canal AHC_IOC_01. Canal AHC_IOC_02 é usado para receber valores de temperatura ou umidade.

(6) O esboço do Arduino Yun ArduinoHomeMQTT.ino conecte-se ao corretor e assine ou publique em canais e receba ou envie mensagens.

(7) Usando uma ponte o esboço do arduino se comunica com o Linux OpenWRT para conexão wan ou lan e para executar alguns comandos.

(8) Se o arduino precisar enviar um e-mail, use o arquivo python AHC_SendEmail.py , se necessário, faça uma chamada com foto fswebcam programas localizados dentro do 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]; float 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(); atraso (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. Todos os direitos reservados. 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.'); Retorna; } 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); Retorna; }, //*** 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.

Processo de manufatura

  1. Controlador DMX operado pela web
  2. Dados digitais Arduino
  3. Controlador de jogo Arduino
  4. Jogo Pixel Chaser
  5. Sistema de irrigação de plantas caseiras
  6. Levitação eletromagnética repulsiva Arduino
  7. Controlador de display fluorescente a vácuo
  8. Robô assistente autônomo da casa
  9. NeoMatrix Arduino Pong
  10. Arduino DMX-512 Tester Controller