Spisu treści:

Sterowany głosem, brajlowski wzór semafora: 4 kroki (ze zdjęciami)
Sterowany głosem, brajlowski wzór semafora: 4 kroki (ze zdjęciami)

Wideo: Sterowany głosem, brajlowski wzór semafora: 4 kroki (ze zdjęciami)

Wideo: Sterowany głosem, brajlowski wzór semafora: 4 kroki (ze zdjęciami)
Wideo: Automatyzacja na iOS - Anonsowanie głosem pełnego naładowania baterii 2024, Listopad
Anonim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim
Sterowany głosem semafor z wzorem brajlowskim

„Lord Vetinari stał przy swoim oknie, obserwując wieżę semaforów po drugiej stronie rzeki. Wszystkie osiem wielkich okiennic naprzeciw niego mrugało wściekle - czarne, białe, czarne, białe, czarne, białe… Informacje wzbijały się w powietrze. Dwadzieścia mil za nim, na innej wieży na Sto Lat, ktoś patrzył przez teleskop i wykrzykiwał liczby. Jak szybko nadchodzi przyszłość, pomyślał. T. Pratchett, Piąty Słoń

Po zbudowaniu sterowanego głosem skoku w oparciu o zestaw głosowy AIY, wpadłem na pomysł zbudowania sterowanego głosem semafora, łączącego najnowszą technologię IT z początkami telekomunikacji i przesyłania danych.

Najpierw wpadłem na pomysł, aby odtworzyć francuski system semaforów Chappe, który był pierwszym znanym systemem dla ogólnopolskiej telekomunikacji z wykorzystaniem systemu semaforów. Okazało się jednak, że jest to trochę zbyt skomplikowane, aby można je było zrealizować za pomocą standardowych serwomechanizmów w ciągu jednego dnia. Moim kolejnym celem było coś podobnego do systemu sekarowego opisanego przez Terry'ego Pratchetta, m.in. w „Going Postal”, jako system semaforów migawki 2x4 (a nie jako matryca 4x4 przedstawiona na filmie). Niestety nie mogłem znaleźć zbyt wielu szczegółów technicznych dostępnych w tym systemie. Skończyło się więc na systemie semaforów matrycowych 2x3 opracowanym przez Lorda Murraya, który przez jakiś czas był używany przez brytyjską marynarkę wojenną. Ponadto system sześciu przesłon/bitów dobrze pasuje do sześciu złączy serwo dostępnych w nakładce głosowej AIY HAT. Ponieważ jednak przez lata nie miałem pod ręką sześciu serwomechanizmów, w końcu zdecydowałem się najpierw zbudować symulator z diod LED.

Jeśli chodzi o wyświetlany kod, można było korzystać z systemu Murray, ale znowu informacje, które miałem na jego temat były dość ograniczone, nie pozwalając na wyświetlanie jakichkolwiek cyfr i symboli. Doszedłem więc do sedna, aby zamiast tego użyć systemu Braille'a, który również wykorzystuje macierz 2x3 do wyświetlania liter, cyfr i innych znaków. System Braille'a to międzynarodowy standard drukowania tekstów czytelnych dla niewidomych. Jest to również język znaczników, który używa wskaźnika liczbowego do określenia, że liczby będą wyświetlane jako następne, oraz wskaźników do określenia, że jedna lub wiele z poniższych liter jest pisanych wielkimi literami. Dlatego zdecydowałem się na nieco uproszczony system, z liczbami i niektórymi znakami zdefiniowanymi przez rozszerzenie Nemeth systemu brajlowskiego i po prostu używaj wielkich liter, przynajmniej na początku. Pozwala to na wyświetlanie unikalnych wzorów dla każdej litery, cyfry lub znaku w mojej specjalnej aplikacji i pominięcie analizy tekstu wymaganej dla prawdziwego Braille'a.

Finalne urządzenie pozwala wypowiedzieć słowo lub zdanie do systemu rozpoznawania głosu AIY, następnie dane wzorca głosu są przesyłane przez WLAN i internet na serwer Google w USA, tam są dekodowane i przynajmniej w moim przypadku interpretowane dane są wysyłane z powrotem do Europy, gdzie w końcu otrzymuję rozpoznane zdanie wyświetlane jako ciąg tekstowy. Ten ciąg tekstowy jest następnie dzielony przez skrypt Pythona na pojedyncze litery, a teraz, po porównaniu ze słownikiem definiującym odpowiednie wzorce, informacje o wzorze są pobierane i wzorce są wyświetlane na matrycy LED 2x3. Proszę spojrzeć na dołączony film.

