Spisu treści:

Kolor-pi: 9 kroków
Kolor-pi: 9 kroków

Wideo: Kolor-pi: 9 kroków

Wideo: Kolor-pi: 9 kroków
Wideo: Jak Narysować Pokemona Pikachu | Kolorowanie 2024, Listopad
Anonim
kolor-pi
kolor-pi

Ta instrukcja pokazuje, jak używać Raspberry Pi do sterowania głosowego paskiem LED RGB za pośrednictwem strony internetowej, korzystając z interfejsów Web Speech API dla SpeechRecognition i SpeechSynthesis.

Ten przykład pokazuje, jak:

  • Utwórz podstawową stronę internetową za pomocą Node.js przez
  • Użyj interfejsów Web Speech API dla SpeechRecognition i SpeechSynthesis.
  • Użyj frameworka Cylon.js do sterowania paskiem LED RGB na Raspberry Pi
  • Komunikacja przez WSS (Secure Web Sockets) ze strony internetowej do Cylon.js, aby kontrolować kolor diody LED

Notatka

  • Do usłyszenia syntezatora mowy potrzebne będą głośniki lub słuchawki
  • Aby rozpoznawanie głosu działało, musisz zezwolić na dostęp do mikrofonu
  • Ponieważ w ten sposób uzyskujesz dostęp do mikrofonu, witryna musi działać w protokole
  • Biblioteka cylon-api-socketio nie obsługuje obecnie https. Mam pull request czekający na scalenie, ale do tego czasu musisz zastąpić /node_modules/cylon-api-socketio/lib/api.js plikiem z tego repozytorium
  • Pi-blaster jest potrzebny, aby to zadziałało.

Krok 1: Sprzęt

  1. Raspberry Pi - użyłem Raspberry Pi 2B, który układałem, ale możesz dostać zestaw startowy Raspberry Pi 3 za około 100 CAD
  2. Taśma LED RGB Light - bawiłem się taśmą LED Minger Light 32.8ft/10M 600leds RGB SMD 5050. W zestawie kontroler i zasilacz za około 40 CAD
  3. Złącze Barrel Jack - kupiłem jedno w moim lokalnym sklepie z elektroniką, coś takiego. Tylko upewnij się, czy pasuje do twojego zasilacza
  4. Złącza zworek / drut - miałem kilka kabli połączeniowych żeńskich i męskich i trochę drutu o rozmiarze 22 Gauge Solid leżącego wokół?
  5. Breadboard Solderless Prototype PCB Board - coś takiego
  6. Rezystory 3x10kΩ
  7. 3 x N-kanałowy MOSFET do sterowania diodami LED - kupiłem kilka IRL3303 w moim lokalnym sklepie elektronicznym. Ważne aby napięcie progowe bramek było max. 3,3 V, dzięki czemu może być napędzany przez piny RPi; zwykle oznaczany przez „L” (poziom logiczny) w nazwie.

Krok 2: Konfiguracja Raspberry Pi

System operacyjny

Zwykle używam najnowszej wersji Raspbian. Pobierz obraz i zapisz go na karcie SD. Jeśli używasz komputera z systemem Windows, możesz użyć programu Win32 Disk Imager, aby zapisać obraz na karcie SD.

Node.js

Zainstaluj najnowszą wersję Node.js. W momencie pisania używam 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

Zainstaluj Gita

sudo apt-get zainstaluj git

Krok 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster włącza PWM na pinach GPIO, o które prosisz Raspberry Pi. Zastosowana technika jest niezwykle wydajna: nie wykorzystuje procesora i daje bardzo stabilne impulsy.

Ta modulacja szerokości impulsu pozwala Raspberry Pi kontrolować jasność każdego z kanałów czerwonego, zielonego i niebieskiego dla paska LED.

Najpierw sklonuj repozytorium

cd /opcja/

sudo git clone https://github.com/sarfata/pi-blaster.git sudo chown -R pi:pi pi-blaster

Następnie zbuduj i zainstaluj

cd /opt/pi-blaster./autogen.sh &&./configure && make && sudo make install

Na koniec skonfiguruj piny, których chcesz użyć

Pod kontem root lub używając sudo utwórz i edytuj plik

/etc/default/pi-blaster

Dodaj następujące linie

DAEMON_OPTS=--gpio 23, 24, 25

Te piny gpio muszą pasować do pinów, które podłączasz do paska LED.

UWAGA: Istnieje różnica między GPIO a numerem pinu. W tym przykładzie użyto następujących

LED - Niebieski, GPIO-23, Pin - 16

LED - Czerwony, GPIO-24, Pin - 18 LED - Zielony, GPIO-25, Pin - 22

Dodatkowe poprawki

Uruchom pi-blaster

sudo service pi-blaster start

Uruchom ponownie pi-blaster

restart usługi sudo pi-blaster

Zatrzymaj pi-blaster

sudo usługa pi-blaster zatrzymaj

Uruchom pi-blaster automatycznie w czasie rozruchu

sudo systemctl włącz pi-blaster

Ostrzeżenia i inne zastrzeżenia

Piny używane przez pi-blaster zostaną skonfigurowane jako wyjścia. Nie podłączaj niczego do wejścia, bo możesz to zniszczyć! Ten demon używa sprzętowego generatora PWM raspberry pi, aby uzyskać precyzyjne taktowanie. Może to zakłócać działanie karty dźwiękowej.

Krok 4: Konfiguracja przykładowego kodu

Sklonuj przykładowy kod

1. Skonfiguruj folder podstawowy, w którym chcesz zainstalować

cd /opcja

sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock

2. Sklonuj przykładowe repozytorium git

klon git

lub

klon git [email protected]:haydockjp/kolor-pi.git

3. Zainstaluj zależności

cd kolor-pi

instalacja npm

Może to potrwać 2-3 minuty

4. Ten projekt musi komunikować się przez HTTPS i WSS. Obecnie cylon-api-socketio nie obsługuje połączeń SSL. Istnieje otwarte żądanie ściągnięcia, aby dodać tę obsługę, ale dopóki nie zostanie scalone, w tym repozytorium znajduje się plik poprawki. Uruchom następujące polecenie po zainstalowaniu npm

git checkout node_modules/cylon-api-socketio/lib/api.js

Krok 5: Utwórz samopodpisany certyfikat SSL

1. Utwórz plik klucza prywatnego

cd /opt/com.jonhaydock/colour-pi/certs

openssl genrsa -out color-pi-key.pem 2048

2. Utwórz CSR (Żądanie Podpisania Certyfikatu)

openssl req -new -key kolor-pi-key.pem -out kolor-pi-csr.pem

W tym momencie zostaniesz poproszony o podanie pewnych informacji dla żądania certyfikatu. Ponieważ jest to certyfikat z podpisem własnym, to od Ciebie zależy, jak dokładnie wypełnisz dane. Oto przykład

Nazwa kraju (kod 2-literowy) [AU]:CA

Nazwa stanu lub prowincji (pełna nazwa) [Some-State]:Kolumbia Brytyjska Nazwa miejscowości (np. miasto) :Vancouver Nazwa organizacji (np. firma) [Internet Widgits Pty Ltd]:Kolor Pi Nazwa jednostki organizacyjnej (np. sekcja) : Nazwa zwyczajowa (np. FQDN serwera lub TWOJA nazwa) :colour-pi Adres e-mail :[email protected]

Hasło wyzwanie :

Opcjonalna nazwa firmy :

W tym przykładzie wystarczy nacisnąć klawisz powrotu, aby pozostawić puste hasło wyzwania

3. Wygeneruj certyfikat

openssl x509 -req -dni 1095 -w kolorze-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem

4. Dla dodatkowego bezpieczeństwa utworzymy również plik Diffie Hellman Parameters

openssl dhparam -out dh_2048.pem 2048

Może to zająć 15-20 minut

Krok 6: Okablowanie obwodu

Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu
Okablowanie obwodu

Zasilanie taśmy LED

Pasek LED zasilany jest napięciem 12 woltów. Raspberry Pi jest w stanie wyprowadzić tylko 3,3 V lub 5 V i nie jest w stanie wyprowadzić w pobliżu amperów potrzebnych do napędzania tak wielu diod LED.

Ważne jest, aby nie podłączać zasilacza 12 V do Raspberry Pi. Tranzystory N-kanałowe MOSFET służą do separacji napięcia 3,3 V na pinach RPi i 12 V zasilacza LED.

MOSFET ma trzy piny Gate, Drain i Source. Jeśli nie jesteś pewien, w którym google znajduje się karta danych tranzystora, którego używasz, np. IRL3303

Podłączymy Raspberry Pi Pin do Bramy, przewód LED do Drain i wspólną masę do Source. Kiedy Pin osiągnie wysoki poziom, napięcie między Drenem a Źródłem aktywuje Bramę i połączy bramę ze Źródłem.

Zamierzamy również umieścić rezystory 10 kΩ na bramce i źródle, aby gdy pin RPi jest wysoki, możemy chronić pin poprzez zmniejszenie przepływającego przez niego prądu.

Kolejne kroki wykonuj na własne ryzyko. Nie biorę odpowiedzialności za wszystko, co może pójść nie tak

Powyżej znajduje się obraz fryzujący i zdjęcie rzeczywistego obwodu.

Polecam zrobić to przy wyłączonym zasilaniu dla RPi i taśmy LED

Skonfiguruj obwody tranzystorowe, po jednym na kanał koloru

  1. Włóż jeden z tranzystorów do płytki stykowej, jak pokazano na schemacie
  2. Włóż jeden z rezystorów 10kΩ na styki drenu i źródła tranzystora. To jest pierwsza i ostatnia przypinka
  3. Użyj trochę drutu, aby podłączyć pin źródłowy (ostatni pin) do ziemi na płytce stykowej
  4. Powtórz kroki 1 - 3 jeszcze dwa razy, aby mieć trzy zestawy - po jednym na kolor (czerwony, zielony i niebieski)

Podłącz szpilki RPi do płytki

  1. Podłącz pin 16 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał niebieskiej diody LED
  2. Podłącz pin 18 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał czerwonej diody LED
  3. Podłącz pin 20 do jednej z linii uziemienia z boku płytki stykowej
  4. Podłącz pin 22 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał zielonej diody LED

Użyłem dopasowanych kolorów przewodów do diod LED: Niebieskiego, Czerwonego i Zielonego. Użyłem czerni do ziemi

Podłącz gniazdo lufy

  1. Podłącz biały przewód do + końca gniazda lufy
  2. Podłącz czarny przewód do - końca gniazda lufy
  3. Podłącz czarny przewód do tej samej linii uziemienia na płytce stykowej, do której podłączono pin 20 RPi
  4. Podłącz biały przewód do linii + na płytce stykowej

Podłączanie taśmy LED

Moja taśma LED była dostarczana ze złączem o wystarczająco dobrym rozmiarze, aby można go było tymczasowo podłączyć do płytki stykowej. Wcisnąłem złącze w płytkę stykową i podłączyłem je do testu obwodu.

  1. Pierwszy tranzystor podłączony do styku 16. Poprowadziłem niebieski przewód od styku spustowego (środkowy styk) do niebieskiego przewodu na złączu taśmy LED
  2. Drugi tranzystor podłączony do Pina 18. Poprowadziłem czerwony przewód od

    Drenaż

    pin (środkowy pin) do czerwonego przewodu na złączu taśmy LED

  3. Trzeci tranzystor podłączony do Pinu 22. Poprowadziłem zielony przewód od

    Drenaż

    pin (środkowy pin) do zielonego przewodu na złączu taśmy LED

  4. Na koniec poprowadziłem biały przewód od linii + na płytce stykowej, która była podłączona do gniazda lufy, do białego przewodu na złączu taśmy LED.

Moc

Po sprawdzeniu obwodu powinieneś być gotowy do włączenia Raspberry Pi i podłączenia zasilania 12V do gniazda lufy.

Krok 7: Kod po stronie serwera

Kod po stronie serwera
Kod po stronie serwera

Uruchamianie kodu po stronie serwera

cd /opt/com.jonhaydock/color-pi

początek sudo npm

Spowoduje to uruchomienie serwera WWW i rozpoczęcie nasłuchiwania żądań HTTPS i WSS.

UWAGA: Pamiętaj, aby najpierw uruchomić pi-blaster

Zmienne środowiska

Domyślny port witryny to 443, ale możesz to zmienić, ustawiając zmienną środowiskową przed uruchomieniem kodu. Na przykład

eksportuj KOLOR_PI_PORT=2443

Domyślny port gniazda internetowego to 1443, ale można to zmienić, ustawiając zmienną środowiskową przed uruchomieniem kodu. Na przykład

eksportuj KOLOR_PI_WSS_PORT=3443

Uwaga: Ponieważ gniazdo sieciowe jest obsługiwane przez cylon.js, a nie przez główną witrynę, muszą one znajdować się na różnych portach

Styki, które są używane dla niebieskiego (styk 16), zielonego (styk 18) i czerwonego (styk 22) mogą również zostać nadpisane. Na przykład

eksportuj COLOUR_PI_PIN_BLUE=36

eksportuj KOLOR_PI_PIN_RED=38 eksportuj KOLOR_PI_PIN_GREEN=40

Uwaga: muszą one pasować do użytych fizycznych pinów. Jeśli je zmienisz, będziesz musiał również zaktualizować GPIO zdefiniowane w pliku /etc/default/pi-blaster. Na przykład

DAEMON_OPTS=--gpio 16, 20, 21

Główny kod serwera można znaleźć w pliku app.js. Ten plik uruchamia serwer WWW HTTPS, a także, za pośrednictwem struktury Cylon.js, używa socket.io do nasłuchiwania żądań gniazda internetowego na osobnym porcie.

Aby wejść na stronę, należy otworzyć przeglądarkę internetową na głównym komputerze (testowałem to tylko w Chrome) i użyć adresu IP Raspberry Pi, np.

10.0.1.2/

Możesz znaleźć swój adres IP z wiersza poleceń Raspberry Pi.

ifconfig

Serwer sieciowy będzie udostępniał dowolną zawartość w folderze publicznym. Domyślnie wyświetla stronę index.html.

Cylon.js tworzy punkt końcowy, do którego można podłączyć Socket.io.

10.0.1.2:1443/api/robots/kolor-pi

Możesz wysłać wiadomość set_colour do gniazda, aby ustawić wartości czerwonego, zielonego i niebieskiego

device.emit('set_color', r, g, b)

Który wywołuje polecenie set_colour, które wywołuje funkcję setColour w app.js. Ta funkcja ustawia poziomy jasności dla każdej z wartości R, G i B w zakresie od 0 do 255. Gdzie 0 jest wyłączone, a 255 całkowicie włączone.

np.

Czerwony r=255, g=0, b=0

Zielony r=0, g=255, b=0 Niebieski r=0, g=0, b=255 Biały r=255, g=255, b=255 Czarny / Wył. r=0, g=0, b=0

Krok 8: Kod strony internetowej

Kod strony internetowej
Kod strony internetowej

Ogólny

Serwis wykorzystuje rozpoznawanie głosu, aby wybrać kolory z predefiniowanej listy. Aby dodać kolor do listy, edytuj plik na serwerze: public/data/colours.json

np.

"czerwony":"#FF0000", Gdy kolor zostanie znaleziony lub wybrany z listy rozwijanej, pole Output zostanie ustawione na ten kolor, a wiadomość zostanie wysłana przez socket.io do Raspnerry Pi, który ustawi diody LED na ten sam kolor.

UWAGA: w zależności od tego, jak dobre są twoje diody LED, możesz zobaczyć podobny kolor lub nie. Niektóre są łatwiejsze do powielenia niż inne

Kiedy po raz pierwszy ładujesz witrynę, ponieważ używasz certyfikatu SSL z podpisem własnym, musisz to potwierdzić w przeglądarce. Powinieneś zobaczyć alert bezpieczeństwa dotyczący certyfikatu.

Rozpoznawanie głosu

To pudełko ma ikonę mikrofonu. Jeśli klikniesz ikonę, gdy jest zielona, zacznie nasłuchiwać kolorów. Podczas słuchania zmieni kolor na czerwony. Będzie nasłuchiwał przez krótki czas, a potem się zatrzyma. Kliknięcie ikony mikrofonu, gdy jest czerwona, również uniemożliwi jej słuchanie.

Ponieważ ta witryna musi uzyskać dostęp do mikrofonu, po wyświetleniu monitu musisz udzielić jej pozwolenia

UWAGA: Do tej części potrzebny jest mikrofon. Używam tego w mojej kamerze internetowej.

Transkrypcja śródokresowa

To pole śledzi domysły słów, które wypowiadasz, tak jak je wypowiadasz.

Ostateczna transkrypcja

To pole śledzi ostateczne przypuszczenie, to co powiedziałeś.

Znane kolory

To jest lista wszystkich kolorów, o których wie strona. Jest tworzony z pliku colors.json. Jeśli wybierzesz jeden z tych kolorów, strona odczyta kolor i ustawi kolor wyjściowy.

UWAGA: Do usłyszenia mowy potrzebne są głośniki lub słuchawki

Znalezione kolory

Ta strona internetowa obsługuje obecnie tylko dopasowywanie kolorów. Jeśli słowo lub słowa wypowiedziane do mikrofonu pasują do nazwy znanego koloru lub jeśli wybierzesz kolor z listy Znany kolor, zostanie on dodany tutaj jako dziennik.

Wyjście

Tutaj zostanie wyświetlony ostatnio znaleziony kolor. Wartość Hex kolorów (np. #7cb9e8) i wartość RGB (np. 124, 185, 232) będą wyświetlane jako tekst, a tło środkowego pola zostanie ustawione na rzeczywisty kolor.

Ten kolor jest również wysyłany do Raspberry Pi i powinieneś zobaczyć zmianę koloru paska LED.

UWAGA: jeśli nie widzisz zmiany koloru LED, spróbuj ponownie uruchomić pi-blaster i/lub aplikację node.js

restart usługi sudo pi-blaster

początek sudo npm

Znane głosy

To pole wyświetla listę „Znanych głosów” z obsługiwanej syntezy mowy. Wybranie jednego z tych głosów zmieni głos i język, który będziesz słyszeć, a także wymówi nazwę głosu.

Zmieni również język funkcji SpeechRecognition na taki sam, jak wybrany z listy.

Krok 9: Wreszcie

Image
Image

Oto przykład tego, co powinieneś zobaczyć.

Daj mi znać, jeśli masz jakiś problem, a w razie potrzeby mogę zaktualizować.

Zalecana: