Innehållsförteckning:

Color-pi: 9 steg
Color-pi: 9 steg

Video: Color-pi: 9 steg

Video: Color-pi: 9 steg
Video: draw and color - 9 этапов рисования - 3 этапа рисования для «Розовой пантеры» 2024, Oktober
Anonim
Färg-pi
Färg-pi

Denna instruerbara visar hur du använder en Raspberry Pi för att röststyra en RGB LED -remsa, via en webbplats, med hjälp av Web Speech API -gränssnitt för SpeechRecognition och SpeechSynthesis.

Detta exempel visar hur

  • Skapa en grundläggande webbplats med Node.js via
  • Använd Web Speech API -gränssnitt för SpeechRecognition och SpeechSynthesis.
  • Använd ramverket Cylon.js för att styra en RGB LED -remsa på en Raspberry Pi
  • Kommunicera över WSS (Secure Web sockets) från webbsidan till Cylon.js för att styra färgen på lysdioden

Notera

  • Du behöver högtalare eller hörlurar för att höra talsyntesen
  • Du måste ge åtkomst till din mikrofon för att röstigenkänningen ska fungera
  • Eftersom denna åtkomst till din mikrofon måste webbplatsen köras under
  • Biblioteket cylon-api-socketio stöder inte just nu https. Jag har en dragbegäran som väntar på att slås samman, men tills dess måste du ersätta /node_modules/cylon-api-socketio/lib/api.js med filen i det här förvaret
  • pi-blaster behövs för att detta ska fungera.

Steg 1: Utrustning

  1. Raspberry Pi - Jag använde en Raspberry Pi 2B som jag hade lagt, men du kan få ett Raspberry Pi 3 Starter Kit för cirka 100 CAD
  2. RGB LED Strip Light - Jag lekte med Minger LED Strip Light 32.8ft/10M 600leds RGB SMD 5050. Detta levereras med en styrenhet och en strömförsörjning för cirka CAD 40
  3. Barrel Jack Connector - Jag köpte en från min lokala elektronikbutik, något liknande. Se bara till om det passar din strömförsörjning
  4. Bygelkontakter / tråd - Jag hade några kvinnliga till manliga anslutningskablar och några 22 Gauge Solid hook up wire liggande
  5. Brödbräda Lödfri prototyp PCB -kretskort - något liknande
  6. 3 x 10kΩ motstånd
  7. 3 x N -kanal MOSFET för styrning av lysdioderna - jag köpte några IRL3303 från min lokala elektroniska butik. Det är viktigt att grindarnas tröskelspänning är max. 3.3V så att den kan drivas av RPi -stiften; brukar betecknas med ett 'L' (logisk nivå) i namnet.

Steg 2: Konfigurera Raspberry Pi

Operativ system

Jag använder normalt den senaste Raspbian -versionen. Ladda ner bilden och skriv den till SD -kortet. Om du använder en Windows -dator kan du använda Win32 Disk Imager för att skriva bilden till SD -kortet.

Node.js

Installera den senaste versionen av Node.js. I skrivande stund använder jag 8.9.1

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

sudo apt-get install nodejs

Installera Git

sudo apt-get install git

Steg 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster möjliggör PWM på GPIO-stiften du begär av en Raspberry Pi. Tekniken som används är extremt effektiv: använder inte CPU: n och ger mycket stabila pulser.

Denna pulsbreddsmodulering gör att Raspberry Pi kan styra hur ljusa var och en av de röda, gröna och blå kanalerna är för LED -remsan.

Klona först förvaret

cd /opt /

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

Bygg och installera sedan

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

Slutligen konfigurerar du vilka stift du vill använda

Under rotkontot eller med sudo, skapa och redigera filen

/etc/default/pi-blaster

Lägg till följande rader

DAEMON_OPTS =-gpio 23, 24, 25

Dessa gpio -stift måste matcha stiften som du ansluter till din LED -remsa.

OBS: Det finns en skillnad mellan GPIO och pin -nummer. I det här exemplet används följande

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

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

Extra tweaks

Starta pi-blaster

sudo service pi-blaster start

Starta om pi-blaster

sudo service pi-blaster starta om

Stoppa pi-blaster

sudo service pi-blaster stopp

Starta pi-blaster automatiskt vid uppstart

sudo systemctl aktivera pi-blaster

Varningar och andra varningar

Stift som används av pi-blaster kommer att konfigureras som utgångar. Anslut inte något på en ingång eller du kan förstöra det! Denna demon använder maskinvaran PWM -generator på hallonpi för att få exakta tidpunkter. Detta kan störa ljudkortets utmatning.

Steg 4: Konfigurera exempelkoden

Klona exempelkoden

1. Skapa en basmapp att installera i

cd /opt

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

2. Klona exempel på git -förvaret

git-klon

eller

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

3. Installera beroende

cd färg-pi

npm installera

Detta kan ta 2-3 minuter

4. Detta projekt måste kommunicera över HTTPS och WSS. För närvarande stöder cylon-api-socketio inte SSL-anslutningar. Det finns en öppen pull -begäran om att lägga till det här stödet, men tills det har slagits ihop finns det en patchfil i det här förvaret. Kör följande kommando efter npm -installationen

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

Steg 5: Skapa ett självsignerat SSL -certifikat

1. Skapa en privat nyckelfil

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

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

2. Skapa en CSR (begäran om certifikatsignering)

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

Vid denna tidpunkt kommer du att bli ombedd att ange information om certifikatförfrågan. Eftersom detta är ett självsignerat certifikat är det upp till dig hur exakt du fyller i detaljerna. Här är ett exempel

Landnamn (kod med två bokstäver) [AU]: CA

Stat eller provinsnamn (fullständigt namn) [Någon delstat]: British Columbia ortnamn (t.ex. stad) : Vancouver organisationsnamn (t.ex. företag) [Internet Widgits Pty Ltd]: Color Pi organisatoriska enhetsnamn (t.ex. avsnitt) : Vanligt namn (t.ex. server FQDN eller DITT namn) : color-pi E-postadress : [email protected]

Ett utmaningslösenord :

Ett valfritt företagsnamn :

I det här exemplet trycker du bara på retur för att lämna utmaningslösenordet tomt

3. Skapa certifikatet

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

4. För extra säkerhet skapar vi också en Diffie Hellman Parameters -fil

openssl dhparam -out dh_2048.pem 2048

Detta kan ta 15-20 minuter

Steg 6: Anslutning av kretsen

Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen
Anslutning av kretsen

Drar LED -remsan

LED -remsan drivs av 12 volt. Raspberry Pi kan bara mata ut 3.3v eller 5v och kan inte mata ut någonstans nära de förstärkare som behövs för att driva så många lysdioder.

Det är viktigt att inte ansluta 12 volt strömförsörjning till Raspberry Pi. N-kanal MOSFET-transistorer används för att separera 3.3v på RPi-stiften och 12v på LED-strömförsörjningen.

MOSFET har tre stift Gate, Drain och Source. Om du inte är säker på vilken som är vilken google för databladet för transistorn du använder, t.ex. IRL3303

Vi ska ansluta Raspberry Pi -stiftet till porten, LED -kabeln till avloppet och en gemensam jord till källan. När stiftet går högt, aktiverar spänningen mellan avloppet och källan porten och ansluter porten till källan.

Vi kommer också att sätta 10kΩ -resistorer över porten och källan, så att när vi RPi -stiftet är högt kan vi skydda stiftet genom att minska strömmen som går igenom det.

Utför nästa steg på egen risk. Jag tar inget ansvar för något som kan gå fel

Det finns en fritzande bild och ett foto av den faktiska kretsen ovan.

Jag skulle rekommendera att göra detta medan strömmen är avstängd för RPi och LED -remsan

Ställ in transistorkretsarna, en per färgkanal

  1. Sätt in en av transistorerna i brödbrädan som visas i diagrammet
  2. Sätt in en av 10kΩ -resistorerna över avloppet och källstiften på transistorn. Detta är den första och sista nålen
  3. Använd lite tråd för att ansluta källstiftet (sista stiftet) till marken på brödbrädet
  4. Upprepa steg 1 - 3 två gånger till så att du har tre uppsättningar - en per färg (röd, grön och blå)

Anslut RPi -stiften till kortet

  1. Anslut stift 16 till grindstiftet (första stiftet) på den första transistorn - Detta blir den blå LED -kanalen
  2. Anslut stift 18 till grindstiftet (första stiftet) på den första transistorn - Detta blir den röda LED -kanalen
  3. Anslut stift 20 till en av marklinjerna på sidan av brödbrädan
  4. Anslut Pin 22 till Gate Pin (första pin) på den första transistorn - Detta kommer att vara den gröna LED -kanalen

Jag har använt matchande trådfärger till lysdioderna: blå, röd och grön. Jag har använt svart till marken

Anslut Barrel Jack

  1. Anslut en vit tråd till + -änden på fatuttaget
  2. Anslut en svart kabel till - änden på fatuttaget
  3. Anslut den svarta ledningen till samma jordlinje på brödbrädan som RPi Pin 20 var ansluten till
  4. Anslut den vita tråden till + -raden på brödbrädan

Anslutning av LED -remsan

Min LED -remsa kom med en kontakt som var tillräckligt bra för att den tillfälligt skulle kunna anslutas till brödbräda. Jag tryckte på kontakten i brödbrädan och kopplade den till kretsens test.

  1. Den första transistorn ansluten till stift 16. Jag körde en blå ledning från dräneringsstiftet (mittstiftet) till den blå ledningen på LED -bandkontakten
  2. Den andra transistorn ansluten till stift 18. Jag körde en röd tråd från

    Dränera

    stift (mittstift) till den röda ledningen på LED -stripkontakten

  3. Den tredje transistorn ansluten till Pin 22. Jag körde en grön tråd från

    Dränera

    stift (mittstift) till den gröna ledningen på LED -stripkontakten

  4. Slutligen körde jag en vit tråd från + -linjen på brödbrädan som var ansluten till fatuttaget, till den vita ledningen på LED -stripkontakten.

Kraft

Efter att ha kontrollerat kretsen bör du vara bra att slå på Raspberry Pi och ansluta 12V -matningen till fatuttaget.

Steg 7: Kod på serversidan

Kod på serversidan
Kod på serversidan

Kör koden på serversidan

cd /opt/com.jonhaydock/colour-pi

sudo npm start

Detta kommer att starta webbservern och börja lyssna på HTTPS- och WSS -förfrågningar.

OBS: Kom ihåg att ha pi-blaster igång först

Miljövariabler

Standardwebbplatsporten är 443, men du kan åsidosätta detta genom att ställa in en miljövariabel innan du startar koden. Till exempel

exportera COLOUR_PI_PORT = 2443

Standardwebbporten är 1443, men du kan åsidosätta detta genom att ställa in en miljövariabel innan du startar koden. Till exempel

exportera COLOUR_PI_WSS_PORT = 3443

Obs! Eftersom webbuttaget hanteras av cylon.js och inte huvudwebbplatsen måste dessa finnas på olika portar

Stiften som används för blå (stift 16), grön (stift 18) och röd (stift 22) kan också åsidosättas. Till exempel

exportera COLOUR_PI_PIN_BLUE = 36

exportera COLOUR_PI_PIN_RED = 38 exportera COLOUR_PI_PIN_GREEN = 40

Obs! Dessa måste matcha de fysiska stiften du använde. Om du ändrar dessa måste du också uppdatera GPIO: erna som definieras i filen/etc/default/pi-blaster. Till exempel

DAEMON_OPTS =-gpio 16, 20, 21

Huvudserverkoden finns i filen app.js. Den här filen startar HTTPS -webbservern och använder även socket.io för att lyssna efter förfrågningar om webbuttag via en separat port genom Cylon.js -ramverket.

För att komma åt webbplatsen bör du öppna en webbläsare på din huvuddator (jag har bara testat detta i Chrome) och använda IP -adressen till Raspberry Pi, t.ex.

10.0.1.2/

Du kan ta reda på din IP -adress från kommandoraden Raspberry Pi.

ifconfig

Webbservern serverar allt innehåll under den offentliga mappen. Som standard visas index.html -sidan.

Cylon.js skapar en slutpunkt som du kan ansluta Socket.io.

10.0.1.2:1443/api/robots/colour-pi

Du kan skicka ett set_colour -meddelande till via uttaget för att ställa in röda, gröna och blåa värden

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

Som kallar kommandot set_colour, som kallar setColour -funktionen i app.js. Denna funktion ställer in ljusstyrkenivåerna för vart och ett av R-, G- och B -värdena mellan 0 och 255. Där 0 är av och 255 är helt på.

t.ex.

Rött r = 255, g = 0, b = 0

Grön r = 0, g = 255, b = 0 Blå r = 0, g = 0, b = 255 Vit r = 255, g = 255, b = 255 Svart / Av r = 0, g = 0, b = 0

Steg 8: Webbplatskod

Webbplatskod
Webbplatskod

Allmän

Webbplatsen använder röstigenkänning för att välja färger från en fördefinierad lista. För att lägga till en färg i listan, redigera filen på servern: public/data/colours.json

t.ex.

"röd": "#FF0000",

När en färg hittas eller väljs från rullgardinsmenyn, kommer Output -rutan att ställas in på den färgen och ett meddelande skickas via socket.io till Raspnerry Pi, som kommer att ställa in lysdioderna i samma färg.

OBS: beroende på hur bra dina lysdioder är kanske du kanske inte ser en liknande färg. Vissa är lättare att kopiera än andra

När du laddar webbplatsen första gången, eftersom du använder ett självsignerat SSL-certifikat måste du bekräfta detta i webbläsaren. Du bör se en säkerhetsvarning om certifikatet.

Röstigenkänning

Den här rutan har en mikrofonikon. Om du klickar på ikonen när den är grön börjar den lyssna efter färger. Medan den lyssnar blir den röd. Den kommer att lyssna en kort stund och sedan sluta. Om du klickar på mikrofonikonen när den är röd stoppas den också från att lyssna.

Eftersom denna webbplats behöver åtkomst till din mikrofon måste du ge den tillstånd när du uppmanas

OBS: Du behöver en mikrofon för denna del. Jag använder den på min webbkamera.

Interimavskrift

Denna ruta spårar gissningarna på orden du säger, som du säger dem.

Slutavskrift

Den här rutan spårar den sista gissningen är vad du sa.

Kända färger

Detta är en lista över alla färger som sidan känner till. Den skapas från filen colours.json. Om du väljer en av dessa färger kommer sidan att tala färgen och ställa in utgångsfärgen.

OBS: Du behöver högtalare eller hörlurar för att höra talet

Hittade färger

Denna webbsida stöder för närvarande endast matchning av färgen. Om ordet eller orden du talade in i mikrofonen matchar namnet på en känd färg, eller om du väljer en färg från listan Känd färg, läggs den till här som en logg.

Produktion

Den senast hittade färgen visas här. Färg Hex -värdet (t.ex. #7cb9e8) och RGB -värdet (t.ex. 124, 185, 232) visas som text och bakgrunden för rutan i mitten kommer att ställas in till den faktiska färgen.

Denna färg skickas också till Raspberry Pi och du bör se färgen på LED -remsan ändras.

OBS: om du inte ser förändringen av LED-färgen, försök starta om pi-blaster och/eller node.js-appen

sudo service pi-blaster starta om

sudo npm start

Kända röster

Den här rutan visar en lista över "Kända röster" från den stödda speechSynthesis. Om du väljer en av dessa röster ändras rösten och språket du kommer att höra, och det kommer att tala röstens namn.

Det kommer också att ändra språket för SpeechRecognition till samma som det som valts i listan.

Steg 9: Slutligen

Image
Image

Här är ett exempel på vad du bör se.

Meddela mig om du har några problem så kan jag uppdatera efter behov.

Rekommenderad: