Witam, mój pierwszy projekt elektroniczny na Elektrodzie i w ogóle
Licznik rowerowy widoczny na poniższym zdjęciu.
Pomysł zrodził się w zeszłym roku, właściwie bez żadnego powodu. Zaczęło się od zabawy układami AVR - przez diody i przyciski, potem ekran z telefonu. W końcu padła bateria w moim dotychczasowym liczniku i postanowiłem, że zrobię coś lepszego.
Projekt tworzyłem od początku z zamiarem wypuszczenia go z kodem, więc ten temat jest właściwie drugorzędnym źródłem wiedzy na jego temat. Główna strona znajduje się na githubie, tam też znajduje się bardziej szczegółowa dokumentacja, kod źródłowy i schematy.
Sama praca zajęła sumarycznie jakieś pół roku, chociaż pracowałem nad tym z przerwami od zeszłych wakacji. Najwięcej pracy włożyłem w niego w tym roku i już w te wakacje mogłem zamontować wszystko na rowerze.
Zdecydowałem się go upublicznić akurat teraz, gdy dokumentacja jest mniej więcej gotowa, soft i płytka są przetestowane, a wszystko da się włożyć na rower. Nie wygląda to może najpiękniej, ale rozwój jeszcze się nie skończył
Działanie
W tym momencie licznik nie zawiera wszystkich popularnych funkcji, jak zegar itp, ale są w planach. Do tej pory udało mi się dodać:
- Obecną prędkość
- Obecną częstotliwość obrotów korby
- Dystans podróży
- Czas podróży
- Średnią prędkość podróży
- Maksymalną prędkość podróży
- Podświetlenie ekranu
- Wykres prędkości względem czasu
- Wykres prędkości względem dystansu
- Zmianę obwodu koła
Po włączeniu urządzenia, widać taki oto ekran:
To po lewej to obroty korby (razem z podziałką, która pokazuje 0 oraz optimum), po prawej widać obecną prędkość, poniżej listę modułów, a na samym dole obecny moduł (w tym przypadku dystans).
Całość operuje na 2 przewodowych sensorach z kontaktronami, dorwanymi z serwisu rowerowego za półdarmo
Przyciski służą głównie do przewijania modułów i wybierania ich, ale to ogólnie zależy od modułu - np. wciśnięcie wyboru przy module dystansu zeruje go, wciśnięcie wyboru przy module obwodu koła pozwala go zmieniać.
Sprzęt:
- AtMega8
- Ekran od Nokii 5110
- Generator parzystości
- Dowolne przyciski
- Sensory oparte na kontaktronach
Sercem urządzenia jest AtMega8 - tam znajduje się cała logika systemu. Układ zarządza ekranem i zbiera przerwania z przycisków i sensorów. Ponieważ AtMega8 ma tylko 2 przerwania zewnętrzne, w projekcie użyłem generatora parzystości, żeby z 2 zrobić więcej.
Cała część sprzętowa jest jak najprostsza, ponieważ nie znam się na elektronice
Koszt wytworzenia jednego urządzenia szacuję na jakieś 120 zł, więc jeszce w granicach rozsądku.
Oprogramowanie
Projekt napisany jest w całości w C, z 6 liniami assembly. Starałem się używać C89, ale ostatecznie w paru miejscach stosuję rozszerzenia GNU99 i C99, przez co najpewniej da się go skompilować tylko z GCC.
Bardzo zgrubnie ujmując, oprogramowanie podzieliłem na rdzeń, sensory i moduły. Sensory to sensory - zbierają dane. Moduły zajmują się wyświetlaniem danych, mają prostą budowę i w zasadzie każdy może je napisać (dokumentacja ma dla nich oddzielną sekcję). Rdzeń łączy to wszystko.
Sam kod oparty jest zarówno na przerwaniach, jak i na pętli głównej. Przerwania odpowiadają za zbieranie i zapamiętywanie danych, pętla główna za wyświetlanie.
Z ciekawostek technicznych, moduły są na tyle uniwersalne, że można w każdym z nich zrobić niezależną grę korzystającą z przycisków
Montaż
Pięta Achillesa projektu. Na temat projektowania mechaniki mam jeszcze mniejsze pojęcie, niż elektroniki, więc przy pierwszym podejściu kompletnie to zignorowałem. Z tego powodu ekran jest dolutowany na stałe, a sensory używają końcówek BLS-02 (czyli byle jakich).
Metodą prób i błędów udało mi się zamontować ustrojstwo na rowerze z pomocą kawałka styropianu i takich śmiesznych zatrzasków:
Na koniec zdjęcie samego licznika z bateriami, które mi osobiście podoba się najbardziej:
PS. Do modów: rozumiem, że tematy postów mają opisać problem, ale czemu na DIY nie przechodzi "Licznik rowerowy"?
Fajne? Ranking DIY
