Kazalo:

Color-pi: 9 korakov
Color-pi: 9 korakov

Video: Color-pi: 9 korakov

Video: Color-pi: 9 korakov
Video: Rimsky-Korsakov: Scheherazade op.35 - Leif Segerstam - Sinfónica de Galicia 2024, Oktober
Anonim
Barva-pi
Barva-pi

Ta navodila kažejo, kako z Raspberry Pi glasovno upravljati LED trak RGB prek spletnega mesta z uporabo vmesnikov API Web Speech API za SpeechRecognition in SpeechSynthesis.

Ta primer prikazuje, kako

  • Ustvarite osnovno spletno mesto z uporabo Node.js prek
  • Uporabite vmesnike Web Speech API za SpeechRecognition in SpeechSynthesis.
  • Uporabite ogrodje Cylon.js za nadzor RGB LED traku na Raspberry Pi
  • Komunicirajte prek WSS (zaščitenih vtičnic) s spletne strani na Cylon.js za nadzor barve LED

Opomba

  • Za poslušanje sintetizatorja govora potrebujete zvočnike ali slušalke
  • Za delovanje prepoznavanja glasu boste morali omogočiti dostop do mikrofona
  • Ker ima ta dostop do vašega mikrofona, mora biti spletno mesto zagnano pod protokolom
  • Knjižnica cylon-api-socketio trenutno ne podpira https. Imam zahtevo za vlečenje, ki čaka na združitev, do takrat pa morate zamenjati /node_modules/cylon-api-socketio/lib/api.js z datoteko v tem skladišču
  • Za to je potreben pi-blaster.

1. korak: Oprema

  1. Raspberry Pi - Uporabil sem Raspberry Pi 2B, ki sem ga imel naokoli, vendar lahko dobite Raspberry Pi 3 Starter Kit za približno 100 CAD
  2. RGB LED Strip Light - Igral sem se z Minger LED Strip Light 32,8ft/10M 600leds RGB SMD 5050. Priložen je krmilnik in napajalnik za približno CAD 40
  3. Barrel Jack Connector - kupil sem ga v lokalni trgovini z elektroniko, nekaj takega. Prepričajte se, ali ustreza vašemu napajalniku
  4. Povezovalni priključki / žica - imel sem nekaj priključnih kablov ženski na moški in nekaj 22 -palčne trdne priključne žice, ki je ležala naokoli
  5. Breadboard Solderless Prototype PCB Board - nekaj takega
  6. 3 x 10 kΩ upori
  7. 3 x N -kanalni MOSFET za krmiljenje LED - nekaj IRL3303 sem kupil v svoji lokalni trgovini z elektroniko. Pomembno je, da je mejna napetost vrat največja. 3,3 V, tako da ga lahko poganjajo zatiči RPi; običajno označena z "L" (logična raven) v imenu.

2. korak: Nastavitev Raspberry Pi

Operacijski sistem

Običajno uporabljam najnovejšo različico Raspbian. Prenesite sliko in jo zapišite na kartico SD. Če uporabljate računalnik z operacijskim sistemom Windows, lahko z zapisovalnikom diskov Win32 zapišete sliko na kartico SD.

Node.js

Namestite najnovejšo različico Node.js. V času pisanja uporabljam 8.9.1

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

sudo apt-get install nodejs

Namestite Git

sudo apt-get install git

3. korak: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster omogoča PWM na zatičih GPIO, ki jih zahtevate od Raspberry Pi. Uporabljena tehnika je izredno učinkovita: ne uporablja procesorja in daje zelo stabilne utripe.

Ta modulacija širine impulza omogoča Raspberry Pi nadzor nad svetlostjo vsakega od rdečih, zelenih in modrih kanalov za LED trak.

Najprej klonirajte skladišče

cd /opt /

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

Nato zgradite in namestite

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

Končno nastavite, katere zatiče želite uporabiti

Pod korenskim računom ali z uporabo sudo ustvarite in uredite datoteko

/etc/default/pi-blaster

Dodajte naslednje vrstice

DAEMON_OPTS =-gpio 23, 24, 25

Ti zatiči gpio se morajo ujemati z zatiči, ki jih povezujete z LED trakom.

OPOMBA: Obstaja razlika med GPIO in številko pin. Ta primer uporablja naslednje

LED - modra, GPIO -23, pin - 16

LED - rdeča, GPIO -24, pin - 18 LED - zelena, GPIO -25, pin - 22