Ustawiłem szybkość wyświetlania na jeden znak na sekundę, co powinno wystarczyć, aby przeszkolona osoba rozpoznała i przetłumaczyła wzór. Możliwym następnym krokiem byłoby użycie urządzenia do rozpoznawania wzorów, takiego jak AIY Vision HAT (do tej pory niedostępnego w Europie), aby automatycznie odczytywać i interpretować wzory, aby zamknąć krąg.

Dalsze koncepcje ulepszeń, niektóre o większym znaczeniu w świecie rzeczywistym, omówiono w części „Perspektywy” tej instrukcji.

Krok 1: Użyte materiały

Użyte materiały
Użyte materiały
Użyte materiały
Użyte materiały

Raspberry Pi 3

AIY głos HAT

Osiem białych diod LED o średnicy 5 mm. Działają one na 3V, dlatego potrzebny jest rezystor.

Rezystor 100kOhm. Może nie idealne rozwiązanie, ale było pod ręką.

Kable rozruchowe

Krótki kawałek drutu

Płytka do krojenia chleba, opcjonalnie do przetestowania konfiguracji.

Plastikowe pudełko na wizytówki.

Dwa kawałki plastikowej pianki o grubości 4 mm, część na śmieciach.

Kawałek plastikowej membrany, jako dyfuzor, jak wyżej.

Lutownica i lut, nóż.

Krok 2: Konfiguracja i użytkowanie

Konfiguracja i użytkowanie
Konfiguracja i użytkowanie
Konfiguracja i użytkowanie
Konfiguracja i użytkowanie
Konfiguracja i użytkowanie
Konfiguracja i użytkowanie

Skonfiguruj Raspberry Pi i AIY HAT zgodnie z instrukcją AIY voice HAT. Przed złożeniem Pi i HAT-a polecam przylutować nagłówki przynajmniej do portów serwo, ponieważ pozwala to łatwo podłączyć serwa, płytkę stykową lub diody LED.

Pudełko ekspozycyjne zostało zbudowane z wieczka plastikowego pudełka na wizytówki, dwóch kawałków pianki pasujących do pudełka i kawałka membrany o podobnej wielkości jako dyfuzora. W jednej z części piankowych wciśnięto sześć otworów i umieszczono w nich diody LED. Krótsze nóżki (od strony masy) diod połączono ze sobą kawałkiem kabla, następnie dołożono rezystor i do tego ostatniego wlutowano kabel połączeniowy. Do pozostałych nóżek (strona plusa) diod LED przylutowano zworki.

Zostały one następnie połączone z portami serwomechanizmu w nakładce głosowej AIY za pomocą kabli przedłużających, dodatnią stronę do (zewnętrznych) styków „P in”, ujemne złącze do jednego z (wewnętrznych) styków uziemienia/minus. Proszę spojrzeć na załączony schemat.

Gorąco polecam przetestować konfigurację na płytce stykowej przed lutowaniem.

Teraz membrana, płytka LED i warstwa uszczelniająca zostały umieszczone w plastikowym pudełku.

Umieść skrypt Braille_LED_1.py w folderze src. W takim przypadku może być konieczne, aby najpierw uczynić skrypt wykonywalnym.

Teraz za pomocą terminala Dev (!) uruchamiany jest program Braille_LED_1.py. Wpisz „src/Braille_LED_1.py” i naciśnij „Enter”.

Teraz zostaniesz poproszony o naciśnięcie przycisku w polu AIY i wypowiedzenie swojego słowa lub zdania. Z pewnym opóźnieniem system powtórzy to, co zostało zrozumiane, i wyświetli to na ekranie, a także, litera po literze, na sześciu wyświetlaczach LED.

Jeśli zamiast zdania podasz słowo kluczowe „Do widzenia”, system pożegna Cię, a program zostanie zamknięty.

Krok 3: Kodeks

Kod
Kod

Poniżej znajduje się kod, który pozwala rozmawiać z urządzeniem głosowym AIY i wyświetlać rozpoznane zdanie litera po literze na małej matrycy 2x3-LED lub typu Braille'a.

Kod jest pochodną skryptu, którego użyłem w poprzednim projekcie używającym głosu AIY HAT, będąc pochodną przykładu servo_demo.py opisanego w podręczniku AIY voice HAT.

Możesz też znaleźć słownik z częścią kodu Murraya, którą znalazłem w Internecie, jako plik tekstowy. Nie zawiera cyfr i pomija niektóre litery, co stanowiłoby tutaj problem.

