arduino tachometr

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Vasa
Příspěvky: 3
Registrován: 29 srp 2018, 08:09
Reputation: 0

arduino tachometr

Příspěvek od Vasa » 29 srp 2018, 08:42

Dobrý den, snažím se vyrobit si pomocí arduina a jazýčkového kontaktu (reed switch) tachometr na kolo. Myslel jsem si, že to bude jednoduché, ale začíná se ukazovat, že to nejde úplně samo.

Problém je ten, že to hází naprosto nesmyslně veliký rychlosti. Vypisovaná rychlost se sice mění podle toho jak rychle je spínán magnetický senzor, ale je naprosto nereálná. Ten časovač mám z internetu z návodu na tachometr. Když jsem zkoušel vypisovat proměnnou cas ke které by se měla přičíst 1 každou milisekundu zjistil jsem, že je mnohem pomalejší.
proto prosím o radu jak to napravit popřípadě kde mám chyby.
tady je program který zatím mám:

#define magnet 2
bool sepnuti;
long cas;
float mmin;
float pi = 3.141592;
float r = 0.30;
float o;

void setup(){
pinMode(magnet, INPUT_PULLUP);
o = pi*2.0*r;
Serial.begin(9600);


cli();//stop interrupts

//set timer1 interrupt at 1kHz
TCCR1A = 0;// set entire TCCR1A register to 0
TCCR1B = 0;// same for TCCR1B
TCNT1 = 0;
// set timer count for 1khz increments
OCR1A = 1999;// = (1/1000) / ((1/(16*10^6))*8) - 1
// turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS11 bit for 8 prescaler
TCCR1B |= (1 << CS11);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);

sei();//allow interrupts
//END TIMER SETUP
}

ISR(TIMER1_COMPA_vect) {
cas++;
// Serial.println(cas);
}

void loop(){
sepnuti = digitalRead(magnet);
if(!sepnuti){
if(cas>100){
cli();
mmin = o/(float(cas)/60000);
cas = 0;
sei();
}

}
Serial.println(mmin);
// Serial.println(millis());
if(cas > 3500){
mmin = 0;
}
}

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: arduino tachometr

Příspěvek od ohruska » 29 srp 2018, 12:21

Zdravím.
Nemohl by být problém v zakmitávání jazýčkového kontaktu....
Mám stejný problém na meteostanici, při měření rychlosti větru.

Ota

Vasa
Příspěvky: 3
Registrován: 29 srp 2018, 08:09
Reputation: 0

Re: arduino tachometr

Příspěvek od Vasa » 29 srp 2018, 12:59

Myslím si že to mám ošetřené tou podmínkou že proměnná čas musí být větší než 100

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: arduino tachometr

Příspěvek od ohruska » 29 srp 2018, 13:34

To já mám také. Pokud je >15 milisec, ale běžně se započítají pulsy těsně za hranicí, např. 16,18,20 milisec., ale ve zkutečnosti to neodpovídá.
Vyhodnocuji minimální rychlost větru a průměrnou rychlost a není možné, aby se při měření projevoval takovým rozdílem.(Rychlost měřím 6s). Chyba se projevu pouze u určité rychlosti větru. Větší a menší rychlost je OK.
Výstřižek10.JPG

alfa_design
Příspěvky: 10
Registrován: 14 pro 2018, 15:10
Reputation: 0

Re: arduino tachometr

Příspěvek od alfa_design » 01 led 2019, 12:46

Ahoj, v tom kódu se příliš neorientuji, do těchto výšin jsem se v programování neprokousal, ale ryze z praxe lze konstatovat, že by zákmity mohli hrát roli jak u tachometru tak u anemometru, odstranění tohoto jevu jsem viděl na stránkách www.arduino8.cz pomocí Schmittova klopného obvodu, v minulosti jsem snímání otáček řešil pomocí stařičkého obvodu firmy Tesla MH3SS2 (Hallův generátor), na netu je stále katalogový list se základními parametry, tento obvod produkuje impulsy bez zákmitů a určitě existují jeho modernější verze od jiných výrobců.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů