Thursday, March 21, 2013

Världens nördigaste multifjärrkontroll

Nu har jag äntligen tagit mig tid att sätta ihop vad som antagligen är världens nördigaste multifjärrkontroll!
Det hela började med att jag hackade mina RF-fjärrströmbrytare och mina IR-Fjärrkontroller då jag byggde ihop ett fullt fungerande bibliotek över deras funktioner och hur de sänds.

Tanken med multifjärrkontrollen är att den ska ligga ute i vardagsrummet, där IR-diodena är synliga för stereon, TVn och projektorn och RF-sändaren har bra räckvidd till de flesta rum i lägenheten (den når ca 10m).

Specs Fjärrkontrollen
- Strömförsörjningen till fjärrkontrollen sker via en USB-kabel och en vanlig mobilladdare 5V.

-  nRF20L01 2,4 GHz (en annan modell av RF-sändare än den som pratar med fjärrströmbrytarna). Orsaken till det är att det är väldigt lätt att skicka data mellan två nRF24L01 och de har inbyggda funktioner som t.ex. analyserar om datan mottagits mm.  (se min tutorial som går igenom nRF24L01 ochAVR).

- RF-transmitter 433MhZ för att sätta  på/stänga av fjärrströmbrytarna.

- IR-dioder 2st snodda från gamla fjärrkontroller (ebay) skickar kommandon till stereo, TV & projektor.

- Atmega88 microkontroller - hjärtat i fjärrkontrollen, länken mellan nRF24L01 och övriga komponenter.

Prototypbräda 5x7cm - kretskortet

 Byggnation Fjärrkontroll
Efter nån timme med lödpennan så blev resultatet helt ok faktiskt:


ISP-kontaktena längst hitåt är för att kunna programmera Atmega88'an på plats, och linjärregulatorn till höger om nRF24L01 är för att den kräver 3,3V och resten går på 5V. Transistorn vid IR-diodena är för att jag inte ville bränna chippet då jag parallellkopplar två dioder på samma pinne. Den röda lysdioden längst bort är är bara en indikator som säger när fjärrkontrollen skickar kommandon med antingen IR lr RF (kunde inte hålla mig... ;)

Programvara Fjärrkontroll
Programmet är skrivet i AVR (C-programmering) och gör ingenting fören nRF24L01 mottagit ett packet data, då triggar den en interrupt-pin på Atmega88'an som med hådvaru-SPI läser av de tre byten som mottagits.
Den första byten säger vilken fjärrkontroll som ska simuleras, sedan om det visar sig vara en IR-fjärrkontroll så berättar andra byten vilken knapp som ska tryckas, och om det istället är en RF-fjärrkontroll så säger andra byten vilken fjärrströmbrytare som ska kontrolleras. Tredje och sista byten har endast en funktion om det är en RF-kontroll då den säger om den valda fjärrströmbrytaren ska slås av eller på.

Programmet fungerar mycket bra även utan extern kristall på chippet, så jag antar att timingarna inte är så noggranna när det kommer till IR och RF!



Specs Datorkontrollen
nRF20L01 2,4 GHz - för att trådlöst sända kommandon till fjärrkontrollen

USB-COM adapter för att sända kommandon från datorn till Atmega88 (se min tutorial om hur man får det att funka här)

Atmega88 microkontroller - länken mellan USB-COM adapter och nRF24L01.

Prototypbräda 5x7cm - kretskortet

Byggnation Datorkontroll

Datorkontrollen har jag inte lött ihop ännu, den sitter fortfarande på en test-prototypbräda. Den fungerar iaf så att USB-COM adapterns Tx, Rx och GND är kopplade till Atmega88'ans respektive pinne för att möjliggöra USART-kommunikation.




Programvara Datorkontrollen

Atmega88'an gör ingenting fören ett USART-interrupt går igång då datorn försöker skicka något via COM-porten. Atmegan läser då av de tre byten och skickar de direkt vidare via SPI till nRF24L01-modulen, som då sänder ut det till den mottagande multifjärrkontrollen. Efter lyckad sändning går Atmegan tillbaka till att tom-loopa.



Programvara Datorn
Datorns programvara är ett Windows-baserat VB-program som jag har jobbat på ett tag nu som antagligen ska få ett eget inlägg i bloggen när jag få tid lust och ork, men i stort fungerar den såhär:

Programmer ansluter till önskad COM-port, genom att välja ur listan och trycka på den stora knappen (eller som i mitt fall om har en "Silicon Labs CP210x" så ansluter den automatiskt när programmet startar)
Jag väljer att inte returnera inkommande från COM-porten, annars går programmet in i en oändlig loop eftersom Atmegan är satt att returnera det som skickas till den, och det vill jag inte. Jag väljer också att inte vidarebefordra meddelandet som returneras från atmegan till möjliga TCP-clienter. "StopByte" används för att slippa ange längd på packetet som ska mottas från Atmegan som istället är programmerad att skicka en stopbyte efter varje packet (3 byte data + "#")


Nästa tab är TCP-Servern, och den används för att tillåta inkommande data från internet/wifi. Bara att välja port, och trycka på stora knappen som innan hette "Start". Här vill jag faktiskt vidarebefodra inkommande TCP-data till COM-porten för att på så sätt kunna skicka kommandon från internet direkt till Atmegan. Jag har här valt att returnera inkommande meddelandet till TCP-clienten också, då android-appen är gjord så.


Nu på första tabben, där alla kommandon loggas, samt där man kan skriva kommandon i input text-boxen som i nuläget vidarebefodras till COM-Porten. Här visas också om COM-port är ansluten och om TCP-servern är ansluten och hur många clienter som är anslutna.


De övriga flikarna styr var och om all datakommunikation ska loggas, samt vilka funktioner i programmet som ska autostarta och om hela programmet ska autostarta med windows.



Programvara Android
Vad är väl en multifjärrkontroll om den inte kan styras från multi-enheter... jag satte igång och skapade en android-app som via TCP kan skicka kommandon till fjärrkontrollen:



Förstasidan som öppnas är den vänstra, där går man in i TCP-settings och ansluter till rätt IP och Portnr, som jag då sätter till min externa ip-adress för att kunna använda 3G och slippa ansluta till Wifi varje gång jag ska använda appen. Porten jag ansluter till har jag tidigare ställt in i routern såhär så att den forwardar till den rätta porten som ställts in i programmet på datorn.

På förstasidan väljer man sedan att simulera IR eller RF-fjärrkontroller, eller köra förprogrammerade macron där jag bla har ställt in en sekvens som sätter på stereon på AUX, sätter på projektorn och släcker lamporna som sitter på RF-fjärrströmbrytare.

Nästa uppdatering på appen är att man on the fly ska kunna programmera makron som hamnar på de tomma knapparna och sparas. Jag ska också uppdatera datorprogrammet så att det reagerar på vissa kommandon genom att sätta pausa spotify, sätta på XBMC och ändra bildinställningen till projektor-mode.


Om nån vill ha mer info, så skriv en kommentar! =)

4 comments:

  1. Respect man! Enormt arbeid du har lagt ned. Skal gjøre noe lignende når jeg får litt tid. Da blir det her VELDIG nyttig.

    ReplyDelete
    Replies
    1. Kul! Ser fram emot att höra hur det går för dig, hör gärna av dig om det finns nåt jag kan hjälpa till med!

      Delete
  2. Hallo kalle!
    Måtte du installere noen drivere for å få kontakt med Logikk analysatoren fra ebay?
    Har fått igang Saelea programmet, men usb-analysatoren er unknown device.
    Måtte du programmere analysatoren før bruk?
    Mvh Eirik

    ReplyDelete
  3. Hej!
    Hm, jag har för mig att installationen av saleae-programmet installerade drivrutinerna automatiskt... om inte annat så finns dem i en av mapparna bredvid programmet i filen jag länkade till (http://www.icstation.com/ebay/CY7C68013A.rar)

    Nej den behöver inte programmeras! bara att stoppa i å köra...
    Men det funkar som sagt bara på 32bitars datorer! och bara med den äldre versionen av saleae!

    ReplyDelete