Jednym z ograniczeń programu w jego obecnym stanie jest to, że jeśli znak nie jest zawarty w słowniku, spowoduje to awarię programu. Ponadto nie jest to reprezentacja pełnego kodu brajlowskiego jako języka znaczników. Jak widać w poniższym skrypcie, kod Nemeth dla liczb jest zbędny w przypadku niektórych znaków w standardowym brajlu, ale nie powinno to stanowić problemu dla naszej konkretnej aplikacji.

#!/usr/bin/env python3

# Ten skrypt jest adaptacją skryptu servo_demo.py dla nakładki głosowej AIY, # zoptymalizowany pod kątem wyświetlania symboli typu Baille w oparciu o AIY import aiy.audio import aiy.cloudspeech import aiy.voicehat z gpiozero import LED #from gpiozero import Przycisk z time import sleep # Słownik: sztucznie zmodyfikowany alfabet Braille'a, # cyfry i niektóre symbole wzięte z rozszerzenia Nemeth Braille_6A = { " ": "123456", # spacja "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 ", # Prefiks Numeru, czyli kolejne znaki to cyfry ", ": "2", ".": "256", # Kropka, koniec zdania (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # Następna litera jest pisana wielkimi literami; Numer-Stop ? "": "", # Kod Nemeth Braille jest matematycznym rozwinięciem 6-punktowego Braille'a # zobacz: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Kod Nemeth '1', Przecinek brajlowski "2": "23", "3": "25", "4": "256", "5": "26", "6": "235", # Nemeth '6', Braille'a '!' "7": "2356", "8": "236", # Nemeth '8', Braille'a '?' "9": "35", "0": "356", "+": "346", "-": "36", "/": "34", "(": "12356", ") ": "23456", "*": "1346" # '*' to symbol z dwoma wzorami w Nemeth, tutaj zastąpiony przez 'x', aby pominąć awarie } """ dla uproszczenia podano standardowe wzory liczb brajlowskich poniżej zostały zastąpione odpowiednimi kodami Nemeth „1”: „1”, „2”: „12”, „3”: „14”, „4”: „145”, „5”: „15”, „ 6": "124", "8": "1245", "9": "24", "0": "245", """ #Text = "rbhTZkl 9t64+34#!" # Przykładowy tekst, do celów debugowania def main(): rozpoznawany = aiy.cloudspeech.get_recognizer() rozpoznawany.expect_phrase('goodbye') # słowo kluczowe, kończy program button = aiy.voicehat.get_button() # AIY Dioda LED stanu przycisku = aiy.voicehat.get_led() # AIY Status przycisku-LED aiy.audio.get_recorder().start() led_1 = LED(26) # 1. złącze, serwo0, GPIO 26 # górna lewa led_2 = LED (6) # 2. złącze, serwo1, GPIO 06 # środkowa lewa dioda_3 = LED(13) # 3 złącze, serwo2, GPIO 13 # dolna lewa dioda_4 = LED(5) # 4 złącze, serwo3, GPIO 05 # górna prawa dioda_5 = LED(12) # 5 złącze, servo4, GPIO 12 # środkowy prawy led_6 = LED(24) # 4 złącze, servo3, GPIO 13 # dolny prawy #odległość= Przycisk(5) # czujnik odległości podłączony do serwo3/GPIO 05, tutaj nie używany aiy.audio.say ("Cześć!",) aiy.audio.say("Aby rozpocząć, proszę nacisnąć przycisk",) aiy.audio.say("Jeśli pożegnasz się, zakończę program",) podczas gdy True: # się uruchamia loop led.set_state(aiy.voicehat. LED. BLINK) print("Aby aktywować rozpoznawanie głosu n, naciśnij niebieski przycisk, a następnie mów") print() button.wait_for_press() print('Słucham…') aiy.audio.say("Słucham",) led.set_state(aiy.voicehat. LED. BLINK_3) text =cognizer.recognize() # ciąg tekstowy rozpoznanego zdania led.set_state(aiy.voicehat. LED. OFF) jeśli tekst to Brak: aiy.audio.say('Przepraszam, nie słyszałem.',) elif 'do widzenia' w tekście: aiy.audio.say("Do widzenia",) aiy.audio.say('Przybyli',) aiy.audio.say('Auf Wiedersehen',) sen (3) print('do widzenia! ') break # zatrzymuje pętlę i kończy program else: print('Powiedziałeś "', text, '"') # Pozwala sprawdzić interpretację systemu, w tym pisanie wielkich liter aiy.audio.say('Chyba powiedziałeś',) aiy.audio.say(text,) # weryfikacja akustyczna Text_up = text.upper() # przenosi wszystko na wielkie litery print (Text_up) Text_Len = len(Text_up) print (Text_Len) for i in range (Text_Len): Lett = Text_up # Wybiera pojedynczą literę, zaczynając od pierwszej, tj. [0] print ("Letter=", Lett) Lett_B = Braille_6A[Lett] # Wybiera odpowiedni kod z słownik. Brakujący znak złamie kod! print (Lett_B) if ("1" w Lett_B): print ("LED 1") led_1.on() # aktywuje LED na servo0" if "2" w Lett_B: print ("LED 2") led_2.on() jeśli "3" w Lett_B: drukuj ("LED 3") led_3.on() jeśli "4" w Lett_B: drukuj ("LED 4") led_4.on() jeśli "5" w Lett_B: drukuj ("LED 5 ") led_5.on() jeśli "6" w Lett_B: print ("LED 6") led_6.on() sleep (1) # wzór wyświetlania na drugi print() led_1.off() # dezaktywacja wszystkich diod na serwo0 -5n led_2.off() led_3.off() led_4.off() led_5.off() led_6.off() sleep(0.3) # krótka przerwa, aby wskazać koniec litery, jeśli _name_ == '_main_ ': Główny()

