Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam.

Mam problem z oprogramowaniem czujnika halla. Posiadam dokładnie coś takiego: https://www.e-biker.pl/czujnik-pas-rapid,3,1090,3128.

Potrzebuję uzyskać z takiego czujnika informacją czy korba w rowerze się obraca. Czyli jeżeli dobrze rozumiem to typu boolean. Tylko nie wiem za chiny ludowe jak do tego się zabrać. Szukałem informacji w czeluściach internetu ale odpowiedzi nie znalazłem. Przydały by się jakieś poradnik nie muszą być w języku polskim, lub gotowy program.

Pozdrawiam.

Na oś suportu zakładasz tarczę z 8 magnesami. Na jeden obrót korby dostaniesz więc z tego czujnika 8 impulsów. Musisz mierzyć czas między kolejnymi impulsami i sam decydować, czy korba obraca się czy już nie. Przy wysokiej kadencji, powiedzmy 160 dostaniesz jakieś 21 impulsów/s (rzadko kto tak jeździ, to raczej na treningach), ale gdy ktoś jest na spokojnej wycieczce po lesie i na dodatek lubi twardsze przełożenia, możesz spodziewać się 2Hz. Napisz program który odmierza czas między impulsami i przy przekroczeniu np. 1s uznaje, że korba przestała się kręcić. Powrót do stanu "pedałujemy" rób po wykryciu min. kilku impulsów w odstępach mniejszych niż np. 500ms.

Link nie działa.

Najpierw polecam sprawdzić czy hallotrony w tym czujniku są analogowe czy cyfrowe. Jak cyfrowe to spoko, będzie ciut łatwiej, jak analogowe to najpierw trzeba by "zrobić" prostokąt a potem sprawdzać czy impulsy się pojawiają. Jeżeli kolejny impuls nie przychodzi przez jakiś czas to znaczy, że korba się nie obraca.

Sprawdziłem czy halotron będzie działał na pinie cyfrowym na przykładzie tego kodu:

const int hallPin = 8;
const int ledPin = 13;

int hallState = 0;


void setup(){
 pinMode(hallPin, INPUT);
 pinMode(ledPin, OUTPUT);
 digitalWrite(hallPin, HIGH);
}

void loop(){
 hallState = digitalRead(hallPin);


if (hallState == HIGH){
   digitalWrite(ledPin, LOW);
 }
 else{
   digitalWrite(ledPin, HIGH);
 }
}

Czyli muszę teraz jakoś muszę zliczyć ilość impulsów. W tedy gdy zliczy mi 8 impulsów to korba się obraca i na wyjściu będę miał 1, a przy przerwie np 1s już nie kręci się i wartość jest równa 0.

Nie musisz zliczać do 8. Musisz ciągle liczyć czas jaki minął od ostatniego impulsu. Gdy następny impuls przyjdzie w czasie krótszym niż ileśtam, korba się kręci. Gdy czas będzie dłuższy a impulsu wciąż nie będzie, uznajesz, że stoi. Zastanów się co dokładnie znaczy dla Ciebie "kręci się" i do czego tego potrzebujesz. Czy zrobione pół obrotu to już tak czy jeszcze nie? A czy obracanie z prędkością 1 obr/s to obracanie czy zatrzymanie? A jeden obrót na 2 sekundy? itd.

Co to w ogóle będzie za urządzenie?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...