Bike bättre med en LED kadens mätare (7 / 11 steg)

Steg 7: Koden



Denna kod läser när magneten passerar sensorn och håller en löpande genomsnittlig tid mellan pedalen passerar. Denna information används för att beräkna rotationer per minimalt.

För att produktionen till lysdioder, används en funktion för att beräkna ljusstyrkan i varje LED-baserade på rpm värdet. Detta skapar en smidig vissnande effekt mellan lysdioderna som värdena ändras.

Det bästa sättet att läsa från sensorn skulle ha varit med avbryter, men jag stötte på ett problem där värdena från sensorn inte var tillräckligt hög för att registrera dig med Arduino som digitala signaler. Så jag var tvungen att använda analog sensor värden.

Detta är inte den mest eleganta koden, men det fungerar och är för närvarande låst i en ruta på min cykel, så jag postar det som det är. Förslag och förändringar är välkomna.

#define ARRAY_SIZE 3 //The antal värden att hålla i den löpande genomsnittligt
#define TIMEOUT 1500 //Max tid utan input innan du stänger av lysdioder
#define FADE_INCREMENT.1 //Controls blekning hastigheten--justera med prova
#define LED_CONSTANT -20 //Used i ljusstyrka blekning ekvationen
RPM mål för varje LED:
#define RED_1_TARGET 45
#define YELLOW_1_TARGET 68
#define GREEN_TARGET 90
#define YELLOW_2_TARGET 113
#define RED_2_TARGET 135

/ ** PORT SETUP ** /
CONST int magnetSensor = A7; Ändra detta för din arduino
CONST int red1 = 12.
CONST int yellow1 = 10;
CONST int grön = 9.
CONST int yellow2 = 5;
CONST int red2 = 4;
CONST int ledPin = 11;
bool magnetonen = false;
bool prevMagOn = false;
bool primade = false;
bool arrayEmpty = false;
flyta gånger [ARRAY_SIZE]; matrisen kan innehålla värden för den löpande genomsnittligt
flyta startTime = millis();
int rpm = 0;
bool trampa = false;
int targetR1;
int targetY1;
int targetG;
int targetR2;
int targetY2;
float r1;
float y1;
float g;
float y2;
float r2;

lägga till ett nytt värde i arrayen, flytta resten tillbaka ett utrymme och ta bort den äldsta
void updateTimes(float newValue)
{
för (int jag = 0; jag < ARRAY_SIZE-1; i ++) {
gånger [i] = tider [i + 1];
}
gånger [ARRAY_SIZE-1] = newValue;
}

Returnerar ett medelvärde av alla värden i vektorn
int avgArray (float values[]) {
int totala = 0;
int räknas = ARRAY_SIZE;
för (int jag = 0; jag < ARRAY_SIZE; i ++) {
totalt = totalt + värden [i];
om (värden [i] == 0)
räknade--;
}
Return(total/counted);
}

för felsökning
void printValues() {
för (int jag = 0; jag < ARRAY_SIZE - 1; i ++) {
Serial.Print(Times[i]);
Serial.Print (",");
}
Serial.println (tiden [ARRAY_SIZE -1]).
}

Rensa matrisen
void clearTimes() {
för (int jag = 0; jag < ARRAY_SIZE; i ++)
gånger [i] = 0;
}

Kontrollera om matrisen är full
void checkFullArray() {
arrayEmpty = sant;
för (int jag = 0; jag < ARRAY_SIZE; i ++) {
om (gånger [i]! = 0)
arrayEmpty = false;
}
}

använda en funktion för att beräkna ljusstyrkan i en tanke ledde baserat på ett mål
int calculateLED (int target) {
om (rpm < = 0)
Return 0;
återvända int(LED_CONSTANT*abs(target-rpm)+255);
}

void setup() {
pinMode (red1, produktionen);
pinMode (yellow1, produktionen);
pinMode (grön, utgång);
pinMode (yellow2, produktionen);
pinMode (red2, produktionen);
Serial.BEGIN(9600);
}

