Indholdsfortegnelse:

Color-pi: 9 trin
Color-pi: 9 trin

Video: Color-pi: 9 trin

Video: Color-pi: 9 trin
Video: Leggero Electric Silver with Pink Trim! 9 speed Sora High Spec 2024, November
Anonim
Farve-pi
Farve-pi

Denne instruktør viser, hvordan du bruger en Raspberry Pi til stemmestyring af en RGB LED -strip, via et websted, ved hjælp af Web Speech API -grænseflader til SpeechRecognition og SpeechSynthesis.

Dette eksempel viser, hvordan

  • Opret et grundlæggende websted ved hjælp af Node.js over
  • Brug Web Speech API -grænsefladerne til SpeechRecognition og SpeechSynthesis.
  • Brug Cylon.js -rammen til at styre en RGB LED -strip på en Raspberry Pi
  • Kommuniker over WSS (Secure Web sockets) fra websiden til Cylon.js for at styre farven på LED'en

Bemærk

  • Du skal bruge højttalere eller hovedtelefoner for at høre talesynteseren
  • Du skal give adgang til din mikrofon for at stemmegenkendelse kan fungere
  • Fordi denne adgang til din mikrofon skal webstedet køres under
  • Biblioteket cylon-api-socketio understøtter ikke https på nuværende tidspunkt. Jeg har en pull-anmodning, der venter på at blive flettet, men indtil da skal du udskifte /node_modules/cylon-api-socketio/lib/api.js med filen i dette lager
  • pi-blaster er nødvendig for at få dette til at fungere.

Trin 1: Udstyr

  1. Raspberry Pi - Jeg brugte en Raspberry Pi 2B, som jeg havde liggende, men du kan få et Raspberry Pi 3 Starter Kit til omkring CAD 100
  2. RGB LED Strip Light - Jeg spillede med Minger LED Strip Light 32.8ft/10M 600leds RGB SMD 5050. Dette leveres med en controller og en strømforsyning til omkring CAD 40
  3. Barrel Jack Connector - Jeg købte en fra min lokale elektronikbutik, sådan noget. Bare sørg for, om den passer til din strømforsyning
  4. Jumper -stik / ledninger - jeg havde nogle hun -til -mand -stik kabler og nogle 22 gauge Solid hook up wire liggende
  5. Breadboard Loddefri Prototype PCB Board - sådan noget
  6. 3 x 10kΩ modstande
  7. 3 x N -kanal MOSFET'er til styring af lysdioderne - jeg købte nogle IRL3303'er fra min lokale elektroniske butik. Det er vigtigt, at portens tærskelspænding er maks. 3.3V, så den kan drives af RPi -benene; normalt betegnet med et 'L' (logisk niveau) i navnet.

Trin 2: Opsætning af Raspberry Pi

Operativ system

Jeg bruger normalt den nyeste Raspbian -build. Download billedet og skriv det til SD -kortet. Hvis du bruger en Windows -computer, kan du bruge Win32 Disk Imager til at skrive billedet til SD -kortet.

Node.js

Installer den nyeste version af Node.js. I skrivende stund bruger 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

Trin 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster muliggør PWM på de GPIO-ben, du anmoder om af en Raspberry Pi. Den anvendte teknik er ekstremt effektiv: bruger ikke CPU'en og giver meget stabile impulser.

Denne Pulse Width Modulation gør det muligt for Raspberry Pi at styre, hvor lyse hver af de røde, grønne og blå kanaler er for LED -strimlen.

Klon først depotet

cd /opt /

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

Byg og installer derefter

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

Endelig skal du konfigurere, hvilke pins du vil bruge

Under rodkontoen eller ved hjælp af sudo skal du oprette og redigere filen

/etc/default/pi-blaster

Tilføj følgende linjer

DAEMON_OPTS =-gpio 23, 24, 25

Disse gpio -pins skal matche de ben, du tilslutter til din LED -strip.

BEMÆRK: Der er en forskel mellem GPIO og pinkode. Dette eksempel bruger følgende

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

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

Ekstra tweaks

Start pi-blaster

sudo service pi-blaster start

Genstart pi-blaster

sudo service pi-blaster genstart

Stop pi-blaster

sudo service pi-blaster stop

Start pi-blaster automatisk ved opstart

sudo systemctl aktiver pi-blaster

Advarsler og andre forbehold

Stifter, der bruges af pi-blaster, konfigureres som output. Slut ikke noget til en input, eller du ødelægger det! Denne dæmon bruger hardware PWM -generatoren til hindbærpi til at få præcise timinger. Dette kan forstyrre lydkortets output.

Trin 4: Opsætning af eksempelkoden

Klon eksempelkoden

1. Opret en basismappe at installere i

cd /opt

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

2. Klon eksemplet git repository

git-klon

eller

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

3. Installer afhængighederne

cd farve-pi

npm installation

Dette kan tage 2-3 minutter

4. Dette projekt skal kommunikere via HTTPS og WSS. På nuværende tidspunkt understøtter cylon-api-socketio ikke SSL-forbindelser. Der er en åben pull -anmodning om at tilføje denne support, men indtil det er flettet, er der en patch -fil i dette lager. Kør følgende kommando efter npm -installation

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

Trin 5: Opret et selvsigneret SSL -certifikat

1. Opret en privat nøglefil

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

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

2. Opret en CSR (anmodning om certifikatsignering)

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

På dette tidspunkt bliver du bedt om nogle oplysninger til certifikatanmodningen. Da dette er et selvsigneret certifikat, er det op til dig, hvor præcist du udfylder detaljerne. Her er et eksempel

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

Stat eller provinsnavn (fuldt navn) [Nogle-delstat]: British Columbia-lokalitetsnavn (f.eks. By) : Vancouver-organisationsnavn (f.eks. Virksomhed) [Internet Widgits Pty Ltd]: Color Pi-organisationsenhedsnavn (f.eks. Sektion) : Almindeligt navn (f.eks. Server FQDN eller DIT navn) : color-pi E-mailadresse : [email protected]

En udfordringskodeord :

Et valgfrit firmanavn :

I dette eksempel skal du bare trykke på retur for at lade udfordringsadgangskoden være tom

3. Generer certifikatet

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

4. For ekstra sikkerhed opretter vi også en Diffie Hellman Parameters -fil

openssl dhparam -out dh_2048.pem 2048

Dette kan tage 15-20 minutter

Trin 6: Tilslutning af kredsløbet

Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet
Kabelføring af kredsløbet

Tænder LED -strimlen

LED -båndet drives af 12 volt. Raspberry Pi kan kun levere 3.3v eller 5v og er ikke i stand til at udsende nogen steder i nærheden af de forstærkere, der er nødvendige for at drive så mange lysdioder.

Det er vigtigt ikke at tilslutte 12 volt strømforsyningen til Raspberry Pi. N-kanal MOSFET-transistorer bruges til at adskille 3,3v på RPi-benene og 12v på LED-strømforsyningen.

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

Vi kommer til at forbinde Raspberry Pi Pin til porten, LED -ledningen til afløbet og en fælles jord til kilden. Når stiften går højt, aktiverer spændingen mellem afløbet og kilden porten og forbinder porten med kilden.

Vi kommer også til at sætte 10kΩ modstande på tværs af porten og kilden, så når vi RPi -stiften er høj, kan vi beskytte stiften ved at reducere strømmen, der går igennem den.

Udfør de næste trin på egen risiko. Jeg tager intet ansvar for noget, der kan gå galt

Der er et spændende billede og et foto af det faktiske kredsløb ovenfor.

Jeg vil anbefale at gøre dette, mens der er slukket for RPi'en og LED -strimlen

Opsæt transistorkredsløbene, en pr. Farvekanal

  1. Indsæt en af transistorerne i brødbrættet som vist på diagrammet
  2. Indsæt en af de 10kΩ modstande på tværs af afløbet og kildestifterne på transistoren. Dette er den første og sidste pin
  3. Brug en eller anden ledning til at forbinde kildestiften (sidste stift) til jorden på brødbrættet
  4. Gentag trin 1 - 3 to gange mere, så du har tre sæt - et pr. Farve (rød, grøn og blå)

Tilslut RPi -benene til kortet

  1. Tilslut Pin 16 til Gate Pin (første pin) på den første transistor - Dette vil være den blå LED -kanal
  2. Tilslut Pin 18 til Gate Pin (første pin) på den første transistor - Dette vil være den røde LED -kanal
  3. Tilslut pin 20 til den ene af jordlinjerne på siden af brødbrættet
  4. Tilslut Pin 22 til Gate Pin (første pin) på den første transistor - Dette vil være den grønne LED -kanal

Jeg har brugt matchende trådfarver til lysdioderne: Blå, rød og grøn. Jeg har brugt sort til jorden

Tilslut Barrel Jack

  1. Tilslut en hvid ledning til + enden af tøndejackstikket
  2. Tilslut en sort ledning til - enden af tøndejackstikket
  3. Tilslut den sorte ledning til den samme jordlinje på brødbrættet, som RPi Pin 20 var forbundet til
  4. Tilslut den hvide ledning til + -linjen på brødbrættet

Tilslutning af LED -båndet

Min LED -strip kom med et stik, der var af en god nok størrelse, så det midlertidigt kunne sættes i brødbræt. Jeg skubbede stikket i brødbrættet og tilsluttede det til test af kredsløbet.

  1. Den første transistor tilsluttet Pin 16. Jeg løb en blå ledning fra afløbstappen (midterste pin) til den blå ledning på LED -båndstikket
  2. Den anden transistor tilsluttet Pin 18. Jeg løb en rød ledning fra

    Dræne

    pin (midterste pin) til den røde ledning på LED -båndstikket

  3. Den tredje transistor tilsluttet Pin 22. Jeg løb en grøn ledning fra

    Dræne

    pin (midterste pin) til den grønne ledning på LED -båndstikket

  4. Til sidst løb jeg en hvid ledning fra + -linjen på brødbrættet, der var forbundet til tønde -stikket, til den hvide ledning på LED -båndstikket.

Strøm

Efter at have kontrolleret kredsløbet, skal du være god til at tænde Raspberry Pi og tilslutte 12V -forsyningen til tøndejackstikket.

Trin 7: Serverside kode

Server side kode
Server side kode

Kører serversiden kode

cd /opt/com.jonhaydock/colour-pi

sudo npm start

Dette starter webserveren og begynder at lytte efter HTTPS- og WSS -anmodninger.

BEMÆRK: Husk først at have pi-blaster kørende

miljøvariabler

Standardwebstedets port er 443, men du kan tilsidesætte dette ved at indstille en miljøvariabel, før du starter koden. For eksempel

eksport COLOUR_PI_PORT = 2443

Standardwebstikporten er 1443, men du kan tilsidesætte dette ved at indstille en miljøvariabel, før du starter koden. For eksempel

eksporter COLOUR_PI_WSS_PORT = 3443

Bemærk: Da webstikket håndteres af cylon.js og ikke hovedwebstedet, skal disse være på forskellige porte

Stifterne, der bruges til blå (pin 16), grøn (pin 18) og rød (pin 22) kan også tilsidesættes. For eksempel

eksporter COLOUR_PI_PIN_BLUE = 36

eksport COLOUR_PI_PIN_RED = 38 eksport COLOUR_PI_PIN_GREEN = 40

Bemærk: Disse skal matche de fysiske stifter, du brugte. Hvis du ændrer disse, skal du også opdatere GPIO'erne, der er defineret i filen/etc/default/pi-blaster. For eksempel

DAEMON_OPTS =-gpio 16, 20, 21

Hovedserverkoden findes i filen app.js. Denne fil starter HTTPS -webserveren og bruger også via Cylon.js -rammen socket.io til at lytte efter webstikforespørgsler på en separat port.

For at få adgang til webstedet skal du åbne en webbrowser på din hovedcomputer (jeg har kun testet dette i Chrome) og bruge IP -adressen på Raspberry Pi, f.eks.

10.0.1.2/

Du kan finde ud af din IP -adresse fra kommandolinjen Raspberry Pi.

ifconfig

Webserveren serverer alt indhold under den offentlige mappe. Det er som standard at vise index.html -siden.

Cylon.js opretter et slutpunkt, som du kan forbinde Socket.io med.

10.0.1.2:1443/api/robots/colour-pi

Du kan sende en set_colour -meddelelse til via stikket for at indstille værdierne Rød, Grøn og Blå

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

Som kalder kommandoen set_colour, som kalder funktionen setColour i app.js. Denne funktion indstiller lysstyrkeniveauerne for hver af R-, G- og B -værdierne mellem 0 og 255. Hvor 0 er slukket og 255 er fuldt tændt.

f.eks.

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

Grøn r = 0, g = 255, b = 0 Blå r = 0, g = 0, b = 255 Hvid r = 255, g = 255, b = 255 Sort / Fra r = 0, g = 0, b = 0

Trin 8: Webstedskode

Webstedskode
Webstedskode

Generel

Websitet bruger stemmegenkendelse til at vælge farver fra en foruddefineret liste. Hvis du vil tilføje en farve til listen, skal du redigere filen på serveren: public/data/colours.json

f.eks.

"rød": "#FF0000", Når en farve er fundet eller valgt fra rullemenuen, vil Output -boksen blive indstillet til den farve, og en besked vil blive sendt via socket.io til Raspnerry Pi, som vil indstille LED'erne til den samme farve.

BEMÆRK: afhængigt af hvor gode dine lysdioder er, kan du måske eller måske ikke se en lignende farve. Nogle er lettere at kopiere end andre

Når du først indlæser webstedet, skal du bekræfte dette i browseren, da du bruger et selvsigneret SSL-certifikat. Du bør se en sikkerhedsadvarsel om certifikatet.

Stemmegenkendelse

Denne boks har et mikrofonikon. Hvis du klikker på ikonet, når det er grønt, begynder det at lytte efter farver. Mens den lytter, bliver den rød. Det vil lytte i kort tid og derefter stoppe. Hvis du klikker på mikrofonikonet, når det er rødt, stoppes det også fra at lytte.

Da dette websted skal have adgang til din mikrofon, skal du give det tilladelse, når du bliver bedt om det

BEMÆRK: Du skal bruge en mikrofon til denne del. Jeg bruger den på mit webkamera.

Midlertidig udskrift

Denne boks sporer gætterne på de ord, du siger, som du siger dem.

Endelig udskrift

Denne boks sporer det sidste gæt er, hvad du sagde.

Kendte farver

Dette er en liste over alle de farver, siden kender til. Den er oprettet ud fra filen colours.json. Hvis du vælger en af disse farver, taler siden farven og indstiller outputfarven.

BEMÆRK: Du skal bruge højttalere eller hovedtelefoner for at høre talen

Fundet farver

Denne webside understøtter i øjeblikket kun matchning af farven. Hvis det eller de ord, du talte i mikrofonen, matcher navnet på en kendt farve, eller du vælger en farve fra listen Kendte farver, tilføjes den her som en log.

Produktion

Den sidst fundne farve vises her. Color Hex -værdien (f.eks. #7cb9e8) og RGB -værdien (f.eks. 124, 185, 232) vises som tekst, og baggrunden for feltet i midten indstilles til den faktiske farve.

Denne farve sendes også til Raspberry Pi, og du skal se farven på LED -strimlen ændre sig.

BEMÆRK: hvis du ikke kan se LED-farveændringen, kan du prøve at genstarte pi-blaster og/eller node.js-appen

sudo service pi-blaster genstart

sudo npm start

Kendte stemmer

Denne boks viser en liste over "Kendte stemmer" fra den understøttede speechSynthesis. Hvis du vælger en af disse stemmer, ændres stemmen og det sprog, du vil høre, og den taler navnet på stemmen.

Det vil også ændre sproget i SpeechRecognition til at være det samme som det, der er valgt på listen.

Trin 9: Endelig

Image
Image

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

Lad mig vide, hvis du har problemer, og jeg kan opdatere efter behov.

Anbefalede: