Pojďme programovat elektroniku | Programování

Pojďme programovat elektroniku: Také Arduino má své UFO. Jmenuje se LilyPad

  • Dnes oživíme exotické Arduino LilyPad
  • Slouží k prototypování chytrých nositelností
  • Vyrobíme si laserový detektor překážek

Blíží se Vánoce, česká města rozzářily ozdobené stromy a naši redakci blikající svetr kolegy Vladislava Klusky. Na podobné vylomeniny už roky pamatuje také projekt Arduino, vedle armády klasických prototypovacích a docela rozměrných desek se totiž zrodil i kulatý LilyPad.

Nenajdete na něm rozměrný USB konektor, zato má však deska po svém obvodu netradičně výrazné perforované pájecí plochy jednotlivých logických pinů GPIO. A důvod? LilyPad je totiž speciální verze Arduina pro prototypování nositelností a rozměrné otvory tedy slouží mimo jiné k tomu, abyste mohli destičku snadno všít do svetru a piny poté rozsvěcovat a zhasínat třeba zrovna primitivní barevné LED.

Klepněte pro větší obrázek
Kulaté Arduino LilyPad

O chod se stará čip ATmega328 při 8 MHz

Mozkem LilyPadu je dle varianty buď osmibitový čip ATmega168, anebo dnes už rozšířenější ATmega328, který dobře známe z desky Arduino Uno. V tomto případě však čip pracuje na sníženém polovičním taktu 8 MHz, což se podepíše na celkové nižší spotřebě.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Dnes zpravidla seženete tuto větší variantu bez USB a všemi vyvedenými piny čipu, anebo menší variantu s menším počtem GPIO, ale s microUSB

Rozjede jej i 3V baterie

Do třetice má LilyPad i mnohem slabší napájení. Namísto obvyklých 3,3V nebo 5V se rozjede v případě, pokud mu dodáte 2,7-5,5 V a stejné napětí pak bude mít i jeho logika. Jinými slovy, do pinů + a – stačí připojit i titěrnou mincovou 3V baterii CR2032, čip nastartuje a dodá šťávu i nejrůznějším světýlkům, jeho logickými piny totiž může protékat špičkově až 40 mA.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Arduino LilyPad lze napájet 2,7-5,5V, oživí jej tedy i běžná 3V baterie CR2032 zasunutá třeba v podobném pouzdře zhruba za dolar

K nahrání programu budeme potřebovat USB/UART převodník

Tak, po teoretické omáčce hurá na žlutou pěnovou obálku, jeden čínský klon LilyPadu za pár dolarů mi totiž také dorazil. Ještě snad zmíním, že LilyPad se dnes na internetech vyskytuje hned v několika provedeních a mně dorazil ten největší.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
K bezproblémovému nahrání programu poslouží převodník USB na sériovou linku s piny RX, TX a DTR. Pak už jen stačí ve vývojovém prostředí Arduina zvolit správnou desku.

Jelikož nemá moje kulatá destička USB (existují ale i varianty s USB), budu muset pro nahrání programu do čipu použít USB/UART převodník. A právě piny sériové linky jsou zpravidla už od výroby připájené pro jeho snadné připojení. V horní řadě jsou zleva postupně vyvedené:

  • GND/-
  • GND/-
  • VCC/+
  • RX
  • TX
  • DTR

Stačí mít tedy USB převodník s piny napájení, datovými piny RX (příjem) a TX (odesílání), které je třeba s destičkou křížově propojit, a konečně DTR (Data Terminal Ready), který slouží k signalizaci, že může začít přenos atp. Bez DTR pinu bychom museli před nahráváním firmwaru čip ručně resetovat. Takto to za nás udělá přímo flashovací program v počítači.

Klepněte pro větší obrázek
Schéma netradiční destičky LilyPad v provedení bez USB

Takže stačí LilyPad přes převodník připojit k počítači, ve vývojovém prostředí vybrat správnou desku a nahrát program.

LilyPad funguje, co k němu přidělat? Třeba LEDky?

Ověřil jsem si funkci čipu primitivním prográmkem, který jen vypisoval pozdrav do sériové linky a zašel se podívat do své stále větší KPA (Krabice Pitomostí z AliExpressu), co demonstračně k LilyPadu vlastně připojím.

Hra blikajících světýlek by byla pochopitelně zdaleka nejjednodušší a stejně tak program. Stačilo by prostě do svetru zašít pár LED a přes drobné rezistory o obvyklé síle několika set ohmů je spojit s GPIO piny čipu. Náš program by pak na těchto pinech pomocí funkce digitalWrite nastavoval logickou jedničku a nulu a světýlka by se dle našeho scénáře rozsvěcovala a zhasínala.

Laserový dálkoměr VL53L0X

Na stranu druhou, nejsem úplně ten typ, který by chtěl po ulici chodit v blikajícím svetru, a tak jsem hledal v krabici dál, až jsem našel drobný modul VL53L0X.

VL53L0X je laciný optický ToF s dosahem do dvou metrů. Cože, jaký ToF? Tak ještě jednou, čip Time-of-Flight. To je kategorie dálkoměrů, které, velmi jednoduše řečeno, měří čas, za který světelný paprsek dorazí k překážce, odrazí se zpět a zachytí jej detektor.

Z této doby pak obslužná elektronika dálkoměru spočítá vzdálenost od překážky. Mějme výkonný a rychlý ToF s velkým dosahem, umístěme jej na elektromotor, roztočme jej dokola a získáme... Základní LIDAR, laserový radar, klasické rotační konstrukce, který je nedílnou součástí mnoha autonomních vozů.

Klepněte pro větší obrázek
Primitivní a laciný ToF dálkoměr VL53L0X s obvyklou přesností v řádu jednotek mm a s dosahem okolo dvou metrů.

Optické ToF dálkoměry dnes zpravidla používají velmi slabý laser kategorie VCSEL s vlnovou délkou infračerveného světla (třeba 940 nm), který může bez problému pohánět i slabá baterie, protože odběr proudu je velmi nízký.

Malý je nakonec i samotný čip dálkoměru, v případě VL53L0X se totiž jedná o plastovou krabičku s rozměry 4,4 × 2,4 × 1,0 mm, což je mimochodem jedna z jeho velkých výhod oproti ultrazvukovým dálkoměrům, které jsme si v našem seriálu o programování elektroniky ukázali už mnohokrát.

Klepněte pro větší obrázek
Ověření funkce dálkoměru v sériové lince

Podobný dálkoměr je sice titěrný, ale dostatečně chytrý, s okolím totiž komunikuje skrze sběrnici I2C, kterou samozřejmě čip ATmega328 podporuje a GitHub je plný knihoven pro Arduino. V případě LilyPadu tedy stačí připájet linky SCL a SDA na piny A5 a A4, podobně napájení a v programu pak už jen periodicky číst vzdálenost od překážky.

Když laser zjistí překážku, začne pípat bzučák

Další drobnou cetku, kterou jsem vylovil z krabice, byl primitivní bzučák. Má jen dvě nožky + a -, takže + jsem připájel k digitálnímu pinu 6, který dle schématu destičky nabízí pulzující digitální signál PWM, a – pak k pinu 7 hned vedle něj, na kterém jsem pak v programu nastavil povelem digitalWrite(7, LOW) logickou nulu. Nechtělo se mi vést ošklivý drátek až ke vzdálenějšímu pinu země.

Klepněte pro větší obrázek
Primitivní piezoelektrický pípák. Arduino jej rozbzučí pomocí signálu PWM a vygeneruje tón s kýženou frekvencí, kterou zrovna potřebujeme.

V programu jsem nakonec nastavil podmínku, že když laserový dálkoměr změří nižší vzdálenost než třeba jeden metr, bzučák se cholericky rozpípá. K tomu poslouží další vestavěné funkce Arduina, tone a noTone, které na bzučáku vytvoří (a ukončí) tón s kýženou frekvencí právě pomocí pulzujícího signálu PWM generovaného hodinami přímo v čipu.

To je celé. K čemu by to mohlo celé nakonec být?

Co kdyby to fungovalo jako třeba detektor překážek pro nevidomé?

Vraťme se na začátek. Arduino LilyPad slouží k prototypování nositelností – chytrého oblečení. Dá se snadno všít třeba do svetru, do nějaké kapsičky. Náš prototyp by tedy mohl po všití nebo připevnění na přední stranu bundy sloužit jako detektor překážek třeba pro nevidomé.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Celý bastl v produkční verzi. Zatímco destička s baterií může být někde uvnitř, z bundy bude vykukovat jen čidlo laserového dálkoměru.

Když se bude osoba pohybovat vpřed a přiblíží se stěna, řídící čip to díky laserovému dálkoměru zjistí a začne pípat dostatečně hlasitě na to, aby si toho jeho majitel všiml. Vše může být přitom díky malým rozměrům elegantně skryto a oko dálkoměru by mohlo být třeba součástí falešného knoflíku.

V takovém případě by se nám ale spíše hodil sourozenec našeho dálkoměru – VL53L1X, který má zvýšený dosah až na čtyři metry za cenu nižší přesnosti, avšak o nějaké jednotky milimetrů (a vlastně i centimetrů) v tomto případě nejde.

Je třeba zároveň pamatovat na to, že podobné senzory mají mnohem menší zorné pole než třeba ultrazvukový dálkoměr s poměrně širokým záběrem. V tomto případě laserový dálkoměr vidí jen zhruba 25-30° výseč, snímá tedy opravdu jen oblast před námi a nevšímá si třeba bočních překážek.

A do třetice, stejně jako jiné optické součástky i tyto může zmást světlo – jiný zdroj IR záření, nebo povrch s problematickou odrazivostí, který paprsek pohltí, anebo odrazí do nevhodného směru.

Když dálkoměr zjistí překážku, bzučák začne pípat:

Na zahraničních e-shopech seženete velký LilyPad se všemi vyvedenými piny GPIO za cenu okolo 50 korun. Za podobnou částku tamní obchodníci prodávají i zmenšenou verzi s menším počtem pinů, ale s obvodem microUSB. Za 20-30 kaček nakonec koupíte drobné pouzdro na jednu 3V baterii CR2032, které můžete snadno připájet třeba na zadní stranu destičky.

Pro větší projekty však budete potřebovat alespoň dvě takové baterie, při vyšším odběru energie totiž snadno dojde k podnapětí a řídící čip se restartuje, aby celý běh programu začal znovu. Řešením může být také silnější (ale stále maličká) Li-ion/pol baterie.

Na závěr opět nesmím zapomenout na kód:

// https://github.com/adafruit/Adafruit_VL53L0X
#include <Adafruit_VL53L0X.h>
Adafruit_VL53L0X tof = Adafruit_VL53L0X();

// Pokud vzdalenost klesne pod 500 mm, zacni pipat
#define THRESHOLD 500
// delka pipnuti v ms
#define RYCHLOST 100

// Ponocne promenne pro pipani
uint32_t timeout = 0;
uint16_t vzdalenost = 9999;
bool ton = false;
bool pipej = false;

// Funkci pipani budu ve smyce loop volat stale dokola
// Funkce bude periodicky na dobu RYCHLOST generovat 1000Hz ton a ticho
// Funkce bude pipat jen tehdy, pokud bude promenna pipej rovna pravde
// Samotné pipani neblokuje beh programu
void pipani() {
  if (millis() > timeout) {
    if (ton && pipej) {
      tone(6, 1000);
      ton = false;
    }
    else {
      noTone(6);
      ton = true;
    }
    timeout = millis() + RYCHLOST;
  }
}

// Funkce setup se spusti jen jendou pro startu programu
void setup() {
  // Pin cislo 7 slouzi jako GND pro bzucak
  pinMode(7, OUTPUT);
  digitalWrite(7, LOW);
  // Nastartuj laserovy dalkomer
  tof.begin();
}

// Funkce loop se opakuje stale dokola
void loop() {
  // Pokud mas povoleno pipat, pipej
  pipani();
  // Zmer vzdalenost v milimetrech
  VL53L0X_RangingMeasurementData_t mereni;
  tof.rangingTest(&mereni, false);
  // Pokud jsou data v poradku, uloz vzdalenost do stejnojmenne promenne
  if (mereni.RangeStatus != 4) {
    vzdalenost = mereni.RangeMilliMeter;
  }
  // Pokud je vzdalenost mensi nez v uvodu stanovena hranice,
  // zacni pipat
  if ((vzdalenost > 0) && (vzdalenost < THRESHOLD)) {
    pipej = true;
  }
  // V opacnem pripade ukonci pipani
  else {
    pipej = false;
  }
}
Diskuze (13) Další článek: Google Fi je virtuál na steroidech. Naši operátoři se však zatím o chleba bát nemusí

Témata článku: Pojďme programovat elektroniku, Programování, Arduino, Baterie, USB, GitHub, Autonomní vůz, Světelný paprsek, Logická nula, Podobný senzor, Malý, Pozdrav, Široký záběr, Druhá strana, České město, Zvýšený dosah, Output, Knoflík, Zahraniční e-shop, Velký dosah, LilyPad, Přední strana, Arduino Uno, Destička, Dálkoměr


Určitě si přečtěte

Šmírování na Street View: Koukněte se, co zachytily kamery Googlu

Šmírování na Street View: Koukněte se, co zachytily kamery Googlu

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 45

Jak jsme je mohli používat? V těchto věcech Windows 10 předčí staré Sedmičky

Jak jsme je mohli používat? V těchto věcech Windows 10 předčí staré Sedmičky

** Windows 10 nejsou jen moderní aplikace, ale i spousta vychytávek a funkcí navíc. ** U většiny z nich si ani neuvědomujeme, že byly někdy jinak. ** Některé věci jsou zcela nové, jiné zase pocházejí už z Windows 8.

Vladislav Kluska | 214

Apple ukázal novinky: iPad Pro má překonat notebooky a vrací se Mac mini!

Apple ukázal novinky: iPad Pro má překonat notebooky a vrací se Mac mini!

** Apple v New Yorku představoval počítačové novinky ** iPad Pro prý zatočí s notebooky ** Dočkali jsme se také návratu Mac mini

Jakub Čížek | 81

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

** Poradíme, jaký se teď vyplatí koupit hardware ** Procesory, desky, paměti, grafické karty... je z čeho vybírat ** Počítač ale nemusíte skládat, ukážeme i výhodné hotové počítače

Stanislav Janů | 8

Zapomeňte na kabely, vědci už mají prototyp 120kW bezdrátové nabíječky pro elektromobily

Zapomeňte na kabely, vědci už mají prototyp 120kW bezdrátové nabíječky pro elektromobily

** Vědci představili prototyp výkonné bezdrátové nabíječky pro elektromobily ** I přes vysoký výkon se pyšní vysokou efektivitou ** Bude budoucnost nabíjení elektromobilů bezdrátová?

Karel Javůrek | 56

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

** Apple dnes představuje nové produkty v čele s novými iPhony ** Nemusí zůstat jen u telefonů, čekají se i další novinky ** Úvodní přednáška začíná v 19:00 našeho času

David Polesný | 57

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

** Jsou lepší mapy od Googlu, nebo ty od Seznamu? ** Má být mapa především tradiční mapou, nebo spíše asistentem? ** Vyslechněte si argumenty a hlasujte, na jaké straně jste vy

Jakub Čížek, Vladislav Kluska | 78