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

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

Componentes e Materiais

Componente Quantidade
Arduino 101 1
1Sheeld 1
Lâmpada de bastão (Stick lamp) 1
Fita LED RGB 1
Placa Relé 1
Apple iPhone 1
Protoboard (genérica) 1
Cabo USB-A para B 1
Fios Jumper (genéricos) 30
Transistor NPN de Uso Geral 3

Ferramentas e Máquinas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Há alguns meses visitei um amigo e fiquei impressionado com o Amazon Echo que ele possuía.

Ele pode tocar música, controlar as luzes da casa, me dar notícias e status do clima, e até a data e hora, tudo isso apenas com comandos de voz.

Naquele momento, o maker dentro de mim gritou "por que não faço eu mesmo!".

E desde aquele dia comecei a procurar componentes que pudessem me ajudar a fazer um Amazon Echo baseado em Arduino, até encontrar o incrível 1Sheeld.

1Sheeld é uma plataforma para Arduino que permite acessar os sensores e capacidades do seu smartphone e usá-los em seus projetos Arduino.

Basicamente, é um shield de hardware que fica sobre sua placa Arduino e se comunica via Bluetooth com este app Android, para transferir dados entre ele e seu smartphone.

Você pode conferir o tutorial de primeiros passos no site do 1Sheeld, que o guiará passo a passo até você poder operar o 1Sheeld muito suavemente, e é uma referência incrível para ótimos projetos Arduino.

Usei neste projeto cinco shields dos 40+ shields no 1Sheeld.

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

O primeiro é o Voice Recognition Shield (Escudo de Reconhecimento de Voz) que usei para controlar todo o sistema com comandos de voz. É um shield muito simples que posso ativar com apenas 1 linha de código: VoiceRecognition.start();

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

Então usei o Music Player Shield (Escudo de Reprodutor de Música) que me permite acessar o reprodutor de música do smartphone e escolher as faixas que quero tocar muito suavemente. Na verdade, é tão simples que usei apenas esta linha para tocar o music player shield: MusicPlayer.play();

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

O terceiro shield que usei é um dos mais importantes do projeto, é o Text to Speech Shield (Escudo de Texto para Fala) que adiciona ao projeto uma interação humanoide de que alguém está respondendo ao que você diz. Foi tão fácil tornar o sistema responsivo: TextToSpeech.say("time in cairo is");

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

Após ativar o Text to Speech shield, ativei o Clock Shield (Escudo de Relógio) que retorna o relógio em tempo real e então o sistema pode responder com a hora quando eu pergunto, incrível! não é? :) e posso facilmente obter a hora atual no meu telefone usando esta função: Clock.queryDateAndTime();

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

O último shield que usei é o Internet Shield (Escudo de Internet), que na minha opinião é o shield mais poderoso no 1Sheeld. Usei esse shield para obter o status atual do clima na minha cidade natal usando uma API do site "openweathermap", onde posso chamar a API com esta linha: HttpRequest request1("/*o endereço da API */");

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

Passo 1: Reúna os Componentes

Passo 2:

Faça furos no cano para permitir a saída do som

Passo 3:

Pinte o cano PVC com spray preto

Passo 4: Faça a Fiação

Passo 5: Configure a Biblioteca 1Sheeld

Você pode gerenciar qualquer biblioteca da IDE do Arduino. Basta clicar em Sketch >> Include library >> Manage libraries >> digite OneSheeld >> clique em install e pronto. Ou você pode baixar a biblioteca daqui: https://1sheeld.com/downloads/ Então abra sua Arduino IDE, escolha sketch na barra de menu >> Include library >> add .zip file >> escolha o arquivo zip que acabou de baixar.

Passo 6: Instale o App 1Sheeld

Baixe o app móvel 1Sheeld do site ou visite a Apple App Store ou Google Play Store para obter o app.

Passo 7: Acesse os Shields

Siga o tutorial de primeiros passos do 1Sheeld e no final escolha os seguintes shields:

Então pressione o botão de shield múltiplo.

Código

Código Amazon Echo Arduino
/* OPCIONAL: Para reduzir o tamanho da biblioteca compilada e limitar seu uso de memória, você pode especificar quais shields deseja incluir no seu sketch definindo CUSTOM_SETTINGS e o respectivo INCLUDE_ define do shield. */
#define CUSTOM_SETTINGS
#define INCLUDE_INTERNET_SHIELD
#define INCLUDE_VOICE_RECOGNIZER_SHIELD
#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_MUSIC_PLAYER_SHIELD
#define INCLUDE_CLOCK_SHIELD

/* Inclui biblioteca 1Sheeld. */
#include <OneSheeld.h>

/* cria um valor inicial para o contador millis. */
unsigned long previousMillis = 0;

/* cria um estado inicial para chamar alexa. */
bool state = 0;

/* Chama uma api que retornará o status do clima no Cairo, Egito. */
HttpRequest request1("https://api.openweathermap.org/data/2.5/weather?q=Cairo,EG&appid=43d95b4cf5d0573e2dfe5186c160017a");

/* define os 3 transistores nos pinos 3,5 e 6. */
#define strip1 3
#define strip2 6
#define strip3 5

/* define a lâmpada no pino 13. */
int lamp = 13;

/* define a variável que conterá as horas e minutos. */
int hour, minute;

/* Cria 2 arrays de caracteres para capturar a string que você deseja da frase. */
char b[4];
char c[4];

/* define variáveis para conter hora e minutos em string. */
String strh, strm;

