Innehållsförteckning:

A Voice Controlled Jumping Jack- Google Voice AIY Version: 3 steg
A Voice Controlled Jumping Jack- Google Voice AIY Version: 3 steg

Video: A Voice Controlled Jumping Jack- Google Voice AIY Version: 3 steg

Video: A Voice Controlled Jumping Jack- Google Voice AIY Version: 3 steg
Video: ORIGIN OF DEMOMAN'S VOICE - TF2 2024, November
Anonim
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version
En röststyrd Jumping Jack- Google Voice AIY-version

Så du har fått det AIY -röstsatsen till jul och har lekt med det enligt instruktionerna. Det är roligt, men nu?

Projektet som beskrivs i det följande presenterar en enkel enhet som kan byggas med AIY -rösthatten för Raspberry Pi. Den använder Googles röstigenkänningssystem för att styra lysdioder och två servon, som driver armarna och benen på en hoppande jack med en mycket enkel växel.

Programvaran som fungerar i bakgrunden är en ändring av servo_demo.py -skriptet, som det har beskrivits i AIY -röstkitmanualen. Följ bara instruktionerna där för att konfigurera hård- och programvara. Själva enheten är enkel att bygga och kräver inte mycket handarbete. Dessutom skulle en skärkniv, en borr och ett lödkolv vara till hjälp.

Om du aktiverar röstigenkänningssystemet med en blinkning av handen och säger "händerna upp" kommer hoppkraften att höja händer och ben, "händer i mitten" flyttar båda servon till mittläget och på "händer ner" händer och ben kommer sänkas. På "vänster upp" höjs vänster hand och ben och på "höger ner" sänks de högra, på "höger upp" tvärtom. "Dans", kommer att få det att dansa, ja åtminstone typ. Det pratar också, ta en titt på den bifogade videon.

Så med små ansträngningar kan du bygga din egen dans-, chatt- och sjungande robot.

För att förenkla användningen, särskilt för mindre barn, och för att förstärka den”magiska” faktorn, byttes knappen på AIY -lådan som utlösare av en närhetssensor. För enkelhetens skull använde jag en digital distanssensorutbrott från Pololu som känner igen om ett föremål är närmare än 5 cm och kan användas väldigt mycket som en knapp. Lysdioder indikerar när enheten väntar på order, lyssnar eller "tänker". Servos, sensorer och lysdioder styrs av programbiblioteket GPIOZero.

Prototypen byggdes av Forex, PVC -skumplattor, som kan skäras mycket enkelt med en skärkniv och limmas, men är också ganska stabil. Bygg gärna en större, snyggare, förbättrad eller snyggare version, men det vore snällt om du skulle dokumentera och presentera dina förbättringar.

Du kan använda båda sidor av kroppen, beroende på om du vill presentera rörelseutrustningen eller ha en trevlig, barnvänlig layout. --------- "Hampelmann" är den tyska termen för "jumping jack", med vissa konnotationer.

Steg 1: Material som används

Material som används
Material som används
Material som används
Material som används

Hallon Pi 3; 32 £ på Pimoroni, Storbritannien

AIY röstsats; 25 £ på Pimoroni, Storbritannien

Pololu digital distanssensor bryter med Sharp sensor, 5 cm; 5,90 € på Exp-tec.de

Två 9g servon

Två vita lysdioder och ett motstånd

Några sidhuvuden och bygelkablar

En 2 mm Forex -platta, 250 x 500 mm; 1,70 € på Modulor, Berlin, Tyskland

M3 skruvar, muttrar och brickor, för att ansluta alla rörliga delar. Jag använde sex 10 och fyra 16 mm nylonskruvar.

Sex M2 skruvar och muttrar för att fästa servon på plattorna och ansluta servosarmarna och kugghjulen.

Några droppar plastlim

Steg 2: Montering och användning av enheten

Montering och användning av enheten
Montering och användning av enheten
Montering och användning av enheten
Montering och användning av enheten
Montering och användning av enheten
Montering och användning av enheten

Angående själva AIY -röstsatsen följer du bara instruktionerna i beskrivningen som medföljer satsen, inklusive avsnittet om servon. Jag skulle rekommendera att löda flera trepoliga rubriker till servoportarna på AIY-röstutbrottet, så att du kan ansluta servon, sensorer och lysdioder väldigt enkelt med HAT.

