Skocz do zawartości

Wskaźnik Biegów Do Bandita (Własna Konstrukcja).


Tarru
 Share

Rekomendowane odpowiedzi

już mam rozpisany - nie mówię że się w nim pogubiłem

np zastanawia mnie dlaczego tę procedurę - co ona tak naprawdę robi? - nie w sensie że jest to stan wysoki 2s, stan niski 25ms, stan wysoki 25ms - ale co daje w komunikacji z ECU

 

void sekStart() { // sekwencja inicjalizacji polaczenia z moto

  digitalWrite (TX, HIGH); (ustawia wartość pinu w tym wypadku 18)

  delay(2000); 

  digitalWrite (TX, LOW);

  delay(25);

  digitalWrite (TX, HIGH);

  delay(25);

 

wywołujesz w pętli

 

  while (tablica[21] == 0) {

    sekStart();

  }

 

Jak to ułożę w proces np w diagram aktywności UML :P to się odezwę z prośbą o weryfikację

Edytowane przez syku
Odnośnik do komentarza
Udostępnij na innych stronach

już mam rozpisany - nie mówię że się w nim pogubiłem

np zastanawia mnie dlaczego tę procedurę

void sekStart() { // sekwencja inicjalizacji polaczenia z moto

  digitalWrite (TX, HIGH); (ustawia wartość pinu w tym wypadku 18)

  delay(2000); 

  digitalWrite (TX, LOW);

  delay(25);

  digitalWrite (TX, HIGH);

  delay(25);

 

wywołujesz w pętli

  while (tablica[21] == 0) {

    sekStart();

  }

 

Jak to ułożę w proces np w diagram aktywności UML :P to się odezwę z prośbą o weryfikację

 

Mam podobne wrażenia do Syku, w każdej pętli inicjalizujesz obiekt sds.begin(sdsbaud); - czy to jest konieczne ???

 

Odnośnik do komentarza
Udostępnij na innych stronach

Na początku, po włączeniu zasilania cała tablica jest wypełniona zerami. sekStart(); to jest funkcja która wysyła "kombinację" rozpoczynającą komunikację z moto (inaczej ECU nie będzie nic odpowiadał) a potem wysyła zapytanie do ECU i zapisuje odpowiedź. Po włączeniu stacyjki w moto i zasileniu ECU potrzebuje on kilku sekund żeby był gotowy do gadania, dlatego ja wysyłam w pętli while tę sekwencję startową. Do momentu aż ECU moto się nie ogarnie to ta funkcja ciągle wypełnia tablicę zerami (bo ECU jeszcze nie odpowiada), po kilku sekundach jak już wszystko się odpali to wpada prawidłowa ramka z moto i tablica jest już wypełniona pełnym odczytem. Żeby wiedzieć, że odczytaliśmy już poprawne dane a nie same zera to po prostu sobie sprawdzam temperaturę silnika (czyli komórka tablica(21)). Żeby ta komórka była równa 0 (przy poprawnym odczycie całej ramki z moto), to silnik by musiał mieć temperaturę -30stopni, a tak nigdy nie będzie dlatego przyjmuję, że przy temp[21] mamy wciąż niepoprawny odczyt, to wysyłamy dalej sekwencję startową :)

 

W dużym skrócie można tę pętlę: 

  while (tablica[21] == 0) {
    sekStart();
  }
 
Można opisać tak: dopóki komórka temperatury jest 0 (czyli błędny odczyt) to wysyłaj sekwencję startową do ECU i odczytuj ponownie. 
 
EDIT:
pawcioj -> tak, masz rację, nie jest to konieczne, ale ta pętla wykonuje się tylko przez jakieś 3-5 sekund po odpaleniu zapłonu moto, a potem już nie :D Ten kod nie jest super piękny i wypucowany ale pisałem go na kolanie w godzinę w garażu przy moto więc wybaczcie :D Tak samo jak "timer200ms" wcale nie jest inkrementowany co 200ms, to są pozostałości po szybkiej edycji, tak aby działało. Ten kod działa, tyle mogę powiedzieć :)  
 
 
Pozdro
Edytowane przez Tarru
Odnośnik do komentarza
Udostępnij na innych stronach

 

Na początku, po włączeniu zasilania cała tablica jest wypełniona zerami. sekStart(); to jest funkcja która wysyła "kombinację" rozpoczynającą komunikację z moto (inaczej ECU nie będzie nic odpowiadał) a potem wysyła zapytanie do ECU i zapisuje odpowiedź. Po włączeniu stacyjki w moto i zasileniu ECU potrzebuje on kilku sekund żeby był gotowy do gadania, dlatego ja wysyłam w pętli while tę sekwencję startową. Do momentu aż ECU moto się nie ogarnie to ta funkcja ciągle wypełnia tablicę zerami (bo ECU jeszcze nie odpowiada), po kilku sekundach jak już wszystko się odpali to wpada prawidłowa ramka z moto i tablica jest już wypełniona pełnym odczytem. Żeby wiedzieć, że odczytaliśmy już poprawne dane a nie same zera to po prostu sobie sprawdzam temperaturę silnika (czyli komórka tablica(21)). Żeby ta komórka była równa 0 (przy poprawnym odczycie całej ramki z moto), to silnik by musiał mieć temperaturę -30stopni, a tak nigdy nie będzie dlatego przyjmuję, że przy temp[21] mamy wciąż niepoprawny odczyt, to wysyłamy dalej sekwencję startową :)

 

W dużym skrócie można tę pętlę: 

  while (tablica[21] == 0) {
    sekStart();
  }
 
Można opisać tak: dopóki komórka temperatury jest 0 (czyli błędny odczyt) to wysyłaj sekwencję startową do ECU i odczytuj ponownie. 
 
EDIT:
pawcioj -> tak, masz rację, nie jest to konieczne, ale ta pętla wykonuje się tylko przez jakieś 3-5 sekund po odpaleniu zapłonu moto, a potem już nie :D Ten kod nie jest super piękny i wypucowany ale pisałem go na kolanie w godzinę w garażu przy moto więc wybaczcie :D Tak samo jak "timer200ms" wcale nie jest inkrementowany co 200ms, to są pozostałości po szybkiej edycji, tak aby działało. Ten kod działa, tyle mogę powiedzieć :)
 
 
Pozdro

 

 

Zawsze jest niebezpieczeństwo, że jak udostępnisz swój kod to znajdą się malkontenci co będą go krytykować :stupid:  - nie taka jest moja intencja. Piszę o tym, ponieważ miałem przypadki, że przy takim zapisie bez np. sds.close(sdsbaund); za każdą pętlą program inicjował nową zmienną, co powodowało po pewnym czasie przepełnienie pamięci i oczywiście błąd programu. Mądry kompilator sam sobie powinien wsadzić destruktor ale z tym różnie bywa.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 months later...

bardzo fajny temat - widze ze mialem zamiar iść nieoptymalną drogą (czyli wnioskowac o biegu z napięcia z czujnika przez przetwornik)

- czy ma ktos moze offline te jpg i gif ktore to byly dodane w post #108 na stronie 6

jako linki a juz prowadza do niemozliwych do obejrzenia ?

- latwiej byloby mi moze ogarnąć całość tematu (arduino nano uzyje przynajmniej na poczatku moze)

Edytowane przez tls
Odnośnik do komentarza
Udostępnij na innych stronach

Napisz zapytanie  do kolegi Tarru. Napewno odpisze jak tu zajrzy.

Odnośnik do komentarza
Udostępnij na innych stronach

Hej wszystkim, już poprawiłem zdjęcia w poście #108. 

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Nie napisalem ale pomyslalem, ciekawe czy je jeszcze masz i czy wrzucisz na iHosta.

Jednak mozna zawsze polegac. Dzieki !  :oki:

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 months later...

Wiem, że ostatni post był napisany w Lipcu, ale chciałbym usystematyzować wiedze o rozwiązaniach dotyczących wyświetlacza biegów.

 

1.Można kupić gotowca np: https://www.bikestar.pl/wyswietlacz-biegow-giprods.html

2.Jest wersja tutaj przedstawiana, ale dość kłopotliwa i wymagająca. Kłopotliwa, bo trzeba ten moduł Arduino gdzieś "upakować" po drodze dorobić interfejs i zaprogramować.

3.Wyświetlacz z przetwornikiem i przerabianym czujnikiem.

