Sommario:
- Passaggio 1: materiali utilizzati
- Passaggio 2: installazione e utilizzo
- Passaggio 3: il codice
- Passaggio 4: Outlook e commenti
Video: Un semaforo con pattern di tipo Braille controllato dalla voce: 4 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
"Lord Vetinari era in piedi alla sua finestra a guardare la torre semaforica dall'altra parte del fiume. Tutte e otto le grandi persiane di fronte a lui stavano lampeggiando furiosamente: nere, bianche, nere, bianche, nere, bianche… Le informazioni volavano nell'aria. Venti miglia dietro di lui, su un'altra torre su Sto Lat, qualcuno stava guardando attraverso un telescopio e gridando numeri. Quanto velocemente il futuro arriva su di noi, pensò." T. Pratchett, Il quinto elefante
Dopo aver costruito un jump jack a comando vocale basato sul kit vocale AIY, ho avuto l'idea di costruire un semaforo a comando vocale, riunendo le ultime novità della tecnologia IT con gli inizi delle telecomunicazioni e del trasferimento dati.
All'inizio ho avuto l'idea di replicare il sistema semaforico francese di Chappe, che è stato il primo sistema noto per le telecomunicazioni a livello nazionale che utilizza un sistema semaforico. Ma si è rivelato un po' troppo complicato da realizzare utilizzando servi standard in un giorno. Il mio prossimo obiettivo era qualcosa di simile al sistema di clack descritto da Terry Pratchett, ad es. in "Going Postal", come un sistema semaforico con otturatore 2x4 (non come la matrice 4x4 rappresentata nel film). Purtroppo non sono riuscito a trovare troppi dettagli tecnici disponibili su questo sistema. Così mi sono ritrovato con il sistema di semafori a matrice 2x3 sviluppato da Lord Murray, che era stato utilizzato dalla Marina britannica per un po'. Inoltre, un sistema a sei shutter/bit si adatta bene ai sei connettori servo disponibili sull'AIY voice HAT. Ma, poiché negli anni non avevo sei servi a portata di mano, alla fine ho deciso di costruire prima un simulatore fatto di LED.
Per quanto riguarda il codice visualizzato, si poteva utilizzare il sistema Murray, ma anche in questo caso le informazioni che avevo a disposizione erano piuttosto limitate, non permettendo di visualizzare alcun numero e simbolo. Così sono arrivato al punto di utilizzare invece il sistema Braille, che utilizza anche una matrice 2x3 per visualizzare lettere, numeri e altri segni. Il sistema Braille è lo standard internazionale per la stampa di testi leggibili dai non vedenti. È anche un linguaggio di markup, che utilizza un indicatore numerico per definire che i numeri verranno visualizzati successivamente e indicatori per definire che una o più delle seguenti lettere sono scritte in maiuscolo. Ho quindi deciso di impostare un sistema leggermente semplificato, con numeri e alcuni segni definiti invece dall'estensione Nemeth del sistema Braille, e utilizzare solo lettere maiuscole, almeno per l'inizio. Ciò consente di avere modelli univoci per ogni lettera, numero o segno da visualizzare nella mia applicazione speciale e di omettere l'analisi del testo richiesta per il vero Braille.
Il dispositivo finale consente di pronunciare una parola o una frase nel sistema di riconoscimento vocale AIY, quindi i dati del modello vocale vengono inviati tramite WLAN e Internet a un server di Google negli Stati Uniti, vengono decodificati e, almeno nel mio caso, i dati interpretati i dati vengono rispediti in Europa, dove finalmente ottengo la frase riconosciuta visualizzata come stringa di testo. Questa stringa di testo viene quindi suddivisa dallo script Python nelle singole lettere e ora, confrontandola con un dizionario che definisce i modelli corrispondenti, le informazioni sul modello vengono recuperate e i modelli vengono visualizzati su una matrice LED 2x3. Si prega di dare un'occhiata al video allegato.
Ho impostato la velocità di visualizzazione su un carattere al secondo, che dovrebbe essere abbastanza lungo da consentire a una persona esperta di identificare e tradurre il modello. Un possibile passo successivo sarebbe quello di utilizzare un dispositivo di riconoscimento di pattern come l'AIY vision HAT (finora non disponibile in Europa) per leggere e interpretare automaticamente i pattern, così da chiudere il cerchio.
Ulteriori concetti per miglioramenti, alcuni con maggiore rilevanza nel mondo reale, sono discussi nella parte "prospettive" di questo manuale.
Passaggio 1: materiali utilizzati
Raspberry Pi 3
AIY voce CAPPELLO
Otto LED bianchi, diametro 5 mm. Questi funzionano a 3V, quindi è necessario un resistore.
Resistenza da 100kOhm. Forse non era la soluzione perfetta, ma era a portata di mano.
Cavi jumper
Un pezzo di filo corto
Breadboard, opzionale per testare il setup.
Una scatola di plastica per biglietti da visita.
Due pezzi di schiuma di plastica da 4 mm, alcuni sono rimasti nella spazzatura.
Qualche pezzo di membrana plastica, come diffusore, come sopra.
Saldatore e saldatura, un coltello.
Passaggio 2: installazione e utilizzo
Configura il Raspberry Pi e AIY HAT come indicato nel manuale AIY voice HAT. Consiglierei di saldare le intestazioni almeno alle porte del servo prima di assemblare Pi e HAT, in quanto ciò consente di collegare facilmente servi, una breadboard o LED.
La scatola espositiva era stata costruita con il coperchio di una scatola di plastica per biglietti da visita, due pezzi di schiuma che si adattavano alla scatola e un pezzo di membrana di dimensioni simili come diffusore. In una delle parti in schiuma sono stati spinti sei fori e i LED sono stati inseriti in essi. I piedini più corti (lato massa) dei LED sono stati collegati tra loro da un pezzo di cavo, quindi è stato aggiunto un resistore e a quest'ultimo è stato saldato un cavo jumper. Agli altri piedi (lato più) dei LED sono stati saldati i cavi jumper.
Questi sono stati quindi collegati alle porte servo sull'AIY voice HAT tramite cavi di allungamento, il lato positivo ai pin "P in" (esterno), il connettore negativo a uno dei pin (interni) di terra/meno. Si prega di dare un'occhiata allo schema allegato.
Consiglio vivamente di testare la configurazione su una breadboard prima di saldare.
Ora la membrana, la piastra LED e lo strato sigillante sono stati inseriti nella scatola di plastica.
Posiziona lo script Braille_LED_1.py nella cartella src. Nel caso, potresti dover prima rendere eseguibile lo script.
Ora utilizzando il terminale Dev (!) viene avviato il programma Braille_LED_1.py. Inserisci "src/Braille_LED_1.py" e premi "Invio".
Ora ti verrà chiesto di premere il pulsante della casella AIY e dire la tua parola o frase. Con un certo ritardo, il sistema ripeterà quanto compreso, e lo visualizzerà sullo schermo oltre che lettera per lettera sul display a sei LED.
Se inserisci la parola chiave "Arrivederci" invece di una frase, il sistema ti dirà Arrivederci e il programma verrà chiuso.
Passaggio 3: il codice
Di seguito trovi il codice che ti permette di parlare con il dispositivo vocale AIY e di visualizzare lettera per lettera la frase riconosciuta su un piccolo 'semaforo' a 2x3 LED o matrice di tipo Braille.
Il codice è un derivato dello script che ho usato per un progetto precedente utilizzando AIY voice HAT, essendo un derivato dell'esempio servo_demo.py descritto nel manuale AIY voice HAT.
Puoi anche trovare un dizionario con la parte del codice Murray che avevo trovato su Internet, come file di testo. Non contiene né numeri né omette alcune lettere, il che creerebbe un problema qui.
Una limitazione del programma nel suo stato attuale è che se un segno non fosse incluso nel dizionario, il programma andrebbe in crash. Inoltre non è una rappresentazione del codice Braille completo come linguaggio di marcatura. Come puoi vedere nello script qui sotto, il codice Nemeth per i numeri è ridondante con alcuni segni in Braille standard, ma ciò non dovrebbe dare problemi per la nostra specifica applicazione.
#!/usr/bin/env python3
# Questo script è un adattamento dello script servo_demo.py per AIY voice HAT, # ottimizzato per il display di simboli di tipo Baille basato su AIY import aiy.audio import aiy.cloudspeech import aiy.voicehat from gpiozero import LED #from gpiozero import Pulsante da time import sleep # Dizionario: un alfabeto Braille modificato artificialmente, # numeri e alcuni simboli presi dall'estensione Nemeth del Braille Braille_6A = { " ": "123456", # spazio "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 ", # Prefisso numerico, ovvero i segni successivi sono i numeri ", ": "2", ".": "256", # Punto, fine frase (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # La lettera successiva è in maiuscolo; Numero-Stop? "": "", # Il codice Nemeth Braille è un'espansione matematica per il Braille a 6 punti # vedi: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Codice Nemeth '1', Braille 'virgola' "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" # '*' è un simbolo di due pattern in Nemeth, qui sostituito da una 'x' per omettere gli arresti anomali } """ per ragioni di semplicità, i pattern numerici Braille standard forniti di seguito sono stati sostituiti dai corrispondenti codici Nemeth "1": "1", "2": "12", "3": "14", "4": "145", "5": "15", " 6": "124", "8": "1245", "9": "24", "0": "245", """ #Text = "rbhTZkl 9t64+34#!" # Sampletext, per scopi di debug def main(): riconosciutor = aiy.cloudspeech.get_recognizer() riconosciutor.expect_phrase('goodbye') # parola chiave, termina il programma button = aiy.voicehat.get_button() # AIY LED di stato del pulsante = aiy.voicehat.get_led() # AIY Stato pulsante-LED aiy.audio.get_recorder().start() led_1 = LED(26) # 1° connettore, servo0, GPIO 26 # led in alto a sinistra_2 = LED(6) # 2° connettore, servo1, GPIO 06 # led centrale sinistro_3 = LED(13) # 3° connettore, servo2, GPIO 13 # led inferiore sinistro_4 = LED(5) # 4° connettore, servo3, GPIO 05 # led superiore destro_5 = LED(12) # 5° connettore, servo4, GPIO 12 # led in mezzo a destra_6 = LED(24) # 4° connettore, servo3, GPIO 13 # in basso a destra #distance= Button(5) # sensore di distanza collegato a servo3/GPIO 05, non utilizzato qui aiy.audio.say ("Ciao!",) aiy.audio.say("Per iniziare, premi il pulsante",) aiy.audio.say("Se mi dici Arrivederci, finirò il programma",) while True: # inizia loop led.set_state(aiy.voicehat. LED. BLINK) print("Per attivare il riconoscimento vocale n, premi il pulsante blu, quindi parla") print() button.wait_for_press() print('Ascolto…') aiy.audio.say("Sto ascoltando",) led.set_state(aiy.voicehat. LED. BLINK_3) text = requirer.recognize() # stringa di testo della frase riconosciuta led.set_state(aiy.voicehat. LED. OFF) se il testo è None: aiy.audio.say('Scusa, non ti ho sentito.',) elif 'arrivederci' nel testo: aiy.audio.say("Arrivederci",) aiy.audio.say('Arrivederci',) aiy.audio.say('Auf Wiedersehen',) sleep (3) print('ciao! ') break # interrompe il ciclo e termina il programma else: print('Hai detto "', text, '"') # Consente di controllare l'interpretazione del sistema, inclusa la maiuscola aiy.audio.say('Immagino che tu abbia detto',) aiy.audio.say(text,) # verifica acustica Text_up = text.upper() # trasferisce tutto in maiuscolo print (Text_up) Text_Len = len(Text_up) print (Text_Len) for i nell'intervallo (Text_Len): Lett = Text_up # Sceglie una singola lettera, iniziando per prima, cioè [0] print ("Letter=", Lett) Lett_B = Braille_6A[Lett] # Prende il codice corrispondente dal dizionario. Un segno mancante romperà il codice! print (Lett_B) if ("1" in Lett_B): print ("LED 1") led_1.on() # attiva il LED al servo0" if "2" in Lett_B: print ("LED 2") led_2.on() se "3" in Lett_B: print ("LED 3") led_3.on() if "4" in Lett_B: print ("LED 4") led_4.on() if "5" in Lett_B: print ("LED 5 ") led_5.on() if "6" in Lett_B: print ("LED 6") led_6.on() sleep (1) # mostra il pattern per un secondo print() led_1.off() # disattiva tutti i LED sui servi0 -5n led_2.off() led_3.off() led_4.off() led_5.off() led_6.off() sleep(0.3) # una breve pausa scura, per indicare la fine della lettera se _name_ == '_main_ ': principale()
Passaggio 4: Outlook e commenti
Quindi cosa potrebbe essere il prossimo?
Oltre a quella meta-scherzo IT con il kit video AIY o un altro sistema di riconoscimento automatico delle immagini menzionato nell'introduzione, potrebbero esserci altre opzioni per espandere il concetto descritto in questa guida. Alcuni di essi potrebbero persino essere utili nel mondo reale. Questi potrebbero essere:
- programmazione migliorata, in modo che il testo venga trasferito in codice Braille standard, con tutti i markup e le compressioni. Questo non dovrebbe essere un grande sforzo per un abile programmatore Python. Cosa che non sono, quindi qualsiasi aiuto sarebbe il benvenuto.
- espandere il sistema a una matrice 2x4. Dovrebbe essere anche possibile e aiuterebbe a utilizzare i corrispondenti codici Braille a 8 punti, come vengono utilizzati dai display Braille elettronici. Al di sopra di questo, sarebbe un po' più vicino al sistema di Dearheart clacks.
- costruire un vero display Braille 2x3 o 2x4. Dovrebbe essere possibile utilizzare una serie di servi o una serie di mini solenoidi da 5 V. La sfida principale sarebbe che la distanza standard tra i punti tattili è di 2,45 mm, o 1/10 di pollice, sui display elettronici, quindi potrebbero essere necessari alcuni ingranaggi e meccanismi. L'altra sfida potrebbe essere quella di regolare con precisione la lunghezza della spinta.
Una soluzione così semplice ed economica potrebbe interessare un pubblico più ampio, poiché i display Braille commerciali sono piuttosto costosi. Potrebbe esserci un vantaggio per gli studenti Braille che utilizzano un tale sistema di controllo vocale. Poiché potrebbero inserire verbalmente una frase (in inglese) a loro scelta e ottenere il testo, le lettere e i segni visualizzati sulla punta delle dita.
- costruire un sistema di otturatore meccanico simile ai sistemi Murray o Dearheart. Usando i servi, non dovrebbe essere troppo complicato e potrebbe essere descritto in un'altra istruzione. O potrebbe essere un bel progetto scolastico. Qualcuno è interessato?
–――――
Alcune osservazioni e link di interesse:
- Esiste un'istruzione che descrive una "lanterna semaforo fai-da-te", una matrice LED 2x4, basata su una scheda dimostrativa Propeller. Mi piace il layout, ma la programmazione mi sembra un po' complicata. Per favore, guarda tu stesso.
- Ora ho trovato un programma Python per generare Braille completamente contratto (Grado 2). Sfortunatamente è limitato a Python 2 e alla versione in inglese americano del 2002:
- un programma più completo sembra essere liblouis, https://github.com/liblouis/liblouis, ma non ho idea di come integrarlo in questa soluzione.
- un'interessante soluzione Python sembra provenire dalla Grecia, https://github.com/ant0nisk/pybrl può integrare diverse lingue e generare Braille di grado 2.
- Non sono né un programmatore, né un ragazzo di elettronica, né avevo molta conoscenza del Braille qualche giorno fa.
Quindi, se vedete errori, omissioni o avete qualche idea per il progetto, fatemelo sapere.
- Se ti piace questo istruibile, per favore votalo!
Consigliato:
Robot Arduino con distanza, direzione e grado di rotazione (est, ovest, nord, sud) controllato dalla voce tramite modulo Bluetooth e movimento autonomo del robot.: 6 passaggi
Robot Arduino con distanza, direzione e grado di rotazione (est, ovest, nord, sud) controllato dalla voce utilizzando il modulo Bluetooth e il movimento autonomo del robot.: Questo Instructable spiega come realizzare un robot Arduino che può essere spostato nella direzione richiesta (avanti, indietro , Sinistra, Destra, Est, Ovest, Nord, Sud) distanza richiesta in centimetri utilizzando il comando vocale. Il robot può essere spostato anche in autonomia
Motore passo-passo controllato dalla luce + staffa a parete/supporto: 6 passaggi
Motore passo-passo controllato dalla luce + staffa/supporto da parete: questo supporto viene utilizzato per alloggiare un motore passo-passo controllato da Arduino, progettato per controllare automaticamente una tenda in base al livello di luce nella stanza. Puoi anche aggiungere uno schermo LCD per stampare il livello di luce. L'attrezzatura 3D è solo a scopo dimostrativo, un
Simple Braille Writer (discorso in Braille): 8 passaggi (con immagini)
Simple Braille Writer (Speech to Braille): Ciao a tutti, Tutto questo è iniziato facendo un semplice plotter XY dopo averlo completato con successo, ho pensato di sviluppare un semplice convertitore da discorso a testo braille. Ho iniziato a cercarlo online e inaspettatamente i prezzi erano troppo alti ,questo mi ha dato una carica
RBG Stampato in 3D Controllato dalla Luna con Blynk (iPhone o Android): 4 Passaggi (con Immagini)
RBG 3D Printed Moon Controlled With Blynk (iPhone o Android): questa è una luna stampata in 3D con un supporto. Costruito con una striscia LED RGB di 20 led collegati ad un arduino uno e programmato per essere controllato con blynk. L'arduino è quindi possibile controllare tramite l'app da blynk su iPhone o Android
Sfarfallio della lampada A/C da 120 V dalla candela votiva a LED di tipo 1 (COB): 7 passaggi
Sfarfallio della lampada A/C da 120 V dalla candela votiva a LED di tipo 1 (COB): hai bisogno di luci tremolanti per completare il tuo ritrovo di Halloween? Frustrato da altre soluzioni? Ti piace fondere la saldatura e riutilizzare l'elettronica? Allora questo Instructable fa proprio al caso tuo. Questo Instructable si rivolge solo allo sfarfallio effettivo