Stránka 1 z 1

arduino tachometr

Napsal: 29 srp 2018, 08:42
od Vasa
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;
}
}

Re: arduino tachometr

Napsal: 29 srp 2018, 12:21
od ohruska
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

Re: arduino tachometr

Napsal: 29 srp 2018, 12:59
od Vasa
Myslím si že to mám ošetřené tou podmínkou že proměnná čas musí být větší než 100

Re: arduino tachometr

Napsal: 29 srp 2018, 13:34
od ohruska
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

Re: arduino tachometr

Napsal: 01 led 2019, 12:46
od alfa_design
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ů.