Licznik rowerowy


Witam

Chciałbym się zapytać jak można mierzyć prędkość na avr.
Chciałem zrobić licznik rowerowy na attiny2313 i lcd 2x8 mam akurat kontrakton od starego licznika i dla ułatwienia mógłbym go umieścić w tym miejscu w którym kółko robi 1m, tylko jak napisać program, chciałem zrobić że kiedy flaga 1s jest równa 1 wtedy zwiększ zmienna i prędkosc = zmienna x3.6 ale to kiepski pomysł i mam pytanie czy ktoś mógłby napisać kawałek kodu odpowiedzialny za pomiar i konwersje predkości do km/h czujnik dla ulatwienia bedzie ustawiony na wysokości kiedy 1impuls=1metr.

Z góry bardzo dziękuję




Portret użytkownika mirley

Re: Licznik

Można mierzyc impulsy w okeślonym czasie lub czas między impulsami, z czego pomiar czasu między impulsami wydaje mi się lepszym rozwiązaniem. To gdzie umieścisz czujnik na kole nie ma najmniejszego znaczenia, lepiej umieścić go mozliwie blisko osi żeby prędkość liniowa magnesu nie była duża (ułatwi to odczyt, reakcje kontaktronu).

Ważny jest dokładny pomiar obwodu koła wraz z oponą, przeważnie jest to około 2,14m, jeśli zarejestrujesz jeden impuls to znaczy że rower przebył dokładnie drogę obwodu koła. jeśli zliczysz impulsy w czasie kilku sekund to podzielisz 2,14m*impulsy przez czas i otrzymasz prędkość w m/s potem *3,6 i jest km/h.

Lepszym pomysłem wydaje mi się pomiar czasu między impulsami... wtedy dzielisz 2,14m przez ten czas w sekundach i masz prędkość roweru, z tym że dokładność pomiaru czasu jest znacznie większa, bo np dla 70km/h będzie to czas 100ms co nie jest problemem do pomiaru, za to jeśli w czasie sekundy zrobi ci się raz 5 impulsów a raz 6 jadąc z prędkością dającą taki niepewny odczyt to prędkośc uzyskasz zmieniającą się 38 do 46 km/h

----

W wolnej chwili napiszę ci parę linijek kodu... ale narazie sam pokombinuj.... Nie wiem jak będzie wyglądała sprawa ze zużyciem energii i drganiami podczas pracy więc jaki masz dokładnie cel robiąc swój własny licznik a nie kupując gotowego?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mordacz222

Czyli mam zrozumieć że do

Czyli mam zrozumieć że do wykrycia impulsu mam użyć licznika w trybie counter a drugi w trybie timer i preskaler dac tak aby mierzyl czas rzedu kilka us ale jak dokladnie

zrobic to

Quote:
2,14m*impulsy przez czas i otrzymasz prędkość w m/s potem *3,6 i jest km/h

napisz tylko jakis kawaleczek zebym mogl bardziej kombinowac.

A licznik robię na lekcje mieliśmy zadanie i pomyślałem że zrobię taki prędkościomierz razem z termometrem ds1820 i dam go siostrzeńcowi który mówił żeby zrobić mu licznik w jakieś fajnenj obudowie, zasilanie będzie z baterii 9v a kiedy licznik nie wykryje impulsu przez np 30 sekund to przejdzie do powerdown czy powersave nie pamiętam dokładnie.

Portret użytkownika mirley

Re: Licznik

Nie trzeba używać liczników w trybie counter... ja bym wykorzystał przerwanie zewnętrzne i timer skonfigurowany na przerwania co 1ms... Timer zwiększa zmienną co 1ms, jeśli wykryje impuls to na podstawie tej wartości oblicz prędkość, czas w ms to ilość impulsów z timera, potem zeruje zmienną. Taka prosta metoda daje dokładność do 1ms i to wystarczy

Mówię tutaj o pomiarze czasu między impulsami a nie o pomiarze impulsów, program poniżej dla attiny 2313, wejściem kontaktronu jest PD.2 (wejście INT0), piny do LCD musisz sobie sam pozamieniać

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
 
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2       'avt 2313 test boart
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
On Int0 Przzew0 Nosave
Config Int0 = Falling
Enable Int0
 
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Prztimer0
 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
 Dim Licznik As Word
 Dim V As Single
'*************  Zmienne Koniec  ****************
 
 
'**************  Petla glowna ******************
'***********************************************
Do
 
Loop
End
'************ Petla glowna Koniec **************
 
 
'********** Przerwanie Zewnetrzne **************
'***********************************************
Przzew0:
  V = 2.14 / Licznik
  V = V * 3.6
  Licznik = 0
  Locate 1 , 1
  Lcd V ; "    "
Return
'****** Przerwanie zewnetrzne koniec  **********
 
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Incr Licznik
Return
'******** Przerwanie timer 0 Koniec ************

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mordacz222

Bardzo dziekuje za ten

Bardzo dziekuje za ten kawalek rzeczywiście bardzo proste czyli 2,14 mam sobie dostosować do własnych potrzeb tak jaki mam obwód koła, a wyświetlanie na lcd mogę sobie przenieść gdzie indziej do programu, i ostatnie pytanie gdzie najlepiej umieścić kontrakton przy osi czy przy oponie?

Portret użytkownika grizz

Quote:gdzie najlepiej

Quote:
gdzie najlepiej umieścić kontrakton przy osi czy przy oponie?

Tam gdzie pasuje. Niby im wyżej (bliżej opony), tym lepiej, ale zazwyczaj odległość od widelca jest tam większa, wiec może być zakłócony odbiór.

Portret użytkownika drowning_man

odległość

Mirley juz o tym pisął! Najlepiej umieścić kontaktron blisko osi obrotu, że względu na mniejszą prędkość liniowa magnesu nie była za duża. A czym mniejsza prędkość liniowa tym 'pewniejszy' bedzie odczyt.

Portret użytkownika grizz

Quote:Najlepiej umieścić

Quote:
Najlepiej umieścić kontaktron blisko osi obrotu, że względu na mniejszą prędkość liniowa magnesu nie była za duża
.

Hmm ciekawe, ale z tego co pamiętam, w instrukcjach liczników zawsze było napisane, żeby umieszczać jak najbliżej opony...

Portret użytkownika drowning_man

kontaktron

Ze względów fizycznych stabilniej będą pracowały bliżej osi. Jednak długość 'przelatywania' magnesu przy kontaktronie też może mieć wpływ. Im bliżej osi obrotu to odczyt jest stabilniejszy ale dłuższy, a czym dalej to traci się na stabilności, a zyskuje na szybkości impulsu... Z tego wszystkiego można wywnioskować, ze najlepiej całośc bedzia działała pomiędzy, czyli w połowie odległości od ośki do opony:-).

Portret użytkownika mordacz222

Zrobiłem ten licznik dodałem

Zrobiłem ten licznik dodałem pomiar temperatury i działa kontrakton dałem mniejwięcej w połowie i działa dobrze a i siostrzeniec zadowolony, dzięki mirley za pomoc.

Portret użytkownika mordacz222

Aha mam jeszcze jedno pytanie

Aha mam jeszcze jedno pytanie nie związane z licznikiem, chciałbym wykonać sobie zasilacz beztransformatorowy i pytanie po co w tych zasilaczach kondensator przed mostkiem skoro i tak nie robi ochrony galwanicznej układu i jakiej mocy musiała by być zenerka żeby pobrać 5A.

Portret użytkownika grizz

Quote:Zrobiłem ten licznik

Quote:
Zrobiłem ten licznik dodałem pomiar temperatury i działa kontrakton dałem mniejwięcej w połowie i działa dobrze a i siostrzeniec zadowolony, dzięki mirley za pomoc.

Z ciekawości - możesz pokazać zdjęcia?

Quote:
Aha mam jeszcze jedno pytanie nie związane z licznikiem, chciałbym wykonać sobie zasilacz beztransformatorowy i pytanie po co w tych zasilaczach kondensator przed mostkiem skoro i tak nie robi ochrony galwanicznej układu i jakiej mocy musiała by być zenerka żeby pobrać 5A.

Sio na forum ( http://mirley.firlej.org/forum ) z tym pytaniem

Portret użytkownika mordacz222

Zdjecia narazie nie dam bo

Zdjecia narazie nie dam bo dosc popsulem obudowe ale jak to poprawie to napewno dam

Portret użytkownika gosc

HELP

Czy mógłby mi ktoś pomóc z tym licznikiem? Też bym chciał takie coś stworzyć Pozdrawiam

Portret użytkownika rafliczek22

Ale co dokładnie chcesz

Ale co dokładnie chcesz wiedzieć? Program? Elektronika? Szkielet programu masz nad czołem jedynie trzeba zmienić ten kawałek:

  V = 2.14 / Licznik
  V = V * 3.6

na:

  V = 2.14 / Licznik
  V = V * 3600

Portret użytkownika kuba

Dokładność pomiaru

Pobawiłem się trochę położeniem kontaktronu na szprysze (na fabrycznym liczniku), za referencję robiły słupki przydrożne na odcinku 5km. Wyniki są w sumie zgodne z intuicją - im kontaktron jest bliżej piasty tym gorsza jest dokładność pomiaru. Generalnie poniżej 30% długości szprychy (od piasty) licznik zamienia się we wskaźnik - rower jedzie / nie jedzie (na referencyjnych 5km naliczył mi 8.96km przy położeniu 10%).

Idea jest prosta - chwilę zliczenia jednego obrotu wyznacza zbocze kontaktronu. Im wolniej magnes przecina "pole widzenia" kontaktronu, tym bardziej nieokreślona jest chwila jego odpowiedzi. Częstotliwość jest taka sama dla danej prędkości (bo zależy od częstości kołowej) zaś precyzja pomiaru jest odwrotnie proporcjonalna do prędkości liniowej.
Nie wiem skąd padł pomysł umieszczenia kontaktronu na osi - to najgorsze co można zrobić. Magnes powinien się kręcić z najwyższą możliwą prędkością liniową. Dla prędkości 50 km/h koła 26" będą się obracać z częstotliwością około 7,6Hz - istotna jest ostrość zbocza wyznaczająca precyzyjnie chwilę pomiaru, a nie szybkość reakcji kontaktronu, która przy takich stałych czasowych nie ma żadnego istnienia.

-

Zepsuje się wszystko, co tylko może.
Zawsze tak, żeby uczynić najwięcej szkód w najmniej spodziewanym momencie.

Portret użytkownika rafliczek22

A czy przy tej odległości

A czy przy tej odległości kontrakton zdąży "piknąć", stosowanie do tak dużych prędkości liniowych kontrakton nawet nie zauważy magnesu, najlepszym rozwiązaniem byłby hallotron ale na pewno jest droższy od kontraktonu ale chinczyk nie przepłaca.

Liczniki są cyfrowe jedne zbocze=jeden obrót niezależnie od tego długo będzie na tym stanie, niech kolega nie pisze bzdur.

P.s.

Ciekawa teoria z tym zboczem, to procesor w liczniku tyle prądu żre że zbocze mu "trwa długo", nie wiedziałem że logika procesora pobiera takie prądy.

Portret użytkownika kuba

Tak, pewnie że jeden impuls

Tak, pewnie że jeden impuls to jeden obrót, tylko zdaje się że kolega chciał mierzyć prędkość, a tu chyba istotne staje się nie tylko wyznaczenie ilości obrotów, ale i pomiar czasu, nie? (przykładowa, standardowa procedura pomiaru to: zlicz ilość impulsów w zadanej jednostce czasu, np. 1s i zmierz czas od jej zakończenia do nadejścia kolejnego impulsu).
Podaną przeze mnie odległość 8,96km obliczyłem z prędkości średniej wyliczanej na bieżąco przez licznik przez całkowanie numeryczne prędkości chwilowej (miało być na 10km, nie pięciu, przepraszam za błąd). Jeśli pomiar prędkości chwilowej jest obarczony jakimś błędem systematycznym, to taka prędkość średnia nie będzie zgadzała się z klasycznym obliczeniem stosunku całkowitej drogi do całkowitego czasu. W tym przypadku błąd wyniósł ponad 10%, czyli o tyle mniej więcej nie zgadzają się wskazania prędkości chwilowej licznika. To jest kwestia tego co chcemy mieć - pomiar czy wskazanie

-

Zepsuje się wszystko, co tylko może.
Zawsze tak, żeby uczynić najwięcej szkód w najmniej spodziewanym momencie.