Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:goal-counter

Počítadlo gólů

Zadání

Navrhněte zařízení sloužící k počítání gólů pro stolní fotbal. Zařízení realizujte pomocí mikrokontroléru FRDM-K64. K zobrazení skóre hry využijte RGB LED pásek s obvodem WS2812. Napájení uvažujte přes USB rozhraní.

Úvod

Cílem tohoto projektu je vytvořit zařízení pro počítání gólů pro hru stolní fotbal. Je tedy nutné vybrat vhodnou metodu detekce průletu míčku brankou. Míček může brankou prolétnout rychlostí až 56 km/h (zdroj: http://www.foosball-league.com/?pid=57) a je také poměrně malý - v průměru měří 34 mm. K zobrazování skóre hry je zvolen RGB LED pásek s obvodem WS2812, který umožňuje adresování každé LED diody zvlášť, obvod ale vyžaduje poměrně přesné časování pulzů.

Hardware

WS2812

WS2812 je LED dioda s integrovaným zdrojem konstatního proudu a posuvným registrem v pouzdře SMD 5050. Je možné ji zapojovat sériově za sebou a vytvořit tak řetěz diod, nebo matici. Každá LED dioda má maximální proudový odběr 20 mA, pro jednu RGB LED diodu to činí 60 mA. V našem případě budeme používat řetěz deseti RGB LED diod znázorňujícíh skóre hry. Napájecí napětí je 5 V, budeme tedy potřebovat zdroj schopný dodat alespoň 1,2 A.

Je vhodné ještě k napájení zařadit kondenzátor o větší kapacitě k vyhlazení proudových špiček, které by mohly poškodit LED diody, zvolil jsem kondenzátor o kapacitě 1uF.

Obvod WS2812 pro komunikaci vyžaduje 5 V logiku, ale FRDM K64 používá 3,3 V logiku TTL, takže bude nutné použít převodník logických úrovní, dají se použít například obvody řady 74HCTxxx.

FRDM K64F

Celým názvem NXP (Freescale) Freedom K64F je vývojová deska pro mikrokontrolér NXP Kinetis MK64FN1M0VLL12 založený na procesoru ARM Cortex M4 o frekvenci 120 MHz, 1 MB flash paměti a 256 kB RAM. Rozměry je kompatibilní se shieldy pro Arduino. Deska mimo jiné obsahuje i ethernet.

Senzor průchodu míčku bránou

Jako možný způsob detekce se nabízí použití optické závory v podobě IR LED diody a fototranzistoru, případně laserová dioda, kde dá využít přesné ohraničení brankoviště. Já jsem pro projekt zvolil laserovou diodu kvůli lepšímu vymezení polohy brankoviště.

Software

Použita je platforma Mbed, což je plně webové vývojové prostředí pro ARM Cortex-M mikrokontroléry. Kompilace kódu probíhá v cloudu, uživatel si poté stáhne připravený binární soubor, který nahraje do paměti mikrokontroléru pomocí DAPLink firmwaru. Klíčovým prvekm tohoto prostředí je sada knihoven napsaných v jazycích C a C++ nazvaná Mbed OS.

Výhodou tohoto prostředí je rychlost s jakou jsme schopni vytvořit první prototyp a také poměrně velká komunita produkující spoustu užitečných knihoven. Nespornou nevýhodou ale je malá podpora periferií v Mbed OS, v hodně případech tak jsme odkázáni pouze na softwarové řešení problémů, které by bylo mnohem vhodnější řešit hardwarovou periferií.

Řízení LED pásku WS2812

Na diodě jsou přítomny čtyři piny - VDD, tedy napájení 5 V, GND, DOUT, digitální výstup a DIN - digitální vstup. Posuvný registr obsahuje 24 bitů - 8 bitů pro každou barvu v pořadí GRB (zelená, červená a modrá), zbytek je posunut na digitální výstup. Každý 8bit určuje jas dané LED diody.

Obvod WS2812 je poměrně dost náchylný na přesné časování pulzů, tolerance je pouze v rozmezí 150 ns. Frekvence signálu je přitom 800 kHz. Generace signálu se dá řešit vícero způsoby, například s pomocí přesného časovače a generování přerušení, nebo pomocí DMA (Direct memory access - přímého přístupu do paměti), se kterým jsme schopni zapisovat do nějakého registru bez pomocí CPU.

Výše zmíněné způsoby, ale nejsou vhodné pro použití s Mbed OS, protože zde nejsou k dispozici knihovny pro obsluhu DMA. Bylo by sice možné použít přímého zápisu do registrů, ale bylo by to velmi zdlouhavé a odporovalo by to „filozofii“ platformy Mbed.

Nabízí se tedy ještě jedna - méně elegantní - možnost a to generovat signál pomocí kódu napsaného v assembleru u kterého můžeme spočítat přesnou délku trvání. Tato metoda se také nazývá „bit banging“ a její nevýhoda je v náročnosti na CPU a také v závislosti na taktovací frekvenci procesoru.

Knihovnu využívající bit banging pro řízení WS2812 už vytvořil Brian Daniels a je k dispozici v repozitáři Mbed pod názvem WS2812. Signál je generován pomocí vkládání přesného počtu instrukcí NOP (No operation), počet instrukcí, které se takto vkládají je nastavitelný v konstruktoru. Během generování signálu je samozřejmě nutné vypnout obsluhu přerušení.

Pro ověření, že generovaný signál opravdu odpovídá specifikacím je dobré použít logický analyzátor. Níže uvedené měření je provedeno na logickém analzyátoru Saleae Logic Pro.


T0H Symbol, doba trvání 364 ns leží v povoleném intervalu 200 až 500 ns.

 T0H Symbol


Detekce průchodu míčku bránou

Vzhledem k malé velikosti míčku a malému rozměru brankoviště připadají v úvahu optické metody detekce s pomocí fototranzistoru a nějakého zdroje světla. Protože je brankoviště ohraničené, tak bude dobré použít světlo směrové.

Zvolil jsem proto laserovou diodu, která umožňuje přesně ohraničit brankoviště a zároveň je s ní možně měřit rychlost průletu míčku brankou.

Zároveň ale je nutné pokrýt větší plochu, takže můžeme použít linkovou fresnelovu čočku, která nám z bodu vytvoří linku a tak můžeme pokrýte celé brankoviště i v případě že se míček prolétne vzduchem.

Ve vytvořeném prototypu jsem ale použil pouze jednoduchý laser, protože objednaný laser s fresnelovou čočkou došel požkozený.

Softwarová implementace detekce je závislá na třídách InterruptIn a Timer v mbed. InterruptIn poskytuje obsluhu přerušení na GPIO a Timer je jednoduchá implementace časovače.

Po detekci sestupné hrany je vytvořeno přerušení, které spustí časovač a po detekci vzestupné hrany je časovač zastaven, je ověřeno jestli pulz netrval déle než 2 vteřiny a pokud ne, je to prohlášeno za gól a čítač skóre je inkrementován.

Také je nutné ošetřit případ, kdy se míček odrazí od zadní strany brankoviště, aby nebyl gól započítán dvakrát. Ukládám si proto i čas průletu předchozího gólu. Gól je uznán pouze pokud doba mezi dvěma góly není kratší jak půl vteřiny.

Měření rychlosti průletu míčku bránou

Laserová dioda umožňuje přesné ohraničení. Se znalostí průměru míčku a doby průletu (šířka pulsu mezi dvěma hranami), jsme schopni - nepříliš přesně - změřit rychlost průletu brankovištěm. Nepřesnost je dána hlavně tím, že jsme schopni změřit rychlost pouze v přímém směru.

Rychlost v km/h, proměnná balltime je interval mezi dvěma hranami vyjádřený v sekundách.

float speed = 0.034f/balltime*3.6f;

Z měření, které jsem provedl na prototypu zařízení vyšlo najevo, že průměrná rychlost průletu míčkou brankou se pohybuje mezi 5 až 15 km/h. Nejvyšší naměřená rychlost míčku při přímé střele na bránu byla 18 km/h.

Komunikace s PC po sériové lince

Komunikace s PC je realizována po sériové sběrnici UART vyvedené na portu USB. Po každém gólu jsou odesílány informace o skóre, době průletu míčku brankovištěm a rychlosti. Po ukončení hry se vypíšou informace o každě střele.

Ukázka komunikace

Side 1 score 

Score : 9 

Time of ball pass : 0.021904 seconds

Speed of ball (34 mm diameter) : 5.588023 kph

Side 1 score 

Score : 10 

Time of ball pass : 0.017052 seconds

Speed of ball (34 mm diameter) : 7.178171 kph

Game over 

Team 1 is winner

Zdrojový kód aplikace a dokumentace

Video a fotografie

Video demonstrující animaci vítěze

Vylepšení

Dostal se mi do ruk poměrně zajímavý vývojový kit NXP OM40006 obsahující mikrokontrolér LPC54000 a také displej s dotekovou vrstvou, kde by se dala implementovat grafická vrstva pro obsluhu počítadla. Na fotografii níže je demo aplikace návrhu počítadla.

Závěr

Navrhované zařízení bylo sestaveno na nepájivém poli a experimentálně vyzkoušeno na hracím stole stolního fotbalu. Avšak pro praktické použití takového počítadla je nutné vymyslet jak senzory zabudovat do stolu aby nepřekážely při hře.

Při návrhu a programování se také projevily některé nedostatky zvolené platformy Mbed a to zejména horší debugování a malá podpora hardwarových perifierií a také občasná neaktuálnost dokumentace API. Nicméně platforma je to zajímavá a to zejména z důvodu integrace téměř plnohodnotného IDE do webové stránky.

Zdroje

2018/goal-counter.txt · Poslední úprava: 2019/01/14 21:12 autor: Marek Vitula