/* define variável para conter o status do dia am ou pm. */
String noon;

/* Comandos de voz definidos pelo usuário. */
const char mainCommand[] = "alexa";
const char weatherCommand[] = "how is the weather today";
const char playCommand[] = "play music";
const char clockCommand[] = "what time is it";
const char stopCommand[] = "stop";
const char lightonCommand[] = "turn on the lights";
const char lightoffCommand[] = "turn off the lights";

void setup() {
  /* Inicia Comunicação. */
  OneSheeld.begin();

  /* define as fitas LED e a lâmpada como saída. */
  pinMode(strip1,OUTPUT);
  pinMode(strip2,OUTPUT);
  pinMode(strip3,OUTPUT);
  pinMode(lamp,OUTPUT);

  /* Inscreve no callback de sucesso para a requisição. */
  request1.setOnSuccess(&onSuccess1);

  /* Inscreve nas respostas de valor json. */
  request1.getResponse().setOnJsonResponse(&onJsonReply1);

  /* ao reconhecer voz, chama a função "myFunction". */
  VoiceRecognition.setOnNewCommand(&myFunction);
}

void loop () {
  /* faz um delay de 5 segundos usando contador millis para manter a detecção de voz viva. */
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= 5000) {
    previousMillis = currentMillis;
    /* obtém a hora atual no seu telefone. */
    Clock.queryDateAndTime();
    /* inicia reconhecimento de voz. */
    VoiceRecognition.start();
  }

  /* salva a hora e minutos do smartphone em variáveis. */
  hour = Clock.getHours();
  minute = Clock.getMinutes();

  /* detecta o status da hora se é am ou pm. */
  if (hour > 12) {
    hour -= 12;
    noon = "P M";
  } else {
    noon = "A M";
  }

  /* salva hora e minutos como string. */
  strh = String(hour);
  strm = String(minute);

  /* salva a string em um array de caracteres. */
  strh.toCharArray(b, 4);
  strm.toCharArray(c, 4);
}

/* Esta função será invocada cada vez que um novo comando for dado. */
void myFunction (char *commandSpoken) {
  /* verifica se alguém chamou alexa ou não. */
  if (!strcmp(mainCommand, VoiceRecognition.getLastCommand())) {
    alexon();
    MusicPlayer.setVolume(5);
    /* se sim, torna state = 1. */
    state = 1;
  }

  /* verifica se você pediu para tocar música depois de chamar alexa. */
  if (!strcmp(playCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    MusicPlayer.play();
    delay(10000);
    MusicPlayer.stop();
    state = 0;
  }

  /* verifica se você pediu para obter o status do clima depois de chamar alexa. */
  else if(!strcmp(weatherCommand,VoiceRecognition.getLastCommand())&& state == 1) {
    alexoff();
    Internet.performGet(request1);
    /* Espera 5 segundos. */
    OneSheeld.delay(5000);
    state = 0;
  }

  /* verifica se você pediu a hora depois de chamar alexa. */
  if(!strcmp(clockCommand,VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    /* 1Sheeld responde usando text-to-speech. */
    TextToSpeech.say("time in cairo is");
    delay(1300);
    TextToSpeech.say(b);
    delay(600);
    TextToSpeech.say(c);
    delay(800);
    TextToSpeech.say(noon);
    delay(500);
    state = 0;
  }

  /* verifica se você pediu para ligar a lâmpada depois de chamar alexa. */
  if (!strcmp(lightonCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    digitalWrite(lamp,HIGH);
    TextToSpeech.say("the lights turned on");
    delay(6000);
    state = 0;
  }

  /* verifica se você pediu para desligar a lâmpada depois de chamar alexa. */
  else if (!strcmp(lightoffCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    digitalWrite(lamp,LOW);
    TextToSpeech.say("the lights turned off");
    delay(3000);
    state = 0;
  }
}

void onSuccess1(HttpResponse & response1) {
  /* Usando a resposta para consultar a cadeia Json até o valor requerido. */
  /* ou seja, Obtém o valor de 'main' no primeiro objeto do array 'weather' na resposta. */
  /* Desde que a resposta esteja em formato JSON. */
  response1["weather"][0]["main"].query();
  delay(200);
}

void onJsonReply1(JsonKeyChain & hell,char * output) {
  if(hell == request1.getResponse()["weather"][0]["main"]) {
    TextToSpeech.say("the weather today in cairo is");
    delay(2000);
    /* 1Sheeld responde usando text-to-speech shield. */
    TextToSpeech.say(output);
  }
}

void alexon(){
  /* Liga as fitas em ordem como a mesma ordem do amazon echo. */
  digitalWrite(strip1,HIGH);
  delay(200);
  digitalWrite(strip2,HIGH);
  delay(200);
  digitalWrite(strip3,HIGH);
}

void alexoff(){
  /* Desliga as fitas. */
  digitalWrite(strip1,LOW);
  digitalWrite(strip2,LOW);
  digitalWrite(strip3,LOW);
}

Esquemáticos

Construa uma Smart Speaker Estilo Amazon Echo com Arduino e 1Sheeld

Processo de manufatura

  1. Transferência de Dados de Temperatura e Umidade entre Dois Arduinos via Firebase
  2. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  3. Controle Remoto Universal Android com Arduino, 1Sheeld e IR
  4. Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
  5. Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
  6. Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano
  7. Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
  8. Braço Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
  9. Tanque Autônomo com Walabot, Arduino, Raspberry Pi e Integração Alexa
  10. Construa um Rádio FM Compacto com Arduino Nano e RDA5807M