Dodatni popravki

Zaženite pi-blaster

sudo storitev pi-blaster start

Znova zaženite pi-blaster

sudo storitev pi-blaster ponovni zagon

Ustavite pi-blaster

sudo storitev pi-blaster stop

Samodejno zaženite pi-blaster med zagonom

sudo systemctl omogoči pi-blaster

Opozorila in druga opozorila

Zatiči, ki jih uporablja pi-blaster, bodo konfigurirani kot izhodi. Ne vtikajte nečesa na vhod, sicer ga lahko uničite! Ta demon uporablja strojni PWM generator maline pi, da dobi natančne časovne razporede. To lahko moti izhod zvočne kartice.

4. korak: Nastavitev vzorčne kode

Klonirajte vzorčno kodo

1. Nastavite osnovno mapo za namestitev

cd /opt

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

2. Klonirajte primer skladišča git

git clone

ali

git clone [email protected]: haydockjp/color-pi.git

3. Namestite odvisnosti

cd barva-pi

npm install

To lahko traja 2-3 minute

4. Ta projekt mora komunicirati prek HTTPS in WSS. Cylon-api-socketio trenutno ne podpira povezav SSL. Za dodajanje te podpore obstaja odprta vlečna zahteva, vendar dokler ni združena, je v tem skladišču datoteka popravkov. Po namestitvi npm zaženite naslednji ukaz

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

5. korak: Ustvarite samopodpisan SSL certifikat

1. Ustvarite datoteko zasebnega ključa

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

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

2. Ustvarite CSR (zahteva za podpis certifikata)

openssl req -nova -ključ-barva-pi-key.pem -out barva-pi-csr.pem

Na tej točki boste morali vnesti nekaj informacij za zahtevo za potrdilo. Ker je to samopodpisano potrdilo, je od vas odvisno, kako natančno izpolnite podatke. Tukaj je primer

Ime države (dvočrkovna koda) [AU]: CA

Ime države ali province (polno ime) [Nekaj držav]: Ime kraja Britanska Kolumbija (npr. Mesto) : Ime organizacije Vancouver (npr. Podjetje) [Internet Widgits Pty Ltd]: Ime organizacijske enote Bar Pi (npr.) : Splošno ime (npr. FQDN strežnika ali VAŠE ime) : color-pi E-poštni naslov : [email protected]

Geslo za izziv :

Izbirno ime podjetja :

V tem primeru samo pritisnite tipko return, da pustite geslo za izziv prazno

3. Ustvarite potrdilo

openssl x509 -req -days 1095 -in color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem

4. Za dodatno varnost bomo ustvarili tudi datoteko parametrov Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

To lahko traja 15-20 minut

6. korak: Ožičenje vezja

Ožičenje vezja
Ožičenje vezja
Ožičenje vezja
Ožičenje vezja
Ožičenje vezja
Ožičenje vezja
Ožičenje vezja
Ožičenje vezja

Napajanje LED traku

LED trak napaja 12 voltov. Raspberry Pi lahko oddaja le 3.3v ali 5v in ne more oddajati nikjer v bližini ojačevalnikov, potrebnih za pogon toliko LED.

Pomembno je, da 12 -voltnega napajalnika ne priključite na Raspberry Pi. N-kanalni MOSFET tranzistorji se uporabljajo za ločevanje 3.3v na zatičih RPi in 12v LED napajalnika.

MOSFET ima tri zatiča Vrata, odtok in vir. Če niste prepričani, kateri google za podatkovni list tranzistorja uporabljate, npr. IRL3303

Raspberry Pi Pin bomo priključili na vrata, LED žico na odtok in skupno maso na vir. Ko se pin dvigne, bo napetost med odtokom in virom aktivirala vrata in vrata povezala z izvorom.

Poleg tega bomo namestili 10kΩ upornike čez vrata in vir, tako da bomo, ko bomo imeli pin RPi visok, zaščitili pin z zmanjšanjem toka skozi njega.

Naslednje korake izvedite na lastno odgovornost. Ne prevzemam odgovornosti za vse, kar bi lahko šlo narobe

Zgoraj je prikazana slika in fotografija dejanskega vezja.

Priporočam, da to storite, ko je RPi in LED trak izklopljen

