Arduino projekt – tachometr na Scooter Yamaha Cygnus 125
V září 2011 jsme vyměnili naše auto Opel Corsa za skútr Yamaha Cygnus z roku 1997. Počítal jsem s platností novely zákona o řidičských průkazech která umožní řidičům skupiny B řídit motocykl s automatickou převodovkou až o objemu 125cc od ledna 2012. Bohužel v tento čas začaly platit v této novele všechny možné body které mě nezajímaly a tento výše popisovaný bod se do platnosti dostane až 19.1.2013.
Takže jsem získal spoustu času motorku poznat, opravit, vytunit atd. Když jsem letos v létě přičichl k Arduinu, napadlo mě, že by to mohla být cesta k „tuningu“ tachometru, předělání do digitální podoby a přidání několika dalších funkcí.
Obr 1. Toto je původní, originální vzhled tachometru na motorce
Obr 2. Vyndaná originální deska tachometru
Obr 3. A jenom takový koncept kdyby se musel použít originál, ale oživený J
Jako první věc jsem si sepsal funkce, které by mne zajímaly. Postupně je tady zmíním v jednotlivých bodech, nyní jen moje poznámky – nechce se mi to přepisovat J
Obr 4. První poznámky k tachometru
Spolu se srovnáním myšlenek na papír přišel i první návrh (omylem namalovaný obráceně) J
Obr 5. První návrh tachometru
A návrhy vytvořené již v počítači:
Obr.6 Počítačové návrhy
V prvním návrhu tachometru je patrné, že pro zobrazení aktuální rychlosti jsem zvolil třímístný LED displej. Tento koncept prozatím přežívá i dál (displej je objednán u www.gme.cz) Pod tímto displejem měly být původně tři malé (piko)LED displeje pro zobrazení celkového počtu ujetých kilometrů, denní počitadlo ujetých kilometrů a průměrné rychlosti. Ale jejich cena a nakonec i velikost nebyla příznivá, proto jsem zvolil jeden šestimístný displej, kde se tyto hodnoty budou buď samy střídat, nebo ručně přepínat. Která z nich je zrovna zobrazena, indikuje jedna ze tří diod vpravo od displeje. Možná, že tyto diody vynechám, to se uvidí, jestli samy hodnoty nebudou jasně určitelné. Nejspíš přidám ještě informaci o nejvyšší dosažené maximální rychlosti, jen pro srandu.
Ve zmiňovaném prvním návrhu jsem počítal také se samostatnými displeji pro teploměr a hodiny a LED bar pro zobrazení stavu nádrže. Opět z důvodu ceny a místa jsem se rozhodl použít již zakoupený LCD displej A1602 s dvěma řádky po 16ti znacích. Tam se mi pohodlně vejde čas, teplota a „progress bar“ stavu nádrže.
Relativně často se mi stává, že zapomenu vypnout znamení o změně směru jízdy. Proto jsem na nevyužitých stranách tachometru namaloval zelená ouška jako větší indikátory blikání. Uvidíme, zda dojde k jejich realizaci.
Do této doby bylo vše pouze a jenom o teoretické stránce věci. Připojil jsem tedy displej k Arduinu a začal psát skeč (ovládací program).
Poznámka: Arduino bude fungovat pouze jako developerská a programovací deska, vše by později mělo běžet na ATTiny do kterých pomocí Arduina nahraju ovládací programy.
Obr. 7 Displej 1602 připojený do Arduina a vložený do originálního tachometru.
Video tachometr
Displej 1602, zobrazení času, teploty a stavu nádrže
Samozřejmě člověk míní, technika mění. Už to, že budu chtít hodiny, asi nebude taková sranda. Tachometr se bude samozřejmě zapínat při otočení klíčku zapalování do polohy „ON“. Do té doby šťáva do tachometru nepoteče. Ale potřebujeme udržet v paměti stav ujetých kilometrů a další hodnoty. To by neměl být problém s nějakou záložní baterií pro paměti, ale nejspíš by se nepodařilo udržet čas. Při zapnutí tachometru (restart skeče) nebude čas nastaven, respektive bude vynulován. Musel by se nejspíš znovu a znovu nastavovat. A to by znamenalo další ovládací prvky a já chci zachovat co nejméně ovládacích prvků, ideálně nula. Jako první možnost se nabízí použít nějaký RTC (Real Time Clock) modul a ten také nakonec použiju.
Co se týče teploměru, koupil jsem digitální termočidlo Dallas 18B20, které technologií 1Wire posílá rovnou naměřené hodnoty, které bude (snad) relativně lehké číst pomocí Dallas_Temperature_Control_Library a poté zobrazovat na displeji.
Jako první jsem začal řešit zobrazování stavu nádrže. Navrhl jsem si, jak by mohl vypadat, protože použitý displej umožňuje použít uživatelsky definované znaky. Ale brzy jsem narazil na bug který se projeví při použití více než osmi definovaných znacích. Kromě znaku pro stupně Celsia vyžadoval můj návrh asi 17 znaků, takže to jsem musel zredukovat. Ubral jsem na kráse a nyní mi stačí 6 znaků včetně °C.
Obr.8 Původní návrh ukazatele stavu nádrže
Měřící modul stavu paliva v motorce mění svůj odpor v závislosti na výšku hladiny. Podle technických informací dostupných na internetu 1,5 – 7,5 Ω při 20°C a plné nádrži, 900 – 1000 Ω při prázdné. To mi moc nepomohlo J, navíc když elektrické schéma, které mám k dispozici, zčásti neodpovídá realitě. Ale to půjde. Snad. Mám skoro prázdnou nádrž a na kabelu vedoucímu k původnímu ukazateli jsem naměřil napájecí napětí (předpokládal jsem ho snížené tím odporem 1K, ale bylo to naopak). Uvidíme, co naměřím po dolití benzínu.
Nicméně předpokládám, že výstupem bude nějaký rozsah napětí, na který nastavím vstup a zobrazím výstup na displeji. Nyní ho simuluji potenciometrem.
Tímto jsem popsal spodní řádek displeje a jukneme na vrchní. Vlevo čas, vpravo teplota. Původně jsem myslel, aby bylo pochopitelné, že se zobrazuje čas, tak že bude blikat dvojtečka mezi hodinami a minutami. Sekundy v zobrazování neřeším, zbytečně by rušily. Dvojtečku jsem tedy v sekundových intervalech rozblikal, ale v tuto chvíli přestalo fungovat korektně zobrazení stavu nádrže, protože mu nestačil vteřinový interval k refreshi. V reálu by předpokládám stačil, benzín tak rychle nemizí, je možné, že to po nějakých testech znovu vyzkouším. Ale čas prozatím zobrazuji v závislosti na počtu milisekund od startu skeče, od nuly. Nemá to nic společného s reálným časem. To vyřeším později, jak jsem psal výše.
Pokračování příště…