Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

Onderdelen en benodigdheden

OnderdeelAantal
Arduino 1011
1Sheeld1
Staavlamp1
RGB LED-strip1
Relaisbord1
Apple iPhone1
Breadboard (standaard)1
USB-A naar B Kabel1
Draadbruggen (standaard)30
Algemene Doel Transistor NPN3

Benodigde tools en machines

  • Boormachine
  • PVC-buizen

Apps en online diensten

  • Arduino IDE

Over dit project

Een paar maanden geleden bezocht ik een vriend en was verbazingwekkend over de Amazon Echo die hij had.

Hij kan muziek afspelen, de huislampen besturen, me nieuws en weersvoorspellingen vertellen, en zelfs datum en tijd, allemaal met alleen spraakcommando's.

Op dat moment schreeuwde de maker in mij: "Waarom maak ik het niet zelf!".

Vanaf die dag begon ik te zoeken naar componenten die me konden helpen een Arduino-gebaseerde Amazon Echo te maken, tot ik de geweldige 1Sheeld ontdekte.

1Sheeld is een platform voor Arduino dat je in staat stelt om gebruik te maken van de sensoren en mogelijkheden van je smartphone en deze in je Arduino-projecten te gebruiken.

Eenvoudig gezegd is het een hardware-shield die bovenop je Arduino-bord zit en via Bluetooth communiceert met deze Android-app, om data tussen de twee over te dragen.

Je kunt de getting started tutorial op de 1Sheeld-website bekijken, die je stap voor stap begeleidt tot je de 1Sheeld soepel kunt bedienen en die een geweldige referentie is voor geweldige Arduino-projecten.

Ik heb in dit project vijf shields gebruikt van de 40+ shields in de 1Sheeld.

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

De eerste is de Spraakherkenning Shield die ik gebruikte om het hele systeem met spraakcommando's te besturen. Het is een heel simpele shield die ik kan activeren met slechts 1 regel code: VoiceRecognition.start();

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

Vervolgens gebruikte ik de Muziekspeler Shield die me toestaat toegang te krijgen tot de muziekspeler van de smartphone en de nummers die ik wil afspelen heel soepel te kiezen. Eigenlijk is het zo simpel dat ik alleen deze regel gebruikte om de muziekspeler shield te activeren: MusicPlayer.play();

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

De derde shield die ik gebruikte is een van de belangrijkste shields in het project, het is de Tekst-naar-Spraak Shield die een menselijke interactie aan het project toevoegt alsof iemand reageert op wat je zegt. Het was zo makkelijk om het systeem responsief te maken: TextToSpeech.say("tijd in Caïro is");

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

Na het activeren van de Tekst-naar-Spraak shield heb ik de Klok Shield geactiveerd die de klok in realtime teruggeeft en het systeem kan reageren met de tijd zodra ik erom vraag, geweldig! isn't it :), en ik kan de huidige tijd in mijn telefoon eenvoudig ophalen met deze functie: Clock.queryDateAndTime();

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

De laatste shield die ik gebruikte is de Internet Shield die naar mijn mening de krachtigste shield in de 1Sheeld is. Ik gebruikte die shield om de huidige weersstatus in mijn thuishoofdstad op te halen via een API van de "openweathermap" website waar ik de API kan aanroepen met die regel: HttpRequest request1("/*het API-adres */");

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

Stap 1: Verzamel de componenten

  • Arduino 101 $30,99
  • 1Sheeld+ bord $54,94
  • iPhone $155,50
  • PVC-buizen $2
  • LED-strip $5
  • 12V voeding $7
  • Relaisbord $3
  • Draadbruggen en draden $3
  • 3 NPN-transistoren $1

Stap 2:

Gatjes boren in de buis om het geluid naar buiten te laten.

Stap 3:

Verf de PVC-buis met zwarte spuitverf.

Stap 4: Maak de bedrading

  • Verbind de LED-strips met de transistoren en de voeding
  • Verbind de lamp met het relaisbord en de AC-klemmen
  • Verbind het relaisbord en de LED-strips met het Arduino 101-bord zoals in de code hieronder vermeld
  • Monteer al dat met de iPhone binnenin de PVC-buizen

Stap 5: Stel 1Sheeld-bibliotheek in

Je kunt bibliotheken beheren via Arduino's IDE. Klik op Sketch >> Include library >> Manage libraries >> typ OneSheeld >> klik op installeren en je bent klaar. Of je kunt de bibliotheek downloaden van hier: https://1sheeld.com/downloads/ Open je Arduino IDE, kies sketch in de menubalk >> Include library >> add .zip file >> kies het zojuist gedownloade zip-bestand.

Stap 6: Installeer 1Sheeld-app

Download de 1Sheeld mobiele app van de website of bezoek de Apple App Store of Google Play Store om de app te krijgen.

Stap 7: Open de shields

Volg de 1Sheeld getting started tutorial en kies aan het einde de volgende shields:

  • Spraakherkenning
  • Tekst-naar-Spraak
  • Klok
  • Internet
  • Muziekspeler

Druk vervolgens op de knop voor meerdere shields.

Code

  • Amazon echo code
Amazon echo code Arduino
/* OPTIONEEL: Om de gecompileerde bibliotheekgrootte te verkleinen en het geheugengebruik te beperken, kun je opgeven welke shields je wilt includen in je sketch door CUSTOM_SETTINGS en de respectievelijke INCLUDE_ defines te definieren. */
#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
/* Include 1Sheeld bibliotheek. */
#include <OneSheeld.h>
/* Maak een initiële waarde voor de millis-teller. */
unsigned long previousMillis = 0;
/* Maak een initiële status voor het aanroepen van alexa. */
bool state = 0;
/* Roep een API aan die de weersstatus in Caïro, Egypte teruggeeft. */
HttpRequest request1("https://api.openweathermap.org/data/2.5/weather?q=Cairo,EG&appid=43d95b4cf5d0573e2dfe5186c160017a");
/* Definieer de 3 transistoren op pinnen 3,5 en 6. */
#define strip1 3
#define strip2 6
#define strip3 5
/* Definieer de lamp op pin 13. */
int lamp = 13;
/* Definieer de variabele die de uren en minuten zal bevatten. */
int hour, minute;
/* Maak 2 karakter arrays om de string die je wilt uit de zin te vangen. */
char b[4];
char c[4];
/* Definieer variabelen om de uur en minuten in string op te slaan. */
String strh, strm;
/* Definieer variabele om de dagstatus am of pm op te slaan. */
String noon;
/* Spraakcommando's ingesteld door de gebruiker. */
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() {
  /* Start communicatie. */
  OneSheeld.begin();
  /* Zet de LED-strips en de lamp op output. */
  pinMode(strip1, OUTPUT);
  pinMode(strip2, OUTPUT);
  pinMode(strip3, OUTPUT);
  pinMode(lamp, OUTPUT);
  /* Abonneer op success callback voor het verzoek. */
  request1.setOnSuccess(&onSuccess1);
  /* Abonneer op JSON-waarde antwoorden. */
  request1.getResponse().setOnJsonResponse(&onJsonReply1);
  /* Bij een herkende spraakcommando, roep de functie "myFunction" aan. */
  VoiceRecognition.setOnNewCommand(&myFunction);
}

void loop() {
  /* Maak een vertraging van 5 seconden met millis-teller om de spraakdetectie actief te houden. */
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= 5000) {
    previousMillis = currentMillis;
    /* Haal de huidige tijd op in je telefoon. */
    Clock.queryDateAndTime();
    /* Start spraakherkenning. */
    VoiceRecognition.start();
  }
  /* Sla de smartphone uren en minuten op in variabelen. */
  hour = Clock.getHours();
  minute = Clock.getMinutes();
  /* Detecteer de tijdstatus of het am of pm is. */
  if (hour > 12) {
    hour -= 12;
    noon = "P M";
  } else {
    noon = "A M";
  }
  /* Sla de uur en minuten op als string. */
  strh = String(hour);
  strm = String(minute);
  /* Sla de string op in een karakterarray. */
  strh.toCharArray(b, 4);
  strm.toCharArray(c, 4);
}

/* Deze functie wordt elke keer aangeroepen wanneer een nieuw commando wordt gegeven. */
void myFunction(char *commandSpoken) {
  /* Controleer of iemand alexa aanroept of niet. */
  if (!strcmp(mainCommand, VoiceRecognition.getLastCommand())) {
    alexon();
    MusicPlayer.setVolume(5);
    /* Als ja, maak state = 1. */
    state = 1;
  }
  /* Controleer of je om muziek te spelen vraagt na het aanroepen van alexa. */
  if (!strcmp(playCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    MusicPlayer.play();
    delay(10000);
    MusicPlayer.stop();
    state = 0;
  }
  /* Controleer of je om de weersstatus vraagt na het aanroepen van alexa. */
  else if (!strcmp(weatherCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    Internet.performGet(request1);
    /* Wacht 5 seconden. */
    OneSheeld.delay(5000);
    state = 0;
  }
  /* Controleer of je om de tijd vraagt na het aanroepen van alexa. */
  if (!strcmp(clockCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    /* 1Sheeld reageert met tekst-naar-spraak. */
    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;
  }
  /* Controleer of je om de lamp aan te zetten vraagt na het aanroepen van alexa. */
  if (!strcmp(lightonCommand, VoiceRecognition.getLastCommand()) && state == 1) {
    alexoff();
    digitalWrite(lamp, HIGH);
    TextToSpeech.say("the lights turned on");
    delay(6000);
    state = 0;
  }
  /* Controleer of je om de lamp uit te zetten vraagt na het aanroepen van 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) {
  /* Gebruik de response om de JSON-ketting op te vragen tot de vereiste waarde. */
  /* bv. Haal de waarde van 'main' op in het eerste object van de array 'weather' in de response. */
  /* Aangenomen dat de response in JSON-formaat is. */
  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 reageert met tekst-naar-spraak shield. */
    TextToSpeech.say(output);
  }
}

void alexon() {
  /* Zet de strips aan in dezelfde volgorde als Amazon Echo. */
  digitalWrite(strip1, HIGH);
  delay(200);
  digitalWrite(strip2, HIGH);
  delay(200);
  digitalWrite(strip3, HIGH);
}

void alexoff() {
  /* Zet de strips uit. */
  digitalWrite(strip1, LOW);
  digitalWrite(strip2, LOW);
  digitalWrite(strip3, LOW);
}

Schema's

Bouw een Amazon Echo-achtige Slimme Speaker met Arduino en 1Sheeld

Productieproces

  1. Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
  2. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  3. Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
  4. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  5. Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
  6. Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
  7. Naadloze LED-dimmer met Bolt IoT en Arduino UNO
  8. Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
  9. Zelf een autonomere tank bouwen: Walabot, Arduino, Raspberry Pi & Alexa-integratie
  10. Bouw een compacte FM-radio met Arduino Nano en RDA5807M
  11. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel