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

Volledige controle over uw tv met Alexa en Arduino IoT Cloud

Componenten en benodigdheden

Arduino Nano 33 IoT
× 1
Weerstand 330 ohm
× 1
IR-ontvanger (algemeen)
ex. VS1838B
× 1
IR-zender (algemeen)
× 1
Jumperdraden (algemeen)
× 1
Broodplank (algemeen)
× 1

Apps en online services

Arduino Web Editor
Arduino IoT Cloud
Arduino Amazon Alexa officiële Arduino-vaardigheid

Over dit project

Opmerking:deze tutorial kan verouderd zijn, ga naar hier voor een meer actuele versie.

Intro:Arduino IoT Cloud

Arduino IoT Cloud is een platform waarmee iedereen gemakkelijk IoT-verbonden objecten kan bouwen. Om onze tv te bedienen met Alexa, gebruiken we ook de officiële Arduino Alexa-vaardigheid.

Als Arduino IoT Cloud nieuw voor je is, raden we je aan om eerst dit introductieproject te bekijken, dat je een overzicht geeft en je begeleidt bij het opzetten van een van de ondersteunde boards, IoT Cloud Things em> en Eigenschappen en krijg je aan boord.

Deel 1:Een tv-toestel bedienen

De gemakkelijkste manier om elke vorm van televisie te bedienen, is door te doen alsof we zijn eigen infraroodafstandsbediening zijn. Om dit te doen, moeten we luisteren voor de signalen die de afstandsbediening verzendt, leg de gegevens vast en boots deze na met ons Arduino-bord. Zodra het circuit is samengesteld, uploaden we deze schets naar ons bord. Het zal de IR-signaaluitbarstingen die worden gegenereerd door het indrukken van een knop op afstand, vertalen naar een reeks niet-ondertekende gehele getallen. Laten we de afstandsbediening op de Arduino IR-ontvanger richten we hebben gebouwd en druk op de volgende knoppen:

  • STROOM/STAND-BY
  • KANALEN VAN 1 TOT 9
  • VOLUME HOGER
  • VOLUME OMLAAG
  • MUTE
  • KANAAL OMHOOG
  • KANAAL OMLAAG

We zullen de waarden zien binnenkomen via de Seriële Monitor , gerapporteerd als rawData . Laten we ze voorlopig in een tekstbestand opnemen en elke lijst zijn eigen arraynaam toewijzen (chan1 , chan2 enzovoorts). De volgende waarden zijn alleen ter referentie en worden gegenereerd door de afstandsbediening van een Samsung-tv.

