Ich bin zu blöd, kann mit mal jemand auf die Sprünge helfen.
Ich versuche mit folgendem Code die Geschwindigkeit zu messen,
bei gegebenem Abrollumfang und 6 Signalen pro Radumdrehung.
1 | float rad_abrollumfang = 2.0; // in meter
|
2 | int rad_signale_pro_umdrehung = 6;
|
3 |
|
4 | volatile float rpm_time = 0;
|
5 | volatile float rpm_time_last = 0;
|
6 |
|
7 | void isrCount() {
|
8 | unsigned long m = micros();
|
9 | rpm_time = (m - rpm_time_last);
|
10 | rpm_time_last = m;
|
11 | }
|
12 |
|
13 | void setup() {
|
14 | attachInterrupt(4, isrCount, FALLING);
|
15 | }
|
16 |
|
17 | void loop() {
|
18 | // interrupts bei volatilen variable sperren !!!
|
19 | noInterrupts();
|
20 | int rpm = (int)((1000000/rpm_time)*60)/rad_signale_pro_umdrehung;
|
21 | interrupts();
|
22 | int kmh = (int)((rpm*60)*rad_abrollumfang)/1000;
|
23 | Serial.println(kmh);
|
24 | }
|
Wenn ich das mal mit der Hand nachrechne kommt da irgendwie
ganz schön Unsinn raus ;(
Nehmen wir an wir haben rpm=10, das sind 60 Signale
Dann sind das also 10 U/min
Eine Stunde hat 60 Minuten, also 10*60=600U/h
Dann sind das 600*2=1200 Meter/h oder 1,2km/h
Das ist doch Schwachsinn ...
Ok, rpm ist nicht in min sondern in sec, dann feht einmal *60
Nehmen wir an wir haben rpm=10, das sind 60 Signale
Dann sind das also 10 U/sec = 60 U/min = 3600 U/h
3600 U/h * 2 Meter = 7200 meter/h = 7,2 kmh
Ich blick es gerade nicht ...