Inhoudsopgave:
- Stap 1: Gebruikte materialen
- Stap 2: Installatie en gebruik
- Stap 3: De code
- Stap 4: Outlook en opmerkingen
Video: Een spraakgestuurde, braillepatroon-semafoor - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Heer Vetinari stond voor zijn raam en keek naar de semafoortoren aan de andere kant van de rivier. Alle acht grote luiken die voor hem stonden, knipperden woedend - zwart, wit, zwart, wit, zwart, wit… Informatie vloog de lucht in. Twintig mijl achter hem, op een andere toren op Sto Lat, keek iemand door een telescoop en riep cijfers. Wat komt de toekomst snel op ons, dacht hij.' T. Pratchett, de vijfde olifant
Na het bouwen van een spraakgestuurde jumping jack op basis van de AIY-spraakkit, kwam ik op het idee om een spraakgestuurde semafoor te bouwen, waarin de nieuwste IT-technologie wordt gecombineerd met het begin van telecommunicatie en gegevensoverdracht.
In eerste instantie had ik het idee om het Franse semafoorsysteem van Chappe te repliceren, het eerste bekende systeem voor landelijke telecommunicatie met een semafoorsysteem. Maar het bleek iets te ingewikkeld om met standaard servo's binnen een dag te realiseren. Mijn volgende doelwit was iets dat lijkt op het clacks-systeem dat door Terry Pratchett is beschreven, b.v. in "Going Postal", als een 2x4 sluiter semafoorsysteem (niet zoals de 4x4 matrix afgebeeld in de film). Helaas kon ik niet al te veel technische details vinden over dit systeem. Zo kwam ik uit bij het 2x3 matrix-semafoorsysteem ontwikkeld door Lord Murray, dat al een tijdje door de Britse marine werd gebruikt. Bovendien past een systeem met zes sluiters/bits goed bij de zes servoconnectoren die beschikbaar zijn op de AIY voice HAT. Maar omdat ik in de loop der jaren geen zes servo's bij de hand had, besloot ik uiteindelijk eerst een simulator van LED's te bouwen.
Wat betreft de weergegeven code, men zou het Murray-systeem kunnen gebruiken, maar nogmaals, de informatie die ik erover had was nogal beperkt, waardoor er geen cijfers en symbolen konden worden weergegeven. Dus kwam ik op het punt om in plaats daarvan het braillesysteem te gebruiken, dat ook een 2x3 matrix gebruikt om letters, cijfers en andere tekens weer te geven. Het braillesysteem is de internationale standaard om voor blinden leesbare teksten af te drukken. Het is ook een opmaaktaal, die een cijferindicator gebruikt om te definiëren dat cijfers daarna worden weergegeven, en indicatoren om te bepalen dat een of meerdere van de volgende letters als hoofdletters worden geschreven. Ik besloot daarom om een enigszins vereenvoudigd systeem op te zetten, met cijfers en enkele tekens die in plaats daarvan worden gedefinieerd door de Nemeth-extensie van het braillesysteem, en alleen hoofdletters te gebruiken, althans voor het begin. Dit maakt het mogelijk om unieke patronen voor elke letter, cijfer of teken weer te geven in mijn speciale applicatie, en om de tekstanalyse die nodig is voor echte braille weg te laten.
Met het laatste apparaat kan een woord of zin in het AIY-spraakherkenningssysteem worden uitgesproken, waarna de spraakpatroongegevens via WLAN en internet naar een Google-server in de VS worden verzonden, daar worden gedecodeerd en, in mijn geval, de geïnterpreteerde gegevens worden teruggestuurd naar Europa, waar ik uiteindelijk de herkende zin als een tekenreeks krijg weergegeven. Deze tekststring wordt vervolgens door het Python-script in de afzonderlijke letters gebroken en nu, in vergelijking met een woordenboek dat de overeenkomstige patronen definieert, wordt de patrooninformatie opgehaald en worden de patronen weergegeven op een 2x3 LED-matrix. Kijk dan eens naar de bijhorende video.
Ik heb de weergavesnelheid ingesteld op één teken per seconde, wat lang genoeg zou moeten zijn voor een getraind persoon om het patroon te identificeren en te vertalen. Een mogelijke volgende stap zou zijn om een patroonherkenningsapparaat zoals de AIY vision HAT (tot nu toe niet beschikbaar in Europa) te gebruiken om de patronen automatisch te lezen en te interpreteren, om zo de cirkel te sluiten.
Verdere concepten voor verbeteringen, sommige met meer real-world relevantie, worden besproken in het 'outlook'-gedeelte van dit instructable.
Stap 1: Gebruikte materialen
Raspberry Pi 3
AIY stem HAT
Acht witte LED's, 5 mm diameter. Deze werken op 3V, er is dus een weerstand nodig.
100kOhm weerstand. Misschien niet de perfecte oplossing, maar was bij de hand.
Startkabels
Een kort stuk draad
Breadboard, optioneel om de opstelling te testen.
Een plastic doos voor visitekaartjes.
Twee stukjes 4 mm schuimplastic, wat restafval.
Een stuk plastic membraan, als diffusor, zoals hierboven.
Soldeerbout en soldeer, een mes.
Stap 2: Installatie en gebruik
Stel de Raspberry Pi en AIY HAT in zoals aangegeven in de AIY voice HAT-handleiding. Ik zou aanraden om headers op zijn minst aan de servopoorten te solderen voordat je Pi en HAT monteert, omdat je hiermee eenvoudig servo's, een breadboard of LED's kunt aansluiten.
De displaydoos was opgebouwd uit het deksel van een plastic doos voor visitekaartjes, twee stukken schuim die in de doos pasten en een even groot stuk van een verpakkingsmembraan als diffusor. In een van de schuimdelen zijn zes gaten geduwd en de LED's erin geplaatst. De kortere voetjes (massazijde) van de LED's werden met een stuk kabel met elkaar verbonden, daarna werd een weerstand toegevoegd en aan de laatste een startkabel gesoldeerd. Aan de andere voetjes (pluszijde) van de LED's zijn startkabels gesoldeerd.
Deze werden vervolgens verbonden met de servopoorten op de AIY voice HAT via verlengkabels, de positieve kant op de (buitenste) "P in" pinnen, de negatieve connector op een van de (binnenste) aarde/min pinnen. Kijk dan eens op bijgaand schema.
Ik zou sterk aanbevelen om de setup op een breadboard te testen voordat je gaat solderen.
Nu werden het membraan, de LED-plaat en de afdichtingslaag in de plastic doos geplaatst.
Plaats het Braille_LED_1.py script in de src map. In het geval dat u het script eerst uitvoerbaar moet maken.
Nu wordt met behulp van de Dev-terminal (!) het programma Braille_LED_1.py gestart. Voer 'src/Braille_LED_1.py' in en druk op 'Enter'.
U wordt nu gevraagd om op de knop van de AIY-box te drukken en uw woord of zin uit te spreken. Met enige vertraging herhaalt het systeem wat het is begrepen en geeft het zowel op het scherm weer als letter voor letter op het display met zes leds.
Als u het trefwoord "Tot ziens" in plaats van een zin geeft, zal het systeem u tot ziens zeggen en wordt het programma afgesloten.
Stap 3: De code
Hieronder vindt u de code waarmee u met het AIY-spraakapparaat kunt spreken en de herkende zin letter voor letter kunt weergeven op een kleine 2x3-LED 'semafoor' of braille-type matrix.
De code is een afgeleide van het script dat ik heb gebruikt voor een vorig project met behulp van de AIY voice HAT, zijnde een afgeleide van het servo_demo.py voorbeeld beschreven in de AIY voice HAT-handleiding.
Je kunt ook een woordenboek vinden met het deel van de Murray-code dat ik op internet had gevonden, als tekstbestand. Het bevat ook geen cijfers en laat enkele letters weg, wat hier een probleem zou geven.
Een beperking van het programma in zijn huidige staat is dat als een teken dat niet in het woordenboek staat, het programma zou crashen. Bovendien is het geen weergave van de volledige braillecode als opmaaktaal. Zoals je in het onderstaande script kunt zien, is de Nemeth-code voor getallen overbodig met enkele tekens in standaard braille, maar dat zou geen probleem moeten zijn voor onze specifieke toepassing.
#!/usr/bin/env python3
# Dit script is een aanpassing van het servo_demo.py-script voor de AIY voice HAT, # geoptimaliseerd voor de AIY-gebaseerde symboolweergave van het Baille-type import aiy.audio import aiy.cloudspeech import aiy.voicehat van gpiozero import LED #from gpiozero import Knop van time import sleep # Dictionary: een kunstmatig gewijzigd Braille-alfabet, # cijfers en enkele symbolen uit de Nemeth-extensie van Braille Braille_6A = { " ": "123456", # spatie "A": "1", "B": "12 ", "C": "14", "D": "145", "E": "15", "F": "124", "G": "1245", "H": "125", "I": "24", "J": "245", "K": "13", "L": "123", "M": "134", "N": "1345", "O ": "135", "P": "1234", "Q": "12345", "R": "1235", "S": "234", "T": "2345", "U": "136", "V": "1236", "X": "1346", "Y": "13456", "Z": "1356", "W": "2456", "#": "3456 ", # Nummerprefix, dwz volgende tekens zijn cijfers ", ": "2", ".": "256", # Punt, einde van zin (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # Volgende letter is in hoofdletters; Nummerstop? "": "", # Nemeth Braille code is een wiskundige uitbreiding voor 6-punts braille # zie: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Nemeth Code '1', Braille 'komma' "2": "23", "3": "25", "4": "256", "5": "26", "6": "235", # Nemeth '6', Braille '!' "7": "2356", "8": "236", # Nemeth '8', Braille '?' "9": "35", "0": "356", "+": "346", "-": "36", "/": "34", "(": "12356", ") ": "23456", "*": "1346" # '*' is een symbool met twee patronen in Nemeth, hier vervangen door een 'x' om crashes weg te laten } """ omwille van de eenvoud, de standaard Braille nummerpatronen gegeven hieronder werden vervangen door de overeenkomstige Nemeth-codes "1": "1", "2": "12", "3": "14", "4": "145", "5": "15", " 6": "124", "8": "1245", "9": "24", "0": "245", """ #Text = "rbhTZkl 9t64+34#!" # Voorbeeldtekst, voor foutopsporingsdoeleinden def main(): herkenner = aiy.cloudspeech.get_recognizer() herkenner.expect_phrase('tot ziens') # trefwoord, beëindigt de programmaknop = aiy.voicehat.get_button() # AIY Knop status led = aiy.voicehat.get_led() # AIY Knop-LED-status aiy.audio.get_recorder().start() led_1 = LED (26) # 1e connector, servo0, GPIO 26 # linksboven led_2 = LED (6) # 2e connector, servo1, GPIO 06 # midden links led_3 = LED(13) # 3e connector, servo2, GPIO 13 # linksonder led_4 = LED(5) # 4e connector, servo3, GPIO 05 # rechtsboven led_5 = LED (12) # 5e connector, servo4, GPIO 12 # midden rechts led_6 = LED (24) # 4e connector, servo3, GPIO 13 # rechtsonder #distance= Knop (5) # afstandssensor aangesloten op servo3/GPIO 05, hier niet gebruikt aiy.audio.say ("Hallo!",) aiy.audio.say("Om te beginnen, druk op de knop",) aiy.audio.say("Als je me vaarwel zegt, beëindig ik het programma",) terwijl True: # begint loop led.set_state(aiy.voicehat. LED. BLINK) print("Spraakherkenning activeren n, druk op de blauwe knop en spreek dan") print() button.wait_for_press() print('Luisteren…') aiy.audio.say("Ik luister",) led.set_state(aiy.voicehat. LED. BLINK_3) text = herkenner.recognize() # tekenreeks van de herkende zin led.set_state(aiy.voicehat. LED. OFF) als de tekst Geen is: aiy.audio.say('Sorry, ik heb je niet gehoord.',) elif 'tot ziens' in tekst: aiy.audio.say("Tot ziens",) aiy.audio.say('Arrivederci',) aiy.audio.say('Auf Wiedersehen',) sleep (3) print('bye! ') break # stopt de lus en beëindigt het programma else: print('Je zei "', tekst, '"') # Hiermee kun je de systeeminterpretatie controleren, inclusief hoofdletters aiy.audio.say('Ik denk dat je zei',) aiy.audio.say(text,) # akoestische verificatie Text_up = text.upper() # zet alles over in hoofdletters print (Text_up) Text_Len = len(Text_up) print (Text_Len) voor i binnen bereik (Text_Len): Lett = Text_up # Kiest een enkele letter, beginnend met de eerste, dwz [0] print ("Letter=", Lett) Lett_B = Braille_6A[Lett] # Kiest de corresponderende code uit de woordenboek. Een ontbrekend teken zal de code breken! print (Lett_B) if ("1" in Lett_B): print ("LED 1") led_1.on() # activeert LED bij servo0" if "2" in Lett_B: print ("LED 2") led_2.on() indien "3" in Lett_B: print ("LED 3") led_3.on() indien "4" in Lett_B: print ("LED 4") led_4.on() indien "5" in Lett_B: print ("LED 5 ") led_5.on() if "6" in Lett_B: print ("LED 6") led_6.on() sleep (1) # weergavepatroon voor een tweede print() led_1.off() # deactiveer alle LED's op servo's0 -5n led_2.off() led_3.off() led_4.off() led_5.off() led_6.off() sleep(0.3) # een korte donkere pauze, om het einde van de letter aan te geven als _name_ == '_main_ ': hoofd()
Stap 4: Outlook en opmerkingen
Dus wat zou het volgende kunnen zijn?
Naast die IT-meta-grap met de AIY-videokit of een ander geautomatiseerd beeldherkenningssysteem dat in de inleiding wordt genoemd, zijn er misschien andere opties om het concept dat in deze instructable wordt beschreven, uit te breiden. Sommigen van hen kunnen zelfs van real-world gebruik zijn. Dit kunnen zijn:
- verbeterde programmering, zodat de tekst wordt omgezet in standaard braillecode, met alle markeringen en compressies. Dat zou niet veel moeite moeten zijn voor een ervaren python-programmeur. Wat ik niet ben, dus alle hulp zou welkom zijn.
- het systeem uitbreiden naar een 2x4 matrix. Zou ook mogelijk moeten zijn, en zou helpen om de bijbehorende 8-punts braillecodes te gebruiken, zoals die worden gebruikt door elektronische brailleleesregels. Daarboven zou het een beetje dichter bij het Dearheart-clacks-systeem zijn.
- bouw een echte 2x3 of 2x4 brailleleesregel. Zou mogelijk moeten zijn met behulp van een reeks servo's of een reeks 5V mini-solenoïden. De belangrijkste uitdaging zou zijn dat de standaardafstand tussen voelbare punten 2,45 mm of 1/10 inch is op elektronische displays, dus sommige versnellingen en mechanica kunnen nodig zijn. De andere uitdaging zou kunnen zijn om de duwlengte nauwkeurig te regelen.
Zo'n eenvoudige en goedkope oplossing kan interessant zijn voor een breder publiek, aangezien commerciële brailleleesregels vrij duur zijn. Er kan een voordeel zijn voor brailleleerders die een dergelijk spraakgestuurd systeem gebruiken. Zoals ze verbaal een (Engelse) zin naar keuze kunnen invoeren en de tekst, letters en tekens op hun vingertop(pen) krijgen.
- bouw een mechanisch sluitersysteem dat lijkt op het Murray- of het Dearheart-systeem. Het gebruik van servo's, dat zou niet te ingewikkeld moeten zijn en kan worden beschreven in een andere instructable. Of misschien een leuk schoolproject. Iemand geïnteresseerd?
–――――
Enkele opmerkingen en interessante links:
- Er is een instructie die een "DIY semafoorlantaarn" beschrijft, een 2x4 LED-matrix, gebaseerd op een of ander Propeller-demobord. Ik hou van de lay-out, maar de programmering lijkt me een beetje ingewikkeld. Kijk alsjeblieft zelf.
- Ik heb nu een python-programma gevonden om volledig gecontracteerde (graad 2) braille te genereren. Helaas is het beperkt tot python 2 en de Amerikaans-Engelse versie uit 2002:
- een completer programma lijkt liblouis te zijn, https://github.com/liblouis/liblouis, maar ik heb geen idee hoe ik dit in deze oplossing moet integreren.
- een interessante python-oplossing lijkt uit Griekenland te komen, https://github.com/ant0nisk/pybrl kan verschillende talen integreren en graad 2 braille genereren.
- Ik ben noch een programmeur, noch een elektronicaman, en ik had een paar dagen geleden ook niet veel kennis van braille.
Dus als je fouten of weglatingen ziet, of als je ideeën hebt voor het project, laat het me dan weten.
- Als je dit instructable leuk vindt, stem er dan op!
Aanbevolen:
Op COVID-19 geïnspireerde spraakgestuurde domotica: 5 stappen
Door COVID-19 geïnspireerde spraakgestuurde huisautomatisering: in de afgelopen 4 jaar heb ik 3 of 4 verschillende variaties van op Arduino gebaseerde huisbedieningen geprobeerd. Voor ieders gemak is hier de chronologische geschiedenis van enkele van mijn ontwikkelingen. Instructable 1 - in oktober 2015 gebruikte IR en RF communica
Spraakgestuurde LED's: 8 stappen
Spraakgestuurde LED's: Webduino gebruikt de Chrome-internetbrowser om allerlei elektronische componenten te besturen, dus we zouden alle andere functies die Chrome te bieden heeft moeten kunnen gebruiken. In dit projectvoorbeeld gebruiken we de Speech API van Chrome. De spraakherkenning van Google gebruiken
Spraakgestuurde automatisering: 13 stappen
Spraakgestuurde automatisering: tegenwoordig hebben mensen altijd smartphones bij zich. Het is dus logisch om deze te gebruiken om huishoudelijke apparaten te bedienen. Hier wordt een domoticasysteem gepresenteerd met behulp van een eenvoudige Android-app, waarmee u elektrische apparaten kunt bedienen met een klik
Spraakgestuurde domotica (zoals Alexa of Google Home, geen wifi of ethernet nodig): 4 stappen
Spraakgestuurde domotica (zoals Alexa of Google Home, geen wifi of Ethernet nodig): het zijn in feite op sms gebaseerde arduino-gestuurde relais met google-assistentconfiguratie om berichten te verzenden met gesproken instructies. Het is heel gemakkelijk en goedkoop en werkt als Alexa-advertenties met je bestaande elektrische apparaten (als je Moto -X smartp
Hoe een spraakgestuurde robot te maken: 3 stappen (met afbeeldingen)
Hoe een spraakgestuurde robot te maken: heb je ooit dingen op je stem willen bedienen? Dan ben je op de juiste plek, je kunt alle dingen besturen met behulp van arduino, je hoeft alleen die dingen aan te sluiten en in het programma te declareren. Ik heb een eenvoudige stem gemaakt bestuurde robot, maar u kunt verbinding maken