Macro-toetsenbord bediend door geluid

Beschrijving

Dit is een op geluid gestuurd macro-toetsenbord dat fungeert als een klein audiomodem tussen een telefoon en een USB-toetsenbord. Smartphones bieden een schat aan sensoren die toegankelijk zijn via apps, maar ze worden beperkt door hun hardware-interfaces.

Voortbouwend op een eerder project van een robot die via een smartphone-scherm werd bestuurd (https://hackaday.io/project/166432-robot-controlled-by-a-smartphone-screen), zet deze iteratie audio van een telefoon om in toetsaanslagen zonder dat er extra software nodig is:

  • Een eenvoudige webpagina zet de tekst om in geluid.
  • Een Arduino Micro, verbonden met een KY‑037 microfoonmodule, leest de audio en decodeert het binaire bericht naar een reeks tekens, waardoor hij fungeert als een virtueel toetsenbord voor de pc.

Dit projectprincipe is ook geïmplementeerd in een pc-versie voor wachtwoordbeheer: https://github.com/nicoma/KeyWhisper

Technische details

Het uitwisselingsprotocol is eenvoudig maar efficiënt; het maakt gebruik van on-off keying (OOK). Hierbij wordt een binaire 1 gerepresenteerd door de aanwezigheid van een signaal, terwijl een 0 overeenkomt met stilte.

Er is gekozen voor een minimalistisch en schaalbaar transmissieprotocol. Elk woord heeft een variabele lengte: het kan 8 bits zijn voor een teken of een typeveld. Via het typeveld kan het apparaat de lengte van het bericht bepalen. De laatste bit van elk woord is het omgekeerde van de voorafgaande bit, wat een transitie garandeert die het legen (flushing) van het bericht naar het geheugen activeert (zie code).

Het typeveld en een transmissiesequentie stellen het apparaat in staat om de consistentie en status van de verbinding te verifiëren. De lengte van het bericht is eveneens variabel, en het frame eindigt met een CRC voor integriteitscontrole.

De zendende webpagina

De webpagina is beschikbaar via:

  • https://cdn.hackaday.io/files/2021968650753664/keypad.html.zip
  • https://oktoapp.com/keypad/

Het protocol is uitbreidbaar, waardoor het mogelijk is om aanvullende apparaten aan te sturen, zoals een muis of een infraroodzender. De voorgestelde webpagina vereist geen installatie van een app; deze draait in de browser en slaat berichten op in localStorage, zodat de data onder controle van de gebruiker blijft. De pagina is een statisch bestand en kan overal worden gehost.

Andere toepassingen die geïmplementeerd kunnen worden:

  • Toetsenbord-macro's, muis-macro's, infraroodcommando's en een kluis voor wachtwoordbeheer.
  • Optionele versleuteling kan worden toegevoegd tijdens de transmissie en door het apparaat worden ontsleuteld met behulp van de Web Cryptography API.

Arduino Code

De code is downloadbaar via: https://cdn.hackaday.io/files/2021968650753664/keypad.ino

De code bestaat uit twee hoofdonderdelen:

  1. De ontvanger detecteert een '1' door de aanwezigheid van oscillatie en een '0' door stilte, waarna het resultaat wordt gebufferd.
  2. Het decodeert de gebufferde bits.

Het apparaat maakt gebruik van de digitale ingang, die veel sneller te verwerken is dan de analoge ingang op typische microcontrollers. Er is een analoge route geëvalueerd om hogere datasnelheden te behalen door frequenties te analyseren (FM/QAM/FFT), maar de decodeertijden waren nooit beter dan de huidige puls-gebaseerde aanpak: 2 ms/bit ($\approx$ 500 bit/s $\approx$ 62,5 bytes/s).

Bestanden en Componenten

Bestanden

  • LICENSE: GPL3 (34.32 kB)
  • keypad.html.zip: Webpagina om binaire geluiden te verzenden (2.65 kB)
  • keypad.ino: Arduino micro-code om geluid om te zetten in toetsaanslagen (7.46 kB)

Componenten

  • 1 × Arduino Pro Micro
  • 1 × KY-037