Skocz do zawartości

ESP32 - licznik do rowerka treningowego


roz

Pomocna odpowiedź

@ethanak to samo, ale nie liczy prędkości. Nie ogarniam, na prawdę... 😞

 

if (digitalRead(reed_pin) == HIGH && stan == true) { 
  stan = false; 
  } 
if (digitalRead(reed_pin) == LOW && stan == false) { 
  czas_s = (micros() - last_time) / 1000000.0; 
  float obroty = 3600 / czas_s;
  float predkosc = (obroty * 0.74) / 1000000.0;  
  trasa = trasa + obwod_k; //metry
  stan = true; 
  last_time = micros(); 
  Serial.println(predkosc);
  Serial.println(trasa); 
 }

 

19:32:27:983 -> 0.00
19:32:27:983 -> 0.74
19:32:29:772 -> 0.00
19:32:29:772 -> 1.48
19:32:31:296 -> 0.00
19:32:31:296 -> 2.22
19:32:32:526 -> 0.00
19:32:32:526 -> 2.96
19:32:33:549 -> 0.00
19:32:33:549 -> 3.70
19:32:34:347 -> Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.
19:32:34:347 -> 
19:32:34:347 -> Core  1 register dump:
19:32:34:347 -> PC      : 0x400d14a6  PS      : 0x00060630  A0      : 0x800d2b3c  A1      : 0x3ffc51e0  
19:32:34:347 -> A2      : 0x3ffc1bc0  A3      : 0x00000000  A4      : 0x3ffc1bc4  A5      : 0x3ffbdb6c  
19:32:34:347 -> A6      : 0x3ffbd2bc  A7      : 0x80000001  A8      : 0x800d14a1  A9      : 0x3ffc51c0  
19:32:34:347 -> A10     : 0x00000e10  A11     : 0x3fe8221e  A12     : 0xffffffff  A13     : 0x000003ff  
19:32:34:347 -> A14     : 0x7ff00000  A15     : 0x00000000  SAR     : 0x0000001f  EXCCAUSE: 0x00000006  
19:32:34:368 -> EXCVADDR: 0x00000000  LBEG    : 0x400840d1  LEND    : 0x400840d9  LCOUNT  : 0x00000027  
19:32:34:368 -> 
19:32:34:368 -> 
19:32:34:368 -> Backtrace: 0x400d14a3:0x3ffc51e0 0x400d2b39:0x3ffc5200
19:32:34:368 -> 
19:32:34:368 -> 
19:32:34:368 -> 
19:32:34:368 -> 
19:32:34:368 -> ELF file SHA256: e6c4e841c735c42a
19:32:34:368 -> 
19:32:34:514 -> Rebooting...
19:32:34:540 -> ets Jun  8 2016 00:22:57
19:32:34:540 -> 
19:32:34:540 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
19:32:34:540 -> configsip: 0, SPIWP:0xee
19:32:34:540 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
19:32:34:540 -> mode:DIO, clock div:2
19:32:34:540 -> load:0x3fff0030,len:1184
19:32:34:540 -> load:0x40078000,len:13232
19:32:34:540 -> load:0x40080400,len:3028
19:32:34:540 -> entry 0x400805e4
19:32:34:865 -> Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.
19:32:34:865 -> 
19:32:34:865 -> Core  1 register dump:
19:32:34:865 -> PC      : 0x400d14a6  PS      : 0x00060630  A0      : 0x800d2b3c  A1      : 0x3ffc51e0  
19:32:34:865 -> A2      : 0x3ffc1bc0  A3      : 0x00000000  A4      : 0x3ffc1bc4  A5      : 0x3ffbdb6c  
19:32:34:865 -> A6      : 0x3ffbd2bc  A7      : 0x80000001  A8      : 0x800d14a1  A9      : 0x3ffc51c0  
19:32:34:865 -> A10     : 0x00000e10  A11     : 0x3fc46aca  A12     : 0xfffffffd  A13     : 0x000003ff  
19:32:34:865 -> A14     : 0x7ff00000  A15     : 0x00000000  SAR     : 0x0000001f  EXCCAUSE: 0x00000006  
19:32:34:886 -> EXCVADDR: 0x00000000  LBEG    : 0x400840d1  LEND    : 0x400840d9  LCOUNT  : 0x00000027  
19:32:34:886 -> 
19:32:34:886 -> 
19:32:34:886 -> Backtrace: 0x400d14a3:0x3ffc51e0 0x400d2b39:0x3ffc5200

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No to zostaw millis i zrób jakis debouncing - najprościej cos w stylu:

if (millis() - last_time > 10) {
  // tu liczysz prędkość

Raczej więcej niż 100 obrotów na sekundę nie osiągniesz...

Link do komentarza
Share on other sites

Chyba znalazłem przyczynę/powód problemów!

Kontaktron, który jest zamontowany oryginalnie NIE DAJE jednego impulsu przy przesunięciu magnesu.

Bez względu jak szybko kręcę korbami zawsze zwiększa o 3.

 

19:40:24:781 -> 1
19:40:28:218 -> 3
19:40:31:436 -> 6
19:40:40:842 -> 9
19:40:43:887 -> 12
19:40:55:473 -> 15

 

  • Lubię! 1
Link do komentarza
Share on other sites

6 minut temu, roz napisał:

Chyba znalazłem przyczynę/powód problemów!

Kontaktron, który jest zamontowany oryginalnie NIE DAJE jednego impulsu przy przesunięciu magnesu.

Bez względu jak szybko kręcę korbami zawsze zwiększa o 3.

 

19:40:24:781 -> 1
19:40:28:218 -> 3
19:40:31:436 -> 6
19:40:40:842 -> 9
19:40:43:887 -> 12
19:40:55:473 -> 15

 

O Panie Boże...wywal to gówno i kup A3144 lub coś podobnego i twoje problemy znikną...kosz groszowy

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

To jest pierwsza rzecz, którą należało sprawdzić. Pisałem o tym na początku. Te millis nie jest problemem bo nie ma opcji żeby czas między impulsami był mniejszy niż jeden. 

Jeśli robisz coś takiego to czas zdecydowanie nie powinien być intem.

czas_s = (micros() - last_time) / 1000000.0;

Z tego wychodzi 0 i potem


float obroty = 3600 / czas_s;

Albo można pozostać przy milisekundach.

Nawiasem mówiąc, kontaktron jest dosyć prostym i raczej niezawodnym elementem. 

Edytowano przez etet100
Link do komentarza
Share on other sites

2 minuty temu, ethanak napisał:

@farmaceuta jesteś pewien że koszt dopisania dwóch linijek programu będxie wyższy?

No ja Wiem...policzyć trzy impulsy w sumie i dopiero zrobić obliczenia...poprostu się wykręcam jak mogę bo mi dziś mózg wysiadł 😜

Link do komentarza
Share on other sites

1 minutę temu, ethanak napisał:

@farmaceuta Dlaczego trzy impulsy? Nie lepiej sprawdzić, czy to nie jest jakiś lewy impuls?

Nok tak zakładam że trzy bo nawet w monitorze @roz pokazał że zawsze jest o trzy...takie dziwne trochę rozwiązanie...no ale to niech się najpierw upewni na sto procent że to nie drgania

Link do komentarza
Share on other sites

1 minutę temu, Santiago napisał:

Zakres błędu 0.5 km/h . 

Zakładając że masz prawidłowy obwód koła w obliczeniach i nic kodu nie blokuje (delay, dłuższe while/for/if'y) to w kodzie powyżej nie powinno być nawet cm błędu na godzinę...

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.