Witam
Przedstawiam Wam mój pierwszy projekt na majsterkowo.pl, a jest nim licznik kadencji do roweru. Dla tych co nie do końca wiedzą co to jest kadencja szybkie wytłumaczenie, kadencja jest to ilość obrotów korby(czyli pedałów) na minutę.
A więc zaczynamy :)
Elementy użyte w projekcie:
- Arduino Pro Mini
- wyświetlacze 7 segmentowe
- kondensatory 100nF
- kontaktron
- przełącznik
- obudowa
- akumulator
- laminat PCB
- preparat do bezprądowego cynowania miedzi
- wytrawiacz
- przewody
- stary uchwyt od licznika rowerowego
- magnes
Projekt zacząłem od stworzenia prototypu na płytce stykowej i napisałem program. Z płytką stykową jest jeden problem przez drgania styków czasem wyniki były fałszowanie.
Kod programu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#include <SevSeg.h> volatile word a; //częstotliwość volatile word q; //czas miedzy impulsami unsigned long time; //czas w którym był impuls SevSeg sevseg; void setup() { //Przerywanie na pinie 2 pinMode(2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2), licz, FALLING); byte numDigits = 3; byte digitPins[] = {5, 4, 3}; //Wyswietlacz: 1,2,3 byte segmentPins[] = {9, 10, 6, 7, 8, 11, 12, A1}; //Segmenty: A,B,C,D,E,F,G,Period sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins); sevseg.setBrightness(100); } void loop() { if(millis()-time<2000) a=60000/q; //Liczenie częstotliwości else a=0; static byte decPlace = 0; sevseg.setNumber(a, 0); decPlace++; decPlace %= 4; sevseg.refreshDisplay(); } //Funkcja odpowiedzialna za liczenie czasu miedzy impulsami void licz() { q=millis()-time; time=millis(); } |
Do działania programu użyłem bibliotekę do obsługi wyświetlaczy 7 segmentowych, obliczanie czasu między impulsami jest poprzez funkcję millis i zmienną time, zmienna q to czas między impulsami, a zmienna a to wyliczona częstotliwość wyświetlana na ekranach. Zastosowałem warunek dzięki któremu po upływie 2s od impulsu i braku kolejnego zostanie wyświetlone zero na ekranie.
Po sprawdzeniu działania programu przyszła pora na stworzenie projektu. Schemat jak i projekt płytki PCB wykonałem
w programie EAGLE.
Jak można zauważyć na schemacie w sekcji zasilania widać trzy piny służące określeniu jakie napięcie będziemy używali do działania arduino: +5V czy np. +9V do zasilania z akumulatora w rowerze. Wybór napięcia jest poprzez zwarcie odpowiednich pinów jumperem.
Płytka została stworzona metodą termotransferu, a następnie pokryta preparatem do bezprądowego cynowania miedzi.
Po zrobieniu płytki PCB zabrałem się za lutowanie.
W obudowie wyciąłem otwór, ale jak się można było się spodziewać nie wyszedł on idealnie. Dlatego postanowiłem okleić górną część obudowy taśmą. Myślę, że wygląda ładnie.
Całość umocowana jest do kierownicy przy pomocy starego uchwytu do licznika rowerowego. Przyciąłem mocowanie licznika aby było mniejsze i przykleiłem do obudowy.
Całość prezentuje się tak:
Czujnik czyli kontaktron wraz z kondensatorem włożyłem w rurkę termokurczliwą i zabezpieczyłem oba końce klejem na gorąco aby nie dostawała się tam wilgoć. Całość przyczepiłem opaskami zaciskowymi do dolnej rurki tylnego trójkąta. Do korby przyczepiłem mocny magnes neodymowy i zabezpieczyłem go taśmą aby nie spadł. W moim przypadku odstęp wynosi ok. 5mm i wszystko działa w porządku.
Super projekt. Mógłbyś jeszcze pokazać, jak zamocowałeś czujnik przy pedałach?
Endrju: Nie ma problemu zaraz wstawię zdjęcia
Daję piąteczkę i przerzucam na główną :)
“kadencja jest to ilość obrotów korby(czyli pedałów) na minutę.”
Jeśli już, to “liczba obrotów”, ponieważ obroty są policzalne.
@Zbigniew: Urządzenie wskazuje po prostu chwilową prędkość obrotową korby wyrażoną w obrotach na minutę (co mogłeś sprawdzić czytając kod programu zanim postanowiłeś okazać wszem i wobec swoją wiedzę na temat wielkości policzalnych). Jeśli już się czepiasz to raczej tytułu (bo w rzeczywistości nie jest to licznik a obrotomierz) – pierwszy raz słyszę, aby prędkość obrotowa była wielkością policzalną.
ethanak: “duzo sera” jest niepoliczalne, “2kg sera” jest policzalne. ot cala roznica. nie doszukuj sie zbednych podtekstow.
@Zbychu: Mówisz więc, że masa jest wielkością policzalną… Ciekawe, bardzo ciekawe… znasz jeszcze kilka takich przykładów?
ethanak: na polskim to chyba spales. nie chce karmic trolla. https://kulturystykajezyka.wordpress.com/2016/02/29/ilosc-i-liczba/
@Zbychu: Niestety – jeśli Twoim ostatnim argumentem jest wyzywanie kogoś od trolli to rzeczywiście, nie mamy po co dyskutować.
Poducz się nieco matematyki i informatyki, może wtedy zrozumiesz… chociaż wątpię, bo znając podobne przypadki raczej będziesz się upierał przy swoim i żaden podręcznik nie będzie w stanie przekonać Cię, że białe jest białe ;)
ethanak: bardzo Cie przepraszam, zachowalem sie jak szczeniak. wybacz mi. jestem niedouczony. czuje sie przy Tobie taki malutki. oczywiscie masz we wszystkim racje a ja sie na niczym nie znam. ide schowac sie do norki.
Jesteś pewien, że wartość q nigdy, przenigdy nie będzie zerem?
Mimo to daję piątkę przede wszystkim za program.
ethanak: Nawet nie zwróciłem uwagi na to dzielenie :) Myślę, że nie ma szans na q=0 nawet przy jakimś błędzie(np. drganiu na połączeniu) zawsze będzie te kilka milisekund czasu.
Przykładowa sytuacja kiedy q może być zerem:
a) q wynosi 256 (mało prawdopodobne co prawda, ale może i tak szybko pedałujesz)
b) procesor pobiera młodszy bajt q, czyli zero
c) w tym momencie wchodzi przerwanie, q zmienia wartość na 255
d) po wyjściu z przerwania procesor pobiera starszy bajt q, czyli w tym przypadku 0
e) no i wartość q wynosi zero :)
Możesz tego uniknąć np. wyłączając przerwania na czas pobrania q – do tego służy makro ATOMIC_BLOCK z util/atomic.h, poczytaj sobie: http://www.nongnu.org/avr-libc/user-manual/grouputilatomic.html
Można to również zrobić bez blokowania przerwań, po prostu odczytując dwukrotnie wartość zmiennej volatile i jeśli są różne, powtarzać do skutku.
Jeśli odczytujesz tylko jedną zmienną jednobajtową możesz nie stosować tych sztuczek, ale Ty odczytujesz jedną dwu (q) i jedną cztero (time).
Tą dziadowską taśmą ostro przyjanuszyłeś ;) Bez niej znacznie lepiej. Surowy techniczny wygląd jest lepszy, niż ozdabianie na siłę.
Liczniki rowerowe posiadają funkcję kadencji i wiele innych, więc to urządzenie jest zbędne i nie rozwiązuje żadnego problemu.
Ale cieszy mnie że są tacy majsterkowicze hobbyści (młodzi technicy) jak tutaj. Może i wiele tych wynalazków to nacechowane emocjonalnością amatorszczyki, ale jest to cenne miejsce wzajemnej inspiracji. I na tym się skupcie, niż na przytykach i złośliwościach wynikających z zazdrości. Jeśli umiesz coś lepiej od kolegi, zaproponuj pomoc. Stwórzcie zespół i róbcie lepsze wynalazki :)
@zzz: jesli chodzi o moje ‘rozmowy’ ethanak to nie chodzi o zazdrosc – po prostu polski jezyk jasno okresla wielkosci (a wlasciwie rzeczowniki) policzalne i niepoliczalne. nad tym sie nie dyskutuje. nie ma o co kruszyc kopii. ethanak to kumaty facet ale najwyrazniej nie toleruje jak ktos ma inne zdanie. dlatego dalem sobie spokoj.
co do januszowania to troche masz racje. przy odrobinie cierpliwosci wykonywane otworow czy innych wyciec wychodzi ladnie. szczegolnie przy wyswietlaczach 7segmentowych to proste – wystarczy je polaczyc, przylozyc diodami do obudowy i nozem do tapet ‘pojechac’ po konturze. mamy gotowy obrys, do ktorego mamy dojsc. wystarczy wywiercic kilka otworow wewnatrz obrysu wiertlem i pozniej malym pilnikiem dopilowac plastik do obrysu wyznaczonego nozem.
@autor: jakiego preparatu do cynowania uzywales? mozesz cos wiecej napisac jak taki proces sie przeprowadza?
@Zbychu: Co do użytego preparatu to na opakowaniu było tylko napisane, że jest to „Preparat do bezprądowego cynowania miedzi”. Preparat jest w postaci proszku i trzeba go rozpuścić w wodzie o temperaturze 90 stopni(w moim przypadku 45g – 0,5l wody). Po dokładnym wymieszaniu całości, aby proszek się rozpuścił odstawiamy roztwór do ostygnięcia. Mając roztwór w temperaturze pokojowej wlewamy do jakiegoś pojemnika a następnie wkładamy do niego wytrawioną i odtłuszczoną płytkę PCB. Czas cynowania to od 5min do nawet kilku godzin w zależności jaką chcemy uzyskać warstwę cyny(możliwa do uzyskania jest warstwa od 5um do 12um). Po ocynowaniu płytkę opłukujemy pod wodą i GOTOWE, mamy ocynowaną płytkę ?
Pablo: Dobrze wiedziec. Dzieki za info. Gdybys sobie przypomnial nazwe to daj znac.
Jaki jest koszt takiego licznika?
Fajnie byłoby zmienić dwie rzeczy: zaprojektować PCB na elementach SMD, żeby nie była większa niż sam wyświetlacz oraz założyć na owy wyświetlacz ciemny czerwony filtr, podnosząc kontrast.
@Michał: Dobry pomysł, może w późniejszych projektach zacznę bawić się SMD :)
Witam serdecznie, czy była by możliwość aby dodać do wpisu, krótki filmik z prezentacją jak działa ten licznik? Projekt bardzo mnie zainteresował i jestem pełen podziwu. Pozdrawiam gorąco.
Ja użyłem tego https://botland.com.pl/wytrawiacze/5696-preparat-do-cynowania-miedzi-45-g.html
Sorry za lamerskie pytanie, nie jestem elektronikiem, jak podłączyć “stary licznik” tak aby on nadal działał, a jednocześnie dawał sygnał do Arduino zasilanego z innej baterii?
Chodzi o to, że chcę przeciąć kabelek, wpiąć się do niego z moim µC, ale żeby oryginalny licznik nadal działał jak działał.
Czy wystarczy wpiąć taki transoptor jednokanałowy https://botland.com.pl/optoizloacja/1951-transoptor-jednokanalowy-pc817-dip.html – jeden koniec rozciętego kabla do jednej nóżki, a drugi do drugiej, a z drugiej strony przewód od +5V z Arduino, a z drugiej do jakiegoś input pinu w µC?