Google’s Voice Assistant is al een tijdje al even als wanneer Amazon zijn Alexa API heeft uitgebracht en de PAAS-cloudcode naar de Raspberry PI 2 heeft geport een kwestie van tijd voordat iedereen anders sprong op de snelle trein naar Maker Kingdom. Google heeft het gewoon in stijl gedaan.
Weinigen begrijpen dat de Google Assistant API voor de Raspberry PI 3 al lang beschikbaar is geweest, maar toen ze besloten om een gratis set te bieden met de problemen van mei 2017 van MAGPI Magazine, maakten ze een perceptie op iedereen. Helaas heeft de wereld meer makers en hackers en het aantal exemplaren van het tijdschrift zijn beperkt.
In deze write-up ontwerp ik de DIY-versie van de AIY-set voor iedereen die wenst te praten met een kartonnen doos. Ik heb de gratis kit betere kijk, neem het uit, doe het samen en vervang het door DIY-magie. Om dingen handiger te maken, ontwierp ik ook een behuizing die je kunt afdrukken naar het totaal van de kit. laten we beginnen.
Het scheur
Een schreeuw naar mijn buddy [Shabaz] in het Verenigd Koninkrijk voor het sturen van een kopie van de maden. De “Google AIY JOBS-spraakkit” (voortaan begrepen als de kit) bevat twee PCB’s evenals een heleboel andere dingen. De spraakhoed die lijkt op een geluidskaart-on-a-dieet heeft een extreem beperkt aantal componenten. Ik zal elke sectie detailleren en de Kicad Schematic tonen voor exact dezelfde
Servos
Beginnend vanaf de linkerkant zijn er 6 sets 3-pins headers die ‘servo’s’ zijn gelabeld. Het betekende Servo-beheren wordt mogelijk gemaakt met behulp van de PWM-module van de Raspberry PI 3. Elke set heeft een GPIO-pin, 5V evenals GND-verbinding. De GPIO-pincode linkt echter niet rechtstreeks naar de header van de Raspberry PI 3, maar eerder met 220ohm aanwezige beperkende weerstanden (gelabeld R1-R6).
Stroomvoorziening
Net ten zuiden van deze worden gadgets Q5 geïdentificeerd, evenals Q6 die ik veronderstelt, maakt deel uit van een keuzecircuit voor voeding. Corrigeer me als ik ongelijk heb, maar hier is mijn schatting. Het werk is eenvoudig wanneer Q5 alleen ingeschakeld is wanneer de ingangsspanning hoger is dan de 5V van de USB-poort. Een eenvoudige comparator moet dit doen, ik ben gebruik van de LM393 voor referentie.
EDIT: [RAIVSR] Uitgelegd dat dit het equivalent is van de Raspberry PI ‘Ideal Diode’.
Communicatie-interfaces
Noorden van de ‘Servo’-headers is J15 met het label I2c dat rechtstreeks linkt naar de Raspberry PI 3-header. Dat betekent dat deze niet aan iets zijn gekoppeld met 5V-pull-ups. Ze worden niet gebruikt op het bord, maar we zullen hier later meer over bespreken. Goed naast het is de SPI evenals 2-pins uart-headers. Nogmaals deze link rechtstreeks naar de primaire koptekst en dienen alleen als een breakout.
De DAC evenals EEPROM
Zowel een beetje lager als we verschijnen op het bokscircuit met een 16-pins QFN gemarkeerd ‘AKK BDQ’. Dit is de Maxim MAX98357A (PDF) die een I2S-DAC is met een klasse D-versterker. Het drijft de luidspreker niettemin, omdat er slechts één uitgang is, het kan alleen mono of geïntegreerde stereo zijn. Het is nog steeds behoorlijk schommelend voor het budget.
Het fascinerende ding is het bestaan van JP6, wat alle I2S-verbindingen van de Maxim MAX98357a als een paar andere kiezen voor lijnen lijkt te hebben. integrated with the two vias that link to the second speaker output, you might potentially in shape one more Maxim MAX98357A breakout board on top to get stereo sound. Ik ga het schematisch doen en maakt het ook te downloaden en als je het een kans wilt geven, laat me de resultaten begrijpen. Denk aan het optioneel huiswerk.
Next to the DAC is an 8-pin SSOP which is a 24C32 (PDF) I2C EEPROM. Het is niet gekoppeld aan de I2C-kop van de I2C die ik eerder heb gesproken, maar eerder tot pins 27 en 28 van de Raspberry PI 3-header. Volgens de blog van de Raspberry PI Foundation.
“De EEPROM heeft de Board Fabrikant-informatie, GPIO-configuratie, evenals een ding dat een ‘apparaatboom’ fragment wordt genoemd – in feite een beschrijving van de aangesloten hardware waarmee Linux de benodigde stuurprogramma’s onmiddellijk ton.”
Dus het heeft een aantal extra saus die het aan het vinken doet, evenals ik kan gebruiken om een buspiraat te gebruiken om de gegevens te dumpen, maar ik weet niet zeker of Google het intellectueel residentiële of commerciële eigendommen beschouwt, dus ik zal het niet doen. Ik heb een alternatief voor het ook zo gecontroleerd.
Drivers
Als we naar rechts bewegen, ontdekken we 4 headers gemarkeerde ‘stuurprogramma’s’. Dit zijn MOSFET-circuits voor het besturen van tonnen zoals relais. [Shabaz] deed een fantastische taak die de elementen op deze en de 3 pins is GPIO, 5V evenals bestuurder.
De MOSFET’s kunnen zowel een ton van maximaal 500 mA rijden dankzij een polyswitch, toch de GPIO’s worden aangeboden voor het gebruik ervan ook. Tonnen die moeten worden aangedreven, moet worden gekoppeld tussen de pinnen gemarkeerd ‘+’ evenals ‘-‘. De koppen aan de linkerkant is een directe winst access to to to gPIOS header pinnen van de Raspberry PI 3 evenals de schematische shows hetzelfde.
Gebruik deze om LED’s of soortgelijke gadgets te koppelen om de werking van de relais of belastingen voor te stellen.
Microfoon evenals knopaansluitingen
Er is meer fascinerende dingen aan de rechterkant van de rechterkant met een drukknop en twee JST-connectoren. De 4-pins-connector is bedoeld voor de drukknop die bovenop de geassembleerde behuizing zit. De kleine PCB-gemonteerde drukknop is parallel met de buitenschakelaar en kan worden gebruikt op de locatie tijdens het instellen en testen. De 5-pins JST is voor de microfoonconnector en heeft alle I2S-pinnen.
De microfoons
Ten slotte is het microfoonbord gemarkeerd 432 QDF21G, evenals heeft SPH0645LM4H MEMS digitale microfoons die I2S rechtstreeks praten.
Dat is het!
DAT OVER WERKEN VAN HET TEACKOWN EN ALLE INFO NODIGEN OM UW EIGEN AIY KIT TE MAKEN. De Kicad-schematische gegevens worden aangeboden voor download van Github, toch laat ik je achter met het leuke deel dat het ontwerp is, evenals routing.
Hier is wat voedsel voor het denken. Sommige delen kunnen worden weggelaten en de grootte van de hoed kan worden gekrompen naar de PI Zero Phat.
Om eenvoudige redenen ben ik gebruik van de vooraf geconfigureerde OS-foto van de Google Aiy-pagina. Het is een tad kort van 900 MB en kan direct worden gedownload van Goolge (enorme bestand).
Voeg een shutdown-knop toe
Je hebt waarschijnlijk de kleine gouden knop opgemerkt naast de enorme milieuvriendelijke knop in de bovenstaande afbeelding, evenals dat het allereerste deel van de oefening is. Het is ook een shutdown-knop als wordt toegevoegd omdat ik niet elke keer dat ik het veilig wil uitschakelen.
Download de knop die u wilt gebruiken en voegt twee draden toe met vrouwelijke headers. Dit bit werkt zelfs zonder de spraakmuts, dus voel je vrij om het uit te proberen. Voeg vervolgens een spraakmuts toe, voeg dan mannelijke headers toe aan het I2C-gedeelte. U kunt elk type andere pinnen selecteren, evenals het nog steeds werkt. Link de knop aan de SDA- of GPIO 2 evenals de PI 3-omhoog.
Open je favoriete tekstredacteur en kopieerpijp de naleving van de code erin.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#! / bin / python
# Eenvoudig script voor het afsluiten van de Raspberry PI aan de druk op de knop.
# door inderpreet singh
import rpi.gpio als GPIO
invoertijd
import OS
# Gebruik de BROADCOM SOC PIN-nummers
# Configuratie De pincode met interieurpullups ingeschakeld en pincode in de leesmodus.
Gpio.setmode (gpio.bcm)
Gpio.setup (02, gpio.in, pull_up_down = gpio.pud_up)
# Onze functie over wat te doen wanneer op de knop wordt gedrukt
Def shutdown (kanaal):
os.system (& quot; sudo shutdown -h nu ”
# Voeg onze functie toe om uit te voeren wanneer de knop van de knop geperst gebeurt
Gpio.add_event_detect (02, gpio.falling, callback = shutdown, bouncetime = 2000)
# nu wachten!
terwijl 1:
Time.Sleep (1)
Sla de gegevens op in uw / Home / PI-map als shutdown.py
In een terminal type het naleven van commando’s
1
chmod + x shutdown.py python shutdown.py & amp;
Dit moet het script op de achtergrond lopen. Als u op de knop drukt, moet de PI onmiddellijk uitschakelen. U kunt ervoor kiezen om een vertraging toe te voegen door het Sleep Phone-oproep in de voorbeeldcode te voegen. U kunt ook eveneens de GPIO wijzigen door het juiste nummer in het Python-script te vervangen.
Koel! Nu kunnen we afsluiten door op een knop te drukken.
Voeg een USB-ruiskaart toe
Het voor de hand liggende alternatief voor de Google Aiy Voice Hat is om elk type USB-ruiskaarten te gebruiken dat vanaf een aantal bronnen wordt aangeboden. De eenvoudigste methode is om er één in te pluggen en de softwaretoepassing te configureren om dat te gebruiken in plaats van de hoed, maar wanneer er twee stuurprogramma’s zijn geïnstalleerd, de eis van Python Scripts om opnieuw te worden geconfigureerd om ze naadloos te maken.
Zodra u de geluidskaart aansluit, is het allereerste ding om te doen als het is erkend of niet. Typ in het terminalvenster in:
1
aplay – l
‘APLAY’ wordt door de scripts gebruikt om de antwoorden uit te spreken, zodat u twee ruisapparaten moet kunnen zien. Merk op dat de ingebouwde ruis is uitgeschakeld vanuit de config.txt (zie Gadget Tree-referentie) en kan worden ingeschakeld als u van plan bent om een USB-microfoon te gebruiken in plaats van de geluidskaart. De Windows-uitvoer moet eruit zien als de onderstaande afbeelding.
Ik wil graag de USB-geluidskaart instellen als de standaard audio, evenals voor die vereisen om de /etc/asound.conf aan te passen.
1
sudo nano /etc/astound.conf
Verwijder het bestaande materiaal en vervang deze door tekst zoals hieronder wordt weergegeven. Hoewel dit de standaardinvoer instelt, evenals uitvoergadget naar het USB-apparaat, is er nog een stap om dingen te laten werken. (Om NANO te verlaten, maakt u gebruik van CTRL + X, Y, Return)
Vervolgens bewerken we tot audio.py-gegevens die alle audio-afspelen en opnamefunctionaliteit verwerken. Open daarvoor de gegevens in uw favoriete teksteditor; De mijne is nano:
1
sudo nano /home/pi/voice-recognizer-raspi/src/audio.py
Scroll naar beneden naar het deel datStaten ‘Arecord’ die zich in de __init__-functie bevindt. Vanzelfsprekend is er een toegewijde proces dat de recorder die wordt uitgevoerd terwijl ik in de video zal laten zien. Voorlopig willen we de argumenten bewerken om ervoor te zorgen dat het de USB-kaart gebruikt om audio te vangen in plaats van de oorspronkelijke spraakmuts. Een eenvoudige aanpassing om ‘-d’, ‘Sysdefault: Card = 1’ te gebruiken, moet voldoende zijn zoals getoond in de onderstaande afbeelding.
Een vergelijkbare modificatie is behoefte aan de APLAY-functie een beetje verder in de code.
Daarmee is de hack compleet! Dubbelklik op ‘Test_Audio.py’ om te inspecteren als audio werkt. We missen slechts één deel van de puzzel – de knop ‘Luister’! Dus gewoon een drukknop tussen GPIO23 en de aangrenzende grondpen en vervolgens ‘SRC / Main.py’ uitvoeren om te beginnen met spelen met een DIY Google Aiy.
Een demo
Een kleine videodemo van de voorgestelde hack met een USB-geluidskaart, buitenspreker en een goedkope microfoon.
Een behuizing
De 3D-gedrukte behuizing is ontworpen in Fusion360 evenals de STL-gegevens maken deel uit van de GitHub-repository. U kunt de exact dezelfde behuizing gebruiken voor een aantal banen, omdat er afzeggingen zijn voor de Raspberry PI, evenals de havens worden gebracht voor het gemak. Er is een groot deel van de binnenkant om hoeden en extra circuits toe te voegen.
Ik heb de behuizing uitgesplitst van het midden om ervoor te zorgen dat het eenvoudig wordt om toegang te krijgen tot de GPIO’s. Het geheel zal in de vorm indrukken, inclusief de bovenste dop die gaten heeft voor drie knoppen. Ik zou het logisch zijn om kleinere knoppen te hebben, omdat het resultaat naar verwachting moeilijker is dan karton. Er is voldoende ruimte voor de spreker als u selecteert om er een op te nemen die enigszins anders is.
Ik heb geen mogelijkheid gehad om één uit te drukken, evenals zal deze pagina bijwerken wanneer er een vorm van ontwikkeling in het onderwerp is. Hier is de weergave van het ontwerp.
Overzicht
Google heeft al hun API’s beschikbaar gehad voor het publiek, maar de vooraf geconfigureerde Raspbian-foto zal een groot aantal mensen helpen om aan de slag te gaan. Ik heb geprobeerd de fundamenten van de geluidskaart te ontwerpen naast de plannen voor een gelijkwaardige kaart als je er een wilt maken. Voor anderen wordt de keuze om een externe geluidskaart te gebruiken, net zo goed uitgelegd, evenals gedemonstreerd en ik hoop dat het van invloed is op mensen om echt in dergelijke projecten te komen. De wereld heeft meer nodig en precies hier is je mogelijkheid om aan de slag te gaan, dus waar wacht je nog op? Krijg hacking.