Inhoudsopgave:
- Stap 1: Apparatuur
- Stap 2: De Raspberry Pi instellen
- Stap 3: Pi-blaster
- Stap 4: De voorbeeldcode instellen
- Stap 5: Maak een zelfondertekend SSL-certificaat
- Stap 6: Bedrading van het circuit
- Stap 7: Server-side code
- Stap 8: Websitecode
- Stap 9: Eindelijk
Video: Kleur-pi: 9 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
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
- 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
- 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
- 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!
- Jumper Connectors / Wire - Ik had een aantal Female naar Male connectorkabels en een aantal 22 Gauge Solid hook-up draad rondslingeren
- Breadboard Solderless Prototype PCB Board - zoiets als dit
- 3 x 10kΩ Weerstanden
- 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 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
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
- Plaats een van de transistors in het breadboard zoals weergegeven in het diagram
- Steek een van de 10kΩ-weerstanden over de afvoer- en bronpinnen van de transistor. Dit is de eerste en laatste pin
- Gebruik wat draad om de Source-pin (laatste pin) met de grond op het breadboard te verbinden
- 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
- Sluit pin 16 aan op de poortpin (eerste pin) van de eerste transistor - dit wordt het blauwe LED-kanaal
- Sluit Pin 18 aan op de Gate Pin (eerste pin) van de eerste transistor - Dit wordt het Rode LED-kanaal
- Sluit pin 20 aan op een van de aardingslijnen aan de zijkant van het breadboard
- 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
- Sluit een witte draad aan op het + uiteinde van de barrel jack
- Sluit een zwarte draad aan op het - uiteinde van de barrel jack
- Sluit de zwarte draad aan op dezelfde aardleiding op het breadboard als waarop de RPi Pin 20 was aangesloten
- 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.
- 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
-
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
-
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
- 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
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
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
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:
Oh!! Kleur: 7 stappen
Oh!! Kleur: O!! Kleur is een eenvoudig spel om de kleur te raden. Het spel geeft je de meest elementaire drie primaire kleuren. Als u twee kleuren wilt combineren, drukt u gewoon op beide knoppen. Nadat de knop is ingedrukt, zal het spel Het oordeel is correct. Tot slot, pleidooi
Wandklok in kleur 7 stappen (met afbeeldingen)
Kleur wandklok: deze keer presenteer ik u een analoge wandklok in kleur voor kinderen met led-strips. De basis van de klok is om drie led-strips en verschillende kleuren te gebruiken om de tijd weer te geven: in de ronde led-strip is de groene kleur gebruikt om de uren te tonen, de
Beeldtesten voor kleur en helderheid: 8 stappen
Afbeelding testen voor kleur en duidelijkheid: ik heb dit Instructable voor mij gemaakt; om mijn Instructables te verbeteren, maar ik ben van plan te delen wat ik heb gevonden. Ik heb gemerkt dat sommige van de afbeeldingen die ik upload naar Instructabes er perfect uitzien en dat andere afbeeldingen minder helder zijn, een beetje verkleurd of wazig. Ik weet het niet
LED-spel: kleur het blauw: 4 stappen
LED Game: Color It Blue: In dit LED-spel gebruiken spelers een joystick om de LED's blauw te maken. Een lampje in het midden licht blauw op en spelers moeten de linkerhelft of de rechterhelft blauw maken. Een geel lampje laat willekeurig een van de LED's branden en spelers moeten hun joysti
PhantomX Pincher Kleur Sorteren: 4 Stappen
PhantomX Pincher Color Sorting: Inleiding Deze instructable is gemaakt door 2 studenten Automatisering Engineering, van UCN (Denemarken). De instructable illustreert hoe men een PhantomX Pncher kan gebruiken om de dozen op kleur te sorteren met behulp van een CMUcam5 Pixy en ze te stapelen. Deze applicatie