Arduino Audio Input (5 / 8 steg)
Steg 5: Enkel Analog i
Enkla ljud i
av Amanda Ghassaei
Sept 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
int incomingAudio;
void setup() {
}
void loop() {
incomingAudio = analogRead (A0); //read input från A0
göra saker med variabeln "incomingAudio"
}
I bilderna ovan ställa jag upp en riktigt enkel 8-bitars digital till analog omvandlare (Läs mer om det här, eller kolla in fig 4) så att jag kan visualisera datapunkterna som Arduino lagra som variabeln "incomingAudio" och se hur nära det var att den ursprungliga signalen. Du kan se fig 2 (zoomade i beskåda av fig 1) att Arduino tar ett prov varje 125us från A0. Vi kan beräkna samplingens frekvens enligt följande:
samplingsfrekvens = 1/125us = 1/0.000125s = 8000 hz
För att ge dig en jämförelse, är normala ljud provtagning minst 40kHz. Om en samplingsfrekvens på 8kHz eller mindre är bra nog för dina ändamål bör du nog gå vidare och använda analogRead() för att mäta din signal, eftersom det håller saker mycket enkel. Du kan se i fig 1 att det faktiskt gör ett ganska bra jobb med att spåra väg av den inkommande 360hz signalen. För att få över 8 kHz, har vi till förbifartsleden den analoga Läs funktionen. Det kan låta skrämmande, men det är faktiskt inte så illa, bara att kopiera några setup() kod som jag skrivit i nästa steg.
Jag vill också påpeka beteendet för Arduino som svar på en signal som stiger över 5V och doppar under 0V. I fig 3 kan du se hur Arduino klipp den inkommande signalen så att den alltid avgränsas av 0 och 5V. Detta orsakar toppar i topparna och Dalarna att få tillplattad undersida. I steg 8 ska jag prata några lätt mer om detta och hur du ställer in en klippning indikator för att låta dig veta för att sänka förstärkaren.
Några anteckningar om den 8-bitars digital till analog omvandlare (DAC): Jag använde kommandot "PORTD =" Skicka ett värde mellan 0 och 255 från Arduino och i DAC där det omvandlas tillbaka till en spänning mellan 0 och 5V. Koden jag använde återfinns nedan. Jag har skrivit en helt instructable om den 8-bitars DAC här.
Enkla ljud i w utgång till 8 bit DAC
av Amanda Ghassaei
Sept 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
int incomingAudio;
void setup() {
för (byte jag = 0; jag < 8; i ++) {
pinMode (i, matas); //set digital stift 0-7 som resultat (DAC)
}
}
void loop() {
incomingAudio = analogRead (A0); //read spänning på A0
incomingAudio = (incomingAudio + 1) / 4-1; //scale från 10 bitars (0-1023) till 8 bitar (0-255)
om (incomingAudio < 0) {//deal med negativa tal
incomingAudio = 0;
}
PORTD = incomingAudio;
}