Arduino frekvens identifiering (1 / 4 steg)

Steg 1: Påvisande av Signal lutning



Först ville jag experimentera med peak detection, så jag skrev en bit kod (nedan) som matar ut en hög signal när inkommande ljudsignalen har en positiv lutning, och utgångar en låg signal när inkommande ljudsignalen har en negativ lutning. För en enkel sinuskurva ger detta en signal med samma frekvens som sinusvåg och en månadskapacitet på 50% (en fyrkantsvåg). Detta sätt topparna ligger alltid där pulse wave växlar mellan dess höga och låga.

Den viktiga delen av koden återges nedan. Alla av denna kod sker i ADC avbryta (avbrott och körs varje gång en ny analog i värde är redo från A0, mer info om vilka avbrott är och varför vi använder dem kan hittas här)

prevData = newData; //store tidigare värde
newData = ADCH; //get värde från A0
om (newData > prevData) {//if positiv lutning
PORTB | = B00010000; //set stift 12 hög
}
annars om (newData < prevData) {om negativ lutning
PORTB & = B11101111; //set stift 12 låg
}

Jag noterar här att i denna tutorial jag använda direkt port manipulation att stänga av och på den output pin (stift 12) av Arduino. Jag gjorde detta eftersom port manipulation är ett mycket snabbare sätt att ta itu med den Arduino stift än kommandot digitalWrite(). Eftersom jag var tvungen att sätta alla koden ovan inuti ett avbrott rutin som gick vid 38,5 kHz, jag behövde koden för att vara så effektiv som möjligt. Du kan läsa mer om port manipulation på Arduino webbplats, eller ser de kommentarer som jag har skrivit ovan att förstå vad varje rad gör. Du märker också i koden nedan som jag använt några okända kommandon i funktionen setup() så att jag kunde få den Arduino analog ingång till provet på en hög frekvens. Mer information om som kan hittas i min Arduino Audio Input tutorial.

Fig 1 visar puls utgången i blått och sinusvåg i gult på ett oscilloskop. Märker hur pulsen kopplade växlar varje gång sinusvåg når ett maximum eller minimum. Figur 2 visar pulsen utgång i blått för en godtycklig vågform i gult. Notera här hur pulse wave tar på en oregelbunden intermittens eftersom den inkommande signalen (gul) är mycket mer komplicerad än en sinusvåg.

Påvisande av signal sluttning med 38,5 kHz samplingsfrekvens och avbryter
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.
*
*/

Clipping indicator variabler
booleska klippning = 0;

lagring variabler
byte newData = 0;
byte prevData = 0;

void setup() {

pinMode (13, OUTPUT); //led indikator pin
pinMode (12, OUTPUT); //slope indikator

(CLI); //disable avbrott

Ställ in kontinuerlig provtagning av analoga pin 0

Rensa ADCSRA och ADCSRB register
ADCSRA = 0;
ADCSRB = 0;

ADMUX | = (1 << REFS0); ange referens spänning
ADMUX | = (1 << ADLAR); Vänsterjustera ADC värde - så vi kan läsa högst 8 bitar från ADCH register endast

ADCSRA | = (1 << ADPS2) | (1 << ADPS0); ställa in ADC klockan med 32 prescaler - 16mHz/32 = 500 kHz
ADCSRA | = (1 << ADATE); enabble automatisk utlösare
ADCSRA | = (1 << Ebba Grön); Aktivera avbrott när mätningen är klar
ADCSRA | = (1 << ADEN); Aktivera ADC
ADCSRA | = (1 << ADSC); Starta ADC mätningar

SEI (); //enable avbrott
}

ISR(ADC_vect) {//when nya ADC värdet redo

prevData = newData; //store tidigare värde
newData = ADCH; //get värde från A0
om (newData > prevData) {//if ökar
PORTB | = B00010000; //set stift 12 hög
}
annars om (newData < prevData) {
PORTB & = B11101111; //set stift 12 låg
}

om (newData == 0 || newData == 1023) {//if klippning
PORTB | = B00100000; //set stift 13 hög-sväng på klippning indikator ledde
klippningen = 1; //currently klippning
}
}

void loop() {
om (klippning) {//if för närvarande klippning
PORTB & = B11011111; //turn av klippning indikator ledde
klippningen = 0;
}

Delay(100);
}

Se Steg
Relaterade Ämnen

Pålitlig frekvens identifiering med hjälp av DSP tekniker

korrekt frekvens upptäckt är viktigt för många projekt som gitarr/Piano Tuners, vibrationer analysatorer, hjärtrytm bildskärmar, MEMs Sensor analys och laboratorieutrustning.Det har varit många fina exempel på projekt som försöker lösa detta problem,...

Arduino frekvens synthesizer med 160MHz Si5351

Detta Instructable beskriver konstruktion och drift av en fristående frekvens synt lämpliga för användning som en signalgenerator, eller för användning som den lokala oscillatorn i ett Amatörmässigt musikband sändare eller mottagare.Min prototyp bygg...

Arduino gitarr Tuner

Bygg din egen gitarr tuner använder Arduino! Jag beslöt att göra detta eftersom jag ville experimentera med ljudingång och frekvens identifiering. Jag använde Amanda Ghassaei metod för Arduino frekvensen upptäckt för att få frekvens avläsningar med A...

Arduino Pitch upptäckt algoritm (med AMDF)

Senaste uppdatering: 16 januari 2016 (nyligen lagt till en förbättrad matlab-kod (step7) med prover och massor av anteckningar)Förord: Detta Instructable är skrivna på en att visa hur jag analyserat, testat, genomfört och optimerad en algoritm. Även...

Rita ut Data från Arduino

Arduino inte har mycket i form av debug och analys förmåga inbyggt, så det kan vara mycket användbart att ha en anläggning till tomt data som skickas från Arduino över serieporten.Det finns flera sätt att göra det inklusive bearbetning, Python + Matp...

Arduino IR Remote mottagare

jag har varit framgångsrika i programmering min Arduino att identifiera grupper av siffror från min IR-fjärrkontroll.Med detta program kan du styra 4 lysdioder över en IR-fjärrkontroll.Steg 1: delar Behöver du:-En TV-IR-fjärr (jag använde en från sam...

Frekvens detektor PIC 12F683 Processor med

detta projekt beskriver maskin- och programvara har jag utvecklat som låter en liten 8 bitar PIC mikroprocessor kan fungera som en enda frekvens detektor eller tonen.En sådan krets kan användas för att påvisa förekomsten av en viss frekvens inom en a...

Arduino kompatibel Luna Mod Looper

The Luna Mod Looper, i princip kan du registrera en sekvens med en potentiometer för att styra tonhöjden för noteringen, och sedan spela upp den tillbaka och lägga till effekter. Ända sedan jag såg videor av Luna Mod som spelas, ville jag bygga min e...

Arduino Mini-Shields

Detta är en uppsättning av enkel, liten formfaktor, mini-sköldar som jag skapade nästan av en slump. När jag gjorde mer och mer av dem, insåg jag att de kan vara riktigt användbara. Det som började som ett sätt att använda vissa reservdelar, förvandl...

Komma igång med RFID

Har du någonsin undrat hur ditt ID tag fungerar?I denna handledning kommer vi att kunna visa dig hur man läsa en RFID -knappen, eller tag, om det hålls upp mot ID-12 RFID-läsare eller någon 125 KHz modul. Även är detta projekt ett enkelt och roligt s...

Adafruit Motor sköld användning

Hej vänner, jag nämner robotiserade applikationer i motordrift, en av de mest använda kort adafruit L293d företag som utvecklat den integrerad bar från Adafruit motor sköld motor förarkort. Huvudskälet tillhandahålls för inställningen på grund av ans...

Ihållande Vision småsak. POV dekoration.

Ihållande Vision småsak. POV dekorationDet är tiden på året att få trädet och dekorera med alla underbara ljus, glitter och grannlåt. Och detta projekt handlar om grannlåt, varje gång jag satte dekorationer på ett träd jag inte kan hjälpa men avveckl...

RFID-Emulator - hur man klona RFID-kort, Tag...

Där idén kom.Idén att skapa RFID-Emulator kommer från idén att skapa en miljö för att utveckla och experimentera med olika RFID-tillämpningar. Denna artikel skapades med målet att ingenjörer amatör entusiaster och fans av elektronik som gillar att ex...

Glödande färgskiftande gitarr

I kungariket av rock and roll är det viktigt att ställa sig själv isär. Med miljontals människor i denna värld som kan spela gitarr, kommer spelar enkelt väl bara inte att klippa den. Du behöver något extra att stiga upp som en Gud som rock. Anser de...

Power System frekvens bestämning genom att använda Arduino

IntroduktionNätström distribueras allmänt på 50 eller 60 Hz.This-projektet syftar till att "Beräkna hur levande ac power system ofta använda Arduino" kit och liten transformator ckt setup. Detta projekt är byggd av vårt team caféer, Venkat, Abhi...

Arduino - AC Main frekvens Monitor

Hej, detta är min första gången, så snälla, bli mjuk!Varning: Arbeta med AC-spänning kan vara dödliga. Om du inte vet vad du gör vänligen försök inte detta.Jag har haft i åtanke utveckla en monitor system, för min reservkraft, bestående av 4 6V batte...

Arduioscillo-Arduino VoltMeter/frekvens Generator

vad gjorde jag? Syftet med detta projekt är att skapa en prisvärd och praktisk voltmeter/frekvens generator av material liggande på din arbetsbänk. Denna länk tar dig till min youtube video förklarar enheten http://www.youtube.com/watch?v=dkgbP2kvnME...

Arduino gränssnitt TSL230R ljus frekvens Converter

Syftet med denna sida är att visa hur deTSL239R ljus till frekvensomriktare. Enheten utgångar en 50% duty fyrkantsvåg vars frekvens är proportionell mot ljusintensiteten. Inte bara kan TSL230R användas för att upptäcka ljusintensiteten justera säger...

OBJEKTET identifiering och spårning med hjälp av OPENCV, VISUAL STUDIO C ++ 2010 och ARDUINO

IntroduktionI detta projekt skickar Webcam video ramar till Visual Studio C ++ som innehåller öppen CV biblioteket på vår dator.Om Visual Studio C ++ programmet upptäcker bilden av objektet från webbkameran och sedan beräknas de co koordinaterna X, Y...