4. Wyświetlacz - segmenty wyświetlacza zapalane poprzez rezystory, które zamyka do masy odpowiedni pin w przerabianym czujniku (plus diody separatory)

5. Magnes na dźwigni zm. biegów - pomijam

6. Inne np: kit AVT 3042

 

Mam do Was gorącą prośbę! Jest koniec sezonu, a o czymś trzeba pisać :usmiech: Jeśli ktoś ma któryś z tych typów niech coś napiszę jak to się sprawuje?

Zastanawiam się np, czy ten z poz.1 koniecznie musi być podpięty na stałe pod aku (3mA), a co będzie jak będzie po stacyjce? Od nowa trzeba go "uczyć"?

Czy ktoś przerabiał czujnik biegów w B12,5?

Powiem, że najbardziej pasuje mi najprostsza wersja (4) z przerabianym czujnikiem biegów.

Odnośnik do komentarza
Udostępnij na innych stronach

W twoim czujnika nie przerabiasz. Tego typu wyswietlacze montuje sie do olejakow. Co do twojego, mozna samemu sobie zrobic ale, takze ten, ktory sobie montowalem jest na atmega8, oprogramowanie tez juz istnieje i mozna upchac w samych zegarach. Do dzisiaj nikt jednak sobie takie "cudo" nie zrobil bo i plytke nalezaloby samemu zrobic, polutowac, zaprogramowac i zabudowac a to, to za duzo roboty. Wiem, ze istnieja takze prostsze ale materialow na ten temat nie posiadam.

 

 

Edit

 

Tutaj jeszcze troche lektury

 

https://polishbanditcrew.pl/topic/4056-wy%C5%9Bwietlacz-bieg%C3%B3w-do-bandita-jaki/

 

Na stronie 26 pokazalem, jak to upchac w zegarach.

Edytowane przez pioter
Odnośnik do komentarza
Udostępnij na innych stronach

Najprościej jest oskrobać silikon przylutować kabelki ja użyłem skrętki na każdym wstawić diodę kierunkową. I masz bazę do wyświetlacza mechanicznego (jest bezbłedny i działa zawsze natychmiast obojętne czy stoisz czy jedziesz ) do wyświetlania użyłem diody fruostencyjne ,siedem sztuk. Może być każda w innym kolorze. Całość operacji zamyka się w 10zeta. Aaa zasilanie od lampy postojowe. :)

Edytowane przez kazek
Odnośnik do komentarza
Udostępnij na innych stronach

@Kazmir
To jest bardzo prosty układ - zdecydowanie prostszy od przeróbki czujnika biegów + arduino  albo matryca diodowa. Arduino raz zaprogramowane "pamięta" do czasu zapisania w nim nowego programu lub uszkodzenia więc nie musisz go podtrzymywać. Arduino nano ma wymiary 43 x 18 ( koszt 29 zł )  mm więc bez trudu znajdziesz jakąś obudowę a i znajdzie się miejsce na niego pod siedzeniem. Możesz np. kupić tu: https://botland.com.pl/plytki-zgodne-z-arduino-pozostale/8222-nano-v30-ch340-zgodny-z-arduino.html . Potrzebny jest ci wyświetlacz 12 - 15 mm wspólna katoda, 7 rezystorów 120 - 200 ohm ( nic nie musisz projektować, trawić itp ) trochę przewodu pomiędzy wyświetlaczem i arduino i tyle. Jak masz ochotę można jeszcze zrobić przyciemnianie w zależności od oświetlenia ( fotorezystor + zasilanie PWM na wyświetlacz LED - ten model arduino ma 8 wyjść PWM ).

Tak czy inaczej jak będziesz miał problem to mogę pomóc.

Odnośnik do komentarza
Udostępnij na innych stronach

Mogę się pobawić i w Arduino. Nawet na elektrodzie coś tam kiedyś wyskrobałem typu "DIY" Pytanie mam więc dalej w sprawach "porządkowych?

Czy ktoś testował ten układ z postu #108? Program jest poprawny? Interfejs? Jak to działa w praktyce?

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

 Share

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając ze strony akceptujesz regulamin oraz politykę prywatności.Regulamin Polityka prywatnościUmieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.