Krok 4: Outlook i uwagi

Więc co może być dalej?

Oprócz tego meta-żartu IT z zestawem wideo AIY lub innym zautomatyzowanym systemem rozpoznawania obrazu wspomnianym we wstępie, mogą istnieć inne opcje rozszerzenia koncepcji opisanej w tej instrukcji. Niektóre z nich mogą być nawet przydatne w świecie rzeczywistym. Mogą to być:

- ulepszone programowanie, dzięki czemu tekst jest przenoszony do standardowego kodu brajlowskiego, ze wszystkimi znacznikami i kompresją. To nie powinno być zbyt dużym wysiłkiem dla wykwalifikowanego programisty Pythona. Którym nie jestem, więc każda pomoc byłaby mile widziana.

- rozbudować system do macierzy 2x4. Powinno być to również możliwe i pomogłoby użyć odpowiednich 8-punktowych kodów brajlowskich, jakie są używane w elektronicznych monitorach brajlowskich. Powyżej byłoby nieco bliżej systemu sekarowego Dearheart.

- zbuduj prawdziwy monitor brajlowski 2x3 lub 2x4. Powinno być to możliwe przy użyciu tablicy serw lub tablicy mini elektrozaworów 5V. Podstawowym wyzwaniem byłoby to, że standardowa odległość między punktami dotykowymi wynosi 2,45 mm lub 1/10 cala na wyświetlaczach elektronicznych, więc mogą być wymagane niektóre przekładnie i mechanika. Innym wyzwaniem może być precyzyjna regulacja długości pchania.

Takie proste i tanie rozwiązanie może zainteresować szerszą publiczność, ponieważ komercyjne monitory brajlowskie są dość drogie. Korzystanie z takiego systemu sterowanego głosem może przynieść korzyści osobom uczącym się brajla. Ponieważ mogą werbalnie wpisać wybrane (angielskie) zdanie i otrzymać tekst, litery i znaki wyświetlane na ich palcach.

- skonstruuj system mechanicznej żaluzji przypominający systemy Murray lub Dearheart. Korzystanie z serw, które nie powinno być zbyt skomplikowane i może być opisane w innej instrukcji. Albo może być fajnym szkolnym projektem. Ktokolwiek zainteresowany?

–――――

Kilka uwag i interesujących linków:

- Istnieje instrukcja opisująca "latarnię semaforową DIY", matrycę LED 2x4, opartą na jakiejś płycie demonstracyjnej Propeller. Podoba mi się układ, ale programowanie wydaje mi się nieco skomplikowane. Proszę, spójrz sam.

- Teraz znalazłem program w Pythonie do generowania brajla w pełni zakontraktowanego (stopień 2). Niestety jest ograniczony do Pythona 2 i amerykańskiej wersji angielskiej z 2002 roku:

- bardziej kompletnym programem wydaje się liblouis, https://github.com/liblouis/liblouis, ale nie mam pojęcia, jak to zintegrować z tym rozwiązaniem.

- ciekawe rozwiązanie Pythona wydaje się pochodzić z Grecji, https://github.com/ant0nisk/pybrl może integrować kilka języków i generować Braille'a stopnia 2.

- Nie jestem ani programistą, ani elektronikiem, ani kilka dni temu nie miałem dużej wiedzy o brajlu.

Jeśli więc widzisz jakieś błędy, przeoczenia, masz jakieś pomysły na projekt, daj mi znać.

- Jeśli podoba Ci się ta instrukcja, zagłosuj na nią!

Zalecana: