Massimo Banzi Vám dnes předvede, jak lze s Arduinem a WiFi shieldem sestavit lampu, jejíž barvu budete moci nastavit přes Twitter!
Massimo Banzi Vám dnes předvede, jak lze s Arduinem a WiFi shieldem sestavit lampu, jejíž barvu budete moci nastavit přes Twitter!
Vítejte u třetího z čtyřdílné série článků sledujících postup týmu čtyř gymnazistů Česko-Evropskou soutěží CanSat. V tomto díle trochu zaktualizujeme softwarovou část a podrobně probereme naše řešení po stránce hardwaru.
Od doby posledního článku se mnoho změnilo a jednou z těchto věcí je řešení vnitřního systému sondy. Z důvodu technických potíží jsme byli nuceni odstoupit od původního plánu mít ve vzduchu dva nezávislé procesory, jeden pro sběr dat a jejich odesílání, druhý pro obstarávání kamery a ukládání fotek a dat. Výsledné řešení má tak v sondě jen Seeeduino Mega2560, které po vyfocení obrázku ve smyčce ukládá jeho části a každou vteřinu (determinovanou časem modulu GPS) provede datosběrnou a odesílací rutinu. Výsledkem bylo celkové zvýšení složitosti kódu a výrazné zpomalení ukládání obrázku, jak může být patrné z přiloženého flowchartu.
Toto zredukování počtu součástek v satelitu znamenalo také snížení hmotnosti celého zařízení, které jsme museli následně kompenzovat rybářským závažím. Jak tedy vypadá výsledný model? V jeho středu je univerzální plošný spoj, vytvářející jakýsi shield pro Seeeduino spojující ho se všemi ostatními moduly. Pro napájení jsme zvolili standartní 9V baterii, pro její dostupnost a poměr mezi cenou, výkonem a velikostí. Dále pak dobře pokračuje v naší snaze udělat celou sondu co nejmodulárnější a nejjednodušší na opravu a údržbu.
V konečné podobě byla kostra tvořena dvojicí tenkých ocelových šroubovic, na kterých byly po obou stranách připevněny námi navržené a vytisknuté plastové krytky. Krytky jsou samozřejmě vybaveny otvory pro kameru a závěsné očko, použité pro připevnění CanSatu k dronu.
Co se tedy vnitřností týče, pro přenos dat jsme použili rádiový transceiver RFM69HW na frekvenci 433 MHz. Jeho hlavními přednostmi je několikakilometrový dosah při použití Yagi antény a možnost výběru 256 kanálů na dané frekvenci. Modul komunikuje rozhraním SPI s logikou založené na napětí 3.3V, takže byl zapotřebí pro konverzi přidat Low Level Converter pro převod 5V logiky ze Seeeduina.
Teplotu a tlak snímáme barometrickým a teploměrným senzorem BMP180, komunikujícím přes I2C. Tlak měří s přesností zhruba 0.02 hPa, která odpovídá 0.17 metrům výšky a teplotu s přesností +- 2°C. Oba moduly jsme dostali jako startovní kit od pořadatelů soutěže a pro jejich ovládání jsme využili knihovnu qbcan distribuovanou společně s nimi.
Námi přidané komponenty jsou kamera, akcelerometr, GPS a čtečka microSD karet, všechno dodané naším sponzorem HW Kitchen. Jako fotoaparát jsme použili kamerový modul LinkSprite LS-Y201-2MP. Ten nabízí rozlišení až 2 Megapixely a exportuje fotky do formátu JPEG. Komunikuje přes UART, vyžaduje 5V napájení a má rozměry 32.0 * 32.0 mm (více informací).
Pro měření akcelerace jsme použili digitální akcelerometr ADXL345. Jedná se o velmi kompaktní senzor s měřící stupnicí až +- 16 g, s možností komunikace jak přes SPI, tak I2C – my jsme využili druhé možnosti (více informací).
GPS modul pro synchronizaci sběru dat a eventuální lokalizaci přistávšího CanSatu jsme použili model EM-506, poháněný 5V, s vysokou přesností a relativně rychlým časem pro spojení se s družicemi, komunikuje rovněž přes rozhraní UART. Velmi důležité byly i rozměry 30.0 * 30.0 * 10.7 mm (více informací).
Všechna data jsme zároveň s odesíláním také ukládali na microSD kartu přes Breakout Board for microSD Transflash, komunikující přes SPI, jehož hlavní předností jsou miniaturní rozměry 21 * 22 mm.
Padák jsme si zhotovili vlastní z ripstopu (látka obvykle používaná pro stavbu padáků, vyznačující se velkou odolností proti trhání a počasí) o průměru 375 mm a hloubce 185 mm. Pád sondy jsme tak zpomalili na zhruba 9 m/s.
Celkem jsme se tak bez větších potíží vešli do pravidly stanovených rozměrů cylindru o výšce 115 a průměru 66 mm. Jak jsem zmínil výše, sonda měla sama o sobě 241 gramů a bylo jí tak třeba zatížit pro výsledných 322 g s padákem, abychom se vešli do limitu 300 – 350 g.
Zkušení kuchaři to asi mají v krvi, ale pro nás, obyčejné smrtelníky, může být odhadnutí správného momentu, kdy je steak hotový, docela oříšek. Studenti Rice University proto vytvořili speciální teploměr určený pro grilování. Tým tvůrců mluví o svém projektu Meatmaster, jako o spáse pro všechny začínající kuchaře.
Na teploměr jsme použili kompozit různých zdravotně nezávadných materiálů – převážně plastu. Po obvodu sondy jsme umístili zlatem potažené měděné plátky. Pod každým z nich se skrývá termistor připojený k Arduinu, které zobrazuje jednotlivé teploty na LCD displeji.
Pokud teploměr zapíchnete do masa, poskytnou termistory teplotní profil steaku, což umožní ugrilovat ten nejšťavnatější steak.
Použitím materiálu tvořeného převážně plastem jsme se vyhnuli nechtěnému přenosu tepla, ke kterému by docházeli při použití například oceli. Celou sondu jsme vytiskli na 3D tiskárně. Tím jsme mohli dosáhnout těsné blízkosti termistorů u měděných plátků a tedy rychlé reakci na změnu teploty plátku.
Podle tvůrců jejich teploměr funguje skvěle a nyní získávají zpětnou vazbu od uživatelů. Komerční plány zatím s Meatmasterem nemají. Autoři nyní pracují na jeho postupném vylepšování. Zvažují například zvýšení výdrže na baterii (na 9V baterii až půl roku), přidání dalších senzorů, zvýšení teplotního rozsahu a také změnu materiálu samotné sondy.
Máme tedy své nové Arduino UNO WiFi … Ale co teď? Jak se připojím? Co je to ten Web Panel? … Na všechny tyto otázky si nyní odpovíme.
Pro začátek bych rád poznamenal, že Arduino UNO WiFi je momentálně plně kompatibilní jen s vývojářským prostředím (IDE) dostupným na arduino.org. Odkaz ke stažení ZDE: http://www.arduino.org/downloads
Pro upload projektů s deskou pracujeme stejným způsobem, jako s každou jinou Arduino deskou – v nástrojích zvolíme “Vývojářská deska: Arduino UNO WiFi” a poté patřičný sériový port (nebo také síťový port – budeme o něm mluvit později).
Hned po oživení desky je potřeba chvíli počkat. Jakmile se deska rozeběhne, je v modu AP+STA, což znamená, že integrované ESP8266 se chová jako přístupový bod i stanice zároveň – to nám umožňuje se k němu připojit jako ke každé jiné WiFi síti, třeba pomocí notebooku, či mobilu.
Po připojení k síti Arduino-Uno-WiFi-xxxxxx pak stačí do internetového vyhledávače zadat adresu http://192.168.240.1/ a po připojení se nám zobrazí Arduino Web Panel. V tomto panelu můžeme nastavit všechny důležité aspekty připojení.
Web Panel má jednoduché menu, které se skládá z položek PŘEHLED, WIFI KONZOLE, NASTAVENÍ WIFI, NASTAVENÍ PŘIPOJENÍ MQTT, SLIP a DEBUG INFORMACE (jak lze vidět na obrázku). Umožňuje nám z webového prohlížeče nastavit nejen WiFi, ale i služby MQTT a SLIP užitečné třeba pro logování a následný přístup k informacím posílaných vaší meteostanicí například. Může ale také sloužit jako “sériový monitor v prohlížeči”.
Pojďme si nyní projít jednotlivé položky Web panelu.
PŘEHLED nám podává informace ohledně parametrů ESP a další informace.
WIFI KONZOLE – WiFi konzole je užitečná pro zobrazování výsledků a informací při nahrávání projektu. Taky je tu možnost resetovat ESP.
*Položka WiFi konzole měla dříve název Serial Monitor
NASTAVENÍ WIFI nám umožňuje podle autorů nastavit adresu ve formě “hostname”.local/ pro připojení k Web panelu (místo zadávání IP adresy 192.168.240.1), ale tuto funkci nemůžu zaručit, protože se nám zatím nepovedlo jí přijít na kloub.
Zde je také možnost připojení Arduino desky k vašemu domácímu routeru a nastavení dynamické, nebo statické IP adresy.
Po připojení lze přepnout mód ESP na stanici, která nám umožní přístup k nahrávání projektů přes WiFi. Mód STA také chrání vaše Arduino před možnými útoky z venčí, protože se deska přestane chovat jako otevřená síť.
NASTAVENÍ PŘIPOJENÍ MQTT a SLIP
A konečně DEBUG INFO ukazuje debug informace a je zde možnost restartovat WiFi.
Mám tedy své Arduino UNO WiFi, nějak rozumím, na co Web Panel je, ale jak ho připojím k internetu?
Dobře. Připojil jsem se, teď chci nahrát projekt bezdrátově!
Pro nahrání projektu využijeme technologii OTA (Over The Air)
Možné komplikace mohou nastat. Většinu komplikací ale vyřeší pouhé restartování desky, IDE, nebo chvilka čekání.
To je z úplných základů všechno, příště se od nás můžete těšit na letní projekt!
Matěj & Martin
Zdroje:
http://labs.arduino.org/Arduino+UNO+WiFi+Web+Panel
http://www.arduino.org/learning/getting-started/getting-started-with-arduino-uno-wifi
http://labs.arduino.org/Getting+Started+with+Arduino+UNO+WiFi#First_Configuration
V rámci festivalu dronů a bezpilotního létání DronFest 2016 proběhla na stánku Arduino.cz a HW Kitchen soutěž o bezpilotního robota mBot :-).
Tento Arduino robot dokáže sledovat čáru, vyhýbat se překážkám, snímat světlo, barevně blikat, bzučet a nebo si nechá připojit některý z rozšiřujících modulů. Ovládat se dá přímo z mobilu nebo dálkovým ovladačem. Programování je možné barevnými kartičkami z prostředí podobné Scratch. Dá se na něm užít zábava, ale taky se jednoduše naučit programovat. Ano, o něj přesně jsme hráli.
A teď k věci!
„Co je to Arduino?“
Byla důležitá otázka pro účast v naší soutěži…
Někteří z vás hned věděli, jiní si šli šalamounsky ověřit informace na arduino.cz, další koukali kolem sebe a hledali očima radu v jiných očích nebo nápovědu na stánku, jiní se šli poradit za tatínkem a někteří slyšeli tohle slovo poprvé…
Vaše odpovědi byly například: vývojová platforma pro každého, mňamka pro kutily, řídící deska, základní deska jako nejdůležitější část robota, budoucnost zábavy, robot s úsměvem, volně programovatelný automat, vývojové prostředí, open source projekt, malý jednoduchý počítač, mini robot pro zábavu, 1čipový počítač bez OS, technologie co se dá programovat, super projekty, malý jednodeskový počítač, programovatelný mikrokontrolér, obrázkové programování, open source platforma, HW + SW pro vývoj, bastlení a zábava, programovatelná stavebnice, zábavný a jednoduchý systém programovatelné elektroniky, různorodá zábava, mikropočítačová stavebnice, programovatelná základní deska, minipočítač pro snímání ovládání a výpočty, řešení pro modeláře a šikuly na práci s elektronikou, pěkný robot, deska s možností vložení vlastního SW, platforma přes kterou se dá naprogramovat cokoliv, prostředí pro průmyslové aplikace, věcy co jsou automatycke, záhada (k odhalení), svět nekonečných možností, super věc, inteligentní deska s procesorem, jezdící robot na ovládání, hustej robot MBOT, programovací jazyk, robot s úsměvem, programovatelné destičky, modulární mikropočítač, nástroj pro tvorbu počítače s větším citem pro fyzický svět než běžné PC…
ufffff, příště asi bude otázka: „Co není Arduino…“
Každopádně jste byli skvělí a všichni jste měli s odpověďmi více méně pravdu!
Ale vyhrát může jen jeden.
Výhercem soutěže o robota mBot je:
Veronika Nováková
Veronice gratuluji k výhře a všem děkuji za účast a těším se zase na nějakou soutěž s vámi!
Kávový stolek může být použit různými způsoby – jako podložka pod nápoje či pochutiny, jako odkládací plocha pro všechno možné, jako designový doplněk místnosti, nebo jako ústřední bod konverzace s přáteli. Doteď však nebyl použit jako hudební vizualizér. Díky návodu na stránkách časopisu Make je to nyní možné!
Mimo stolek samotný, který je vlastně jedna z nejlevnějších věcí na celém projektu, budete potřebovat maticový LED displej, mikrofon, Arduino UNO a pár dalších elektronických součástek. To vám umožní vizualizovat hudbu, která zrovna v místnosti hraje. Dobrou zprávou je, že stolek nepotřebuje velké napětí, takže je možné ho napájet z obyčejné nabíječky na mobilní telefon.
Projekt je založený na Hudebním Vizualizéru Piccolo od Adafruitu, který využívá I2C multiplexor pro ovládání 8×8 dvoubarevného maticového displeje. Odsud také pochází kód programu, stejně jako zapojení projektu. Stolek je tedy zvětšenina Vizualizéru Piccolo.
Stačí zapojit do libovolné nabíječky s USB, pustit si oblíbenou muziku a už si jen užívat tanec a fontány LED diod na velkém maticovém displeji.
Kompletní návod s obrazovou dokumentací si můžete prohlédnout na stránce projektu.
V prvním článku ze seriálu věnovanému programování obecně jsme si popsali různé typy programovacích jazyků a ukázali jsme si, jak přibližně vypadají programy v nich napsané. Také jsme došli k tomu, že C++, ve kterém se běžně Arduino programuje, je objektově orientovaný jazyk. A právě objektově orientovaným programováním se dnes budeme zabývat.
Některé z vás jsem teď možná zmátl. Tvrdím, že Arduino se běžně programuje v C++. V předchozích článcích jsem ale tvrdil, že Arduino programujeme v jazyce Wiring. Skutečnost je taková, že Wiring je knihovna pro jazyk C++, která zjednodušuje programování Arduina. Jelikož běžný uživatel Arduina většinou neví, jaká konstrukce pochází z C++ a jaká je specifická pro Wiring, ujalo se v Arduino komunitě pojmenování jazyk Wiring. To je sice z technologického hlediska nesprávné označení, ale pro naše účely není nutné mezi C++ a Wiring přesně rozlišovat.
Základním prvkem objektově orientovaných (dále OO) jazyků je objekt. Objekt je konkrétní věc – například pes Alík. Abychom mohli takovéto objekty vytvářet, potřebujeme nějaký vzor – řekněme vzor, který si nazveme pes. Takovému vzoru se v OO programování říká třída. Ta nám definuje vlastnosti – parametry a schopnosti – metody objektu. Podle třídy pes je možné vytvořit libovolné množství psů – pes Alík, pes Žeryk, pes Punťa… Těmto konkrétním objektům se říká také instance třídy pes. Jak by mohla vypadat třída pes? Třeba takto:
class Pes{ private: String jmeno = ""; int vyska = 0; public: Pes(String, int); void stekej(); }; //tady opravdu musí být středník!
Odbočka do terminologie. Funkcím, které náležejí objektu se říká metody.
Máme tedy objekt pes, který má parametry jmeno a vyska a umí štěkat pomocí metody stekej. Všimněte si, že jmeno a vyska jsou uvozené návěštím private. Tyto proměnné jsou označeny za „soukromé“. Bude k nim možné přistupovat pouze uvnitř metod objektu. Naopak návěští public označuje parametry a metody, které jsou dostupné i vně objektu – tedy je možné je volat v rámci programu. Metoda Pes() (která má stejný název, jako objekt samotný) je speciální a říká se jí konstruktor. Pomocí konstruktoru dochází k vytváření nových instancí třídy Pes. V rámci konstruktoru můžeme například nastavit hodnoty privátních parametrů podle parametrů konstruktoru a podobně. Konstruktor se definuje takto:
Pes::Pes(String jm, int vy){ jmeno = jm; vyska = vy; }
Parametry vytvořené instance třídy Pes se nastaví na zadané hodnoty. Ještě nám zbývá vytvořit metodu stekej.
void Pes::stekej(){ Serial.print(jmeno); Serial.print(" steka "); Serial.println("Haf!"); }
Nyní tedy máme šablonu, podle které můžeme vytvořit různé konkrétní psy.
Pes alik("Alik", 100); //pes Alik vysoký 100cm Pes zeryk("Zeryk", 60); //pes Zeryk vysoký 60cm
A ještě zbývá psy trochu popíchnout, aby zaštěkali.
alik.stekej(); zeryk.stekej();
Celý program, který nechá psy zaštěkat, tedy vypadá následovně:
class Pes{ private: String jmeno = ""; int vyska = 0; public: Pes(String, int); void stekej(); }; //tady opravdu musí být středník! Pes::Pes(String jm, int vy){ jmeno = jm; vyska = vy; } void Pes::stekej(){ Serial.print(jmeno); Serial.print(" steka "); Serial.println("Haf!"); } Pes alik("Alik", 100); Pes zeryk("Zeryk", 60); void setup() { Serial.begin(9600); Serial.println("Smecka"); alik.stekej(); zeryk.stekej(); } void loop() { }
Možná si říkáte, že je sice hezké, že máme vytvořenou třídu Pes, ale k čemu nám je u Arduina platná? Ukažme si tedy nějaký jednoduchý praktický příklad.
class LED{ private: int pin; boolean stav = LOW; //výchozí stav LED je vypnuto void nastav(boolean); public: LED(int); void zapni(); void vypni(); void prepni(); boolean vratStav(); }; LED::LED(int p){ pin = p; pinMode(pin, OUTPUT); digitalWrite(pin, stav); } void LED::zapni(){ nastav(HIGH); } void LED::vypni(){ nastav(LOW); } void LED::prepni(){ nastav(!stav); //nastaví LED na obrácenou hodnotu (0->1, 1->0) } void LED::nastav(boolean s){ stav = s; Serial.print("Nastavuji "); Serial.print(stav); Serial.print(" na pinu "); Serial.println(pin); digitalWrite(pin, stav); } boolean LED::vratStav(){ return stav; } LED L13(13); void setup() { Serial.begin(9600); L13.zapni(); delay(1000); L13.vypni(); delay(1000); for(int i = 0; i <= 10; i++){ L13.prepni(); delay(500); } Serial.print("Led zustala ve stavu "); Serial.println(L13.vratStav()); } void loop() { }
Jedná se o velice jednoduchou třídu sloužící k ovládání LED diody. Její public metody jsou zapni, vypni, prepni a vratStav (jejich název je snad dostatečně popisný ). Všimněte si, že třída LED obsahuje i private metodu nastav, která slouží k nastavení stavu LED a zároveň k výpisu stavu na sériovou linku. Metoda nastav je volána uvnitř jiných metod třídy LED. Také je zde předvedena technika, která se používá k získání hodnot privátních parametrů objektů. Přímo k parametru stav bychom se totiž pomocí L13.stav nedostali, proto musíme využít nějakou public metodu.
To byl letmý úvod do OO programování. O jeho dalších principech více zase příště.
Vítáme vás u posledního článku ze seriálu sledujícího postup studentů soutěží CanSat. Letošní ročník skončil a nastává čas pro ohlédnutí se po onom půlroce práce a zhodnocení úspěchů a neúspěchů.
Finále prvního českého ročníku soutěže CanSat se uskutečnilo v pátek a sobotu 31. března a 1. dubna. Odehrávalo se na letišti v Jaroměři, asi 20 km severně od Hradce Králové. Satelity byly vypouštěny v pátek odpoledne, poté co týmy dostaly možnost provést poslední úpravy svých CanSatů a také poté, co dostaly oběd. Počasí bylo vhodné, s čistou oblohou a nepříliš četnými vzdušnými proudy.
Pro nás to byl čas, kdy jsme poprvé objevili chyby, které mohly výrazně ohrozit kompetenci našeho výtvoru soutěžit. Začínalo se ukazovat, že naše volby materiálů a konstrukce samotné mají své výhody, ale v té chvíli také mnohem výraznější nevýhody. Z důvodu pevnosti jsme zvolili jako vnější obal ocelovou plechovku. Avšak jelikož jsme pro přenos dat na pozemní stanici využili rádiového signálu, bylo kritické mít obě antény na sebe správně kalibrované. Vnější kovový obal a dost možná i přílišná blízkost ostatních komponent ve stísněném prostoru satelitu výrazným způsobem narušila sladěnost obou antén. Bohužel jsme si nevyzkoušeli již dříve před startem metodu napájení a naše volba 9V baterie se ukázala jako nedostačující pro náš energeticky velmi náročný systém. To v kombinaci se závislostí GPS modulu na napětí 5V a závislostí našeho systému na GPS modulu vyústilo v nepříliš přesvědčivou funkčnost celku. Ale jak se ukázalo později, mnohem větší problém představovaly spájené spoje, na které byl vystaven poměrně velký tlak při manipulaci se sondou a jejím pádu. Výsledkem tedy bylo selhání rádiové komunikace mezi satelitem a zemí a částečné poškození souborů nahraných na microSD kartu (nasbíraná data jsou dostupná zde). Vzhledem k tomu, že rádiový přenos je jedno z hlavních kritérií pro postup, náš tým nepostoupil do evropského kola.
Měli-li bychom zhodnotit projekt jako celek a jeho přínos pro nás, nemůžeme než říci, že to byl půlrok nanejvýš přínosný a prozkoušel naše schopnosti jako jednotlivců, tak i jako týmu. Dal nám příležitost vyzkoušet si práci na něčem skutečném, ve skutečném světě. Sháněli jsme sponzory, možnosti popularizace projektu, seznámili jsme se s problémy realizace něčeho, co přesahuje rámec školního referátu, nebo laboratorní práce. Zejména v posledním týdnu před startem a při startu jsme pracovali v časové tísni a pod tlakem, ale i přes to byla práce na CanSatu zkušenost nanejvýš cenná, která nás učila nejen zacházet s Arduinem a programovat pro něj, ale i jak si efektivně rozdělit práci a srovnat se s porážkou.
Samozřejmě tohle všechno by nebylo možné bez podpory a nutno dodat neskutečné shovívavosti pana Oldřicha Horáčka, firmy HW Kitchen a Microsoft CZ, kterým bychom chtěli poděkovat za jejich sponzorské dary a trpělivost s námi.
Tímto za tým The Almighty Lobsters děkuji také vám, čtenářům serveru Arduino.cz, za podporu a čas, který jste strávili nad našimi články. A jste-li studenty středních škol, neváhejte a zúčastněte se příštího ročníku české soutěže CanSat, jedná se o neopakovatelnou zkušenost.
I my klukům děkujeme za zajímavé články a přejeme spoustu úspěchů. Doufáme, že se tímto neúspěchem nenechají odradit
Zdravím!
Dnes bych vám chtěl ukázat, čím se poslední dobou zabývám.
Chci vás provést v pár článcích návrhem a stavbou loďky bezdrátově ovládané deskou Arduino UNO WiFi!
Počáteční nápad: Vytvořit plně funkční, dobře ovladatelnou, stabilní loďku ze všedních materiálů, která vám neutopí vaše zbrusu nové UNO WiFi.
Počáteční řešení: Měl jsem hodně z čeho vybírat, a to jak materiálově, tak konstrukčně. Materiálově se mi nabízely možnosti, jako jsou PET láhve, polystyren, dřevo, balza či koupě plastového modelu a úpravy ve formě přidání dálkového ovládání. Ale já si vybral krabici od džusu. Džusu Relax, příchuť jablko. Poté jahoda, abych byl přesný.
A ovládání? Jasně že smartfoun! Smartfouny, neboli chytré telefony totiž mají hromadu senzorů a funkcí, které mohou opravdu zpestřit ovládání (třeba ovládání náklonem telefonu, či hlasitostí jekotu menších námořníků). Také není zapotřebí programovat si své ovládací aplikace, protože už existují appky jako je roboremo, či bluetooth electronics, kde si lze vytvořit vlastní ovládací GUI (Grafické uživatelské rozhraní).
První konstrukce: Zvolil jsem tělo z jedné krabice doplněné o motor s lodním šroubem a kormidlem.
Na první pohled geniální nápad, protože loďka vůbec nevypadá špatně. Nicméně jsem se dostal do problémů se stabilitou a prostorem, protože baterie, mechanismus kormidla, motor a samotné UNO WiFi s motor shieldem není zrovna jednoduché poskládat do prostoru, které krabice nabízí. Pojem stabilita navíc loďka vůbec neznala… Kymácela se ze strany na stranu jen při položení na klidnou hladinu vody. Pokusy o zvýšení stability se moc nedařily, tak jsem přistoupil na řešení pontonové.
Stabilita se tímto vyřešila. Následuje první pokusná plavba.
Při této zkušební plavbě jsem se ale rozhodl změnit design lodě. V této chvíli jsem totiž měl Arduino volně na palubě bez nějaké vodotěsné ochrany, na tu už prostě nezbylo místo. Navíc lodní šroub nebyl plně pod vodou, tak to víc “prdělo”, jak podotknul můj mladší bráška, než jelo. A navíc kormidlo taky není to pravé ořechové. Proto je čas na změnu. Změnu, na kterou se můžete těšit do dalšího pokračování.
Co si vlastně pod pojmem hacknutí servo motoru představit? V principu nejde o nic složitého, jedná se o úpravu servo motoru tak, aby se bez omezení dokázal otáčet kolem své osy. Hlavní výhodou je získání motoru s převodovkou, který lze řídit přímo pomocí Arduina. Upravený motor se otáčí na základě přijímaného signálu. Ukažme si to na na konkrétních příkladech servo řízení. Pokud nahrajeme do Arduina zdrojový kód obsahující příkaz: servo.write(0), znamená to plný chod motoru vpřed. Příkaz servo.write(90), zajistí zastavení motoru a při použití příkazu servo.write(180), se bude motor otáčet plným chodem vzad. Mimo těchto konkrétních čísel lze využít celý rozsah hodnot 0-180, které zajišťují kontrolu nad rychlostí otáčení motoru.
Začneme tím, že odšroubujeme spodní stranu servo motoru. Po vyjmutí šroubků nám půjde snadno sundat i vrchní část. Následně odstraníme povrchová ozubená kola. Nyní se zaměříme na jedno z těchto kol, většinou se jedná o kolečko, které kouká ven ze servo motoru. Nachází se na něm malá zarážka, která brání servo motoru v otočení o více než 180°. Tuto zarážku budeme muset odstranit, někdy je třeba použít trochu „hrubé“ síly.
Nyní se přesuneme na spodní stranu, musíme vyndat řídící destičku, pod kterou je schovaný trimr. Z naší destičky k němu vedou tři červené kabely. Trimr udává servo motoru v jaké poloze se nachází. Tyto kabely musíme odstřihnout.
Dalším krokem je změření odporu trimru. Pomocí multimetru zjistíme odpor mezi prostřední a oběma krajními kolíky. V našem případě nám vyšlo R1 = 2.64 kΩ a R2 = 2.53 kΩ. Ze vzorce:
lze jednoduše vypočítat hodnotu rezistorů, které použijeme. V našem případě nám vyšlo R = 2.58 kΩ. Na místa kam na destičce vedly kabely napájíme dva rezistory přibližně této hodnoty (my zvolili menší rezistory o velikosti 2 kΩ).
Nyní už jen stačí přelepit odpory izolační páskou a sešroubovat servo motor zpátky dohromady. Finálním krokem je otestování správné funkčnosti hacknutého servo motoru.
Na obrázku níže je možné vidět ukázku servo řízení pomocí Arduina a zapojení servo motoru k Arduinu. Pro motor je v našem případě potřeba napětí v rozsahu 6-7 V. Datový kabel ze servo motoru jsme připojili na PWM pin č. 9.
Do Arduina jsme nahráli následující zdrojový kód, který zajišťuje roztočení servo motoru na plný chod.
#include <Servo.h> // Importování knihovny pro servo motor Servo mojeServo; // Vytvoření proměnné mojeServo void setup(){ mojeServo.attach(9); // Připojení k pinu 9 } void loop(){ mojeServo.write(0); // Roztočení serva na plný chod }
Tento článek jsme vytvořili spolu s Honzou Czapkem. Doufáme, že bude návod nápomocný a přejeme Vám mnoho projektů s využitím “hacknutých” servo motorů.
Zdravím!
Nedávno jsem vydal článek o první konstrukci Arduino lodičky a problémech, které mě potkaly při tvorbě tohoto Arduino projektu. Článek byl spíše o testování mých nápadů a řešení, než o realizaci a konečné podobě projektu.
Dnes vám taky neukáži konečný produkt, ale loďku se kterou jsem spokojený a na které budu pracovat dále, hlavně co se zábavného ovládání týče.
Možná si říkáte, proč krabice od džusu? Proč si nekoupit plastové tělo v modelářství, nebo si neudělat loďku z polystyrenu a pak ji potáhnout plastem? Po modelářské stránce by to byla určitě lepší volba. Ale já nejsem modelář, navíc rád stavím z „odpadu“, co najdu doma.
Skončil jsem článek s pomalou, nevzhlednou, špatně ovladatelnou plovoucí krabicí. Je čas na změnu!
Ve stavbě loďky chci určitě pokračovat, ale hlavně se zaměřím na zajímavé možnosti ovládání, které Arduino nabízí. Tak uvidíme, co vymyslím. Případné připomínky házejte do komentářů! Díky!
WiFi mobilní ovládací aplikace http://www.roboremo.com/
Bluetooth mobilní ovládací aplikace http://www.keuwl.com/apps/bluetoothelectronics/
V posledním díle jsme naučili robota RedBot otáčet se. Představený program měl ale jednu nepříjemnou vlastnost. Hned po nahrání programu se totiž robot začal pohybovat. Dnes si ukážeme, jak se dá použít tlačítko dostupné na robotovi ke spuštění programu. A k tomu všemu také robota naučíme vydávat pípavé zvuky. Bzučák, kterým budeme zvuky vydávat je součástí kitu SparkFun Inventor’s Kit for RedBot.
Začneme tím, že otevřeme následující program (File > Examples > SparkFun RedBot Library > Exp4_1_MakingSounds) a nahrajeme si jej do RedBota.
#include <RedBot.h> RedBotMotors motors; // Create a couple of constants for our pins. const int buzzerPin = 9; const int buttonPin = 12; void setup() { pinMode(buttonPin, INPUT_PULLUP); // nastaví tlačítko jako vstup // výchozí hodnota u INPUT_PULLUP je HIGH. pinMode(buzzerPin, OUTPUT); // nastaví pin bzučáku jako výstup } void loop() { if ( digitalRead(buttonPin) == LOW ) // pokud je tlačítko stisknuto (LOW) { tone(buzzerPin, 1000); // přehrávej tón o frekvenci 1kHz delay(125); // čekej 125ms noTone(buzzerPin); // zastav přehrávání tone(buzzerPin, 2000); // přehrávej tón o frekvenci 2kHz motors.drive(255); // zapni motory (nárazníky je mohou zastavit) delay(1000); // počkej 1000 ms (1 s) noTone(buzzerPin); // vypni zvuk motors.brake(); // zastaví motory } else // jinak udělej následující { } }
Robot by měl po stisku tlačítka D12 (vedle USB konektoru) začít pípat a kola by se měla začít otáčet.
Funkce tone(pin, frekvence) přehrává tón dané frekvence na určeném pinu. Jelikož je proměnná buzzerPin nastavena na hodnotu 9, můžeme použít funkci tone() k přehrávání různých tónu na připojeném bzučáku. Namísto použití LED jako indikátoru tak dostáváme od robota zvukovou zpětnou vazbu, takže víme, co v daný moment dělá. Toto je způsob, jak se dají ladit problémy s kódem jen za pomoci zvuku!
tone(buzzerPin, 1000);
Funkce noTone(pin) pak zastaví přehrávání tónu na zadaném pinu.
noTone(buzzerPin);
Zvuk je ve skutečnosti podélná vlna, způsobená vibracemi (stlačením a roztažením) částic ve vzduchu. Arduino vytváří zvuk tak, že na pinu generuje čtvercovou vlnu dané frekvence. Bzučák na tuto vlnu reaguje tak, že pohybuje vzduchem tam a zpět, čímž vytváří zvuk. Jelikož čtvercová vlna není ani zdaleka podobná sinusoidě, uslyšíme v tónu i vyšší harmonické frekvence základní frekvence.
Seznam tónů a jim odpovídající frekvence naleznete zde. Umíte sestavit z tónů jednoduchou hudební stupnici? (Nápověda: Stupnice C-dur je nejjednodušší, protože neobsahuje žádné křížky, ani béčka).
Lidský sluch je většinou schopný rozlišit frekvence v rozsahu 20 Hz až 20000 Hz. Umíte najít váš maximální rozsah? Poznámka: Piezo bzučák má problém s nízkými frekvencemi.
Nemůžete si zapamatovat, jakému tónu odpovídá jaká frekvence? Podívejte se na příklad File > Examples > SparkFun RedBot Library > Exp4_2_Music, nebo si zkopírujte kód níže.
#include "notes.h" // jednotlivé tóny a jejich frekvence jsou popsané v souboru notes.h #include <RedBot.h> RedBotMotors motors; const int buzzerPin = 9; const int buttonPin = 12; void setup() { pinMode(buttonPin, INPUT_PULLUP); pinMode(buzzerPin, OUTPUT); } void loop() { if(digitalRead(buttonPin) == LOW) { playTwinkleTwinkle(); } } void playTwinkleTwinkle() { playNote(noteC4, QN); playNote(noteC4, QN); playNote(noteG4, QN); playNote(noteG4, QN); playNote(noteA4, QN); playNote(noteA4, QN); playNote(noteG4, HN); playNote(noteF4, QN); playNote(noteF4, QN); } void playSmallWorld() { playNote(noteG5, HN+QN); playNote(noteG5, QN); playNote(noteB5, HN); playNote(noteG5, HN); playNote(noteA5, HN+QN); playNote(noteA5, QN); playNote(noteA5, HN+QN); playNote(Rest, QN); playNote(noteA5, HN+QN); playNote(noteA5, QN); playNote(noteC6, HN); playNote(noteA5, HN); playNote(noteB5, HN+QN); playNote(noteB5, QN); playNote(noteB5, HN+QN); playNote(Rest, QN); playNote(noteB5, HN+QN); playNote(noteB5, QN); playNote(noteD6, HN); playNote(noteB5, HN); playNote(noteC6, HN+QN); playNote(noteC6, QN); playNote(noteC6, HN); playNote(noteB5, QN); playNote(noteA5, QN); playNote(noteD5, WN); playNote(noteFs5, WN); playNote(noteG5, WN); } void playNote(int note, int duration) // Tato funkce má dva parametry - jméno tónu a dobu trvání. To nám usnadní přehrávání melodie. // Doba trvání je dána pomocí konstant: HN = poloviční nota, QN = čtvrťová, EN = osminová, SN = šestnáctinová. { tone(buzzerPin, note, duration); delay(duration); }
Pokud jste kód kopírovali z webu, vytvořte si také novou záložku (tab). V pravé horní části Arduino IDE je tlačítko s šipkou dolů, na které když klikneme, zobrazí se nabídka s možností New Tab. Na ni klikneme a nový soubor nazveme notes.h. Ten bude obsahovat mj. definici jednotlivých tónů s jejich frekvencemi.
#define beatLength 200 // # of milliseconds per beat // Define the length of each note #define WN beatLength*4 // ...a whole note... #define HN beatLength*2 // ...a half note... #define QN beatLength // ...a quarter note... #define EN beatLength/2 // ...an eighth note... #define SN beatLength/4 // ...and a sixteenth note. // These are pre-written #defines for every note on a piano #define Rest 0 #define noteC0 16 #define noteCs0 17 #define noteDb0 17 #define noteD0 18 #define noteDs0 19 #define noteEb0 19 #define noteE0 21 #define noteF0 22 #define noteFs0 23 #define noteGb0 23 #define noteG0 25 #define noteGs0 26 #define noteAb0 26 #define noteA0 28 #define noteAs0 29 #define noteBb0 29 #define noteB0 31 #define noteC1 33 #define noteCs1 35 #define noteDb1 35 #define noteD1 37 #define noteDs1 39 #define noteEb1 39 #define noteE1 41 #define noteF1 44 #define noteFs1 46 #define noteGb1 46 #define noteG1 49 #define noteGs1 52 #define noteAb1 52 #define noteA1 55 #define noteAs1 58 #define noteBb1 58 #define noteB1 62 #define noteC2 65 #define noteCs2 69 #define noteDb2 69 #define noteD2 73 #define noteDs2 78 #define noteEb2 78 #define noteE2 82 #define noteF2 87 #define noteFs2 93 #define noteGb2 93 #define noteG2 98 #define noteGs2 104 #define noteAb2 104 #define noteA2 110 #define noteAs2 117 #define noteBb2 117 #define noteB2 123 #define noteC3 131 #define noteCs3 139 #define noteDb3 139 #define noteD3 147 #define noteDs3 156 #define noteEb3 156 #define noteE3 165 #define noteF3 175 #define noteFs3 185 #define noteGb3 185 #define noteG3 196 #define noteGs3 208 #define noteAb3 208 #define noteA3 220 #define noteAs3 233 #define noteBb3 233 #define noteB3 247 #define noteC4 262 #define noteCs4 277 #define noteDb4 277 #define noteD4 294 #define noteDs4 311 #define noteEb4 311 #define noteE4 330 #define noteF4 349 #define noteFs4 370 #define noteGb4 370 #define noteG4 392 #define noteGs4 415 #define noteAb4 415 #define noteA4 440 #define noteAs4 466 #define noteBb4 466 #define noteB4 494 #define noteC5 523 #define noteCs5 554 #define noteDb5 554 #define noteD5 587 #define noteDs5 622 #define noteEb5 622 #define noteE5 659 #define noteF5 698 #define noteFs5 740 #define noteGb5 740 #define noteG5 784 #define noteGs5 831 #define noteAb5 831 #define noteA5 880 #define noteAs5 932 #define noteBb5 932 #define noteB5 988 #define noteC6 1047 #define noteCs6 1109 #define noteDb6 1109 #define noteD6 1175 #define noteDs6 1245 #define noteEb6 1245 #define noteE6 1319 #define noteF6 1397 #define noteFs6 1480 #define noteGb6 1480 #define noteG6 1568 #define noteGs6 1661 #define noteAb6 1661 #define noteA6 1760 #define noteAs6 1865 #define noteBb6 1865 #define noteB6 1976 #define noteC7 2093 #define noteCs7 2217 #define noteDb7 2217 #define noteD7 2349 #define noteDs7 2489 #define noteEb7 2489 #define noteE7 2637 #define noteF7 2794 #define noteFs7 2960 #define noteGb7 2960 #define noteG7 3136 #define noteGs7 3322 #define noteAb7 3322 #define noteA7 3520 #define noteAs7 3729 #define noteBb7 3729 #define noteB7 3951 #define noteC8 4186 #define noteCs8 4435 #define noteDb8 4435 #define noteD8 4699 #define noteDs8 4978 #define noteEb8 4978
Tento příklad zahraje po stisku tlačítka D12 začátek melodie „Sviť mi, sviť mi, hvězdičko“. Pro jednodušší ovládání melodie jsme si vytvořili funkci playNote(). Soubor notes.h obsahuje definice not a také délek trvání. Jedná se o tzv. hlavičkový soubor, který většinou obsahuje definice konstant a proměnných použitých v kódu.
Jakou melodii si složíte vy? Zkuste vymyslet znělku pro vašeho RedBota
Přeloženo z https://learn.sparkfun.com/tutorials/experiment-guide-for-redbot-with-shadow-chassis/experiment-4-push-to-start–making-sounds-sik a mírně upraveno.
Původní text je licencován pod CC BY-NC-SA 3.0.
V dnešním článku se podíváme, jak může robot používat nárazníky. Ty ve skutečnosti nejsou nic jiného, než dva dráty, které vycházejí na obě strany na přední straně robota. Vypadají a fungují velice podobně, jako fousky koček – pokud robot najede na nějakou překážku, ta ohne drát, čímž se sepne obvod jako u vypínače a robot tak detekuje překážku.
Nárazníky jsou součástí kitu SparkFun Inventor’s Kit for RedBot. Ve standardní sadě SparkFun Inventor’s Kit for RedBot je bohužel nenajdete.
K tomu, abychom mohli na nárazy do překážek reagovat, musíme se naučit v programu říci „když se stane toto, udělej toto“. K tomu v programovacích jazycích slouží takzvané „podmínky“. Díky nim můžeme robota naučit zajímavé kousky. S podmínkami jsme se již setkali, ale nevěnovali jsme jim moc pozornosti. Nejjednodušší z nich je podmínka if().
Podívejme se teď na příklad, který naleznete v RedBot příkladech: File > Examples > SparkFun RedBot Library > Exp5_Bumpers. Tento kód nahrajeme do RedBota.
/*********************************************************************** * Exp5_Bumpers -- RedBot Experiment 5 * * Now let's experiment with the whisker bumpers. These super-simple switches * let you detect a collision before it really happens- the whisker will * bump something before your robot crashes into it. * * This sketch was written by SparkFun Electronics, with lots of help from * the Arduino community. * This code is completely free for any use. * Visit https://learn.sparkfun.com/tutorials/redbot-inventors-kit-guide * for SIK information. * * 8 Oct 2013 M. Hord * Revised 30 Oct 2014 B. Huang ***********************************************************************/ #include <RedBot.h> RedBotMotors motors; RedBotBumper lBumper = RedBotBumper(3); // initialzes bumper object on pin 3 RedBotBumper rBumper = RedBotBumper(11); // initialzes bumper object on pin 11 int buttonPin = 12; // variable to store the button Pin int lBumperState; // state variable to store the bumper value int rBumperState; // state variable to store the bumper value void setup() { // nothing here. } void loop() { motors.drive(255); lBumperState = lBumper.read(); // default INPUT state is HIGH, it is LOW when bumped rBumperState = rBumper.read(); // default INPUT state is HIGH, it is LOW when bumped if (lBumperState == LOW) // left side is bumped/ { reverse(); // backs up turnRight(); // turns } if (rBumperState == LOW) // right side is bumped/ { reverse(); // backs up turnLeft(); // turns } } // reverse() function -- backs up at full power void reverse() { motors.drive(-255); delay(500); motors.brake(); delay(100); // short delay to let robot fully stop } // turnRight() function -- turns RedBot to the Right void turnRight() { motors.leftMotor(-150); // spin CCW motors.rightMotor(-150); // spin CCW delay(500); motors.brake(); delay(100); // short delay to let robot fully stop } // turnRight() function -- turns RedBot to the Left void turnLeft() { motors.leftMotor(+150); // spin CW motors.rightMotor(+150); // spin CW delay(500); motors.brake(); delay(100); // short delay to let robot fully stop }
Po spuštění programu by se měl robot začít pohybovat dopředu, dokud jeden z nárazníků nenarazí na překážku. Pokud jako první narazí levá strana, měl by robot popojet dozadu a otočit se doprava. Pokud poprvé narazí pravá strana, robot couvne a otočí se doleva.
Můžete upravit časování ve funkcích reverse(), turnRight() a turnLeft(), abyste dosáhli požadovaného posunu dozadu a otočení o 90° po každém nárazu.
Nad funkcí setup() jsme si vytvořili dva objekty nárazníků pomocí třídy RedBotBumper. Konstruktor potřebuje jeden parametr, a to pin, na kterém je nárazník připojen.
RedBotBumper lBumper = RedBotBumper(3); // initialzes bumper object on pin 3 RedBotBumper rBumper = RedBotBumper(11); // initialzes bumper object on pin 11
Konstruktor RedBotBumper() automaticky nastaví vybrané piny jako vstupy s interním pull-up rezistorem. To mimo jiné znamená, že pokud je nárazník neaktivní, je výchozí stav vstupu HIGH. Více o vstupech s interním pull-up rezistorem si můžete přečíst ve článku Funkce input-pullup.
Stav nárazníku je možné získat pomocí metod lBumper.read() a rBumper.read(). Když dojde k nárazu do nárazníku, dotkne se drát šroubu připojeného ke GND, což způsobí změnu hodnoty na LOW. V příkladu je také vidět použití proměnných, které uchovávají stav jednotlivých nárazníků.
lBumperState = lBumper.read(); // default INPUT state is HIGH, it is LOW when bumped rBumperState = rBumper.read(); // default INPUT state is HIGH, it is LOW when bumped
Chcete se dozvědět více o logice v podmínkách? Jedna z věcí, které vám při programování pro Arduino robota RedBot přijdou vhod, je tvorba složitých podmínek, založených na různých vstupech a senzorech.
Jsou možné jenom dvě logické hodnoty – true (pravda) a false (nepravda). Všechny logické výrazy i operace jsou vyhodnoceny buď jako true, nebo jako false. Pokud podmínka if() dostane hodnotu true, provede se, pokud ne, neprovede se. Tedy úplně nejjednodušší podmínky jsou:
if(true){ //... } if(false){ //... }
To ale většinou v praxi nevyužijeme a budeme chtít trochu komplexnější chování. K tomu slouží právě logické výrazy.
Podmínky se v programovacích jazycích tvoří pomocí tzv. logických výrazů. Ty mohou obsahovat logické operace a také porovnání. Logické výrazy mohou být seskupeny pomocí závorek – například (A == B). Logické operace a operace porovnání jsou:
Symbol | Co operátor zkoumá | Výsledná logická hodnota |
A == B | Je a rovno b? | true, pokud jsou A a B stejné, jinak false |
A != B | Je a různé od b? | true, pokud jsou A a B různé, jinak false |
A > B | Je a větší než b? | true, pokud je A větší než B, jinak false |
A < B | Je a menší než b? | true, pokud je A menší než B, jinak false |
A >= B | Je a větší nebo rovno b? | true, pokud je A větší nebo rovno B, jinak false |
A <= B | Je a menší nebo rovno b? | true, pokud je A menší nebo rovno B, jinak false |
if(A == B){ //... } if(A != B){ //... } if(A > B){ //... } if(A < B){ //... } if(A >= B){ //... } if(A <= B){ //... }
Pomocí logických operací můžeme skládat dohromady logické výrazy a dosáhnout tak i velice komplexního chování. Můžeme tak například zkoumat platnost i více výrazů najednou a různě je kombinovat.
Symbol | Jméno operace | Description |
X && Y | AND – logické a | (výraz X) && (výraz Y) je true, pokud X i Y jsou true, jinak false |
X || Y | OR – logické nebo | (výraz X) || (výraz Y) je true, pokud alespoň jeden z výrazů X a Y je true, jinak false |
!X | NOT – logická negace | !(výraz X) je true, pokud je výraz X false, jinak false |
X | Y | X && Y |
false | false | false |
false | true | false |
true | false | false |
true | true | true |
X | Y | X || Y |
false | false | false |
false | true | true |
true | false | true |
true | true | true |
X | !X |
false | true |
true | false |
Například tedy můžeme vytvořit složenou podmínku:
if (mod == 1 && (teplota < hodnota || prepis == true)){ digitalWrite(topeni, HIGH); }
Tato podmínka spustí topení, pokud je mod rovno 1 a zároveň platí, že je teplota pod určitou hodnotou, nebo je hodnota prepis rovna true.
Možná jste si všimli, že program neobsahuje možnost, že RedBot narazí oběma „fousky“ současně. Zkuste tuto možnost přidat a zajistěte, že se robot v tomto případě otočí o 180°.
Dnes se podíváme na to, jak odemknout váš počítač pomocí NFC karty či tagu pomocí Arduino Leonardo s NFC shieldem od ElecFreaks.
Tento projekt je nejen softwarově, ale i hardwarově nenáročný, jelikož potřebujeme pouze tři věci:
Komponenty lze samozřejmě také koupit u bratrů šikmookých, ale ztrácíte tím záruku funkčnosti kódu.
Jak tedy Near Field Communication funguje? Je to relativně jednoduché. Pojďme se podívat na obrázek vnitřního schematického zapojení.
Klíčovým komponentem NFC jsou cívky, které prakticky tvoří transformátor se vzdušným jádrem. Na kartě pak můžeme vidět modulační tranzistor a diodu s kondenzátorem. Ty tvoří jednoduchý nestabilizovaný zdroj pro funkci čipu samotného.
Nyní se podíváme na průběh přenášení dat. NFC kontrolér v NFC zařízení, v našem případě Arduino se shieldem, začne vysílat na frekvenci 13,56MHz, což je nosná frekvence pro náš typ NFC. Existují i varianty s nosnou frekvencí 125kHz a dokonce i 960MHz. Cívka na kartě bude na tento elektromagnetický signál reagovat indukcí proudu, kterým se začne čip na kartě napájet. Jakmile je čip napájen, začne produkovat data uložené v EEPROM. Tento proud dat začne souvisle zapínat a vypínat tranzistor, který začne zkratovat sekundární cívku L2. Tyto změny v amplitudě nosné frekvence – AM modulace – se projeví i na druhé cívce (L1) opět vlivem změn elektromagnetického pole, kde je pak NFC přijímač může zpět dekódovat na přijatelnější datový formát a převést např. na rozhraní SPI (Serial Peripheral Interface).
Tolik k tomu, jak NFC funguje. Další věcí, kterou bych rád odůvodnil, je, proč musím použít Arduino Leonardo a ne oblíbené Uno. Je to z toho důvodu, že mikrokontrolér ATmega32u4, nacházející se na Leonardu, má díky vestavěnému USB můstku také podporu USB HID (Human Interface Device), což znamená, že se může chovat jako klávesnice či myš, čehož zde využíváme.
Nyní se vrhneme do zapojení. Je relativně složité, tak to teda zkusím nějak pochopitelně popsat. Nasaďte shield na Arduino
Tak a teď když máme vše zapojené, je čas vrhnout se na software. Podotýkám, že kód je napsaný pro uživatele Windows 8, ačkoliv pak jak vám vysvětlím princip kódu, tak je možné ho upravit pro jakýkoliv OS. K provozu kódu budeme potřebovat NFC knihovnu od Adafruit a samozřejmě počítač, který chceme uzamknout.
Kód začíná jako obvykle přidáním potřebných knihoven následované vyjádřením globálních proměnných. Proměnná gooduid je UID vaší karty. UID karty lze zjistit pomocí příkladu readMifareClassic z této knihovny. Jakmile známe UID karty, kterou chceme počítač odemykat, tak to UID vložíme do kódu na řádku 11 místo toho UID ve složených závorkách. Dále se ve funkci setup() „zapnou“ knihovny, se kterými budeme pracovat. Nyní nastává „cyklovaná“ funkce loop(). Na začátku máme proměnné, které platí pouze v rámci této funkce, a jejich role jsou popsané v komentářích kódu. Teď nastává samotná logika kódu, která zní asi následovně. Našli-li jsme nějakou kartu v okolí, dáme to najevo proměnou cardFound. Pokud je cardFound pravda (True), tak zkontrolujeme počet UID znaků. Existují totiž dva typy těchto karet co se týče počtu UID znaků – 4 znaky nebo 7, ale 4 jsou nejčastější. Čili je-li nablízku karta, která má UID dlouhé 4 znaky, tak pomocí for cyklu zkontrolujeme shodnost znak po znaku. Narazíme-li ale na znak neshodný, nastavíme proměnou pass na nepravdu (False). V posledním kroku jednoduše zkontrolujeme pravdu této proměnné a v závislosti na tom pak využijeme vlastnost Arduino Leonarda USB HID a spustíme sekvenci kláves pro zadání hesla a tím pádem simulování zadávání hesla uživatelem počítače. Funkce z knihovny Keyboard.h jsou určeny pro klávesnici pro americké rozložení kláves, a proto musíme držet klávesu Shift při zadávání čísel (knihovna emuluje číslicové klávesy nacházející se nad písmenkovými klávesami). Také je důležité dbát na prohození kláves y/z, pokud máte heslo obsahující tato písmena. Kód zakončuje funkce delay() s hodnotou 1000ms.
#include <Wire.h> #include <SPI.h> #include <Adafruit_PN532.h> //zahrneme knihovny, které budeme používat #include <Keyboard.h> Adafruit_PN532 nfc(13, 12, 11, 10); //definujeme piny, které budeme používat pro komunikaci const uint8_t gooduid[] = { 0x77, 0xAF, 0xFF, 0xD6 }; //Zde bude UID karty, kterou chcete počítač odemykat bool pass = 0; //proměná pro uložení správnosti UID void setup() { nfc.begin(); Keyboard.begin(); //Nastartujeme knihovny nfc.SAMConfig(); } void loop() { bool cardFound; //proměná pro uložení, jestli byla jakákoliv karta přiložena uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; //proměná pro uložení UID přiložené karty uint8_t uidLength; //proměná pro uložení délky proměné "uid" cardFound = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); if (cardFound) { //našla-li se karta... if (uidLength > 4) { break; //...a má UID o čtyřech znacích... } else { for (uint8_t i = 0; i < uidLength; i++) { if (gooduid[i] == uid[i]) { pass = 1; //...tak zkontroluj, zda-li se všechny UID znaky shodují. } else { pass = 0; //narazil-li jsi na znak neshodující se předlohou, break; //prohlaš přístup za nepovolený a přestaň hledat shody v UID. } } if (pass) { //byl-li přístup povolen... Keyboard.press(KEY_LEFT_SHIFT); Keyboard.print("1234"); //napiš klávesnicí heslo... Keyboard.releaseAll(); } } } delay(1000); //počkej jednu sekundu }
Tak, a to už je vše! Doufám, že byl článek aspoň do nějaké míry užitečný a edukativní. Byl bych také rád za nějakou tu zpětnou vazbu. Přeji všem úspěšné bastlení – nebo jak říkám já, tinkerování!
Asi před půl rokem jsem poprvé začal uvažovat o stavbě kvadrokoptéry díky inspiraci od zahraničních autorů videí na YouTube (FliteTest, iforce2d, RCModelReviews). Teprve před měsícem a půl jsem objednal součástky.
Díly a součástky, které jsem použil:
Většinu součástek jsem objednal z HobbyKing.com, rám a řídící deska (flight controller) je z banggood.com.
Nejdřív jsem začal s párováním vysílače a přijímače a následnou komunikací mezi přijímačem a Naze32. Po asi třech hodinách hledání informací na všemožných RC fórech a YouTube se mi konečně povedlo všechno nastavit a zapojit správně. Jsem si jistý, že kdybych něco takového dělal znovu, tak to mám hotové za patnáct minut.
Stavba samotná není nějak složitá na pochopení (nepotřebujete manuál, vše je zřetelné na první pohled). Asi nejtěžší část byla přichycení ramen na hlavní rám (přičemž se vám všude pletou dráty,
co vedou do měničů).
Dlouho před samotným letem jsem si nastudoval předpisy a pravidla týkající se „dronů“ což by měl udělat každý, kdo chce létat. To poslední co lidi potřebují, je víc zpráv o „dronech“ narušující letecký provoz nebo něčí soukromí.
Po asi dvou a půl nalétaných hodinách už dokážu model ovládat celkem bez problému a pomalu začínám zkoušet různé triky (flip, roll, atd.) a také jsem objednal FPV (first person view) výbavu, jelikož bez toho si se závodní kvadrokoptérou moc zábavy neužijete.
Co se využití týče, tuto kvadrokoptéru si chci nechat jen tak pro zábavu, vzdušné akrobacie (FPV acro), natáčení ostatních RC letadel a multikoptér ve vzduchu (chasing), létání ve zchátralých budovách nebo závody mezi ostatními modeláři. Do budoucna plánuji postavit asi dvakrát vetší kvadrokoptéru (velikost 500, asi H-frame ze dřeva), která by byla řízena kompletně s využitím Arduino, schopná vydržet ve vzduchu přes dvacet minut a unést kameru se stabilizací, taky bych rád přidal funkce jako držení pozice pomocí GPS a nouzové přistání.
Třeba něco takového:
Určitě doporučuji si postavit vlastní kvadrokoptéru, možná to nebude nejlevnější řešení, ale na druhou stranu si můžete být jistí, že když se něco rozbije (a určitě se tak jednou stane), tak to zvládnete opravit během několika minut a nemusíte kupovat celý nový stroj.
Před rokem tu vyšel článek o Arduino meteostanici WeatherDuino Pro 2, jejímž autorem je Ing. Zdeněk Hornych. Na základě článků jste pana Hornycha zahrnuli dotazy, proto se rozhodl napsat ke článku pokračování s podrobnějším vysvětlením. Za to mu děkujeme.
Na základě řady dotazů k prvnímu vydání tohoto článku a také 1,5 ročních zkušeností z provozu meteo stanice jsem se rozhodl pro nové rozšířené vydání, doplněné poznatky ze samotného provozu.
WeatherDuino je DIY meteo stanice, vyvíjená komunitním sdružením kolem původního autora Werk_AG (A. Caneira) z Portugalska. Ten je současně hlavním programátorem, člověkem, rozhodujícím o dalším směru vývoje a koordinujícím poznatky i testy, a současně i hlavní podporou ve fóru http://www.meteocercal.info/forum/.
WeatherDuino už má dávno za sebou dětské krůčky, dnes je to plnohodnotná vyspělá technologie, splňující i poměrně značné kvalitativní požadavky. Od původního AuriolDuina (spojeno s technologiemi sensorů dodavatele Auriol), přes počáteční WeatherDuino Pro2 v1.3 a mnou loni zmiňovanou v1.4 nastal koncem loňského roku velký skok k verzi 1.5 a v letošním roce obrovský posun k v2.0. Vývoj se však i tak stále zrychluje a nyní se již od počátku roku rodí v hlavě a na stole Werk_AG zcela nová technologie WeatherDuino 4Pro. Přes všechna tato vývojová stádia a veliké skoky ve vývoji však zůstává programová výbava zpětně kompatibilní, což samozřejmě dále zvyšuje přitažlivost celého projektu, protože jednou vybudovaný hardware má dlouhou dobu životnosti.
Meteo stanice je koncipována modulárně a je schopna pracovat i profesionálně, vše je závislé jen a pouze na schopnostech a finančních možnostech vlastního stavitele stanice. Sem patří především výběr sensorů, jejich umístění v terénu, kvalita celého provedení, schopnost dlouhodobého bezobslužného provozu atd. atd. Stavba není určena pro začátečníky, mezi jinými dovednostmi je třeba zvládat i pájení SMD součástek na desky s plošnými spoji.
Ani tento článek není stavebním návodem, nebo podrobným popisem zařízení, zájemce odkazuji na původní zdroje informací, jejichž rozsah je obrovský (viz v závěru článku). (Navíc celá řada informací podléhá autorské ochraně a je dostupná až po registraci, byť zdarma.)
Blokové schéma WeatherDuino Pro2 je principiálně toto:
Kde TX jsou vysílací jednotky, v systému bývají obvykle dvě, rozsah počtu je 1 – 3. Zajišťují fyzický sběr dat v terénu a bezdrátové odeslání na jejich zpracování.
RX je přijímací jednotka, která data zpracovává, vyhodnocuje, částečně archivuje, vybraná data i zobrazuje a následně předává pomocí USB spojení na meteo server. RX je současně schopna vybraná data i vysílat na tzv. wireless displeje (WD).
WD je bezdrátový displej, určený pro místní, domácí zobrazení hlavních naměřených dat. Těchto displejů může být neomezené množství a umísťují se všude tam, kde je třeba je číst. WD využívá TFT dotykový displej 2,8“.
Meteo server, nebo také meteo počítač, je zařízení, kde se provádí převod zpracovaných dat na jejich grafickou prezentaci, ale současně i jejich dlouhodobá archivace. V roli serveru obvykle dnes slouží Raspberry Pi s operačním systémem Raspbian a aplikací CumulusMX.
Web server prezentuje data celému světu a to především graficky nebo tabulkově. S výhodou se opět využívá aplikace CumulusMX, její webová část. Provoz často na nějakém Linuxu ve vzdáleném hostingu.
Meteo server však také zajišťuje připojení celé meteo stanice do celosvětových sítí meteo stanic, mé zkušenosti jsou především se sítí Weather Underground (WU), která má dnes již přes 300 tis. členů a přes 200 tis. privátních meteo stanic. Kromě jiného disponuje také pravděpodobně nejpřesnějšími meteo předpověďmi a je založená na dobrovolnosti. Její data nesmí být profesionálně využívána.
Nyní tedy detailněji. Popis jednotlivých komponent:
je zařízení, umístěné v blízkosti meteo sensorů, zpravidla ve venkovním prostředí. Srdcem jednotky je Arduino Nano, napájení je zajištěno akumulátorem, dobíjeným solárním panelem. Nejčastěji je použit klasický Pb akumulátor, autor příspěvku má však vynikající zkušenosti i s akumulátory LiFePo4.
Jednotka TX může být instalována v 1 nebo maximálně až 3 kusech v jednom systému. Standardně je vybavena sensory větru, tedy anemometrem a ukazatelem směru větru (wind vane), několika teploměry, vlhkoměry, srážkoměrem a solárními čidly (intenzita slunečního záření ve W/m2 a UV index).
Hlavní teploměr systému spolu s čidlem vlhkosti vzduchu by měl být umístěn ve volném prostoru nad stříhaným trávníkem ve výšce 2 metrů a uložen v radiačním štítu s nuceným prouděním vzduchu podle přednastavených povětrnostních podmínek. Mezi ty patří i intenzita proudění vzduchu (vítr), proto by tato jednotka měla být vybavena vlastním anemometrem.
Měření větru se však provádí ve výšce 10 m nad volným terénem, proto je vhodné do systému vložit i druhou TX jednotku. Ta bývá umísťována na stožáru nebo na střeše. Výsledky měření větru nad střechou mohou však být tvarem střechy zkreslené.
Příklad provedení autorem článku pro střešní instalaci:
kde se provádí měření větru dvěma nezávislými systémy (kromě WeatherDuino i původní sensory meteo stanice Auriol). Kromě jiného se zde odečítá i teplota na střeše, sluneční radiace (W/m2) a UV záření (UVI).
Autor článku má další dvě jednotky umístěny na stožáru postaveném v zahradě, zde se měří hlavní měřená teplota a vlhkost (2 m nad zemí), ale ještě celá řada dalších údajů např. teploty ve výškách 2,4 m, 1 m, 5 cm nad zemí a 5 cm, 50 cm a 1 m v zemi. Řada čidel vyhodnocuje podobně i vlhkosti. Pro měření půdních teplot a vlhkosti je použita jednotka extenderu, která zajišťuje přenos dat na vzdálenosti desítek metrů (v mém případě 8 m).
Ukázka vlastní výroby sensorů – zde sensor UV záření, termo-metr a vlhkoměr v radiačním štítu a detektor slunečního záření:
Na rozdíl od TX jednotky je RX v systému vždy pouze jedna. Přijímá a detekuje signály 433 MHz z jednotek TX, případně z dalších připojených bezdrátových čidel (např. srážkoměr Auriol). Srdcem jednotky je opět Arduino Nano, napájení je zabezpečeno externím zdrojem 12 V.
Jednotka zpracovává signály a pomocí USB kabelu je předává počítači s meteo softwarem. Současně však slouží pro retranslaci vybraných hodnot na jednu nebo více WD jednotek pomocí signálů 433 MHz.
Jednotka sama je vybavena displejem LCD 20×4 a základní naměřené hodnoty tedy přímo zobrazuje. Aktuální PCB jsou vybaveny polovodičovou pamětí v roli cache pro případy výpadku meteo počítače – kdy by neměla komu předávat zpracovaná data. Jednotka disponuje vlastním sensorem pro měření atmosférického tlaku, lokální teploty a vlhkosti a je také osazena časovým normálem.
Slouží pro rychlou místní informaci o základních povětrnostních hodnotách a stavu vysílacích jednotek, umístění je na každém místě v domě, kde jsou tyto informace třeba. Ideální je alespoň jednu jednotku WD vlastnit, protože některé údaje jsou dostupné pouze na ní (např. napětí akumulátorů TX jednotek, teplota na jejich deskách PCB apod.).
Připojení k RX pomocí vf signálu 433 MHz, napájení je externím zdrojem 12 V. Běh softwaru opět zajišťuje Arduino Nano, WD je vybaven TFT dotykovým displejem 2,8“ i vlastním měřením lokální teploty a vlhkosti. Běžně zobrazované parametry: tlak, teplota vně i uvnitř, rychlost a směr větru, nárazy, vodní srážky a jejich intenzita, úroveň slunečního záření a UV index. Současně umožňuje zobrazení i tzv. externích sensorů – zemní teploty a vlhkosti, teploty a orosení listů, teploty a vlhkosti na dalších sensorech atd.
A další pohledy na displej:
Touto komponentou se již projekt WeatherDuino Pro2 zabývá pouze okrajově. V tuto chvíli je zřejmě nejperspektivnější variantou využití počítače Raspberry Pi 3, s nainstalovaným systémem Raspbian. Počítač nemusí být vybaven displejem, pokud je stejně umístěn v technologickém celku, kde nemá displej využití, nebo může být naopak vybaven např. 7“ dotykovým TFT displejem s dálkovým ovládáním, apod.
Server je umístěn v blízkosti RX modulu – propojení USB kabelem. Pomocí meteo software zpracovává dodaná data a zobrazuje je na vlastním (lokálním) webu. Současně je např. přes Ethernet ukládá na web server v Internetu, případně odesílá na jeden nebo více komunitních serverů v rámci amatérských sítí meteo stanic.
V roli meteo software lze s výhodou využít např. komunitního systému CumulusMX, který je ještě stále ve verzi beta, nicméně velmi stabilní a se skvělou komunitní podporou. K aplikaci existuje obrovské množství doplňků, grafických šablon, skriptů a dalších „udělátek“. Její obrovskou výhodou je definice tzv. webových tagů, které umožňují kompletní vytvoření vlastního webu nebo doplnění existujících šablon podle svých potřeb. Této výhody využil i autor článku, proto je jeho web výrazně odlišný od defaultových šablon aplikace CumulusMX.
K meteo serveru je velmi vhodné připojit i nějaký pevný disk, s výhodou můžeme použít přenosný disk 2,5″ s USB připojením. USB propojení RX jednotky a meteo serveru by mělo být provedeno pomocí USB hubu s vlastním (externím) napájením, jinak se může stát systém nestabilním v důsledku malé proudové výkonnosti USB portů desky Raspberry. K hubu pak připojíme i ostatní zařízení – HDD, klávesnici, myš.
Při své instalaci používám u počítače Raspberry i 7“ displej s dálkovým ovládáním, řada instalací je však tzv. headless. V případě displeje lze spustit i grafické rozhraní X-window a v něm lokální nebo externí web CumulusMX. Sám používám pouze alfanumerické prostředí a v případě potřeby zobrazuji stav meteo stanice pomocí scriptu z fóra Cumulus.
Pokud nemá meteo stanice sloužit pouze pro osobní potřebu, je vhodně umístění web serveru v nějakém „solidním“ hostingu, nároky na výpočetní mohutnost nejsou velké. Výhodné využití je např. virtualizovaného systému CentOS. Web má rozsáhlé možnosti customizace a napojení mnoha další internetových zdrojů, toto je však již zcela mimo rozsah tohoto článku.
Zde pouze náhled na některé z webových stránek autora článku:
Připojením k síti Weather Underground získáme jednak vynikající předpověď počasí pro svou lokalitu, jednak i další velmi pěkné webové stránky:
Ukázka jedné z možných konzolí – s výhodou využitelné na 10“ tabletu apod.:
Při stavbě meteo stanice je třeba být nejen zručným kutilem, ale velmi dobře chápat i programování počítačů typu Arduino. Zde totiž platí, že nikdy nedostanete úplný popis celé stavby, každý stavitel má jiné podmínky, jiné možnosti, zdroje, finance apod., proto je každá stanice odlišná. Tomu je třeba i programovou výbavu částečně přizpůsobovat a samozřejmě být i schopen najít a odladit případné chyby – jak hardwarové, tak softwarové.
Velmi se hodí dobré znalosti linuxového prostředí, částečné znalosti HTML jazyka, případně programování java skriptů.
Samozřejmým základem je ovládání celého pájecího procesu s miniaturními součástkami (SMD), podmínkou je dobrá výbava – automatická mikropájka, odsávačka, horkovzdušná páječka apod. Pro výrazné zlevnění celé stavby je nanejvýš výhodné nakupovat součástky na různých čínských e-shopech, znamená to tedy zvládnout nákup v angličtině a platbu pomocí účtu PayPal nebo kreditní kartou. Pro prvotní zapojení je vhodné používat zkušební polygon na nepájivých zapojovacích deskách „breadboardech“, zde např. sestava autora článku:
Autor článku si pokládá za velkou čest být součástí vývojového týmu WeatherDuino, proto zde i malá ukázka práce na vývoji.
První obrázek ukazuje výstup RTL-SDR analyzátoru s Raspberry pro kontrolu výkonnosti použitých antén v pásmu 433 MHz.
A na druhém vidíme „zábavu“ při odhalování zákonitostí propouštění UV záření různými optickými materiály:
Při stavbě a provozu stanice se stavitel určitě mnoho a mnoho nového dozví a naučí, Internet je skutečně základním a naprosto nezbytným zdrojem veškerého počínání.
V případě bližšího zájmu o tento projekt doporučuji zájemcům registraci na fóru MeteoCercal, tak se mohou velice snadno dostat ke schématům, seznamům součástek apod. Na fóru lze pořídit i desky PCB.
Projekt má základní výhodu, že je „totálně“ modulární a do nekonečna rozvíjitelný. Proto můžeme začít pouze s minimálním objemem dílů a řekněme „levnějšího“ provedení, ale postupným rozvíjením se dostat až na poloprofesionální úroveň.
Systém je otevřen i vlastnímu vývoji, případně testování, a to jak v oblasti HW, tak SW. Sumárně lze říct, že tento projekt vlastně nikdy nekončí a může být doživotním koníčkem.
Upozornění: některé výše zmíněné názvy mohou být chráněnými názvy svých majitelů.
Děkujeme za skvělý článek a přejeme hodně štěstí při dalším rozvoji.
Pokud byste si chtěli pořídit elektronické bicí, ale jsou moc drahé, nebo vám nějakým způsobem nevyhovují, můžete si postavit vlastní. Budete potřebovat MDF (dřevovláknité desky), Arduino Mega a pár dalších komponent.
Maker Victor Herrero si nechtěl pořizovat drahé bicí, a tak si radši postavil svojí vlastní soustavu za použití snadno dostupných komponent. Kód je modifikací podobného projektu od Evana Kale. V návodu níže se dozvíte nejenom, jaká elektronika je použita, ale také jak sestavit dřevěné části setu.
Snímání úderů Victor vyřešil převážně pomocí piezo senzorů, které odesílají informace do Arduina. To je zpracuje a převede na MIDI signál, takže je k projektu potřebné ještě MIDI zařízení, které převede tento signál na skutečné zvuky. Všimnout můžete velice zajímavého řešení Hi-hat pedálu, na který použil plážový sandál.
Více informací o projektu naleznete na jeho Instructables stránce, zdrojový kód na GitHubu.
Přeloženo z https://blog.arduino.cc/2016/10/05/build-your-own-electronic-drum-kit-using-an-arduino-mega/ a mírně upraveno.
Tento projekt začal jednoduchým ovládáním lustru pomocí malé krabičky umístěné poblíž a dálkového ovládání. Dnes už je systém propracovanější a lze celý řídit pomocí dotykového displeje. Dnešní systém se skládá z několika bezdrátově propojených jednotek, které všechny běží na Arduinu.
Základní jednotkou je Arduino MEGA s displejem, pomocí něhož se dají řídit ostatní systémy, ale zobrazují se na něm i hodnoty z teploměrů a jiných čidel. Další důležitou jednotkou je malý obvod s Arduino NANO umístěný u lustru. Díky tomuto obvodu lze zhasínat a rozsvěcet na dálku. Nesmím zapomenout ani na bezdotykový panel, který nahradil standardní vypínač na zdi. No a samozřejmě jednotka se senzory teploty a srážek umístěná na parapetu. Toto vše si můžete prohlédnout v následujícím videu.
Náhražka vypínače je vytištěna na 3D tiskárně. Uvnitř je malý tištěný spoj s čipem ATmega328p-pu, dále je zde umístěn ultrazvukový senzor vzdálenosti, který měří vzdálenost. Pokud je vzdálenost menší než 15cm tak program zareaguje a pomocí dvou ledek rozsvítí malé čtverečky. Zároveň taky vyšle signál přes 433 MHz do lustru, aby se rozsvítil. Toto vše je napájeno starou nabíječkou na mobil.
U lustru mám malý DPS, na kterém je nasazeno Arduino NANO. Je zde také samozřejmě komunikační modul na 433MHz, díky kterému mohu rozsvítit i z jiných zařízení než jen z klasického vypínače. Samotné světlo je spínáno pomocí relátka, kterým je přerušena fáze vedoucí do lustru.
Na venkovním parapetu u okna mám umístěnou malou meteorologickou stanici. Je řízena čipem ATmega328p-pu, který načítá data z mnoha senzorů, jako například senzor teploty BMP280, který zároveň měří i vlhkost a tlak. Stanice je dále vybavena senzorem srážek a samozřejmě vysílačem na 433MHz, pomocí kterého se vše odesílá do jednotky s displejem. Napájení je zajištěno malým trafem na 9V.
Hlavní částí celého systému tvoří Arduino MEGA 2560 s 2,8″ dotykovým displejem, na kterém se zobrazují všechna důležitá data, nebo lze využít jako ovládací zařízení.
Nejedná se o technicky nic náročného. Jde jen o Arduino MEGA 2560, ke kterému je připojen display, vysílač a přijímač na 433MHz. Mám tam také připojenou lampičku, která se rozsvítí pomocí „ikonky“ na displeji. Na displeji je slot na micro SD kartu, na které jsou nahrány grafické podklady pro vyobrazení na displeji. Všechno je uloženo v krabičce vytištěné na 3D tiskárně z PLA plastu a je napájeno 9V trafem.
Na displeji se na několika jednotlivých obrazovkách ukazují všechna důležitá data a ovládací prvky viz. Obrázky.
Do budoucna bych rád přidělal hlavní řídicí jednotku, která by obsahovala Bluetooth, díky kterému by šlo vše ovládat přes aplikaci v chytrém telefonu. Dále bych chtěl využít MP3 shield, pomocí kterého bych naučil celý systém mluvit, ohlašovat základní informace a pouštět písničky. Další možnost je připojit celý systém k internetu, kde by se zobrazovaly informace z celého systému a také by šel odsud ovládat.
Jako další zařízení bych chtěl udělat senzor na kontrolu vlhkosti zeminy květin, který by posílal zprávu, když by byla zem příliš vysušená. Systém by pak dal vědět o stavu vlhkosti přes internet, nebo formou zvukového hlášení.
Také plánuji vydat několik dalších článků, nebo videí, které by popisovaly jednotlivé části celého „systému“ a tak se obracím na Vás čtenáře, abyste se vyjádřili v podobě komentářů, co by se Vám více líbilo/vyhovovalo.
Náš čtenář Bohumil Tuček nám poslal článek o jeho projektu asistenční jednotky.
Dnes tu pro Vás máme článek o asistenčních jednotkách. To jsou jednotky, které fungují jako samostatný počítač, který je jednoduché ovládat, ale ještě ke všemu se mohou pohybovat, mohou mít na sobě různá robotická ramena apod.
Jedním z nich je i tato asistenční jednotka Kisaragi (衣更着). Dostala jméno od mých japonských kolegů. Kisaragi je pojmenování měsíce února a také v překladu znamená doslova obléci si více vrstev oblečení. Jednotku totiž můžete díky modulům během pár vteřin předělat na něco trochu zábavnějšího, nebo naopak zabavit robotovi přední senzor, aby Vám neutekl. Není totiž nic horšího, než když vám při psaní emailu naštvané šéfové začne zdrhat počítač… Omlouvám se, vlastně je. Když se nepodívá před sebe, spadne ze stolu, vezme s sebou monitor, rozlije vám kafe na koberec a ještě si přerazí přední senzor
Dost vtípků. Teď si Kisaragi představíme i hardwarově. Zatím to je jen prototyp, proto je vše vyrobeno ze stavebnice merkur. Postupem času vytvoříme open source podklady pro 3D tisk, Arduino i Raspberry Pi
Hlavní část je vybavena motory s gumovýmy pásy. Ty zabraňují sklouznutí ze stolu a zároveň umožňují až třicetistupňové stoupání při jízdě. Co se týče elektroniky, je zde zabudované Raspberry Pi s operačním systémem Raspbian. Jednotka se tedy dá použít jako stolní počítač a zároveň má dostatečný výkon, aby v autonomním módu mohla přenášet hlas na server Googlu, tam ho vyhodnotit a stejnou cestou vám odpovědět.
Mluvící roboti sice už dávno nejsou zase takové Sci-Fi, rozhodně jim ale mluvení přidává notnou dávku osobnosti Bohužel super výkon s sebou přináší obrovskou energetickou daň. Proto je zde zabudované i staré dobré Arduino UNO. Pokud zrovna netoužíte po IoT, zpracování složitých dat, nebo nepotřebujete ovládat jednotku jako pojízdnou webkameru z Japonska, tak stačí jen přepnout pár vypínačů. Obě tyto jednotky spolu komunikují přes I2C protokol, který zajišťuje možnost připojení i jiných modulů. Takovým může být třeba inteligentní baterie, přední IR senzor, tanková věž pro bojové roboty, manipulační rameno, a nebo jen solární panel pro letní blbnutí venku. U těchto jednotek jsou tedy jen dvě omezení. Prvním je kapacita baterie a druhým je vaše vlastní fantazie.
Já a můj mechanický kamarád se s Vámi loučíme. Přejeme Vám spousty úspěchů nejen při projektech a doufáme, že se brzy uvidíme na nějaké soutěži Kdybyste se chtěli do projektu zapojit, dejte mi vědět v komentářích pod článkem.
Soutěž CanSat je unikátním Arduino projektem, který kombinuje několik oborů, a to velmi komplexním způsobem. Základem je postavit napodobeninu skutečné družice obsahující všechny základní systémy od baterie přes vysílací zařízení až po samotné senzory. To by však samo o sobě nestačilo – součástí projektu je také získání dat pro další analyzování. Ta jsou přijímána během letu na zemi po jejím vypuštění dronem z výšky 500 metrů. K příjmu dat slouží pozemní stanice, kterou si studenti musí sami postavit. Posledním krokem soutěže je analýza získaných údajů, jejich případné zasazení do širšího kontextu celé mise a prezentace výsledků odborné porotě.
Už druhým rokem jsem se přihlásil s plzeňským týmem středoškolských studentů. V současné době se se členy tohoto týmu, který si říká PILSAT, připravuji na semifinále národního kola, jež se uskuteční 30. ledna v Praze. Nyní se Vám pokusím popsat hlavní části CanSatu i s technickými detaily.
Řídicí jednotka je v našem případě tvořena dvěma Arduino čipy ATmega328P, které jsou zasazeny do navržené PCB desky. Každý z nich má svůj vlastní program s odlišnou funkcí. Oba čipy načítají data ze všech senzorů, jeden z nich odesílá data do pozemní stanice a druhý je ukládá na SD kartu.
Všechny senzory jsme nejdříve zapojili do nepájivého pole na otestování a ladění Arduino programování. Vyzkoušeli jsme na něm potřebné změny, které byly takto snadno realizovatelné. Pro potřeby semifinále nám tato verze stačí. Do finále jsme začali postupně tvořit PCB desky, na kterých budou umístěny všechny senzory a také řídicí jednotka. Tyto desky budou zapojené v “sendviči” a propojeny pomocí pinových lišt.
Jako senzor teploty a tlaku využíváme BMP180, komunikuje s řídicí jednotkou pomocí I2C sběrnice. Další senzor je tří-osý akcelerometr a gyroskop, pomocí kterého měříme zrychlení a náklon na osách XYZ. Jeden z největších modulů je GPS s anténou, která souřadnice polohy CanSatu odesílá do pozemní stanice. Tyto data následně plánujeme vizualizovat pomocí Google map.
Pozemní stanice je tvořena řídicí jednotkou Arduino UNO WiFi, do které je vložen námi navržený a vyrobený Arduino shield. Na tomto shieldu je umístěn komunikační modul RFM98W, totožný s tím v CanSatu. Z vnější části krabičky jsou umístěny barevné led pásky signalizující aktuální teplotu v CanSatu. Všechna data budou odesílána na internet a zobrazeny na Internetové stránce.
Asi největší částí naší sekundární mise je řízené přistání, které nám dalo spoustu práce vymyslet a teď i realizovat. Naše řízené přistání proběhne po vypuštění CanSatu z dronu, kdy se z něho vysunou čtyři ramena s motory a vrtulemi. Tato ramena nám z CanSatu udělají dokonalý dron, který přistane na místo vzletu. Každý motor dokáže poskytnout vztlak asi 220g (celkem 880g), což pro 350g CanSat bude bohatě stačit. Řídicí jednotka pro “droní” část CanSatu bude NAZE32. Tato deska se využívá ke stavbě dronů.
Samotné přistání bude realizováno vypnutím vysílačky spárované s naším CanSatem po vypuštění z drona. Přerušením spojení s CanSatem se spustí program pro nouzové přistání v případě ztráty signálu. Tento princip využívá většina dnešních dronů. V našem případě je v protokolu pro nouzové přistání zabudovaný program pro vrácení na místo vzletu, což bude náš hlavní cíl sekundární mise.
Celou konstrukci jsme si vymodelovali a vytiskli na 3D tiskárně a následně smontovali. Jako napájení pro CanSat bude sloužit Li-pol baterie 11,2 V s kapacitou 800mAh, což nám vychází asi na 2 minuty letu. Náš let by měl podle výpočtů s rychlostí klesání 6m/s trvat asi 90 sekund, takže by nemělo dojít k problému. Pro senzory a řídící jednotku CanSatu bude použita druhá baterie, která zajistí jeho funkčnost na požadovanou dobu.
Veškeré technické podklady (Arduino programy, schémata…), které budeme aktualizovat s tím, jak se bude vylepšovat náš CanSat, naleznete zde.
Navštivte Pilsat i na Facebooku!
Pozn. red. O CanSatu jsme tu už psali minulý rok.