När det gäller hoppjacket kan du antingen använda ritningarna som jag tillhandahållit här som svg- och PDF-filer som en mall, eller bara ändra dem enligt dina egna idéer. Du kanske vill behålla den grundläggande utformningen av växeln som driver benen och armen på hoppjacket, så att avståndet mellan svängningspunkten och växeln är detsamma vid servon, armen och benet.

Alternativt kan du också konstruera en version där armar och ben drivs direkt av fyra separata servon eller av en mer avancerad växel.

Med hjälp av ritningen, klipp bitarna från en Forex-, kartong- eller plywoodplatta och borra hålen vid lämpliga positioner. Limma avståndsstyckena till de svängbara punkterna på armar och ben, för att säkerställa en bra inriktning av hålen.

Fäst servon och de rörliga delarna på bottenplattan. Lägg till avståndssensorn och lysdioden enligt indikationen. Servon fixeras med M2 -skruvar, alla rörliga delar med M3 -skruvar. Jag använde Nylon M3 -skruvar, men bara av estetiska skäl.

Kontrollera om servoarmarna är placerade i mittläget. Anslut servo armar och kugghjul, jag använde M2 skruvar för detta ändamål.

Anslut servon, lysdioder och avståndssensorn till servokontakterna på AIY -kortet. Du kan behöva några förlängnings-/bygelkablar. Jag fäst den vänstra servon på “servo0” (GPIO 26) den högra servon till “servo2” (GPIO 13), lysdioderna till “servo5” (GPIO 24) och sensorn till “servo3” (GPIO 5) på AIY röst HAT.

Kopiera den medföljande "Hampelmann.py" -filen till AIY "src" -mappen och gör den direkt körbar för alla. För att göra det kan du välja filen i filhanteraren, högerklicka och välj Egenskaper, välj Behörigheter, gå till Utför, välj ~ vem som helst. Eller skriv “chmod +x src/Hampelmann.py” i dev -konsolen.

Kontrollera om allt är på plats och fast, eller rörligt vid behov. Öppna kommandoraden Dev, ange “src/Hampelmann.py” och starta programmet. Om du flyttar din hand eller fingrar framför avståndssensorn kommer AIY -enheten att be om beställningar och lysdioderna blinkar. Implementerade beställningar är”höger/vänster/händer upp/ner/center”,”dans”,”LED på/av” och”adjö”.

Spela. Flytta handen framför sensorn, tala när du blir tillfrågad och ge enheten lite tid att reagera. Latensen är ganska hög. Crtl+C eller “Goodbye” stoppar programmet.

Du kan ändra filen med Nano eller en annan enkel textredigerare.

Anmärkningar: Tänk på att vissa ord och termer känns igen som ord som börjar med stor bokstav, som "Center" eller "Right Center", som andra inte är, t.ex. 'Rätt upp'. Du måste använda det exakta formuläret som röstigenkänningsmodulen har gett tillbaka för att utlösa vissa åtgärder.

Steg 3: Python -skriptet

Som tidigare nämnts är skriptet baserat på servo_demo.py -skriptet från AIY -röstinstruktionerna, med några tillägg. Den första versionen är filen Hampelmann.py som du hittar bifogad. AngularServo från GPIOZero gör det möjligt att begränsa servos åtgärdsområde och definiera exakt hur långt som ska flyttas. Men jag föredrar den brittiska rösten framför den ursprungliga. Och enheten kan också tala, men inte förstå (?), Engelska, tyska, italienska, franska och spanska. Nedan hittar du Hampelmann2.py -manuset med den brittiska rösten och lite italienska och tyska. Tänk på att du måste göra skripten körbara för att köra dem.

