Arduino Timer avbryter (3 / 6 steg)

Steg 3: Exempel 1: cykel hastighetsmätare




i detta exempel jag gjorde en arduino powered cykel hastighetsmätare. Det fungerar genom att fästa en magnet till hjulet och mäta hur lång tid det tar för att passera genom en magnetisk strömbrytare monterad på den ram - tiden för ett fullt varv av hjulet.

Jag ställa in timer 1 avbryta varje ms (frekvens 1 kHz) för att mäta magnetisk växeln. Om magneten är förbi växeln, signalen från växeln är hög och variabeln "tid" får sättas till noll. Om magneten inte är nära får switch "tiden" ökas med 1. Detta sätt "tid" är egentligen bara ett mått på hur lång tid i millisekunder som har gått sedan magneten senast förbi växeln magnetiska. Denna information används senare i koden för att beräkna rpm och mph på cykeln.

Här är lite kod som sätter upp timer1 för 1kHz avbryter

(CLI); //stop avbrott
Ställ in timer1 avbrott vid 1kHz
TCCR1A = 0; / / Ställ in hela TCCR1A register till 0
TCCR1B = 0; / / samma för TCCR1B
TCNT1 = 0; //initialize värde till 0
ställa in timer räknas 1khz steg
OCR1A = 1999. / / = (16 * 10 ^ 6) / (1000 * 8) - 1
var tvungen att använda 16-bitars timer1 för denna bc 1999 > 255, men skulle kunna byta till timers 0 eller 2 med större prescaler
Aktivera CTC läge
TCCR1B | = (1 << WGM12);
Ange CS11 bit för 8 prescaler
TCCR1B | = (1 << CS11);
Aktivera timern jämför avbrott
TIMSK1 | = (1 << OCIE1A);
SEI (); //allow avbrott

Här är hela koden om du vill ta en titt:

cykel hastighetsmätare
Amanda Ghassaei 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.
*
*/

prov beräkningar
däckets radie ~ 13.5 inches
omkrets = pi * 2 * r = ~ 85 inches
max hastighet av 35 km/h = ~ 616inches/sekund
Max rps = ~7.25

#define reed A0 /-pin ansluten till läsa switch

lagring variabler
float radie = 13,5; / / däck radius (i tum) - ändra detta för din egen cykel

int reedVal;
lång tid = 0; / / tid mellan en full rotation (i ms)
flyta mph = 0.00;
float omkrets;
booleska bakgrundsbelysning;

int maxReedCounter = 100; //min tid (i ms) av en rotation (för debouncing)
int reedCounter;

void setup() {

reedCounter = maxReedCounter;
omkrets = 2 * 3.14 * radie.
pinMode (1, OUTPUT); //tx
pinMode (2, utgång); //backlight växla
pinMode (reed, ingång); //redd switch

checkBacklight();

Serial.write (12), //clear

TIMER SETUP - timer avbrottet tillåter preceise tidsinställda mätningar av reed switch
mor finns information om konfiguration av arduino timers http://arduino.cc/playground/Code/Timer1
(CLI); //stop avbrott

Ställ in timer1 avbrott vid 1kHz
TCCR1A = 0; / / Ställ in hela TCCR1A register till 0
TCCR1B = 0; / / samma för TCCR1B
TCNT1 = 0, //initialize counter värde till 0.
ställa in timer räknas 1khz steg
OCR1A = 1999. / / = (16 * 10 ^ 6) / (1000 * 8) - 1
Aktivera CTC läge
TCCR1B | = (1 << WGM12);
Ange CS11 bit för 8 prescaler
TCCR1B | = (1 << CS11);
Aktivera timern jämför avbrott
TIMSK1 | = (1 << OCIE1A);

SEI (); //allow avbrott
AVSLUTA INSTALLATIONSPROGRAMMET FÖR TIMER

Serial.BEGIN(9600);
}

void checkBacklight() {
bakgrundsbelysning = digitalRead(2);
om (bakgrundsbelysning) {
Serial.write (17), //turn bakgrundsbelysningen på
}
annat {
Serial.write (18), //turn bakgrundsbelysning av
}
}

ISR(TIMER1_COMPA_vect) {//Interrupt på freq 1 kHz att mäta reed switch
reedVal = digitalRead (vass); //get val av A0
om (reedVal) {//if reed switch är stängd
om (reedCounter == 0) {//min tid mellan pulserna har gått
mph = (56.8*float(circumference)) / flyta (tid), //calculate miles per timme
tid = 0; //reset timer
reedCounter = maxReedCounter; //reset reedCounter
}
annat {
om (reedCounter > 0) {//don't låt reedCounter gå negativ
reedCounter-= 1; //decrement reedCounter
}
}
}
annat {//if reed switch är öppen
om (reedCounter > 0) {//don't låt reedCounter gå negativ
reedCounter-= 1; //decrement reedCounter
}
}
om (tid > 2000) {
mph = 0; //if inga nya pulser från reed switch-däck är fortfarande inställd 0 mph
}
annat {
tid + = 1; //increment timer
}
}

void displayMPH() {
Serial.write (12), //clear
Serial.write ("Speed =");
Serial.write (13); //start en ny rad
Serial.Print(mph);
Serial.write ("MPH");
Serial.write ("0.00 MPH");
}

void loop() {
skriva ut mph en gång per sekund
displayMPH();
Delay(1000);
checkBacklight();
}

Se Steg
Relaterade Ämnen

Arduino kitchen timer med en introduktion till timer avbryter

Välkommen till min första instructable,Jag beslöt att göra ett ganska enkla projekt för att ange instructable värld. Detta projekt handlar om att göra en enkel kitchen timer med en Arduino Uno. Således kommer jag ge en liten introduktion 2.2" tft dis...

Timer avbryter på DP32

Timers! Jag är glada att äntligen att täcka timers på min favorit ombord, DP32!Kom ihåg vägen tillbaka när jag skrev om externa avbrott? Om inte du är bekant med avbrott och hur de fungerar, rekommenderar jag att kontrollera denna tutorial ut först....

Arduino Time-Lapse Controller

detta projekt som ursprungligen började med några enkla delar kastas tillsammans för att skapa en mycket enkel time-lapse controller för en DSLR-kamera. När jag var nöjd med den första prototypen, ville jag göra en slutlig version som planeringen av...

Använd Timer avbryta på pcDuino

Timer avbrott kan du utföra en aktivitet på mycket specifikt tidsinställdaintervall oavsett vad som händer i din kod.Steg 1: Steg 1: använda timer avbrott på pcDuinoNär pcDuino kör Ubuntu, som är en version av Linux, Linuxger en timer mekanism, som ä...

Jontofores kontrolleras av arduino timer

DIY Jontofores enhet drivs av Arduino med timerfunktiondessa enheter kommer att ha en polaritet switch på det inställda tidsintervallet (ON och OFF).Steg 1: bakgrund HISTORIA:Hyperhidros är det tillstånd som kännetecknas av onormalt ökad svettning, [...

Göra en Arduino timer

Hi, så jag och min kompis sätter upp så att vi kan göra PCB´s. Vi för närvarande gör en UV exponering låda (eventuellt annan instrucable) och för detta rutan, vi behövde en timer, så detta är vad vi har gjort hittills och vad vi ska göra.Detta projek...

Arduino Timer

Hej alla, detta instructable handlar om hur man bygger ett stoppur / Timer med Arduino.Dragen av denna Timer: (kolla mer i djup Detaljer hur du använder dessa funktioner i "Kod/skiss" avsnitt1. du kan ange ett tidsmål för en händelse och också k...

STM32F103 Timer avbryta (med Keil och STMCubeMX)

I denna tutorial kommer jag Visa användning av avbrott med timers.Avbrottet är helt enkelt för att växla LED på vår STM32 styrelse.Denna handledning är uppdelad i tre steg:Steg 1: Skapa projekt i STM32CubeMXSteg 2: Programmering i KeilSteg 3: Visuali...

Arduino Time-Lapse Panorama Controller

Panorama Controller för GoPro kamerorStyrenheten kommer att rotera din GoPro över en set vinkel för en uppsättning varaktighet eller roterar du GoPro för full rotation för en uppsättning varaktighet.Detta projekt bygger på ursprungliga instructable m...

Arduino - Time BOMB Airsoft använder KYX 5461AS 4-siffriga 7 segment Display

Hej världen! Idag gjorde jag en enkel bomb med en 4 siffrig 7 segment Display (produkt nummer: KYX 5461AS). Det är mycket enkelt och igen kan användas för flera saker naturligtvis! Du utlösa det med en knapp, återställs automatiskt med watchog. AVR/W...

Arduino Vocal effekter Box

Detta Arduino-powered vocal effekter box pitch skiftar och snedvrider inkommande ljudsignalerna att producera ett brett utbud av vocal effekter. Detta projekt är min första experiment med realtid digital signalbehandling med Arduino. Det tar prov en...

3 kanal-Dimmer/fader för Arduino eller andra microcontroller

I ett tidigare instructable jag fram en enkel AC TRIAC-fader/dimmer som kan styras med en Arduino. I olika reaktioner jag fick, uttryckte ett antal personer sitt intresse för en 3 kanalfadern RGB. Men eftersom jag inte har sett några resultat av dess...

Arduino kontrollerade ljus dimmer

Varning: Vissa människor försöka bygga detta med en optocoupler med zerocrossing coz "som är bättre" rätt? Vissa får även höra i elektronik butiker är det bättre att använda sådan optocoupler. FEL. Detta fungerar endast med en random brand optoc...

Arduino hem basket Hoop poäng Detection System aka ScoreKeeper

Min lillasyster och jag hittade denna inomhus basket hoop (bilden ovan) på en container för några veckor sedan. Vi kom hem från kyrkan precis som två personer lossning det från sin lastbil. Vi beslutade att ta tag i det, tillsammans med tabellen air...

Arduino för växthusgaser, trädgården eller Growbox / uppdaterad April 2016

Jag har använt Attiny marker för bevattning uppgifter i min trädgård, men har planer på att bygga ett växthus, en Arduino tycktes vara vägen att gå eftersom det har fler portar. Jag vet, det finns många "Garduino" typ projekt redan, inklusive tw...

PIR rörelsedetektor med Arduino: Drivs på lägsta energiläge som konsumtion

Denna video visar snabbt och lätt strategi för att minska energiförbrukningen för ATMEGA 328P baserade Arduino styrelser med cirka 70-75% med PIR eller PID sensorer för rörelsedetektering.Detta projekt införs efter saker-1) gränssnitt Pyroelectric/Pa...

Från Arduino och perfboard att PCB med fristående MCU

Detta Instructable är en direkt efterföljare av denna. I slutet av detta bygga upp är min skivspelare projekt nästan klar (äntligen).Målet är att utveckla en snygg och arbetar PCB med SMD elektronisk med en arbetande ATtiny85 + programvara!Så är det...

Skicka och ta emot MIDI med Arduino

Detta instructable visar dig hur du använder en Arduino att skicka och ta emot en mängd olika MIDI-meddelanden så att du kan börja bygga din egen MIDI-controllers och instrument. Första jag ska prata lite om MIDI-protokollet, om du bara letar exempel...

Förbättrad Arduino Rotary Encoder behandlingen

Roterande pulsgivare är stor indataenheter för elektronik projekt - förhoppningsvis detta Instructable kommer att inspirera och hjälpa dig att använda en i ditt nästa projekt.Varför skriva rotationsencoder kod?Jag ville använda en låg kostnad rotatio...