Innholdsfortegnelse:

Color-pi: 9 trinn
Color-pi: 9 trinn

Video: Color-pi: 9 trinn

Video: Color-pi: 9 trinn
Video: Draw & Paint Colorful Strawberry Step by Step | Art Tips for Children #41 2024, November
Anonim
Color-pi
Color-pi

Denne instruksen viser hvordan du bruker en Raspberry Pi til å styre en RGB LED -stripe via et nettsted ved hjelp av Web Speech API -grensesnittene for SpeechRecognition og SpeechSynthesis.

Dette eksemplet viser hvordan

  • Lag et grunnleggende nettsted ved hjelp av Node.js over
  • Bruk Web Speech API -grensesnittene for SpeechRecognition og SpeechSynthesis.
  • Bruk rammeverket Cylon.js for å kontrollere en RGB LED -stripe på en Raspberry Pi
  • Kommuniser over WSS (Secure Web sockets) fra websiden til Cylon.js for å kontrollere fargen på LED -en

Merk

  • Du trenger høyttalere eller hodetelefoner for å høre talesyntesen
  • Du må gi tilgang til mikrofonen din for at stemmegjenkjenningen skal fungere
  • Fordi denne tilgangen til mikrofonen din må nettstedet kjøres under
  • Biblioteket cylon-api-socketio støtter ikke https for øyeblikket. Jeg har en pull-forespørsel som venter på å bli slått sammen, men til da må du erstatte /node_modules/cylon-api-socketio/lib/api.js med filen i dette depotet
  • pi-blaster er nødvendig for å få dette til å fungere.

Trinn 1: Utstyr

  1. Raspberry Pi - Jeg brukte en Raspberry Pi 2B som jeg hadde liggende, men du kan få et Raspberry Pi 3 Starter Kit for rundt CAD 100
  2. RGB LED Strip Light - Jeg lekte med Minger LED Strip Light 32.8ft/10M 600leds RGB SMD 5050. Dette kommer med en kontroller og en strømforsyning for ca CAD 40
  3. Barrel Jack Connector - Jeg kjøpte en fra min lokale elektronikkbutikk, noe sånt som dette. Bare vær sikker på om den passer til strømforsyningen din
  4. Stikkontakter / ledning - Jeg hadde noen hun -til -mann -tilkoblingskabler og noen 22 gauge Solid hook up wire liggende
  5. Breadboard Solderless Prototype PCB Board - noe sånt som dette
  6. 3 x 10kΩ motstander
  7. 3 x N -kanal MOSFET -er for styring av lysdiodene - jeg kjøpte noen IRL3303 -er fra min lokale elektroniske butikk. Det er viktig at portens terskelspenning er maks. 3.3V slik at den kan drives av RPi -pinnene; vanligvis betegnet med et 'L' (logisk nivå) i navnet.

Trinn 2: Konfigurere Raspberry Pi

Operativsystem

Jeg bruker normalt den nyeste Raspbian -bygningen. Last ned bildet og skriv det til SD -kortet. Hvis du bruker en Windows -datamaskin, kan du bruke Win32 Disk Imager til å skrive bildet til SD -kortet.

Node.js

Installer den nyeste versjonen av Node.js. I skrivende stund bruker jeg 8.9.1

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

sudo apt-get install nodejs

Installer Git

sudo apt-get install git

Trinn 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster muliggjør PWM på GPIO-pinnene du ber om av en Raspberry Pi. Teknikken som brukes er ekstremt effektiv: bruker ikke CPU og gir veldig stabile pulser.

Denne pulsbreddemoduleringen lar Raspberry Pi kontrollere hvor lyst hver av de røde, grønne og blå kanalene er for LED -stripen.

Klon først depotet

cd /opt /

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

Deretter bygger og installerer du

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

Til slutt, konfigurer hvilke pinner du vil bruke

Opprett og rediger filen under rotkontoen, eller ved hjelp av sudo

/etc/default/pi-blaster

Legg til følgende linjer

DAEMON_OPTS =-gpio 23, 24, 25

Disse gpio -pinnene må matche pinnene du kobler til LED -stripen.

MERK: Det er en forskjell mellom GPIO og pin -nummer. Dette eksemplet bruker følgende

LED - Blå, GPIO -23, Pin - 16

LED - Rød, GPIO -24, Pin - 18 LED - Grønn, GPIO -25, Pin - 22

