Stap 2: Dataverzameling
Off gaan we.
Note1: opname van de opdracht is een repetitieve en enigszins saai proces, maar noodzakelijk.
Note2: Ik heb zelf een oscilloscoop dus de enige manier voor mijn om de opgenomen waarden te tekenen is het gebruik van een plotten programma (gnuplot) op onbewerkte gegevens. Dit kan nuttig zijn om een visuele idee van wat er gebeurt, maar het vereist enige aanpassing in onbewerkte gegevens en is naar mijn mening niet noodzakelijk at all. Om die reden heb ik niet elk diagram opgenomen.
Ik gebruikte de instructies op deze pagina: http://alexba.in/blog/2013/01/06/setting-up-lirc-... sluit de ontvanger op de Pi en voorbereiden van lirc.
Ik heb vervolgens opdrachten opgenomen met de raw optie - en uitvoer omgeleid naar een bestand. Het doel is om een record van elke waarde voor ON en off van de cursus, maar ook voor elke modus (AUTO, COOL, warmte, droge), voor elke waarde swing en ventilator en, zeg, voor min en max temperatuur (16 tot 30 ° C in mijn geval). Het belangrijkste deel hier is om een referentie-record te maken en een opname voor elke wijziging van de optie, waardoor slechts één optie wijzigen om ongetrouwd tijdte maken. Zodra een record wordt gedaan, druk op CTRL + C om de opdracht te beëindigen en weer doen met het volgende commando/bestand
$ mode2 -d /dev/lirc0 -m > auto_21C_swing0_fan0
Het kan nodig zijn te krijgen super bevoegdheden voor het uitvoeren van deze opdracht ("sudo mode2...") en de lirc daemon kan het bestand blokkeren zodat kan het nodig zijn om het te doden eerst zijn:
$ sudo /etc/init.d/lirc stop $ sudo mode2 -d /dev/lirc0 -m > filename $ [...] $ sudo /etc/init.d/lirc start
Bij het lezen van de gegenereerde bestanden, wat we zien is op alle getallen, georganiseerd in 6 kolommen. Deze aantallen wijzen op duur in microseconden. De kolommen werken in paar, zo
740 1495 920 1345 735 1335
betekent: "De IR LED was ON voor 740us, vervolgens uit voor 1495us, dan 920us ON, dan OFF voor 1345us, enz."
Voorbeeld:
3523 1766 414 451 418 1312 423 448 419 452 418 452 428 443 417 453 418 457 418 452 418 452 416 454 419 452 417 453 417 1316 418 452 418 466 410 451 419 453 414 457 416 452 418 453 417 1316 418 1315 418 1320 426 443 419 451 419 1314 419 452 418 452 418 452 418 452 418 457 419 450 420 451 419 452 421 451 417 452 418 452 418 452 419 457 418 452 418 449 422 451 418 452 419 451 420 451 426 444 418 457 418 452 417 452 419 452 416 454 420 450 418 452 419 452 419 456 418 452 418 1323 411 1313 421 451 419 451 418 452 418 452 418 454 419 9997 3521 1764 417 452 419 1315 418 449 421 452 418 453 417 453 418 451 427 448 419 453 417 453 417 452 419 452 417 453 417 1317 417 451 419 456 419 451 420 458 411 452 418 452 416 455 418 1315 418 1315 418 1321 417 452 419 452 416 1318 418 452 418 451 419 451 419 452 418 457 418 452 418 452 420 448 422 451 419 457 412 452 417 452 419 457 418 1315 417 453 419 449 421 452 418 452 418 452 418 453 424 450 418 453 419 1314 418 452 418 452 418 1316 418 1315 417 453 418 465 410 452 419 452 416 453 418 452 418 452 418 452 418 453 417 1338 418 1316 415 1318 418 1315 419 1314 418 452 418 1315 419 449 421 1328 410 452 418 453 417 452 418 452 420 450 419 451 417 455 416 457 419 451 418 452 419 452 419 453 417 453 417 453 418 451 419 456 418 453 418 1315 418 1315 418 452 419 459 411 451 419 451 416 460 418 452 419 451 418 453 417 453 418 451 418 1315 419 1313 420 458 425 445 413 460 418 445 422 452 418 452 418 452 418 452 419 455 421 450 420 463 407 452 417 452 418 453 418 452 418 452 418 457 418 450 421 452 418 452 417 453 419 451 424 445 419 451 419 1321 417 453 417 454 416 452 418 452 419 452 418 452 418 452 418 468 408 452 417 1313 422 1314 418 452 420 451 418 452 418 452 419 456 418 453 416 454 418 1315 417 452 418 1315 418 452 418 1316 418 451 422
OK, dat lijkt gek :)
Merk op dat het bestand met een lijn met een enkele waarde beginnen zal: het is de tijd die is verstreken tussen het begin van de opname en de komst van de eerste IR signaal. Deze regel moet worden genegeerd.
Alle tijden zijn natuurlijk, aangezien deze maatregelen, met een tijdschaal zo klein als de microseconde, anders, waardoor de detectie van kleine verschillen tussen 2 commando's niet onmogelijk.
Het kan worden geconstateerd dat waarden altijd dicht bij 400 of 1300us, met uitzondering van 3 (dichter bij 4400, 9900 en 1700). Dus wat we zullen doen zodat de cijfers vergelijkbaar "" de getallen afronden op de dichtstbijzijnde is van deze 2 "verwijst naar" waarden (een werkblad is handig eerst).
Wat deze manipulatie toont aan dat met uitzondering van de 3 enkelvoud waarden het over tijd altijd 400us is, wat verandert er nu alleen OFF.
Laten we de hypothese dat de uit-tijd is codering 0 en 1, en laten we aannemen dat 400us is voor 0 en 1300us voor 1. Met deze veronderstelling is het mogelijk om elk paar van kolommen op een enkele bit.
Laten we ook een opmerking maken: het deel tussen de 3 "enkelvoud tijdsinstellingen" is altijd hetzelfde, in alle opnamen. Worden kan verondersteld dat:
-het deel is een inleiding, misschien het identificeren van de afstandsbediening of de Air Conditioner, en het zal nooit veranderen
-de verschillende tijdsinstellingen zijn sloten en scheidingstekens tussen de introductie en de werkelijke lading
Daarom is het aanvaardbaar dat deel van het bericht als een invariant te nemen en niet te bestuderen.
Voor het gemak van de exploitatie van de gegevens die ik schreef een klein c programma naar de waarden afrondt en transformeren naar binaire cijfers. Slaat het intro deel voor het gemak van het lezen van de code. Indien u wenst te gebruiken deze code de timing waarden zijn gedefinieerd in het begin van het programma, zal u waarschijnlijk nodig aan te passen.
Na compilatie (gcc -o decoderen decode.c) kunt u op elk gegevensbestand:
$ ./decode auto_21C_swing0_Fan0 auto_21C_swing0_Fan0.decoded
Voorbeeld met de modus auto doel temperatuur 25 ° C:
$ more auto_25.decode 01000000 00000100 00000111 00100000 00000000 10000000 01001100 00000001 11110101 00000000 00000000 01100000 00000110 00000000 00000000 00000001 00000000 01100000 00101010