Jag har länge tänkt att jag ska försöka bygga en gemensam fjärrkontroll till dessa, och när jag nu äntligen fick lite energi att lägga på problemet uppstod vissa frågor:
1) Hur lyssnar man av RF (radio freq.) 433MHz som det står på dem?
2) Hur sänder man ut RF så att man kan simulera fjärrkontrollen?
Vill du inte läsa om mitt inte så lyckade försök, hoppa då ner:
**********************Inte så lyckat försök******************************************
Då jag hållit på en hel del med AVR-programmering, har jag lärt mig använda en modell av RF Transceivers (transmitter och receiver i samma modul) som heter nRF24L01 och sänder datapacket på 2,4GHz-bandet, så tänkte jag att jag skulle kunna få användning av ett par nRF905 (433MHz) som jag faktiskt hade liggande 3st av hemma, då de fungerar på i stort sett samma kod som 24L01'orna (hur jag fick dem att funka blir ett annat inlägg när jag får tid...)
Jag tänkte att jag på nåt sätt kunde få 905'orna till att avlyssna luften efter RF-data!?
Sagt och gjort (eller snarare försökt) så la jag ner nån timme på att sätta upp, först en trådlös länk mellan 2 905or... Än så länge gick det bra, jag kunde skicka ett paket data från datorn, via en USB-COM adapter, och en Atmega88 till den ena nRF905, som i 433MHz-bandet trådlöst skickade det vidare till den andra 905'an, som tog emot datan, växlade till att bli tranceiver, och skickade tillbaka samma data som då visades på datorn.
Nu tog det tvärstopp... nRFxxx har ett förprogrammerat chip som gör att man först måste skicka/lyssna efter ett antal adressbitar, som iof är programmerbara men går inte att skippa, innan den börjar mottaga datan...
Jag gjorde några halvhjärtade försök att ställa in 905'an som receiver och endast använda 1 adressbyte följt av 32 datapacket-bytes, samtidigt som jag lät den andra skicka 1 adressbyte följt av 1 databyte, samtidigt som jag bombarderade receivern med fjärrkontrollen till strömbrytarna för att försöka få nåt utläst, men det sket sig och gav bara en massa dummy bytes...
Nä nRFxxx är grymma på att skicka data på ett säkert och lätt sätt, men är inte gjorda för den här typen av avlyssningar..
***********************Lyckad metod****************************************
Jag vek mig och började googla och fick lite insperation av denna sida. Så jag beställde ett likadant kit med en receiver och en transmitter från ebay.
Problemet med hans metod var bara att han hade tillgång till en "Logic Analyzer", som inte jag hade (de kostar ~1200kr)...
Skam den som ger sig, jag har ju AVR-chip! =)
Jag byggde min egna logiska analysator genom att med en Atmega88 koppla samman INT0, INT1 och mätpunkten. Aktiverade interruptet genom att sätta en på rising edge och den andra på falling edge... Med en enkel timer kunde jag sedan spara hur många mikrosekunder det var mellan varje upp, respektive nergång, som då lätt skickades till datorns USB via USB-COM adaptern.
Jag hade såklart inte ro i kroppen att vänta in de 3-5v det kan ta för ebay-fynd att dyka upp i brevlådan, framför allt inte efter att ha läst detta...
Efter att ha knäckt upp mina fjärrkontroller visade det sig att en av dem hade en liknande fristående RF-modul som i länken:
Kabelstumparna till vänster är jord (vit) och data (orange) som jag lödde fast. Kablarna till höger kopplade jag på 12v för att batteriet var dött...
Här en bild på den separata RF-modulens baksida
Jag kopplade in min hemgjorda logiska analysator och började logga när jag tryckte på knapp 1,2,3 osv... jag loggade 4ggr/knapp för att kunna se att det överensstämde och efter lite sammanställning i excel fick jag fram detta schema (över knapp 1on/off & 2on/off) som lätt går att se att det finns ett tydligt mönster i!
(Fick inte plats, egentligen är det en lång bild med 4 rader...)
Å tro't eller ej, när jag istället för att lyssna på RF-modulens data-pinne, programmerade om Atmega88'an att skickade ut samma data, ja då kunde jag stänga av/sätta på mina fjärrströmbrytare på första försöket! Det händer ju aldrig annars att det funkar på första försöket! Jag använder inte ens en extern kristall för att få till timingarna exakt på Atmega88'an!
Ska tilläggas att min hemmagjorda logiska analysator var lite flaky... det krävdes mer än ett försök att få till bra mätvärden, så jag blev mer och mer sugen på att införskaffa en vettig pryl, å efter lite sök på ebay hittade jag den här, som efter att ha läst om den verkade som ett trevligt alternativ för 75kr (ist för 1200kr), ett stycke beställdes tillsammans med kablar och prober. (Uppdaterad version för 64-bit datorer och som funkar med nyaste programvaran från Saleae Länk)
Efter att ha sett hur den fristående RF-modulens data-pinne satt i förhållande till transistorn mm, så gjorde jag lite kvalificerade gissningar, och lyckades hitta var datan skickades (från chippet till RF-out) även på de andra fjärrkontrollerna. Efter lite piller-lödning lyckades jag sampla även deras data.
Grön kabelstump är data där jag hittade data och brun ute till höger är jordningen.
Denna kontroll (märke: Proov sys 2000) hade en knapp för att byta mellan 4 olika kontroller (de fyra svarta fälten till höger på bilden), och med 3 knappar/kontroll och då såg det ut såhär efter lite sammanställning:
Även dessa fick jag att fungera genom att programmera Atmega88'an och mata ut signalerna på den första fjärrkontrollens RF-modul (som fortfarande satt på kontrollen)! Den sista kontrollen var från jula, och den kunde jag läsa av, men fick aldrig att fungera tills min logiska analysator från ebay dykte upp och det visade sig att det var delayen som inte riktigt stämde!
Nu när jag äntligen hade listat ut vad som skickades, och hade t.o.m lyckats skicka datan via den första fjärrkontrollens rf-modul kunde det bara bli bättre! RF-modulen som jag beställt från ebay landade i brevlådan och fungerade även den out of the box! Skönt med tanke på att den separata RF-modulen från fjärrkontrollen krävde 12v som jag krånglade fram ur en 20v stor klumpig gamal skrivar-adapter...
Även den logiska analysatorn damp ner i lådan och efter att ha letat igenom några av länkarna på ebay så hittade jag en som länkade till programmet (en äldre version av saleaes logic, många mappnamn på kinesiska). Som bloggen jag pratade om förut går igenom så funkar inte analysatorn med nyare versione, en bummer då den enda gamla versionen jag har fått tag på bara funkar med 32bitars operativsystem...
Tog fram en äldre 32-bitars laptop, och där funkade allt perfekt! (installerade bara setuppen som i mappen "saleae") och behöll jumpern på! Försökte länge hitta en metod som får den att funka på 64 bitar, men då tror jag man måste byte EEPROM enligt detta hack...
Här är en bild på programmet när jag sniffar lite på en ir-fjärr (en vanlig TV-dosa).
Gör inte samma misstag som jag, som råkade komma åt 12v-kabeln som driver RF-dosan jag har med en av proberna... som framgår av bilden ovan är alla prober som inte används höga (5V) förrutom ettan som är bränd och har gått låg! nu har jag bara en 7-kanals analysator, och det verkar som att kanalen "smittar av sig" till andra kanaler vilket den inte gjorde innan jag brände ettan... ;) kanske kan vara smart att göra som killen på hack-sidan ovan föreslår ändå:
Skulle jag verkligen behöva 8 fräscha kanaler nån gång i framtiden får jag väl lägga ut 75 kr på en ny då... ;)
När jag nu hade ett fullt fungerande RF-bibliotek till mina strömbrytare samt en logisk analysator tänkte jag att det var på tiden att bygga en ultranördig multifjärrkontroll (RF & IR) som styrs med android... kommer i nästa inlägg!
Om nån mot förmodan skulle läsa det här och vara intresserade av hur nåt av stegen gick till mer i detalj, så skriv en kommentar så ska jag förklara!
Nice! An eye opener on the 32bit compatibility.
ReplyDelete