void loop() {
Läsa från hall effekt sensorn (med analoga värden, tyvärr)
int magnetState = analogRead(magnetSensor);
Serial.println(magnetState);
om (magnetState > 60) {
magnetonen = false;
}
annat {
magnetonen = sant;
}
om (! magnetonen & & prevMagOn) {
primas = sant;
}
timeout
om (millis ()-startTime > TIMEOUT) {
clearTimes();
trampa = false;
}
om (magnetonen & &! prevMagOn & & primade) {//if magneten passerar sensorn en gång
flyta currentTime = millis();
flyta changeTime = (currentTime - startTime); spela in tiden efter sista pedalen
startTime = millis();
IF(pedaling) //if det har trampa sedan senaste timeout
updateTimes(changeTime); Lägg tiden till den löpande genomsnittliga matrisen
primas = false;
trampa = sant;
}

mest för felsökning, blinkar det inbyggda lampan varje gång magneten passerar sensorn
IF(magnetOn)
digitalWrite (ledPin, hög);
annat
digitalWrite (ledPin, låg);
prevMagOn = magnetonen;
checkFullArray();
float gap = avgArray(times);
IF(arrayEmpty) {
RPM = 0;
}
annat
RPM = 60000/gap; förvandla millisekundvärde gap till rpm
ljus den lägsta röda lampan när den första pedal stroke registreras, eftersom det inte finns tillräckligt med data för att beräkna rpm
om (trampa & & rpm == 0)
RPM = 40;

/ *** LED UTGÅNG *** /
beräkna värden
targetR1 = calculateLED(RED_1_TARGET);
targetY1 = calculateLED(YELLOW_1_TARGET);
targetG = calculateLED(GREEN_TARGET);
targetY2 = calculateLED(YELLOW_2_TARGET);
targetR2 = calculateLED(RED_2_TARGET);
Normalisera negativa värden till noll (dessa bör verkligen i en array...)
IF(targetR1 < 0)
targetR1 = 0;
IF(targetY1 < 0)
targetY1 = 0;
IF(targetG < 0)
targetG = 0;
IF(targetY2 < 0)
targetY2 = 0;
IF(targetR2 < 0)
targetR2 = 0;

blekna till värde
om (r1 < targetR1)
R1 += FADE_INCREMENT;
om (r1 > targetR1)
R1-= FADE_INCREMENT;
om (y1 < targetY1)
Y1 += FADE_INCREMENT;
om (y1 > targetY1)
Y1-= FADE_INCREMENT;
om (g < targetG)
g += FADE_INCREMENT;
om (g > targetG)
g-= FADE_INCREMENT;
om (y2 < targetY2)
Y2 += FADE_INCREMENT;
om (y2 > targetY2)
Y2-= FADE_INCREMENT;
om (r2 < targetR2)
R2 += FADE_INCREMENT;
om (r2 > targetR2)
R2-= FADE_INCREMENT;

utgång till lysdioder
analogWrite (red1, r1);
analogWrite (yellow1, y1);
analogWrite (grön, g);
analogWrite (yellow2, y2);
analogWrite (red2, r2);
}

Se Steg
Relaterade Ämnen

9V Usb Altoids Tin laddare med 2 led

Hej alla! Detta är min första instructable, och det blir en laddare för din bärbara enheter. Det är ganska enkelt, och det tar du bara en och en halv timme Max göra alla ledningar (inte inklusive den tid det tar att borra hål och köpa delar). I princ...

Guy-Manuel Daft Punk hjälm med programmerbar LED-belysning

I detta Instructable, kommer du att bygga en Guy-Manuel de Homem-Christo Daft Punk hjälm med programmerbar LED belysning. Det är en lång projekt som kommer att ta flera tiotals timmar av arbete. Kompetensområden som kommer att hjälpa till med detta b...

Raspberry Pi spektrumanalysator med RGB LED Strip och Python

söker ett första projekt att prova på en Raspberry Pi, jag men vad bättre än en spektrumanalysator? (Denna display är felaktigt kallas som en grafisk equalizer--låt oss ändra ljudet, inte Visa det)Jag kunde få det gör 2048pt FFTs och avkodning mp3s i...

DIY 40W CNC laserskärare, från dålig till bättre med 3D utskrift

Detta projekt blir en dåligt fungerande kinesiska K40III-laserskärare ett fotavtryck att arbetsytan förhållandet optimerad DIY laser-skärare. Jag ska försöka mitt bästa att täcka vad man kunde göra annorlunda för att spara pengar eller optimerar dela...

USA flagga gjord med diffust LED

USA flagga konstruerade med totalt 2 301 spridde ut röda, vita och blå lysdioder slutfördes med Arduino skiss animationer, jag hoppas att denna instruktioner hjälper alla som vill prova på detta. Denna flagga kan visas under den 4 juli, minnesdag ell...

Gjorde klocka matris med 192 LED

Hur man gör klockan dotmatrix utan matrisskrivare?? Jag gör detta från 192 St ledde därefter conection med matris systemSteg 1: Design Display ledde matrisen Göra PCB utforma ledde matrisen med 192 LEDSteg 2: PCB maskin klocka Klockan maskin med Atme...

Halloween hängande spöke med lysande LED ögon

Material* Två remsor av vita trasor ungefärligt 12 inches bred.* En flexibel plast boll (ungefär storleken av en softball).* Några remsor av garn eller snöre.* En 1K (1 000) ohms motstånd.* Två röda lysdioder varje Fått 3 volt med 20mA leder.* En SPD...

Sluta med en LED stroboscopen!

En stroboscopen är ett verktyg som använder ett starkt blinkande ljus för att tillåta användare att visa objekt som snabbt rör sig på ett återkommande sätt. När frekvensen av blinkande ljus är matchade med objektet hastighet, kan objektet verkar stå...

Holiday gratulationskort med Chibitronics LED

Att göra unika, handgjorda kort är alltid ett bra sätt att få någon att känna sig speciell. I år gjorde vi flera julkort med hjälp av särskilda LED klistermärken från Chibitronics. Den följande Instructable tar dig genom hela processen att göra din e...

Cool ROBOT: med magiska LED krafter

VälkommenDetta är min Instructable om hur man bygger en Cool Robot med magiska LED krafter.Denna design är helt min jag inte grundade bort det av någon annans planer. Jag har precis börjat att göra det i Google Sketchup och den utvecklats till vad de...

Hur man byter den vita lysdioden från din nyckelring ficklampa med RGB LED.

Hi,I denna enkla instructable ska jag lära dig att byta ut den vita lysdioden från din nyckelring ficklampa med RGB LED. En RGB-LED är en röd, grön, blå LED kombinerade in i en LED. Du kan ersätta den med någon färg men jag tror RGB är bäst av efters...

Smart telefon kontrollerade julgran med RGB LED Strip

eftersom julen är här, vi dekorerade denna julgran med RGB LED Strip för vår julfest, och gjorde det en smart telefon kontrollerade träd. XD. It kommer att säker presentera en "sista minuten" magi för Xmas showen. Julen kommer men fastnat räkna...

Med RGB LED med Arduino

Hej killar detta är min första instructable och jag kommer att visa dig hur man styr RGB (röd grön och blå) lysdioder. dess inte så svårt att göra men de material du behöver är;-En Arduino ombord-RGB LED-jumper ledningar-Breadboard(optional)rekommend...

Trådlösa hem routern med utnyttjande av analoga mätare

jag växte upp i och runt båtar att göra ledningar vävstolar och styra paneler, och har en samling av mätare & ringer som skulle normalt finns ansluten till små marina dieselmotorer.Jag jobbar idag som designer bygga gränssnitt till nätverksutrustning...

En bättre Altoids Smalls LED ficklampa

Jag älskar verkligen att göra projekt från Altoids. Särskilt den nya Altoids Smalls burkar. De är så små och så väldigt mycket söt.Jag har sett ett par Instructables på hur till vända dessa små burkar till ficklampor, men jag tror att vi kan göra ett...

Bygga en Daft Punk hjälm med programmerbar LED display

detta Instructable kommer detalj processen att skapa din alldeles egna Thomas Bangalter Daft Punk hjälm. Även denna handledning kan tyckas specifika för Thomas Bangalter hjälm i synnerhet, finns det många processer inom som kommer att vara till hjälp...

DIY Betta (eller någon fisk) Tank med USB LED lampa

min första Instructable.Jag hittade en söt godis burk som säljs här i KSA som ser bra ut för en Betta tank. USB powered LED lampa funktion var ursprungligen från artificiell intelligens ().Det är USB powered eftersom detta Instructable skulle se bra...

Custom Computer Case med inre LED belysning

jag ville komma med en kreativ, låg kostnad sätt att anpassa min dator så att det ser svalare. Jag har en gammal eMachines stationära dator och det såg riktigt tråkigt. Jag bestämde mig att designa ett mönster på fall omslaget. I detta instructable j...

Alla hjärtans present med tjusig LED effekt

denna HowTo ger dig en idé för en present för din flickvän (eller vem) sedan, överraskning, valentinsday kommer närmare!Resultatet är en lite egengjord objekt som visar initialerna för två personer i ett hjärta. Den typ av ser ut som en hologramm des...