Ekstra tilpasninger

Start pi-blaster

sudo service pi-blaster start

Start pi-blaster på nytt

sudo service pi-blaster omstart

Stopp pi-blaster

sudo service pi-blaster stopp

Start pi-blaster automatisk ved oppstart

sudo systemctl aktiver pi-blaster

Advarsler og andre forbehold

Pins som brukes av pi-blaster vil bli konfigurert som utganger. Ikke koble noe til en inngang, eller du kan ødelegge den! Denne demonen bruker maskinvare -PWM -generatoren til bringebærpi for å få presise tidspunkter. Dette kan forstyrre lydkortutgangen.

Trinn 4: Konfigurere eksempelkoden

Klon eksempelkoden

1. Sett opp en basismappe å installere i

cd /opt

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

2. Klon eksempelgit -depotet

git-klon

eller

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

3. Installer avhengighetene

cd farge-pi

npm installere

Dette kan ta 2-3 minutter

4. Dette prosjektet må kommunisere over HTTPS og WSS. For øyeblikket støtter cylon-api-socketio ikke SSL-tilkoblinger. Det er en åpen pull -forespørsel om å legge til denne støtten, men til det er slått sammen, er det en oppdateringsfil i dette depotet. Kjør følgende kommando etter npm installasjon

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

Trinn 5: Lag et selvsignert SSL -sertifikat

1. Opprett en privat nøkkelfil

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

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

2. Lag en CSR (forespørsel om sertifikatsignering)

openssl req -ny -key color-pi-key.pem -out color-pi-csr.pem

På dette tidspunktet vil du bli bedt om informasjon om sertifikatforespørselen. Siden dette er et selvsignert sertifikat, er det opp til deg hvor nøyaktig du fyller ut detaljene. Her er et eksempel

Landnavn (kode på 2 bokstaver) [AU]: CA

Stat eller provinsnavn (fullt navn) [Noen-delstat]: Lokalitetsnavn i British Columbia (f.eks. By) : Vancouver organisasjonsnavn (f.eks. Selskap) [Internet Widgits Pty Ltd]: Color Pi organisasjonsenhetsnavn (f.eks. Seksjon) : Vanlig navn (f.eks. Server FQDN eller DITT navn) : color-pi E-postadresse : [email protected]

Et utfordringspassord :

Et valgfritt firmanavn :

I dette eksemplet trykker du bare på retur for å la utfordringspassordet stå tomt

3. Generer sertifikatet

openssl x509 -req -dager 1095 -i color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem

4. For ekstra sikkerhet vil vi også opprette en Diffie Hellman Parameters -fil

openssl dhparam -out dh_2048.pem 2048

Dette kan ta 15-20 minutter

Trinn 6: Koble opp kretsen

Kabling av kretsen
Kabling av kretsen
Kabling av kretsen
Kabling av kretsen
Kabling av kretsen
Kabling av kretsen
Kabling av kretsen
Kabling av kretsen

Forsyner LED -stripen

LED -stripen drives av 12 volt. Raspberry Pi kan bare levere 3.3v eller 5v og er ikke i stand til å sende noen steder i nærheten av forsterkere som trengs for å drive så mange lysdioder.

Det er viktig å ikke koble 12 volt strømforsyningen til Raspberry Pi. N-kanal MOSFET-transistorer brukes til å skille 3.3v på RPi-pinnene og 12v på LED-strømforsyningen.

MOSFET har tre pinner Gate, Drain og Source. Hvis du ikke er sikker på hvilken som er hvilken google for databladet til transistoren du bruker, f.eks. IRL3303

Vi skal koble Raspberry Pi -pinnen til porten, LED -ledningen til avløpet og et felles grunnlag til kilden. Når pinnen går høyt, vil spenningen mellom avløpet og kilden aktivere porten og koble porten til kilden.

Vi skal også sette 10kΩ motstander over porten og kilden, slik at når vi RPi -pinnen er høy, kan vi beskytte pinnen ved å redusere strømmen som går gjennom den.

Utfør de neste trinnene på egen risiko. Jeg tar ikke ansvar for noe som kan gå galt

Det er et fritzing -bilde og et bilde av den faktiske kretsen ovenfor.

Jeg vil anbefale å gjøre dette mens strømmen er slått av for RPi og LED -stripen

Sett opp transistorkretsene, en per fargekanal

  1. Sett inn en av transistorene i brødbrettet som vist på diagrammet
  2. Sett inn en av 10kΩ -motstandene over avløpet og kildestiftene på transistoren. Dette er den første og siste pinnen
  3. Bruk en ledning for å koble kildepinnen (siste pinnen) til bakken på brødbrettet
  4. Gjenta trinn 1 - 3 to ganger til, slik at du har tre sett - ett per farge (rødt, grønt og blått)

Koble RPi -pinnene til brettet

  1. Koble Pin 16 til Gate Pin (første pin) på den første transistoren - Dette vil være den blå LED -kanalen
  2. Koble Pin 18 til Gate Pin (første pin) på den første transistoren - Dette vil være den røde LED -kanalen
  3. Koble pin 20 til en av bakkelinjene på siden av brødbrettet
  4. Koble Pin 22 til Gate Pin (første pin) på den første transistoren - Dette vil være den grønne LED -kanalen

Jeg har brukt matchende trådfarger til lysdiodene: Blå, rød og grønn. Jeg har brukt svart til bakken

Koble tønnekontakten

  1. Koble en hvit ledning til + enden av fatkontakten
  2. Koble en svart ledning til - enden av fatkontakten
  3. Koble den svarte ledningen til den samme jordlinjen på brødbrettet som RPi Pin 20 var koblet til
  4. Koble den hvite ledningen til + -linjen på brødbrettet

Koble til LED -stripen

LED -stripen min kom med en kontakt som var av en god nok størrelse til at den midlertidig kunne plugges inn i brødbrett. Jeg presset kontakten i brødbrettet og koblet den til testen av kretsen.

  1. Den første transistoren koblet til pin 16. Jeg kjørte en blå ledning fra dreneringsstiftet (midtre pin) til den blå ledningen på LED -stripekontakten
  2. Den andre transistoren koblet til Pin 18. Jeg kjørte en rød ledning fra

    Avløp

    pin (midtre pin) til den røde ledningen på LED -stripekontakten

  3. Den tredje transistoren koblet til Pin 22. Jeg kjørte en grønn ledning fra

    Avløp

    pin (midtre pin) til den grønne ledningen på LED -stripekontakten

  4. Til slutt kjørte jeg en hvit ledning fra + -linjen på brødbrettet som var koblet til fatkontakten, til den hvite ledningen på LED -stripekontakten.

Makt

Etter å ha sjekket kretsen, bør du være flink til å slå på Raspberry Pi og koble 12V -forsyningen til fatkontakten.

Trinn 7: Kode på serversiden

Kode på serversiden
Kode på serversiden

Kjører koden på serversiden

cd /opt/com.jonhaydock/colour-pi

sudo npm start

Dette vil starte webserveren og begynne å lytte etter HTTPS- og WSS -forespørsler.

MERK: Husk å ha pi-blaster i gang først

Miljøvariabler

Standard nettstedport er 443, men du kan overstyre dette ved å angi en miljøvariabel før du starter koden. For eksempel

eksporter COLOUR_PI_PORT = 2443

Standard nettstikkport er 1443, men du kan overstyre dette ved å angi en miljøvariabel før du starter koden. For eksempel

eksporter COLOUR_PI_WSS_PORT = 3443

Merk: Siden nettkontakten håndteres av cylon.js og ikke hovednettstedet, må disse være på forskjellige porter

Pinnene som brukes til Blue (pin 16), Green (pin 18) og Red (pin 22) kan også overstyres. For eksempel

eksporter COLOUR_PI_PIN_BLUE = 36

eksport COLOUR_PI_PIN_RED = 38 eksport COLOUR_PI_PIN_GREEN = 40

Merk: Disse må samsvare med de fysiske pinnene du brukte. Hvis du endrer disse, må du også oppdatere GPIO-ene som er definert i filen/etc/default/pi-blaster. For eksempel

DAEMON_OPTS =-gpio 16, 20, 21

Hovedserverkoden finnes i app.js -filen. Denne filen starter HTTPS -webserveren, og bruker også socket.io for å lytte etter forespørsler om nettstikk via en separat port gjennom Cylon.js -rammeverket.

For å få tilgang til nettstedet, bør du åpne en nettleser på hoveddatamaskinen din (jeg har bare testet dette i Chrome) og bruke IP -adressen til Raspberry Pi, f.eks.

10.0.1.2/

Du kan finne ut IP -adressen din fra kommandolinjen Raspberry Pi.

ifconfig

Webserveren vil vise alt innhold under den offentlige mappen. Som standard vises index.html -siden.

Cylon.js oppretter et sluttpunkt som du kan koble til Socket.io.

10.0.1.2:1443/api/robots/colour-pi

Du kan sende en set_colour -melding til gjennom kontakten for å angi de røde, grønne og blå verdiene

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

Som kaller kommandoen set_colour, som kaller setColour -funksjonen i app.js. Denne funksjonen angir lysstyrkenivåene for hver av R-, G- og B -verdiene mellom 0 og 255. Hvor 0 er av og 255 er fullt på.

f.eks.

Rød r = 255, g = 0, b = 0

Grønn r = 0, g = 255, b = 0 Blå r = 0, g = 0, b = 255 Hvit r = 255, g = 255, b = 255 Svart / Av r = 0, g = 0, b = 0

Trinn 8: Nettstedskode

Nettstedskode
Nettstedskode

Generell

Nettstedet bruker stemmegjenkjenning for å velge farger fra en forhåndsdefinert liste. For å legge til en farge på listen, rediger filen på serveren: public/data/colours.json

f.eks.

"rød": "#FF0000", Når en farge er funnet, eller valgt fra rullegardinmenyen, settes Output -boksen til den fargen, og en melding vil bli sendt gjennom socket.io til Raspnerry Pi, som vil sette lysdiodene til samme farge.

MERK: Avhengig av hvor gode lysdiodene dine er, kan det hende du ser en lignende farge eller ikke. Noen er lettere å kopiere enn andre

Når du laster nettstedet for første gang, ettersom du bruker et selvsignert SSL-sertifikat, må du bekrefte dette i nettleseren. Du bør se et sikkerhetsvarsel om sertifikatet.

Stemme gjenkjenning

Denne boksen har et mikrofonikon. Hvis du klikker på ikonet når det er grønt, begynner det å lytte etter farger. Mens den lytter, blir den rød. Den vil lytte en kort stund og deretter stoppe. Hvis du klikker på mikrofonikonet når det er rødt, stoppes det også fra å lytte.

Siden dette nettstedet trenger tilgang til mikrofonen din, må du gi den tillatelse når du blir bedt om det

MERK: Du trenger en mikrofon for denne delen. Jeg bruker den på webkameraet mitt.

Midlertidig utskrift

Denne boksen sporer gjetningene til ordene du sier, slik du sier dem.

Endelig utskrift

Denne boksen sporer det siste gjetningen er det du sa.

Kjente farger

Dette er en liste over alle fargene siden vet om. Den er opprettet fra filen colours.json. Hvis du velger en av disse fargene, vil siden snakke fargen og angi utdatafargen.

MERK: Du trenger høyttalere eller hodetelefoner for å høre talen

Fant farger

Denne nettsiden støtter for øyeblikket bare matchende farge. Hvis ordet eller ordene du snakket inn i mikrofonen samsvarer med navnet på en kjent farge, eller du velger en farge fra listen over kjente farger, vil den bli lagt til her som en logg.

Produksjon

Den siste funnet fargen vises her. Color Hex -verdien (f.eks. #7cb9e8) og RGB -verdien (f.eks. 124, 185, 232) vises som tekst, og bakgrunnen til boksen i midten vil bli satt til den faktiske fargen.

Denne fargen sendes også til Raspberry Pi, og du bør se fargen på LED -stripen endres.

MERK: hvis du ikke ser endringen i LED-fargen, kan du prøve å starte pi-blaster og/eller node.js-appen på nytt

sudo service pi-blaster omstart

sudo npm start

Kjente stemmer

Denne boksen viser en liste over "kjente stemmer" fra speechSynthesis som støttes. Hvis du velger en av disse stemmene, endres stemmen og språket du vil høre, og det vil snakke navnet på stemmen.

Det vil også endre språket i SpeechRecognition til å være det samme som det som ble valgt i listen.

Trinn 9: Til slutt

Image
Image

Her er et eksempel på hva du bør se.

Gi meg beskjed hvis du har problemer, og jeg kan oppdatere etter behov.

Anbefalt: