Inhoudsopgave:

Kleur-pi: 9 stappen
Kleur-pi: 9 stappen

Video: Kleur-pi: 9 stappen

Video: Kleur-pi: 9 stappen
Video: Swiebertje DVD 9 [kleur] 2024, November
Anonim
Kleur-pi
Kleur-pi

Deze instructable laat zien hoe je een Raspberry Pi gebruikt om een RGB LED-strip met stem te bedienen, via een website, met behulp van de Web Speech API-interfaces voor spraakherkenning en spraaksynthese.

Dit voorbeeld laat zien hoe u

  • Maak een basiswebsite met Node.js via
  • Gebruik de Web Speech API-interfaces voor SpeechRecognition en SpeechSynthesis.
  • Gebruik het Cylon.js-framework om een RGB-ledstrip op een Raspberry Pi te bedienen
  • Communiceer via WSS (Secure Web sockets) van de webpagina naar Cylon.js om de kleur voor de LED te regelen

Opmerking

  • Je hebt luidsprekers of een koptelefoon nodig om de spraaksynthesizer te horen
  • Je moet toegang geven tot je microfoon om de spraakherkenning te laten werken
  • Omdat deze toegang heeft tot uw microfoon, moet de site worden uitgevoerd onder
  • De bibliotheek cylon-api-socketio ondersteunt momenteel geen https. Ik heb een pull-verzoek dat wacht om te worden samengevoegd, maar tot die tijd moet je de /node_modules/cylon-api-socketio/lib/api.js vervangen door het bestand in deze repository
  • pi-blaster is nodig om dit te laten werken.

Stap 1: Apparatuur

  1. Raspberry Pi - Ik gebruikte een Raspberry Pi 2B die ik had liggen, maar je kunt een Raspberry Pi 3 Starter Kit krijgen voor ongeveer CAD 100
  2. RGB LED Strip Light - Ik speelde met Minger LED Strip Light 32,8ft/10M 600leds RGB SMD 5050. Dit wordt geleverd met een controller en een voeding voor ongeveer CAD 40
  3. Barrel Jack Connector - Ik heb er een gekocht bij mijn plaatselijke elektronicawinkel, zoiets als dit. Zorg er wel voor dat het bij uw voeding past!
  4. Jumper Connectors / Wire - Ik had een aantal Female naar Male connectorkabels en een aantal 22 Gauge Solid hook-up draad rondslingeren
  5. Breadboard Solderless Prototype PCB Board - zoiets als dit
  6. 3 x 10kΩ Weerstanden
  7. 3 x N-kanaal MOSFET's voor het aansturen van de LED's - Ik heb een aantal IRL3303's gekocht bij mijn plaatselijke elektronicawinkel. Het is belangrijk dat de drempelspanning van de poort maximaal is. 3.3V zodat het kan worden aangedreven door de RPi-pinnen; meestal aangeduid met een 'L' (Logic-Level) in de naam.

Stap 2: De Raspberry Pi instellen

Besturingssysteem

Ik gebruik normaal gesproken de nieuwste Raspbian-build. Download de afbeelding en schrijf deze naar de SD-kaart. Als u een Windows-computer gebruikt, kunt u Win32 Disk Imager gebruiken om de afbeelding naar de SD-kaart te schrijven.

Node.js

Installeer de nieuwste versie van Node.js. Op het moment van schrijven gebruik ik 8.9.1

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

sudo apt-get install nodejs

Git. installeren

sudo apt-get install git

Stap 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster maakt PWM mogelijk op de GPIO-pinnen die u van een Raspberry Pi aanvraagt. De gebruikte techniek is uiterst efficiënt: maakt geen gebruik van de CPU en geeft zeer stabiele pulsen.

Met deze pulsbreedtemodulatie kan de Raspberry Pi bepalen hoe helder elk van de rode, groene en blauwe kanalen is voor de ledstrip.

Kloon eerst de repository

cd /opt/

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

Vervolgens bouwen en installeren

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

Configureer tot slot welke pinnen u wilt gebruiken

Maak en bewerk het bestand onder het root-account, of gebruik sudo

/etc/default/pi-blaster

Voeg de volgende regels toe:

DAEMON_OPTS=--gpio 23, 24, 25

Deze gpio-pinnen moeten overeenkomen met de pinnen die u op uw LED-strip aansluit.

OPMERKING: Er is een verschil tussen GPIO en pincode. In dit voorbeeld wordt het volgende gebruikt:

LED - Blauw, GPIO-23, Pin - 16

LED - Rood, GPIO-24, Pin - 18 LED - Groen, GPIO-25, Pin - 22

Extra aanpassingen

Start pi-blaster

sudo service pi-blaster start

Herstart pi-blaster

sudo-service pi-blaster opnieuw opstarten

Stop pi-blaster

sudo service pi-blaster stop

Start pi-blaster automatisch tijdens het opstarten

sudo systemctl activeer pi-blaster

Waarschuwingen en andere kanttekeningen

Pinnen die door pi-blaster worden gebruikt, worden geconfigureerd als uitgangen. Sluit niets aan op een ingang, anders vernietig je deze! Deze daemon gebruikt de hardware PWM-generator van de Raspberry Pi om nauwkeurige timings te krijgen. Dit kan de uitvoer van uw geluidskaart verstoren.

Stap 4: De voorbeeldcode instellen

Kloon de voorbeeldcode

1. Stel een basismap in om in te installeren:

cd /opt

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

2. Kloon de voorbeeld-git-repository

git clone

of

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

3. Installeer de afhankelijkheden

cd kleur-pi

npm installeren

Dit kan 2-3 minuten duren

4. Dit project moet communiceren via HTTPS en WSS. Op dit moment ondersteunt cylon-api-socketio geen SSL-verbindingen. Er is een open pull-verzoek om deze ondersteuning toe te voegen, maar totdat dat is samengevoegd, is er een patchbestand in deze repository. Voer de volgende opdracht uit na de installatie van npm:

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

Stap 5: Maak een zelfondertekend SSL-certificaat

1. Maak een privésleutelbestand aan

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

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

2. Maak een CSR (Certificate Signing Request)

openssl req -new -key colour-pi-key.pem -out colour-pi-mvo.pem

Op dit punt wordt u gevraagd om wat informatie voor de certificaataanvraag. Aangezien dit een zelfondertekend certificaat is, bepaalt u zelf hoe nauwkeurig u de gegevens invult. Hier is een voorbeeld

Landnaam (2-letterige code) [AU]:CA

Naam staat of provincie (volledige naam) [Some-state]:British Columbia Plaatsnaam (bijv. stad) :Vancouver Organization Name (bijv. bedrijf) [Internet Widgits Pty Ltd]:Colour Pi Organizational Unit Name (bijv. sectie) : Algemene naam (bijv. server FQDN of UW naam) :colour-pi E-mailadres :[email protected]

Een uitdagingswachtwoord :

Een optionele bedrijfsnaam :

In dit voorbeeld drukt u gewoon op Return om het uitdagingswachtwoord leeg te laten

3. Genereer het certificaat

openssl x509 -req -days 1095 -in kleur-pi-mvo.pem -signkey kleur-pi-key.pem -out kleur-pi-cert.pem

4. Voor extra veiligheid zullen we ook een Diffie Hellman Parameters-bestand maken

openssl dhparam -out dh_2048.pem 2048

Dit kan 15-20 minuten duren

Stap 6: Bedrading van het circuit

Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit

De LED-strip van stroom voorzien

De ledstrip wordt gevoed door 12 volt. De Raspberry Pi is alleen in staat om 3,3v of 5v uit te voeren en is niet in staat om ergens in de buurt van de versterkers te komen die nodig zijn om zoveel LED's aan te sturen.

Het is belangrijk om de 12 volt voeding niet op de Raspberry Pi aan te sluiten. N-kanaal MOSFET-transistors worden gebruikt om de 3,3v op de RPi-pinnen en de 12v van de LED-voeding te scheiden.

De MOSFET heeft drie pinnen Gate, Drain en Source. Als u niet zeker weet welke google is voor het gegevensblad van de transistor die u gebruikt, b.v. IRL3303

We gaan de Raspberry Pi Pin aansluiten op de Gate, de LED-draad op de Drain en een gemeenschappelijke aarde op de Source. Wanneer de pin hoog wordt, zal de spanning tussen de afvoer en de bron de poort activeren en de poort verbinden met de bron.

We gaan ook 10kΩ-weerstanden over de poort en de bron plaatsen, zodat wanneer de RPi-pin hoog is, we de pin kunnen beschermen door de stroom die er doorheen gaat te verminderen.

Voer de volgende stappen op eigen risico uit. Ik neem geen verantwoordelijkheid voor iets dat mis kan gaan

Er is een fritzing afbeelding en een foto van het eigenlijke circuit hierboven.

Ik zou aanraden dit te doen terwijl de stroom is uitgeschakeld voor de RPi en de LED-strip

Stel de transistorcircuits in, één per kleurkanaal

  1. Plaats een van de transistors in het breadboard zoals weergegeven in het diagram
  2. Steek een van de 10kΩ-weerstanden over de afvoer- en bronpinnen van de transistor. Dit is de eerste en laatste pin
  3. Gebruik wat draad om de Source-pin (laatste pin) met de grond op het breadboard te verbinden
  4. Herhaal stap 1 - 3 nog twee keer, zodat je drie sets hebt - één per kleur (rood, groen en blauw)

Sluit de RPi-pinnen aan op het bord

  1. Sluit pin 16 aan op de poortpin (eerste pin) van de eerste transistor - dit wordt het blauwe LED-kanaal
  2. Sluit Pin 18 aan op de Gate Pin (eerste pin) van de eerste transistor - Dit wordt het Rode LED-kanaal
  3. Sluit pin 20 aan op een van de aardingslijnen aan de zijkant van het breadboard
  4. Sluit Pin 22 aan op de Gate Pin (eerste pin) van de eerste transistor - Dit wordt het Groene LED-kanaal

Ik heb bijpassende draadkleuren gebruikt voor de LED's: blauw, rood en groen. Ik heb zwart gebruikt voor de grond

Sluit de Barrel Jack aan

  1. Sluit een witte draad aan op het + uiteinde van de barrel jack
  2. Sluit een zwarte draad aan op het - uiteinde van de barrel jack
  3. Sluit de zwarte draad aan op dezelfde aardleiding op het breadboard als waarop de RPi Pin 20 was aangesloten
  4. Sluit de witte draad aan op de + lijn op het breadboard

De LED-strip aansluiten

Mijn LED-strip werd geleverd met een connector die groot genoeg was om tijdelijk op een breadboard te worden aangesloten. Ik heb de connector in het breadboard geduwd en aangesloten op de test van het circuit.

  1. De eerste transistor aangesloten op Pin 16. Ik heb een blauwe draad van de Drain-pin (middelste pin) naar de blauwe draad op de LED-stripconnector geleid
  2. De tweede transistor aangesloten op pin 18. Ik heb een rode draad van de

    Droogleggen

    pin (middelste pin) naar de rode draad op de ledstripconnector

  3. De derde transistor aangesloten op pin 22. Ik heb een groene draad van de

    Droogleggen

    pin (middelste pin) naar de groene draad op de ledstripconnector

  4. Ten slotte liep ik een witte draad van de + lijn op het breadboard die was aangesloten op de barrel jack, naar de witte draad op de LED-stripconnector.

Stroom

Nadat je het circuit hebt gecontroleerd, zou je goed moeten zijn om de Raspberry Pi aan te zetten en de 12v-voeding op de barrel-jack aan te sluiten.

Stap 7: Server-side code

Server-side code
Server-side code

De server-side code uitvoeren

cd /opt/com.jonhaydock/colour-pi

sudo npm start

Hierdoor wordt de webserver opgestart en wordt er geluisterd naar HTTPS- en WSS-verzoeken.

OPMERKING: vergeet niet om pi-blaster eerst te laten draaien

Omgevingsvariabelen

De standaard websitepoort is 443, maar u kunt dit overschrijven door een omgevingsvariabele in te stellen voordat u de code start. Bijvoorbeeld

exporteren COLOUR_PI_PORT=2443

De standaard websocket-poort is 1443, maar u kunt dit overschrijven door een omgevingsvariabele in te stellen voordat u de code start. Bijvoorbeeld

exporteren COLOUR_PI_WSS_PORT=3443

Opmerking: aangezien de websocket wordt afgehandeld door cylon.js en niet door de hoofdwebsite, moeten deze zich op verschillende poorten bevinden

De pinnen die worden gebruikt voor de blauwe (pin 16), groene (pin 18) en rode (pin 22) kunnen ook worden overschreven. Bijvoorbeeld

exporteren COLOUR_PI_PIN_BLUE=36

exporteren COLOUR_PI_PIN_RED=38 exporteren COLOUR_PI_PIN_GREEN=40

Opmerking: deze moeten overeenkomen met de fysieke pinnen die u hebt gebruikt. Als u deze wijzigt, moet u ook de GPIO's bijwerken die zijn gedefinieerd in het bestand /etc/default/pi-blaster. Bijvoorbeeld

DAEMON_OPTS=--gpio 16, 20, 21

De hoofdservercode is te vinden in het app.js-bestand. Dit bestand start de HTTPS-webserver en gebruikt ook, via het Cylon.js-framework, socket.io om te luisteren naar websocket-verzoeken op een aparte poort.

Om toegang te krijgen tot de website, moet u een webbrowser openen op uw hoofdcomputer (ik heb dit alleen in Chrome getest) en het IP-adres van de Raspberry Pi gebruiken, b.v.

10.0.1.2/

U kunt uw IP-adres achterhalen via de Raspberry Pi-opdrachtregel.

ifconfig

De webserver zal alle inhoud onder de openbare map weergeven. Standaard wordt de pagina index.html weergegeven.

Cylon.js maakt een eindpunt waarmee u Socket.io kunt verbinden.

10.0.1.2:1443/api/robots/color-pi

U kunt via de socket een set_colour-bericht sturen om de waarden voor rood, groen en blauw in te stellen

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

Die roept de opdracht set_colour aan, die de functie setColour in app.js aanroept. Deze functie stelt de helderheidsniveaus voor elk van de R-, G- en B-waarden in tussen 0 en 255. Waarbij 0 uit is en 255 volledig aan is.

bijv.

Rood r=255, g=0, b=0

Groen r=0, g=255, b=0 Blauw r=0, g=0, b=255 Wit r=255, g=255, b=255 Zwart / Uit r=0, g=0, b=0

Stap 8: Websitecode

Websitecode
Websitecode

Algemeen

De website maakt gebruik van spraakherkenning om kleuren te selecteren uit een vooraf gedefinieerde lijst. Om een kleur aan de lijst toe te voegen, bewerkt u het bestand op de server: public/data/colours.json

bijv.

"red":"#FF0000", Wanneer een kleur is gevonden of geselecteerd in de vervolgkeuzelijst, wordt het uitvoervak ingesteld op die kleur en wordt er een bericht via socket.io naar de Raspnerry Pi gestuurd, die de LED's op dezelfde kleur zal instellen.

OPMERKING: afhankelijk van hoe goed uw LED's zijn, kunt u wel of niet een vergelijkbare kleur zien. Sommige zijn gemakkelijker te dupliceren dan andere

Wanneer u de website voor het eerst laadt, omdat u een zelfondertekend SSL-certificaat gebruikt, moet u dit in de browser bevestigen. U zou een beveiligingswaarschuwing over het certificaat moeten zien.

Spraakherkenning

Dit vak heeft een microfoonpictogram. Als u op het pictogram klikt wanneer het groen is, begint het naar kleuren te luisteren. Terwijl hij luistert, wordt hij rood. Het zal een korte tijd luisteren en dan stoppen. Als u op het microfoonpictogram klikt wanneer het rood is, stopt het ook met luisteren.

Aangezien deze site toegang nodig heeft tot uw microfoon, moet u deze toestemming geven wanneer daarom wordt gevraagd

LET OP: Voor dit onderdeel heb je een microfoon nodig. Ik gebruik die op mijn webcamera.

Tussentijds transcript

Dit vak houdt de gissingen bij van de woorden die u zegt, terwijl u ze zegt.

Laatste transcript

Dit vak houdt de laatste gok bij wat je zei.

bekende kleuren

Dit is een lijst van alle kleuren die de pagina kent. Het is gemaakt op basis van het bestand colors.json. Als u een van deze kleuren selecteert, zal de pagina de kleur uitspreken en de uitvoerkleur instellen.

OPMERKING: je hebt luidsprekers of een koptelefoon nodig om de spraak te horen

Gevonden kleuren

Deze webpagina ondersteunt momenteel alleen het matchen van de kleur. Als het woord of de woorden die u in de microfoon hebt gesproken overeenkomt met de naam van een bekende kleur, of als u een kleur selecteert uit de lijst met bekende kleuren, wordt deze hier als een logboek toegevoegd.

Uitgang:

De laatst gevonden kleur wordt hier weergegeven. De Color Hex-waarde (bijv. #7cb9e8) en de RGB-waarde (bijv. 124, 185, 232) worden weergegeven als tekst en de achtergrond van het vak in het midden wordt ingesteld op de werkelijke kleur.

Deze kleur wordt ook naar de Raspberry Pi gestuurd en je zou de kleur van de ledstrip moeten zien veranderen.

OPMERKING: als je de LED-kleurverandering niet ziet, probeer dan pi-blaster en/of de node.js-app opnieuw te starten

sudo-service pi-blaster opnieuw opstarten

sudo npm start

Bekende stemmen

Dit vak toont een lijst met "Bekende stemmen" van de ondersteunde speechSynthesis. Als u een van deze stemmen selecteert, verandert de stem en de taal die u hoort, en wordt de naam van de stem uitgesproken.

Het zal ook de taal van de SpeechRecognition veranderen, zodat deze dezelfde is als de taal die in de lijst is gekozen.

Stap 9: Eindelijk

Image
Image

Hier is een voorbeeld van wat je zou moeten zien.

Laat het me weten als je een probleem hebt en ik kan updaten als dat nodig is.

Aanbevolen: