Dit project beschrijft de ontwikkeling van een macro-toetsenbord dat wordt aangestuurd door geluidssignalen verzonden vanaf een smartphone. Het systeem fungeert als een audiomodem die tekst via een webpagina omzet in audio, wat vervolgens door hardware wordt gedecodeerd tot toetsaanslagen op een pc.
Technische kernpunten:
- Protocol: Er wordt gebruikgemaakt van on-off keying (OOK), waarbij de aanwezigheid of afwezigheid van een signaal respectievelijk een 1 of 0 representeert. Het protocol bevat variabelen voor berichtlengte en een CRC-check voor integriteitscontrole.
- Hardware: De opstelling bestaat uit een Arduino Pro Micro gekoppeld aan een KY-037 microfoonmodule.
- Software: Een statische webpagina verzendt de signalen, waardoor er geen specifieke app-installatie nodig is.
- Prestaties: Door gebruik te maken van digitale ingangen wordt een datasnelheid behaald van ongeveer 500 bit/s (ca. 62,5 bytes/s).
Het systeem is uitbreidbaar naar andere functies zoals muis-macro's of versleutelde wachtwoordbeheer-kluizen via de Web Cryptography API.
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:
- De ontvanger detecteert een '1' door de aanwezigheid van oscillatie en een '0' door stilte, waarna het resultaat wordt gebufferd.
- 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
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:
- De ontvanger detecteert een '1' door de aanwezigheid van oscillatie en een '0' door stilte, waarna het resultaat wordt gebufferd.
- 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