Nastavite tranzistorska vezja, eno na barvni kanal

  1. V matrico vstavite enega od tranzistorjev, kot je prikazano na diagramu
  2. Vstavite enega od 10kΩ uporov čez odtočne in izvorne zatiče tranzistorja. To je prvi in zadnji pin
  3. Z nekaj žice priključite izvorni zatič (zadnji zatič) na tla na plošči
  4. Korake 1 - 3 ponovite še dvakrat, tako da imate tri sklope - enega na barvo (rdeča, zelena in modra)

Igle RPi priključite na ploščo

  1. Priključite pin 16 na pin Gate (prvi pin) prvega tranzistorja - to bo modri LED kanal
  2. Priključite pin 18 na pin Gate (prvi pin) prvega tranzistorja - to bo rdeči LED kanal
  3. Pin 20 priključite na eno od ozemljitvenih linij na strani plošče
  4. Priključite pin 22 na zatič (prvi zatič) prvega tranzistorja - to bo zeleni LED kanal

Za LED sem uporabil ustrezne barve žic: modro, rdečo in zeleno. Za tla sem uporabil črno

Priključite cevni priključek

  1. Belo žico priključite na + konec vtičnice cevi
  2. Priključite črno žico na - konec vtičnice
  3. Črno žico priključite na isto ozemljitveno linijo na plošči, na katero je bil priključen RPi Pin 20
  4. Belo žico povežite s črto + na plošči

Priključitev LED traku

Moj LED trak je bil opremljen s priključkom, ki je bil dovolj dobre velikosti, da ga je mogoče začasno priključiti na mizo. Potisnil sem konektor v ploščo in ga ožičil do preskusa vezja.

  1. Prvi tranzistor, priključen na pin 16. Modro žico sem vodil od odtočnega zatiča (srednji zatič) do modre žice na priključku LED traku
  2. Drugi tranzistor je bil priključen na pin 18. Iz rdeče žice sem speljala rdečo žico

    Odcedite

    nožico (srednji zatič) na rdečo žico na priključku LED traku

  3. Tretji tranzistor, priključen na pin 22. Iz omrežja sem imel zeleno žico

    Odcedite

    pin (srednji zatič) na zeleno žico na priključku LED traku

  4. Nazadnje sem popeljal belo žico od črte + na plošči, ki je bila povezana s priključkom za sod, do bele žice na priključku LED traku.

Moč

Ko preverite vezje, morate vklopiti Raspberry Pi in priključiti 12v napajanje v vtičnico.

7. korak: Koda na strani strežnika

Koda na strani strežnika
Koda na strani strežnika

Izvajanje kode na strani strežnika

cd /opt/com.jonhaydock/colour-pi

sudo npm start

S tem se bo zagnal spletni strežnik in začel poslušati zahteve HTTPS in WSS.

OPOMBA: Najprej morate zagnati pi-blaster

Okoljske spremenljivke

Privzeta vrata spletnega mesta so 443, vendar jih lahko preglasite tako, da nastavite spremenljivko okolja, preden zaženete kodo. Na primer

izvoz COLOUR_PI_PORT = 2443

Privzeta vrata spletne vtičnice so 1443, vendar jih lahko preglasite tako, da nastavite spremenljivko okolja, preden zaženete kodo. Na primer

izvozi COLOUR_PI_WSS_PORT = 3443

Opomba: Ker spletno vtičnico upravlja cylon.js in ne glavno spletno mesto, morajo biti ti na različnih vratih

Zatiči, ki se uporabljajo za modro (pin 16), zeleno (pin 18) in rdečo (pin 22), se lahko tudi preglasijo. Na primer

izvoz COLOUR_PI_PIN_BLUE = 36

izvoz COLOUR_PI_PIN_RED = 38 izvoz COLOUR_PI_PIN_GREEN = 40

Opomba: Ti morajo ustrezati fizičnim zatičem, ki ste jih uporabili. Če jih spremenite, boste morali posodobiti tudi GPIO-je, opredeljene v datoteki/etc/default/pi-blaster. Na primer

DAEMON_OPTS =-gpio 16, 20, 21

Kodo glavnega strežnika najdete v datoteki app.js. Ta datoteka zažene spletni strežnik HTTPS in prek ogrodja Cylon.js uporablja socket.io za poslušanje zahtev spletnih vtičnic na ločenih vratih.

Za dostop do spletnega mesta morate v glavnem računalniku odpreti spletni brskalnik (to sem preizkusil samo v Chromu) in uporabiti naslov IP Raspberry Pi, npr.