CHANNEL 1unsigned int chan1[67] ={4450,4500, 550,1700, 500.1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500.1700, 550.1700, 550 ,1700, 500,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500.1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550.1700, 500.1700, 550,600, 500.1700, 550.1700, 550 ,1700, 500.1700, 550.1700, 500};CHANNEL 2unsigned int chan2[67] ={4500.4500, 550.1700, 500.1700, 550.1700, 550.550, 550.550, 550.600, 500.600, 550.600, 500 ,1700, 550.1700, 500.1700, 550.600, 500.600, 550.550, 550.600, 500.600, 550.1700, 500.600, 550.1700, 500.600, 550.550, 550.600, 500.600, 550.550, 550.650, 450.1700, 550.600, 500 ,1700, 550.1700, 500.1700, 550.1700, 550.1700, 500};CHANNEL 3unsigned int chan3[67] ={4500.4500, 500.1700, 550.1700, 550.1700, 500.600, 550.550 , 550,600, 500,600, 550,550, 550,1700, 500.1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550.1700, 500.1700, 550,600, 550,550, 550,550, 550,600, 550,550, 550,550 ,1700, 500 ,600, 550,550, 550,1700, 550,1650, 550,1700, 550,1700, 500.1700, 600};CHANNEL 4unsigned int chan4[67] ={4450,4450, 550.1700, 550.1700, 500 ,1700, 550,600, 500,600, 550,550, 600,550, 500,600, 550,1700, 500.1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500.1700, 550,600, 500,600, 550,1700 , 550,600, 500.1700, 550.1700, 550.1700, 500.600, 550.1700, 500.1700, 550.1700, 550.1700, 500}; CHANNEL 5unsigned int chan5 [67] ={4500.4500, 500.1700, 550.1700, 550.1700, 550.550, 550.550, 550.550, 600.550, 550.550, 550.1700, 550.1650, 550.1700, 550.550, 550.600 500,600, 550,550, 550,600, 500.1700, 550,600, 500,600, 550,1700, 500,600, 550,550, 550,600, 550,550, 550,550, 550.1700, 550.1700, 500.600, 550.1700, 500.1700, 550.1700 , 550.1700, 500}; KANAAL 6 unsigned int chan6 [67] ={4500,4500, 550,1650, 550,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 500,600, 550.1700, 500.1700, 550.1700, 550.550, 600.550 , 500.600, 550.550, 600.550, 550.550, 550.1700, 500.600, 550.1700, 500.600, 550.550, 550.600, 500.600, 550.1700, 500.600, 550.1700, 500.600, 550.1650, 600.1650, 550.1700 , 550,1650, 600}; CHANNEL 7unsigned int chan7 [67] ={4500.4500, 550.1700, 500.1700, 550.1750, 500.550, 550.600, 500.650, 500.550, 550.550, 550.1750, 500.1700, 500.1700, 550.650, 450.650 , 500.550, 550.600, 500.650, 500.550, 550.600, 500.1700, 550.1750, 500.600, 500.550, 550.600, 500.650, 500.1750, 450.1700, 550.600, 500.650, 500.1700, 500.1700, 550.1750 , 500.1700, 500}; CHANNEL 8unsigned int chan8 [67] ={4450,4550, 500.1700, 550,1700, 550,1650, 550,600, 500,600, 550,550, 550,600, 500,600, 550.1700, 500.1700, 550.1700, 550.550, 550.600 500,600, 550,550, 550,600, 500.1700, 550,600, 500.1700, 550,1700, 500,600, 550,550, 550,650, 450,600, 550,550, 550.1700, 550.550, 550.600, 500.1700, 550.1700, 550.1700 , 500.1700, 550}; KANAAL 9 unsigned int chan9 [67] ={4450,4500, 550,1700, 550,1700, 500.1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550.1700, 500.1700, 550.1700, 500.600, 550.550 , 550,600, 500,600, 550,550, 550,600, 500.1700, 550,1700, 550,1700, 500,600, 550,550, 550,550, 550,600, 500.1700, 550,600, 500,600, 550,550, 550.1700, 550.1700, 500.1700 , 550.1700, 550}; VOLUME UPunsigned int volUp [67] ={4500.4500, 550.1700, 500.1750, 500.1700, 550.600, 500.600, 500.600, 550.550, 550.600, 500.1700, 550.1700, 550.1700, 500.650, 450.600 , 550.600, 500.650, 450.650, 500.1700, 500.1750, 500.1750, 500.550, 550.600, 500.650, 500.550, 550.600, 500.650, 500.600, 500.600, 500.1700, 550.1750, 450.1750, 500.1700 , 550.1700, 500}; VOLUME DOWNunsigned int volDown [67] ={4450,4550, 500.1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 500,600, 500,600, 550.1700, 500.1700, 550,1700, 550,550, 550,600 , 500.600, 550.550, 550.600, 500.1700, 550.1700, 550.600, 500.1700, 550.600, 500.600, 500.600, 550.550, 550.600, 500.650, 500.1700, 500.650, 500.1700, 500.1750, 500.1700 , 550.1700, 500}; KANAAL UPunsigned int chanUp [67] ={4500.4450, 550.1700, 550.1650, 550.1700, 550.550, 550.600, 550.550, 550.550, 600.550, 550.1650, 550.1700, 550.1650, 600.550, 550.550 , 550,600, 500,600, 550,550, 550,550, 550,1700, 550,550, 600,550, 550,1650, 550,600, 550,550, 550,550, 550.1700, 550.550, 550.1700, 550.1700, 550.550, 550.1650, 600.1650 , 550.1700, 550}; KANAAL DOWNunsigned int chanDown [67] ={4500.4450, 600.1650, 550.1700, 550.1650, 550.600, 550.550, 550.550, 550.600, 500.600, 550.1700, 500.1700, 550.1700, 550.550, 550.600 , 550.550, 550.550, 550.550, 600.550, 550.550, 550.600, 500.600, 550.1650, 600.550, 550.550, 550.550, 600.1650, 550.1700, 500.1700, 600.1650, 550.550, 600.1650, 550.1700 , 500.1700, 550}; 

Deel 2:Arduino IoT Cloud

Van de belangrijkste Arduino IoT Cloud pagina maken we een nieuw Thing en geef het een betekenisvolle naam. Laten we het TVRemoteController noemen . We selecteren dan het bord dat we gaan gebruiken. Voor deze tutorial hebben we een Arduino Nano 33 IoT gebruikt, maar als je een ander compatibel bord hebt, komt het ook goed, houd er rekening mee dat de pinout en het gedrag van de IR-bibliotheek kunnen veranderen. Als je je bord op dit moment niet kunt zien, heb je misschien de Aan de slag . overgeslagen procedure die we hierboven noemden, als dit het geval is, ga dan terug door dat proces.

Als je klaar bent, voegen we één Eigenschap toe naar ons Thing , het zal ons tv-toestel vertegenwoordigen. Onder de Smart Home categorie, selecteer "TV" als Property Type, stel het in als "Read &Write" en selecteer onder "Update" "When the value changes".

Hier is wat de Eigenschappen weergave van ons ding zou er op dit punt als volgt uit moeten zien:

Deel 3:Arduino-webeditor

Het is tijd om op de knop "SCHETS BEWERKEN" te klikken, waarmee we naar de webeditor gaan, waar we wat aangepaste code kunnen toevoegen aan de schets die automatisch wordt gegenereerd door IoT Cloud.

Het eerste dat we moeten toevoegen, is de IR Remote-bibliotheek, door Ken Shirriff.

#include  

We moeten dan één tweedimensionale array instellen voor onze kanalen en 6 arrays voor de opdrachten die we nodig hebben. Als je het je herinnert, hebben we in deel 1 enkele IR-gegevens vastgelegd die we nu zullen gebruiken om onze arrays te vullen

const unsigned int chan[9][67] ={ {chan1}, {chan2}, {chan3}, {chan4}, {chan5}, {chan6}, {chan7}, {chan8}, {chan9}};const unsigned int volUp[67] ={...}; const unsigned int volDown[67] ={...};const unsigned int chanUp[67] ={...}; const unsigned int chanDown[67] ={...};const unsigned int onoff[67] ={...};const unsigned int mute[67] ={...}; 

Laten we dan de IR-bibliotheek en de vereiste frequentie instellen (voor dit soort toepassingen zal dit altijd 38 KHz zijn)

IRsend irsend;const int freq =38; 

We hebben ook een functie nodig om IR-commando's uit te zenden en de ingebouwde LED te laten knipperen (in dit stadium vooral voor foutopsporingsdoeleinden). De gebruikte vertragingswaarde is afhankelijk van het merk en model van je televisie, dus voel je vrij om het aan te passen als dingen niet werken zoals verwacht (verkeerde commando's of geen commando's ontvangen).

void sendIR(const unsigned int buf[]) {digitalWrite(LED_BUILTIN, HIGH); irsend.sendRaw(buf, 67, freq); vertraging (300); digitalWrite(LED_BUILTIN, LAAG);} 

De laatste stap is het voltooien van de gegenereerde callback onTvChange() met een aangepaste code om IR-opdrachten te verzenden wanneer de tv-eigenschap wordt gewijzigd door Alexa-opdrachten. Als het volume bijvoorbeeld wordt verhoogd, moeten we virtueel op de knop Volume omhoog . drukken als het kanaal is ingesteld op 7, moeten we de reeks voor de knop van kanaal 7 verzenden, enzovoort.

void onTvChange() { Serial.println("=================="); Serial.println("Switch:"+String(tv.getSwitch())); Serial.println("Volume:"+String(tv.getVolume())); Serial.println("Kanaal:"+String(tv.getChannel())); Serial.println("Mute:"+String(tv.getMute())); Serial.println("=================="); if (first){ prevSwitch =tv.getSwitch(); prevVolume =tv.getVolume(); prevChannel =tv.getChannel(); prevMute =tv.getMute(); eerste =onwaar; opbrengst; } // Volume gewijzigd als (tv.getVolume()> prevVolume) { tv.setMute(false); prevMute =onwaar; for (int k =prevVolume + 1; k<=tv.getVolume(); k++) { sendIR(volUp); Serial.println("Volume gevraagd:"+String(tv.getVolume())+" Set:"+String(k)); } prevVolume =tv.getVolume(); } else if (tv.getVolume() =tv.getVolume(); k--) { sendIR(volDown); Serial.println("Volume gewijzigd:"+String(tv.getVolume())+" Instellen:"+String(k)); } prevVolume =tv.getVolume(); } // Mute gewijzigd if (tv.getMute() !=prevMute &&tv.getMute()) { prevMute =tv.getMute(); sendIR(mute); Serial.println("Mute gewijzigd:"+String(tv.getMute())); } else if (tv.getMute() !=prevMute &&!tv.getMute()) { prevMute =tv.getMute(); sendIR(mute); Serial.println("Mute gewijzigd:"+String(tv.getMute())); } // Kanaal gewijzigd if (tv.getChannel() !=prevChannel) { int newChannel =tv.getChannel(); if (newChannel> 0 &&newChannel <10) { sendIR (chan [newChannel-1]); } else if (newChannel> 9) { if (newChannel> prevChannel) { for (int ch =prevChannel; ch  newChannel; ch--) { sendIR (chanDown); Serial.println ("Chan gevraagd:"+String(newChannel)+" Set:"+String(ch)); } } } prevChannel =nieuwKanaal; Serial.println("Kanaal gewijzigd:"+String(tv.getChannel())); } // Aan/Uit gewijzigd if (tv.getSwitch() !=prevSwitch) { prevSwitch =tv.getSwitch(); if (tv.getSwitch()) { sendIR(chan[6]); } else { sendIR(aanuit); } Serial.println("Switch gewijzigd:"+String(tv.getSwitch())); } 

Deel 4:Amazon Alexa

We hebben nu de Amazon Alexa-app . nodig die kan worden gedownload van de Apple App Store of de Google Play Store. Na de installatie logt u in met uw bestaande account of maakt u een nieuwe aan.

Laten we de stappen doorlopen die nodig zijn om de Arduino Alexa Skill te installeren en deze te configureren om toegang te krijgen tot onze tv en deze te bedienen. We volgen de reeks afbeeldingen hieronder om alle vereiste stappen te zien.

We zijn klaar, het is nu tijd om onze tv met stem te bedienen en dingen te vragen als

  • "Alexa, zet het volume hoger op de tv."
  • "Alexa, tv dempen" of "Alexa, tv dempen".
  • "Alexa, volgende zender op tv."

Veel plezier met het spelen met Alexa en IoT Cloud. Als je vragen hebt en/of dit project wilt bouwen, laat het ons dan weten in de reacties hieronder.

Bedankt,

Het Arduino-team

Code

Arduino

Schema's


Productieproces

  1. Schakel Alexa Control in op je plafondventilator
  2. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  3. Universele afstandsbediening met Arduino, 1Sheeld en Android
  4. DIY voltmeter met Arduino en smartphone
  5. Hartslagmeter met IoT
  6. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  7. IOT - Smart Jar met ESP8266, Arduino en ultrasone sensor
  8. Ken de temperatuur van uw huis overal met Arduino Cloud!
  9. Bedien Arduino Rover met Firmata en Xbox One Controller
  10. Arduino-luchtbevochtigerbediening
  11. Sonar met arduino en weergave op verwerkings-IDE