Arduino frekvens identifiering (2 / 4 steg)

Steg 2: Mitten av punkt upptäckt



Bestämde jag mig för att jag skulle få mer exakta resultat upptäcka frekvensen av en våg av att hålla reda på tider Vinka korsar 2.5V istället för att räkna toppar. I det sista steget jag var i huvudsak att hitta platser på våg där lutningen = 0 och räknar tiden mellan dessa händelser. Emellertid, när lutningen = 0, buller på signalen är tillräckligt för att ändra riktningen på lutningen och skeva mina resultat. När vågen passerar 2.5V, har det oftast en sluttning med en magnitud större än 0, så jag inte skulle behöva oroa sig för effekterna av buller så mycket.

De viktiga ändringarna i koden återges nedan. Eftersom jag är att mäta den inkommande signalen från A0 med 8 bitar precision (0-255), ger mittpunkten (2.5V) ett värde på 127. Alla följande kod sker i ADC avbrottet (avbryter varje gång en ny analog i värde är redo från A0)

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

Fig 1 visar pulsen utgång i blått och den inkommande signalen till A0 i gult. Märker hur varje gång signalen passerar 2.5V, pulsen utgång växlar. Produktionen går särskilt hög när signalen passerar 2.5V med en positiv lutning och signalen går låg när signalen passerar 2.5V med en negativ lutning. Figur 2 visar puls utgången i blå och ljudsignalen innan det har varit + 2.5V DC offset i gult. Kom ihåg att denna DC offset var nödvändigt att få ljudsignalen i intervallet 0-5V för Arduinos analoga ingångsstift, men normalt ljudsignalen svänga runt 0V. I figur 2 visas hur pulsen utgångar växla motsvarar den tid när audiosignalen korsar 0V. Figur 3 visar en godtycklig vågform i gult (igen innan DC offset) och pulsen utgång i blått. Igen, pulsen växlar varje gång den gula signalen korsar 0V, märker hur uppförandet av pulsen utgång med godtyckliga vågformen är mer komplex än med sinusvåg.

Påvisande av mittpunkten korsning 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;

data storage variabler
byte newData = 0;
byte prevData = 0;

void setup() {

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

(CLI); //diable 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 (prevData < 127 & & newData > = 127) {//if ökar och passage mittpunkten
PORTB | = B00010000; //set stift 12 hög
}
annars om (prevData > 127 & & newData < = 127) {//if minskar och passage mittpunkten
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 off clippng 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...