10.0.1.2/

Svoj IP naslov lahko izveste iz ukazne vrstice Raspberry Pi.

ifconfig

Spletni strežnik bo stregel vso vsebino v javno mapo. Privzeto prikazuje stran index.html.

Cylon.js ustvari končno točko, s katero lahko povežete Socket.io.

10.0.1.2:1443/api/robots/colour-pi

Sporočilo set_colour lahko pošljete v vtičnico, da nastavite rdečo, zeleno in modro vrednost

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

Ki pokliče ukaz set_colour, ki pokliče funkcijo setColour v app.js. Ta funkcija nastavi vrednosti svetlosti za vsako od vrednosti R, G in B med 0 in 255. Kjer je 0 izklopljeno in 255 popolnoma vklopljeno.

npr.

Rdeča r = 255, g = 0, b = 0

Zelena r = 0, g = 255, b = 0 modra r = 0, g = 0, b = 255 bela r = 255, g = 255, b = 255 črna / izklopljena r = 0, g = 0, b = 0

8. korak: Koda spletnega mesta

Koda spletnega mesta
Koda spletnega mesta

Splošno

Spletno mesto uporablja glasovno prepoznavo za izbiro barv s vnaprej določenega seznama. Če želite dodati barvo na seznam, uredite datoteko na strežniku: public/data/colours.json

npr.

"red": "#FF0000",

Ko je barva najdena ali izbrana s spustnega menija, bo polje Output nastavljeno na to barvo in sporočilo bo poslano prek socket.io na Raspnerry Pi, ki bo nastavil LED na isto barvo.

OPOMBA: odvisno od tega, kako dobre so vaše LED, lahko vidite ali ne vidite podobne barve. Nekatere je lažje podvojiti kot druge

Ko prvič naložite spletno mesto, boste morali, ko uporabljate samopodpisano potrdilo SSL, to potrditi v brskalniku. O certifikatu bi morali videti varnostno opozorilo.

Prepoznavanje glasu

V tem polju je ikona mikrofona. Če kliknete ikono, ko je zelena, bo začela poslušati barve. Med poslušanjem se obarva rdeče. Poslušal bo kratek čas in se nato ustavil. Če kliknete ikono mikrofona, ko je rdeč, ga tudi ne boste poslušali.

Ker mora to mesto dostopati do vašega mikrofona, mu boste morali ob pozivu dati dovoljenje

OPOMBA: Za ta del potrebujete mikrofon. Uporabljam tistega na svoji spletni kameri.

Začasni prepis

To polje sledi ugibanju besed, ki jih izgovarjate, ko jih izgovarjate.

Končni prepis

To polje sledi končnemu ugibanju, kar ste povedali.

Znane barve

To je seznam vseh barv, ki jih stran pozna. Ustvarjen je iz datoteke colours.json. Če izberete eno od teh barv, bo stran izgovorila barvo in nastavila izhodno barvo.

OPOMBA: Za poslušanje govora potrebujete zvočnike ali slušalke

Najdene barve

Ta spletna stran trenutno podpira samo ujemanje barve. Če se beseda ali besede, ki ste jih govorili v mikrofon, ujemajo z imenom znane barve ali pa barvo izberete s seznama znanih barv, bo dodana tukaj kot dnevnik.

Izhod

Tukaj bo prikazana zadnja najdena barva. Vrednost Color Hex (npr. #7cb9e8) in vrednost RGB (npr. 124, 185, 232) bosta prikazani kot besedilo, ozadje polja na sredini pa bo nastavljeno na dejansko barvo.

Ta barva je poslana tudi na Raspberry Pi in videli boste, kako se spreminja barva LED traku.

OPOMBA: če ne vidite spremembe barve LED, poskusite znova zagnati pi-blaster in/ali aplikacijo node.js

sudo storitev pi-blaster znova zaženite

sudo npm start

Znani glasovi

To polje prikazuje seznam "znanih glasov" iz podprte govorne sinteze. Izbira enega od teh glasov bo spremenila glas in jezik, ki ga boste slišali, in govoril bo ime glasu.

Spremenil bo tudi jezik SpeechRecognition, ki bo enak jeziku, ki je izbran na seznamu.

9. korak: Končno

Image
Image

Tukaj je primer tega, kar bi morali videti.

Sporočite mi, če imate kakršne koli težave in jih lahko po potrebi posodobim.

Priporočena: