Bygg din egen superfjernkontroll
Slik kan du samle alle trykkerne i én datastyrt enhet.
Innhold
- Oppsett av elektronikk og programvare
- Verktøy for entusiaster
- Prinsippet bak en fjernkontroll
- Hva trenger vi?
- Koble opp elektronikken
- Last ned og installer IR-bibliotek
- Lage fjernkontrolleser
- Konstruksjonen av fjernkontrolleseren
- To hovedfunksjoner
- Vi modifiser koden
- Last opp koden og test
- Test av leseren
- Lage testfjernkontroll
- Hva foregår i programkoden?
- Finn riktig funksjon
- Test programmet
- Sett sammen din drømmefjernkontroll
- Legge til flere funksjoner
- Tastatursnarveier
- Hva er mulig med Arduino?
Oppsett av elektronikk og programvare
For 60 år siden kom en av de mer revolusjonerende oppfinnelsene for TV-titting til verden; den trådløse fjernkontrollen. Noen år før dette hadde en trådbasert fjernkontroll med kabel festet til TV-en blitt introdusert, men på grunn av at så mange snublet i kabelen kom det inn en rekke klager på denne løsningen.
Eugene Polley i Zenith Electronic utviklet derfor en trådløs fjernkontroll som brukte lys for å styre TV-en istedet. Denne fikk navnet «the Flashmatic». Men det var ikke en feilfri løsning dette heller. Oppfinnelsen benyttet seg av fotoceller for å oppdage lyset fra fjernkontrollen, så dersom TV-en ble utsatt for direkte sollys, kunne man risikere at den skiftet kanal eller skrudde seg av på egenhånd.
I 1956 utviklet Robert Adler, som også jobbet for Zenith, en fjernkontroll uten batteri. Dette var en mekanisk fjernkontroll basert på ultralyd. Når man trykket på en knapp slo en mekanisk hammer i en tast som laget en lyd med en frekvens høyere enn det mennesket kan høre. I TV-en satt det en mikrofon som kunne gjenkjenne denne lyden og dermed utføre en funksjon. Denne ble brukt over mange år før man senere gikk over til å bruke infrarøde signaler, som blir brukt den dag i dag.
En fjernkontroll er som regel laget bare for å kontrollere akkurat den enheten du har kjøpt, men visste du at det faktisk er mulig å lage sin egen universalfjernkontroll som kan styre alle dine enheter? I denne guiden skal vi vise deg hvordan du kan lage din egen, ved hjelp av knøttemaskinen Arduino og noen enkle komponenter.
Få også med deg forrige del i serien:
Slik kommer du i gang med knøttemaskinen Arduino »
Verktøy for entusiaster
En Arduino er et utrolig kult verktøy for teknologientusiaster. Det er et elektronikkort som fungerer som en slags liten datamaskin. Den har en liten prosessor, litt minne og litt lagringsplass. Du kan plugge den inn i USB-porten på PC-en din og programmere den ved hjelp av en forenklet versjon av programmeringsspråkene C/C++, som er perfekt for nybegynnere. Den har flere innganger og utganger hvor du kan koble til annen elektronikk som for eksempel en lysdiode, en bryter, en temperatursensor, et enkelt LCD-display eller andre elektronikkomponenter.
I tillegg til å ha mulighet for å koble på enkle komponenter som en bryter eller en lysdiode, finnes det også såkalte Arduino «shields», eller «skjold» på norsk. Dette er elektronikkort som kan utvide Arduinoen med funksjonalitet som for eksempel WiFi, 3G, GSM, MP3-avspilling og masse annet.
Fordelene med en Arduino er at den er laget på en slik måte at selv de som ikke har teknisk bakgrunn skal kunne klare å bruke den. Det å lage noe med en Arduino er utrolig lærerikt, og med litt kunnskaper om hvordan den fungerer kan du kan lage alt fra et automatisk vanningssystem til en mobiltelefon. I denne guiden vil du lære hvordan du kan bruke en Arduino, sammen med tre enkle komponenter, til å lage din egen ultimate drømmefjernkontroll.
Prinsippet bak en fjernkontroll
En typisk fjernkontroll for TV-er, stereoanlegg og DVD-spillere bruker infrarøde (IR) signaler for å sende data over til den enheten som skal styres. Hvilke data som blir sendt avgjør hvilken funksjon som utføres, for eksempel «volum opp». For å lage en fjernkontroll trenger vi å sende infrarøde signaler med de dataene som trengs for å utføre den funksjonen vi vil utføre. Men hvordan vet vi hvilke data vi skal sende for å oppnå hvilken funksjon?
For noen TV-er er disse dataene dokumentert og lett tilgjengelig på Internett, mens for andre TV-er er det nærmest umulig å finne noe som helst informasjon. For å finne ut hvilke data som blir sendt fra din fjernkontroll må vi derfor lese av disse først, slik at vi enkelt og greit bare kan kopiere de funksjonene vi ønsker å ha med. Vi må også finne ut hvilken protokoll de blir sendt på, fordi forskjellige fjernkontroller bruker forskjellige måter å kode dataene på.
I denne guiden skal vi derfor først lage en «fjernkontrolleser», som kan lese data og protokolltype fra en nesten hvilken som helst fjernkontroll som bruker infrarøde signaler.
Når vi har funnet dataene og protokollen som skal brukes, skal vi bruke denne til å lage en testfjernkontroll. Til slutt skal vi utvide med flere fjernkontrollfunksjoner, og koble disse opp mot tastaturkombinasjoner på datamaskinen din slik at den blir lett å bruke. I den ferdige fjernkontrollen kan du til og med kombinere forskjellige funksjoner fra forskjellige fjernkontrollere.
For å lage vår fjernkontroll skal vi altså:
- Lage en fjernkontrolleser
- Lage en testfjernkontroll
- Kombinere flere funksjoner til en multifunksjonell fjernkontroll
- Koble fjernkontrollen opp mot tastaturkombinasjoner på datamaskinen
Hva trenger vi?
I denne guiden bruker vi en Arduino UNO, men andre typer Arduino-versjoner kan også brukes. Vi trenger også en motstand, en IR-diode og en IR-mottaker. Alle disse komponentene er lett tilgjengelige på nettbutikker som selger elektronikkomponenter. Dessverre har vi ikke så mange gode alternativer i Norge som selger til privatkunder, men det finnes mange internasjonale alternativer som sender til Norge – for eksempel Adafruit, Sparkfun eller eBay, men nylig har også Digital Impuls i Oslo og Trondheim begynt å ta inn Arduino med komponenter.
Komponentliste:
- Arduino Uno
- Motstand (100 Ohm)
- IR-diode
- IR-mottaker (TSOP31238)
En Arduino er forholdsvis enkel å installere, og instruksjoner for hvordan du gjør det på ditt operativsystem kan du finne på Arduinos nettsider.
Koble opp elektronikken
Det første vi skal gjøre er å koble opp elektronikken. For fjernkontrolleseren trenger vi bare å koble opp IR-mottakeren. For fjernkontrollen trenger vi bare IR-dioden og motstanden. Men for enkelhets skyld kobler vi opp alt med en gang, slik at vi kan hoppe frem og tilbake mellom de to funksjonene uten å måtte koble om for hver gang.
Koble opp elektronikken som vist på bildet til høyre:
For at IR-mottakeren skal fungere må den kobles opp med strøm. Derfor kobler vi den til en 5-volts pinne, som du ser på den røde ledningen på bildet. Vi kobler den også til jord, vist med sort ledning, og jord er merket «GND» på kortet. Den siste pinnen er for å gi ut data, som vi har koblet med en gul ledning. Den kobler vi til en digital inngang på Arduinoen. Det er egentlig vilkårlig hvilken inngang som brukes, men kodeeksemplene vi skal bruke senere i artikkelen går ut ifra at den er koblet på pinne 11 som vist i bildet. Du bør derfor bruke nettopp pinne 11.
IR-dioden kobles på motstanden, som så kobles til pinne 3. På den andre siden kobles dioden ned til jord. Motstanden kan kobles i vilkårlig retning, men det er viktig at IR-dioden kobles med den korte pinnen mot jord. Her er det også viktig at det er pinne 3 som brukes siden kodeeksemplene senere går ut ifra dette.
Last ned og installer IR-bibliotek
For å slippe å lage alt fra bunnen av, så skal vi bruke et bibliotek som heter Arduino-IRremote. Dette biblioteket inneholder eksempler vi skal ta utgangspunkt i for å lage vår fjernkontroll. Biblioteket har åpen kildekode, og kan lastes ned her. Dette biblioteket inneholder alt vi trenger for å sende og motta IR-signaler.
Last ned og installer biblioteket som beskrevet på nettsiden. Det er i prinsippet bare å laste ned en zip-fil, pakke den ut og gi den et nytt navn. Deretter legger du denne mappen i «...\Arduino\libraries». Dersom du for eksempel har innstallert Arduino i mappen «C:\Program Files\Arduino\», så skal IRremote-mappen legges slik at du får «C:\Program Files\Arduino\libraries\IRremote».
Lage fjernkontrolleser
Konstruksjonen av fjernkontrolleseren
Vi skal starte med å lage en fjernkontrolleser, som kan brukes på et veldig stort utvalg fjernkontrollere. Denne skal vi bruke til å kunne lese av hva en vilkårlig fjernkontroll sender ut. Vi trenger å finne ut av dette, slik at vi kan kopiere funksjonen inn i vår egen fjernkontroll. Forskjellige funksjoner har forskjellige data, og forskjellige fjernkontroller bruker forskjellige protokoller og antall bit. Så det er tre ting vi må lese ut:
- Hvilken protokoll bruker fjernkontrollen?
- Hvilke data brukes for den funksjonen vi vil kopiere?
- Hvor mange bit brukes i denne protokollen?
På forrige side koblet vi opp elektronikken, men Arduinoen vet ikke uten videre hva den skal gjøre med elektronikken. Det må vi fortelle den ved å programmere den med den funksjonaliteten vi ønsker. Vi trenger heldigvis ikke å lage programkoden fra bunnen av, så frykt ikke dersom du ikke har vært borti programmering før. Vi skal ta utgangspunkt i et kodeeksempel som ligger i IRremote-biblioteket vi installerte. Her trenger vi bare å gjøre noen enkle forandringer for å få den funksjonaliteten vi ønsker.
To hovedfunksjoner
Alle Arduino-programmer er bygd opp av to hovedfunksjoner; setup() og loop(). Når programmet starter vil alt som står inne i setup(), mellom de to krøllparentesene {}, utføres. Etter at dette er utført vil det som står mellom krøllparentesene til loop() utføres. Og som navnet tilsier, så vil alt som står inne i loop() gjentas om og om igjen helt til Arduinoen skrus av.
Noen ganger vil du se noen kodelinjer ligge utenfor setup() og loop(). For eksempel vi du senere se linjen:
#include "IRremote.h"
Dette betyr at IRremote-biblioteket skal gjøres tilgjengelig i programkoden.
For å kunne kommunisere mellom datamaskinen din og Arduinoen brukes en virtuell serieport, som går via USB-porten. Denne brukes til å laste opp programkode til Arduinoen, men den kan også brukes til å sende data mellom datamaskinen og Arduino når Arduinoen kjører. Vi skal bruke den til begge deler.
Vi modifiser koden
I IRremote-biblioteket finner vi et eksempel for å lese ut dataene til en funksjon fra fjernkontrollen. Dette eksempelet skriver bare ut dataene som blir sendt. Siden vi også vil finne ut hvilken protokoll det er snakk om og hvor mange bit som skal sendes, så må vi legge inn noen ekstra linjer kode, noe som kan se litt kryptisk ut dersom du ikke er vant med dette. Men ikke vær redd – det er egentlig ganske enkelt.
Vi tar utgangspunkt i filen «IRrecvDemo.ino», som inneholder et eksempel for å lese fjernkontrollsignaler. Denne finner du i mappen «example» under «IRremote». Den fulle banen er altså «...\Arduino\libraries\IRremote\examples\IRrecvDemo\IRrecvDemo.ino».
Åpne eksempelfilen «IRrecvDemo.ino» i Arduino-programmet. Dette eksempelet venter på at et IR-signal mottas, og skriver deretter ut dataene som mottas på serieporten. For å også kunne se hvilken protokoll og antall bit som brukes, skal vi modifisere eksempelet littegrann.
For å skrive ut protokollnummeret legger vi til disse to linjene i programkoden:
Serial.print(“Protokoll: “);
Serial.println(results.decode_type, DEC);
Den første kodelinjen skriver bare ut teksten «Protokoll: » på serieporten til Arduinoen, slik at vi senere kan finne tilbake til denne informasjonen. Den andre kodelinjen skriver ut et tall som representerer protokollen som er brukt. «results.decode_type» inneholder protokollnummeret som ble funnet. «DEC» forteller at det skal skrives ut i desimalform, i motsetning til heksadesimal eller binær form. For å skrive ut antall bit så legger vi til disse to linjene:
Serial.print("Antall bit: ");
Serial.println(results.bits, DEC);
Forskjellen på «print» og «println» er at «println» lager linjeskift etter det som blir skrevet ut.
Last opp koden og test
Nå har vi laget programkode som skriver ut dataene til fjernkontrollfunksjonen, protokollnummeret og antall bits. Neste steg er å laste opp denne programkoden til Arduinoen og prøve den ut.
For å laste opp må vi først verifisere programkoden vi har skrevet for å sjekke at det ikke er noe feil i den. Dette gjøres ved å trykke på «Verify». Når du gjør dette så vil programkoden kompileres, som betyr at den blir gjort om fra kode som mennesker kan lese, til kode som maskiner kan lese (0-ere og 1-ere).
Hvis alt er i orden vil du få en melding som sier «Done Compiling», som betyr at den er ferdig å kompilere. Hvis noe går galt, vil du få meldingen «Error Compiling». Da må du fikse feilene i programkoden din før du kan gå videre. Dobbeltsjekk isåfall at du har gjort modifikasjonene nøyaktig som beskrevet over. Et manglende semikolon er alt som skal til for at denne prosessen feiler, så det er viktig å holde tunga rett i munnen.
Når du har fått beskjeden «Done Compiling», er du klar til å laste opp programkoden. For å laste opp koden må Arduinoen være tilkoblet datamaskinen din via USB. Sørg for at riktig serieport er valgt via menyvalget «Tools -> Serial Port». Hvis du har flere muligheter og ikke vet hvilken som er den riktige, kan du finne det ut ved å starte opp Arduino-programmet uten Arduinoen plugget inn, og notere deg hvilke alternativer som finnes under «Tools -> Serial Port». Lukk så programmet, plugg inn Arduinoen og start opp programmet igjen. Det alternativet som nå har dukket opp under «Tools -> Serial Port» er Arduinoen din.
Sjekk også at riktig Arduino-type er valgt i menyvalget «Tools -> Board». Trykk på «Upload» for å laste opp koden. Når du får beskjeden «Upload Complete», er fjernkontrolleseren klar til å brukes.
Test av leseren
I programkoden så vi at funksjonene «Serial.print» og «Serial.println» brukes. Disse funksjonene skriver til serieporten til Arduinoen. Serieporten til Arduinoen er, som tidligere nevnt, koblet opp som en virtuell serieport via USB, slik at vi har tilgang til den på datamaskinen hvor Arduinoen er koblet opp. For å kunne lese av hva som skrives ut, trenger vi å bruke et verktøy som kan lese fra serieporten. Arduino-programmet har et verktøy som gjør dette. Du finner det ved å velge «Serial Monitor» fra «Tools» menyen.
Da er vi klare til å bruke fjernkontrolleseren. Ta frem fjernkontrollen din, pek den mot IR-mottakeren på Arduinoen og trykk én gang på knappen du vil kopiere.
Når du trykker på knappen ser du at det dukker opp noen linjer tekst i "Serial Monitor"-verktøyet. Dersom du holder knappen inne vil du se ennå flere linjer dukke opp. Sørg for å trykke kun én gang, uten å holde knappen nede, og noter ned protokollnummeret, antall bit og dataene som dukker opp.
I eksempelet over får vi ut at protokollen er «1» og funksjonen vi trykket på har dataene «FF01FE». Protokollen bruker 32 bit. Men hva slags protokoll er egentlig «1»? For å finne ut dette må vi dykke litt inn i koden til IRremote-biblioteket. Åpne filen «IRremote.h», som ligger på «...\arduino\libraries\IRremote\IRremote.h»
i et redigeringsprogram for kode, for eksempel notisblokken. Ved å bla litt nedover i koden finner vi følgende:
Her har vi en oversikt over hvilket tall som representerer hvilken protokoll. Vi mottok 1 som protokoll i eksempelet ovenfor. Siden det står "#define NEC 1", så betyr det at NEC-protokollen er definert som 1. Så vi skal altså bruke NEC-protokollen. Hadde vi for eksempel fått 7 istedet ville det betydd at det var Panasonic-protokollen vi skulle brukt.
Lage testfjernkontroll
Det neste vi skal gjøre er å lage en testfjernkontroll hvor vi legger inn riktig protokoll, antall bits og dataene som vi fant. Målet er altså å få Arduinoen vår til å sende ut et signal ved hjelp av IR-dioden, som oppfattes av det som styres – for eksempel TV-en din – på samme måte som om det var den originale fjernkontrollen som ble brukt. Vi lager en testfjernkontroll med bare én funksjon først, slik at vi er sikre på at vi får til dette før vi utvider med flere funksjoner. Dersom vi hadde gått rett på å legge inn mange funksjoner på én gang, ville det vært vanskeligere å finne eventuelle feil.
Vi må programmere Arduinoen til å skru av og på IR-dioden i riktig sekvens, for å replikere det IR-signalet vi leste av tidligere. Dette kan høres komplisert ut, men heldigvis har vi også her et eksempel å ta utgangspunkt i. Alt vi trenger å gjøre er å fortelle programmet hvilke data vi vil skal sendes, hvor mange bit og hvilken protokoll som skal brukes.
I IRremote-biblioteket finnes det et eksempel som heter «IRsendDemo». Finn «IRsendDemo.ino»-filen, som ligger på «...\arduino\libraries\IRremote\examples\IRsendDemo\IRsendDemo.ino» og åpne den i Arduino-programmet.
Hva foregår i programkoden?
Det er ikke nødvendig å forstå programkoden for å gjennomføre denne guiden. Det er mulig å følge instruksjonene blindt og oppnå riktig resultat. Men for de som er ekstra interessert, skal vi se på hva som foregår her.
Inne i setup()-funksjonen har vi kun én kodelinje: «Serial.begin(9600);». Denne linjen sørger for at seriekommunikasjonen aktiveres, slik at vi kan sende tekst mellom datamaskinen og Arduino.
I loop() skjer det litt mer. Hvis vi bryter ned koden i deler har vi:
if (...) {...} - Betyr at dersom det uttrykket som står inne i parentesen er sant, så utføres det som står inne i krøllparentesen. Krøllparentesen kan gå over flere linjer som vi ser i dette eksempelet.
Serial.read() - En funksjon som leser et tegn fra serieporten. Dersom det ikke er mottatt noe på serieporten, er denne lik -1. Dersom noe mottas blir den lik det tegnet som mottas.
!= - Betyr «ikke lik».
if (Serial.read() != -1) - Betyr dermed at dersom Serial.read() IKKE er lik -1, så skal det som står i krøllparentesen utføres. Det blir det samme som å si at dersom noe er mottatt på serieporten, så skal det som står i krøllparentesen utføres.
La oss se på hva som skjer inne i krøllparentesen. Her har vi følgende kode:
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
delay(40);
}
for (int i = 0; i < 3; i++) - Dette er et uttrykk som lager en løkke som repeteres 3 ganger. Det som er inne i krøllparentesen vil altså utføres 3 ganger. I dette eksempelet er Sony-protokollen brukt og ifølge bloggen til Ken Shirriff, som hyppig tar for seg hvordan all slalgs elektronikk og forskjellige Arduino-prosjekter fungerer, så skal data på Sony-protokollen sendes 3 ganger.
irsend.sendSony(...) - Dette er kommandoen for å sende ut data på Sony-protokollen. «//Sony TV...» er bare en såkalt kommentar for å gjøre ting lettere å forstå for oss mennesker, og påvirker ikke koden. Hver gang man skriver «//» et sted, så vil nemlig det som kommer etter disse skråstrekene bli oversett fullstendig av maskinen helt frem til første linjeskift.
delay(40) - Dette betyr at programmet skal ta en pause på 40 millisekunder før det fortsetter. Pausen er her for å gi et lite mellomrom mellom hver gang data skal sendes.
Siden den fjernkontrollen vi brukte kun sendte data 1 gang, så trenger vi verken for-løkka eller pausen. Ved å slette for-løkka og pausen, så får vi denne koden:
Finn riktig funksjon
I eksempelet brukes Sony-protokollen. Siden vi fant ut at vi skulle bruke NEC-protokollen, trenger vi å finne riktig funksjon og deretter bytte ut funksjonen «sendSony» med riktig funksjon for NEC. Det er ikke så god dokumentasjon på biblioteket, så det er ikke helt rett frem hvordan man skal finne ut hvilken funksjon du trenger for NEC-protokollen. Men ved å snuse litt rundt i koden til biblioteket kan man finne en liste over tilgjengelige funksjoner for å sende på forskjellige protokoller.
For å finne riktig funksjon for NEC-protokollen åpner vi «IRremote.h» filen, altså «...\arduino\libraries\IRremote\IRremote.h» i et tekstredigeringsprogram og søker opp klassen «IRsend». Her kan vi se en mengde forskjellige funksjoner for å sende kode med forskjellige protokoller:
Funksjonsnavnene avslører hvilken funksjon som hører til hvilken protokoll. Siden vi skal sende på NEC-protokollen velger vi sendNEC()-funksjonen som er definert på denne måten:
void sendNEC(unsigned long data, int nbit);
Dette kan virke litt kryptisk men det betyr at den første parameteren i funksjonen, «unsigned long data», er dataene vi ønsker å sende. Den andre er hvor mange bit som skal sendes – «int» forteller at det er snakk en integer, altså et helt tall, mens «nbit» er et beskrivende navn som hinter til at dette tallet skal være antallet bits.
Koden vi vil sende leste vi ut tidligere til å være «FF01FE» og antall bit 32.
Så vi går tilbake til kodeeksempelet og bytter ut «sendSony» med «sendNEC». Vi legger inn «0xFF01FE» som første parameter og «32» som siste parameter. Vi legger på «0x» før «FF01FE» for å indikere at dette er et heksadesimalt tall. Legg merke til at vi nå har fjernet for-løkka og delay()-funksjonen siden vi bare vil sende dataene én gang.
Test programmet
Nå er koden klar og vi kan endelig teste fjernkontrollen. Som vi så over, vil testfjernkontrollen vår vente med å gjøre noe inntil den mottar noe på serieporten. Når den mottar et tegn, vil den skru av og på IR-dioden i henhold til de dataene og den protokollen vi har valgt. Vi skal bruke verktøyet «Serial Monitor», som vi tidligere brukte til å lese ut fra serieporten, til å sende tegn til Arduinoen fra datamaskinen.
Plasser Arduinoen med IR-dioden mot den enheten du skal styre. Det kan være litt forskjell på lysstyrken til forskjellige IR-dioder, så plasser den såpass nærme at du er sikker på at signalet blir sterkt nok til at det kan mottas av enheten. Start «Serial Monitor», skriv inn en vilkårlig bokstav og trykk «Send».
Du skal nå kunne se at funksjonen du valgte blir utført på enheten din.
Dersom du ikke får dette til å virke, kan det være en god ide å gå tilbake til oppkoblingsskjemaet og sjekke at du har plugget inn IR-dioden og motstanden til riktig pinne på Ardunioen, og at IR-dioden er plassert riktig vei med den korten pinnen mot jord, merket «GND» på Arduinoen.
Sett sammen din drømmefjernkontroll
Antageligvis har drømmefjernkontrollen din litt flere enn bare én funksjon, og den trenger å være enkel å bruke. Vi skal derfor:
- Legge inn flere funksjoner
- Koble hver funksjon opp imot en tastatursnarvei på datamaskinen
Legge til flere funksjoner
For å legge til flere funksjoner skal vi utvide programkoden for testfjernkontrollen. Vi skal tilegne hver funksjon sin egen bokstav. Vi endrer programkoden slik at vi sjekker hva slags bokstav som kommer inn, og utfører den funksjonen som tilhører den bokstaven. På denne måten kan vi legge inn mange forskjellige funksjoner, og vi kan velge hvilken funksjon vi vil utføre ved å sende forskjellige bokstaver til Arduinoen.
For å kunne skille mellom bokstaver som kommer inn på serieporten trenger vi å legge inn en liten «if-sjekk» i programkoden. Denne sjekker hva slags bokstav som mottas på serieporten og utfører forskjellige funksjoner avhengig av hva som blir sendt inn. Det fungerer på denne måten:
if (bokstav_inn == 'a') {
//Hvis bokstaven inn er a, utføres det som står her
} else if (bokstav_inn == 'b') {
//Hvis bokstaven inn er b, utføres det som står her
} else if (bokstav_inn == 'c') {
//Hvis bokstaven inn er c, utføres det som står her
}
...
Her kan du utvide med så mange if-sjekker du bare vil.
Men før vi kan gjøre disse sjekkene, så trenger vi å sørge for at den bokstaven som kommer inn blir lagret i variabelen «bokstav_inn». En variabel er en måte å ta vare på verdier på. Ved å skrive:
bokstav_inn = Serial.read();
så lagrer vi det tegnet som kommer inn i variabelen «bokstav_inn». Og vi kan derfor sjekke «bokstav_inn» opp imot forskjellige tegn for å se om den inneholder det tegnet vi er på utkikk etter.
Les av de funksjonene du vil bruke på samme måte som vi gjorde tidligere. Skriv ned funksjonskode, protokoll og antall bits for alle de fjernkontrollfunksjonene du vil ha. Bruk gjerne flere forskjellige fjernkontroller hvis du vil. Legg deretter dette inn i programkoden, og gi hver funksjon en egen bokstav.
Nå kan du prøve ut om det fungerer ved å sende forskjellige tegn til Arduino ved hjelp av «Serial Monitor»-verktøyet.
Tastatursnarveier
Å bruke verktøyet «Serial Monitor» er nyttig for testing, men ikke særlig praktisk i daglig bruk. Vi skal derfor lage tastatursnarveier for de forskjellige fjernkontrollfunksjonene vi har lagt inn, slik at vi enkelt kan styre fjernkontrollen vår fra tastaturet.
For å få Arduino til å utføre en fjernkontrollfunksjon, så må vi sende et tegn til den over serieporten. Det er mange måter å gjøre dette på, men her skal vi bruke en metode hvor vi benytter «.bat-filer». Metoden som er beskrevet her er gjort på en datamaskin med Windows 7 installert.
Vi lager .bat-filer som sender en bokstav over serieporten for hver av funksjonene. Så oppretter vi snarveier til hver av .bat filene og velger en tastatursnarvei for å kjøre snarveien igjen. Dette høres litt klønete ut, men en snarvei i Windows er enkelt å koble opp imot en tastaturkombinasjon, derfor oppretter vi snarveier til hver av .bat-filene.
Opprett .bat-filer
For å sende noe på serieporten ved hjelp av en .bat-fil oppretter vi først en tom tekstfil og limer deretter inn følgende:
mode COM5 BAUD=9600 PARITY=n DATA=8
echo a >COM5
Dette eksempelet sender bokstaven a til COM5. Hvis du istedet vil sende bokstaven b til COM4 skriver du:
mode COM4 BAUD=9600 PARITY=n DATA=8
echo b >COM4
Lagre filen og endre filendelsen til .bat istedetfor .txt. Dobbeltklikk på .bat filen for å teste. Når du gjør dette, er det ikke sikkert du ser at noe som helst skjer på PC-en – det skjer nemlig veldig fort. Så du må følge med på om Arduinoen sender det riktige IR-signalet (ved å plassere den foran det du styrer) for å sjekke at det fungerer
Når du har fungerende .bat-filer opprettes tastatursnarveier på Windows 7 ved å gjøre følgende:
- Høyreklikk på .bat-filen og velg "Lag Snarvei". Gi snarveien et beskrivende navn, f.eks. "TV På/Av".
- Høyreklikk på snarveien og velg «Egenskaper».
- Klikk på fanen «Snarvei»
- I feltet «Hurtigtast» velger du snarveien du vil ha. F.eks. trykk «F1» for å legge inn det som snarvei. (Merk: Ikke alle tastekombinasjoner er lov.)
- Trykk «Ok» for å lagre
En liten detalj som kan være litt irriterende er at dersom du plugger ut Arduinoen og setter den inn igjen, kan det hende den får et nytt navn. Da må du oppdatere .bat-filene med det nye navnet for at det skal fungere. Men ofte vil Arduinoen få det samme navnet hver gang du plugger den inn i den samme USB-porten.
Nå har vi vært igjennom hele prosessen for å lage en fjernkontroll. Nå gjenstår det bare for deg å mikse sammen din egen drømmefjernkontroll. Lag f.eks. en «Se Film»-funksjon som gjør at TV-en, stereoanlegget, og DVD-spilleren skrur seg på, og at riktig lydkilde velges på stereoanlegget.
Hva er mulig med Arduino?
I denne guiden har vi gått igjennom hvordan man kan lage en fjernkontroll med Arduino. Selv om dette er en lang guide som kan være litt tidkrevende for de som ikke har vært borti Arduino tidligere, så er dette en betydelig enklere prosess for å lage en fjernkontroll enn det ville vært om vi ikke hadde hatt Arduino og IRremote-biblioteket til å hjelpe oss. Bare det faktum at ikke-ingeniører blir istand til å lage en fjernkontroll er ganske fantastisk! Og det som gjør Arduino ennå mer spennende er alle de andre mulighetene man har til å lage avanserte elektronikkprosjekter uten å måtte ha studert elektronikk.
Dette gjør det mulig for vanlige mennesker å lage prosjekter som hjelper dem i hjemmet eller gründere til å utvikle prototyper av ideene sine på egenhånd uten å måtte investere titusenvis av kroner for å leie inn konsulenter.