Google’s voice assistant has been around for a while now as well as when Amazon released its Alexa API as well as ported the PaaS Cloud code to the Raspberry Pi 2 it was just a matter of time before everybody else jumped on the quick train to maker kingdom. Google just did it in style.
Few understand that the Google assistant API for the Raspberry Pi 3 has been available for a long time now however when they decided to provide away a free set with the may 2017 problems of MagPi magazine, they made an perception on everyone. unfortunately the world has more makers as well as hackers as well as the number of copies of the magazine are limited.
In this writeup, I design the diy version of the AIY set for everybody else who wishes to talk to a cardboard box. I take a better look at the free kit, take it apart, put it together as well as replace it with diy magic. To make things more convenient, I likewise designed an enclosure that you can 3D print to total the kit. la oss komme i gang.
The Teardown
A shout out to my buddy [Shabaz] in the UK for sending me a copy of the MagPi. The “Google AIY jobs Voice Kit”(henceforth understood as the kit) contains two PCBs as well as a lot of other stuff. The Voice HAT which appears like a Sound-Card-On-A-Diet has extremely restricted number of components. I will detail each section as well as draw the KiCAD schematic for the exact same one by one
Servos
Starting from the left side, there are 6 sets of 3-pin headers that are labelled ‘Servos’. The meant servo manage is made possible utilizing the Raspberry Pi 3’s on-board PWM module. Each set has a GPIO pin, 5V as well as GND connection. The GPIO pin does not link directly to the Raspberry Pi 3’s header however rather with 220Ohm present limiting resistors (labelled R1-R6).
Strømforsyning
Just south of these are gadgets identified Q5 as well as Q6 which I am presuming are part of a power supply choice circuit. correct me if I am wrong however right here is my estimate. The working is simple where Q5 only turns ON when the input voltage is higher than the 5V from the USB port. A simple comparator should do so I am utilizing the LM393 for reference.
EDIT: [Raivsr] explained that this might be the equivalent of the Raspberry Pi ‘Ideal Diode’.
Communication Interfaces
North of the ‘Servo’ headers is J15 labelled I2C that directly link to the Raspberry Pi 3 header. That means these should not be linked to anything with 5V pull-ups. They are not being utilized on the board however we will discuss more on this later. right next to it is the SPI as well as 2-pin UART headers. once again these link directly to the primary header as well as serve only as a breakout.
The DAC as well as EEPROM
A bit lower as well as we show up at the boxed circuit with a 16-Pin QFN marked ‘AKK BDQ’. This is the Maxim MAX98357A(PDF) which is an I2S DAC with a class D amplifier. It drives the speaker directly nevertheless since there is only one output, it can only be mono or integrated stereo. It’s still pretty rocking for the budget.
The fascinating thing is the existence of JP6 which seems to have all the I2S connections from the Maxim MAX98357A as well as a few other choose lines. 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. I am going to do the schematic as well as make it downloadable as well as if you want to provide it a shot let me understand the results. think about it optional homework.
Next to the DAC is an 8-pin SSOP which is a 24C32 (PDF) I2C EEPROM. It’s not linked to the I2C header I talked about earlier however rather to pins 27 as well as 28 of the Raspberry Pi 3 header. According to the Raspberry Pi Foundation’s blog.
“The EEPROM holds the board manufacturer information, GPIO configuration as well as a thing called a ‘device tree‘ fragment – basically a description of the connected hardware that enables Linux to immediately tons the needed drivers.”
So its got some additional sauce that makes things tick as well as I might utilize a BusPirate to Dump the data however I am not sure if Google considers it Intellectual residential or commercial property so I won’t. I have an alternate for it also so checked out on.
Drivers
Moving towards the right, we discover 4 headers marked ‘Drivers’. These are MOSFET circuits for controlling tons such as relays. [Shabaz] did a fantastic task tracing out the elements on this as well as the 3 pins are GPIO, 5V as well as Driver.
The MOSFETs can drive tons of as much as 500mA each thanks to a polyswitch nevertheless the GPIOs are offered for utilize directly as well. tons to be driven should be linked between the pins marked ‘+’ as well as ‘-‘. The header pin on the left is a direct gain aCCESS til GPIOS Header Pins fra Raspberry Pi 3, så vel som skjematisk viser det samme.
Bruk disse til å koble lysdioder eller lignende gadgets for å foreslå driften av reléene eller lastene.
Mikrofon samt knappekoblinger
Mer fascinerende ting skjer på høyre side øverst til høyre med en trykknapp, samt to JST-kontakter. Den 4 pin-kontakten er ment for trykknappen som sitter på toppen av den samlede kabinettet. Den lille PCB-montert trykknappen er kablet parallelt med utvendige bryteren, så vel som kan benyttes på stedet mens du setter opp så vel som testing. Den 5-pin JST er for mikrofonkontakten, så vel som har alle I2S-pinnene.
Mikrofonene
Til slutt er mikrofonbrettet merket 432 qdf21g, så vel som har knowles sph0645lm4h mems digitale mikrofoner som snakker i2s direkte.
Det er det!
Det handler om å bryte opp tårnene, så vel som all info som trengs for å lage ditt eget AIY-kit. KiCAD-skjematiske dataene tilbys for nedlasting fra Github, men jeg forlater deg med den morsomme delen som er designet, så vel som ruting.
Her er litt mat for tanke. Noen deler kan utelates, så vel som størrelsen på hatten kan krympes ned til PI Zero Phat.
For enkelte grunner bruker jeg det forhåndsdefinerte OS-bildet fra Google AIY-siden. Det er en tad kort på 900 MB, så vel som kan lastes ned direkte fra Goolge (stor fil).
Legg til en avstengningsknapp
Du merket mest sannsynlig den lille gyldne knappen ved siden av den store miljøvennlige knappen i bildet ovenfor, så vel som det er den aller første delen av øvelsen. Det er en avstengningsknapp så vel som legges til siden jeg ikke vil ssh i boksen hver gang jeg vil slå den av trygt.
Få knappen du vil bruke, så vel som å legge til to ledninger med kvinnelige overskrifter. Denne biten fungerer selv uten stemmehatten så vær så snill å prøve den ut. Neste hvis du har en voice hat, legg til mannlige overskrifter til I2C-delen. Du kan velge hvilken som helst type andre pins, så vel som det vil fortsatt fungere. Lenk på knappen til SDA eller GPIO 2, samt starte PI 3 opp.
Åpne din favoritt tekstredigerer, så vel som kopi-lim inn den som overholder koden i den.
1
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
1. 3
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#! / bin / python
# Enkelt skript for å slå av Raspberry Pi ved å trykke på en knapp.
# av Inderpreet Singh
Importer rpi.gpio som gpio
Importtid
Importer Os.
# Bruk Broadcom Soc Pin-nummerene
# Konfigurasjon PIN-koden med innvendige pullups aktiveres, samt PIN-kode i lesemodus.
Gpio.SetMode (gpio.bcm)
Gpio.setup (02, gpio.in, pull_up_down = gpio.pud_up)
# Vår funksjon på hva du skal gjøre når knappen er trykket
Def Shutdown (kanal):
os.system (“sudo shutdown -h nå”)
# Legg til vår funksjon for å utføre når knappen trykket på hendelsen skjer
Gpio.add_event_dect (02, gpio.falling, callback = shutdown, bouncetime = 2000)
# vent nå!
Mens 1:
Time.Sleep (1)
Lagre dataene i din / hjemme / PI-mappen som shutdown.py
I en terminal type de som overholder kommandoer
1
chmod + x shutdown.py python shutdown.py & amp;
Dette bør gjøre skriptet kjøre i bakgrunnen. Hvis du trykker på knappen, skal PI-enheten slås ned. Du kan velge å legge til en forsinkelse ved å uncommenting Sleep Phone-anropet i eksempelkoden. Alternativt kan du også modifisere GPIoen ved å erstatte riktig nummer i Python-skriptet.
Kul! Nå kan vi slå av ved å trykke på en knapp.
Legg til et USB-støykort
Den åpenbare alternativet til Google Aiy Voice Hat er å benytte alle typer USB-støykort som tilbys fra en rekke kilder. Den enkleste metoden er å bare plugge en i, så vel som å konfigurere programvaren for å utnytte det i stedet for hatten, men når det er installert to drivere, er Python-skriptbehovet for å bli omkonfigurert for å gjøre det sømløse.
Når du kobler deg til lydkortet, er det aller første å gjøre, inspisere hvis det ble anerkjent eller ikke. I terminalvinduet skriver du inn:
1
APLAY – L.
‘Aplay’ benyttes av skriptene for å snakke ut svarene, så du bør kunne se to støyenheter. Merk at ombordstøyen er deaktivert fra CONFIG.TXT (se Gadget Tree Reference) og kan aktiveres hvis du planlegger å bruke en USB-mikrofon i stedet for støykortet. Windows-utgangen skal se ut som bildet nedenfor.
Jeg vil gjerne sette USB-støykortet som standard lyd, så vel som at vi krever at vi har tilpasset /etc/aSound.conf.
1
sudo nano /etc/asound.conf.
Slett det eksisterende materialet, samt erstatt det med tekst som vist nedenfor. Selv om dette setter standardinngangen, samt utdata-gadgeten til USB-enheten, er det enda et skritt for å få ting til å fungere. (For å gå ut av nano, bruk Ctrl + X, Y, Retur)
Neste redigerer vi til Audio.py Data som håndterer all lydspill, samt opptak av funksjonalitet. For det, åpne dataene i din favoritt tekstredigerer; min er nano:
1
sudo nano /home/pi/voice-recognizer-raspi/src/audio.py.
Rull ned til den delen somStater ‘Arecord’ som er i __init__-funksjonen. Tydeligvis er det en hengiven prosess som holder opptakeren som kjører som jeg vil vise i videoen. For nå vil vi redigere argumentene for å sikre at den benytter USB-kortet for å fange lyd i stedet for den opprinnelige stemmehatten. En enkel justering for å bruke ‘-d’, ‘sysdefault: Card = 1’ bør være tilstrekkelig som vist på bildet nedenfor.
En lignende modifikasjon er nødvendig for at APLAY-funksjonen er litt lenger i koden.
Med det er hacken fullført! Dobbeltklikk på ‘Test_audio.py’ for å inspisere om lyd fungerer. Vi mangler bare en del av puslespillet skjønt – “Lytt” -knappen! Så bare kabel en trykknapp mellom GPIO23, så vel som den tilstøtende bakken, så vel som deretter kjøre ‘SRC / Main.py’ for å begynne å spille med en DIY Google AIY.
En demo
En liten video demo av den foreslåtte hack med et USB-støykort, utenfor høyttaler samt en billig mikrofon.
Et kabinett
3D-trykte kabinettet er designet i Fusion360, samt STL-dataene er en del av Github-depotet. Du kan bruke nøyaktig samme kabinett for en rekke jobber siden det er standoffs for Raspberry Pi, så vel som portene blir brakt ut for enkelhets skyld. Det er mye område inne for å legge til hatter samt ekstra kretser.
Jeg gjorde kabinettet delt fra midten for å sikre at det blir enkelt å få tilgang til GPIOene. Hele greia vil trykke i form, inkludert toppdekselet som har hull for tre knapper. Jeg selv om det ville være fornuftig å ha mindre knapper siden resultatet forventes å være tøffere enn papp. Det er rikelig med område for høyttaleren hvis du velger å inkludere en som er noe annerledes.
Jeg har ikke hatt mulighet til å skrive ut en ut, så vel som vil oppdatere denne siden når det er noen form for utvikling i emnet. her er gjengitt av designen.
Sammendrag
Google har allerede hatt sine APIer tilgjengelig for publikum, men det forhåndsdefinerte Raspbian-bildet vil hjelpe mye folk å komme i gang. Jeg har forsøkt å designe grunnlaget for støykortet i tillegg til å gi planene for et tilsvarende kort hvis du vil lage en. For andre er valget om å bruke et utenfor støykort forklart, så vel som demonstrert, så vel som jeg håper det påvirker folk til å virkelig komme inn i slike prosjekter. Verden trenger mer AIY så vel som her er din mulighet til å komme i gang, så hva venter du på? få hacking.