#!/usr/bin/env python3 # Detta skript är en anpassning av servo_demo.py -skriptet för AIY -rösthatten, # optimerad för AIY -hoppa -jackimport aiy.audioimport aiy.cloudspeech -import aiy.voicehat från gpiozero -import -LED från gpiozero import AngularServo från gpiozero import Knapp från tid importera sömn def main (): igenkänare = aiy.cloudspeech.get_recognizer () igenkänna.förvänta_fras ("höger upp") igenkänna.förvänta "fras (" höger ner ") igenkännare.förvänta_fras (" Höger ") Center ') # stora bokstäver finns där avsiktligt igenkännare.förvänta_fras (' vänster upp ') igenkänna.förvänta_fras (' vänster ned ') igenkänna.förvänta_fras (' vänster mitten ') igenkänna.förvänta_fras (' händer upp ') igenkännare.förvänta_fras ('hands down') igenkännare.förvänta_fras ('händer i mitten') igenkänna.förvänta_fras ('dansa') igenkänna.förvänta_fras ('LED på') igenkänna.förvänta_fras ('LED av') igenkänna.förvänta 'fras (' adjö ') aiy.audio.get_recorder (). start () servo0 = AngularServo (26, min_angle = -40, max_angle = 40) # 1: a anslutning eller, GPIO 26 servo2 = AngularServo (13, min_angle = -40, max_angle = 40) # 3: e kontakt, GPIO 13 led0 = LED (24) # LED är anslutna till servo5/GPIO 24 distans = Knapp (5) # avståndssensor ansluten till servo3/GPIO 05 # andra: GPIO 6 vid servo1, 12 vid servo4 aiy.audio.say ("Hej!",) aiy.audio.say ("För att börja, flytta handen nära sensorn",) medan True: led0.on () # lysdioder på utskrift ("För att aktivera röstigenkänning, flytta en hand nära avståndssensorn och tala sedan") utskrift ('Förväntade nyckelord är: händer/vänster/höger upp/ner/centrum') print ('LED on/off, dance and goodbye.') print () distance.wait_for_press () print ('Listening …') aiy.audio.say ("Please give your orders",) led0.blink () # light blinka text = igenkännare.igenkänna () om texten är Ingen: aiy.audio.say ('Tyvärr, jag hörde dig inte.',) else: print ('Du sa "', text, '"') # Låter dig kontrollera systemtolkningen om 'höger upp' i text: skriv ut ('Flyttar servo0 till maximal position') servo0.angle = 35 elif 'höger ner' i text: print ('Flyttande servo0 till lägsta position ') servo0.angle = -35 elif' Right Center 'i text: #correct captions are critical print (' Moving servo0 to middle position ') servo0.angle = 0 elif' left up 'in text: print (' Flytta servo2 till maximal position ') servo2.angle = -35 elif' left down 'i text: print (' Moving servo2 to minimum position ') servo2.angle = 35 elif' left Center 'in text: print (' Moving servo2 to mittläge ') servo2.angle = 0 elif' hands up 'i text: print (' Moving servo2 to maximum position ') servo2.angle = -35 servo0.angle = 35 elif' hands down 'in text: print (' Moving servo2 till lägsta position ') servo2.angle = 35 servo0.angle = -35 elif' hands Center 'i text: tryck (' Flyttar servo2 till mittläge ') servo2.angle = 0 servo0.angle = 0 elif' LED off ' i text: skriva ut ('stänga av extern LED 0') led0.off () elif 'LED tänd' i text: print ('slå på extern LED 0') led0.on () # ljus elif 'dans' i text: print ('spelar nu dans nummer ett') aiy.audio.say ("Tja, jag ska göra mitt bästa!",) led0.on () # lampor tända för i i område (3): servo0.angle = 0 servo2.angle = 0 sleep (1) servo0.angle = 35 servo2.angle = -35 sleep (1) servo0.angle = 0 servo2.angle = -35 sleep (1) servo0.angle = -25 servo2.angle = 0 sleep (1) servo0.angle = 30 servo2.angle = 20 sleep (1) servo0.angle = 0 servo2.angle = 0 led0.off () # light off elif 'adjö' i text: aiy.audio.say ("Goodbye",) aiy.audio.say ('Arrivederci',) aiy.audio.say ('Auf Wiedersehen',) servo0.angle = 0 servo2.angle = 0 led0.off () sleep (3) print ('hejdå!') paus annars: print ('inget sökord känns igen!') aiy.audio.say ("Tyvärr, jag förstod dig inte",) om _name_ == ' _main_ ': main ()

Rekommenderad: