Arduino YÚN: vzhůru do oblak

ArduinoYunFront_2

Zdroj arduino.cc

Do oblak samozřejmě myslím do cloudu. Zatím poslední model arduina je totiž zaměřen hlavně na připojení k internetu a využití nejrůznějších služeb a cloudových řešení. Předchozí modely šlo samozřejmě také připojovat k síti pomocí ethernet shieldu, ale pro využívání internetových služeb chyběl Adruinům výpočetní výkon a také paměť. A tak to doposud vypadalo, že zajímavější konstrukce s využitím internetových služeb zůstanou doménou RaspberryPI, BeagleBone nebo podobných desek se silnějšími procesory. Na arduino zbývaly drobnosti, které neopustí bezpečí lokální síťě. Novým modelem však Arduino překračuje vlastní stín. Arduinu YÚN si bere na pomoc vestavěné rozšíření Atheros AR9331 pojmenovaného Linino. Na tomto rozšíření běží linuxová distribuce založená na OpenWRT. Zde možná někteří z vás možná zpozorněli, ano je to ten samý linux, který lze provozovat na wifi routerech a který se stal součástí sousty zajímavých konstrukcí. Linino kromě připojení k ethernetu poskytuje i WiFi(802.11b/g/n) a jako bonus slot na SD kartu a USB host.

Díky Lininu již nebude problém využívat libovolných internetových služeb, které byly doposud arduinům zapovězeny. Třeba s důvodů nezbytné autentizace, která je pro arduino ve spojení s ethernet shieldem hodně těžkým oříškem. OpenWRT je také schopný vašim konstrukcím nabídnout dodatečné zabezpečení. Nbudete se muset bát vystrčit do internetu třeba ovládání topení v domě. Nápad to rozhodně není nikterak nový, na internetu je spousta starších konstrukcí, která využívá ke komunikaci s okolním světem malý WiFi routr připojený k arduinu sériovou linkou a nebo pomocí ethernetu. Nové ardunino ovšem nabídne sjednocení řešení a tím snadnější sdílený těchto složitějších konstrukcí.

Cena 52EUR není nikterak přemrštěná za to co je k dispozici, uvidíme jak to bude vypadat u českých distributorů. Rád bych brzo nabídnul konstrukci založenou na této desce, ale na cestě z číny je malý routřík TP-LINK TL-WR703N a tak další konstrukce bude pravěpodobně založená na něm. Dvě síťové hračky v jednom měsíci by bylo i na mě dost 🙂

Doplněno: Díky upozornění kamaráda jsem se trochu víc kouknul na napájecí systém. Arduino YÚN již neobsahuje vestavěný regulátor, na což je potřeba myslet a přidat regulátor pokud budete chtít napájet arduino jinak než přes USB. Bonusem je příprava na napájení POE. Pokud nevíte tak POE (Power Over Ethernet) je způsob napájení zařízení přes ethernetový kabel současně s připojením k počítačové síti. Bohužel je Arduino YÚN na POE pouze připraveno a k využívání je nezbytné dokoupit modul. Pro jistotu ještě dodám, že na POE musíte mít vybaven router a nebo jiný síťový prvek, aby se napájení mělo jak do ethernetu vůbec dostat.
Rozhodně se jedná o užitečné rozšíření, díky kterému můžete mít například různé senzory rozmístěné po domě a připojovat je jenom a pouze ethernetovým kabelem.

Arduino 7: časování s millis() a více činností najednou

Jak někteří začínáte psát tak se mi začínají množit dotazy jak kombinovat více činností na jednom arduinu, případně jak vykonat nějakou část programu, když zrovna probíhá delay(). To totiž opravdu nejde, protože máme jednoduchý procesor a když dělá delay tak nebude současně dělat nic jiného. Nezoufejte, protože tu máme funkci millis() a když se naučíte pracovat s časem jinak tak toho arduino zvládne mnohem víc najednou.

Pokud bych měl rozdíl mezi těmi dvěma přístupy přirovnat k normálnímu životu tak, delay funguje tak, že se zastavíte uprostřed chodníku, koukáte na hodinky a dokud není 12 tak nic neděláte a čekáte na oběd. Naproti tomu millis funguje tak, že na hodinky kouknete, zjistíte, že je jedenáct a tak jdete dělat něco jiného, za čas na ně kouknete znovu a pokud už bylo dvanáct tak jdete na oběd. Z toho vyplývá výhoda i nevýhoda, můžete dělat i něco jiného než koukat na hodinky, ale taky možná přijdete na oběd o něco později než přesně ve dvanáct. To zpoždění ovšem pro většinu malých aplikací bude naprosto nepodstatné a pokud už budete psát ovládací program pro jaderný reaktor tak si na to dáte pozor.

Použití ukážu na příkladu ke kterému nebudeme potřebovat nic jiného než arduino připojené k seriovému portu. Dejme tomu, že potřebujeme aby co vteřinu blikla led dioda na půl vteřiny. S použitím delay jednoduchý úkol.

int led = 13;
void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(500);
  digitalWrite(led, LOW);
  delay(1000);
}

A teď druhý úkol, pokud po sériovém portu něco přijde tak to vrátit zpět. Pro začátek to nebudeme spojovat s blikáním LED.

void setup() {
  //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Seriovy port aktivni");
}
void loop(){
  if (Serial.available()) {
    int inByte = Serial.read();//nacti znak ze serioveho portu
    Serial.write(inByte); //vypis znak na seriovy port
  }
  //delay(1000); //pokusna pauza
}

Na příkladu si můžete snadno vykoušet jak drtivý dopad má použití delay na rychlost odezvy. Stačí vyzkoušet odeslání textu a potom zkusit druhý program s odkomentovaným řádkem s pauzou. A teď pokud si delay nahradíte blokem pro blikání diodou tak bude zpoždění ještě o polovinu delší a to obsluhujeme jedinou blikající diodu.

Po přepsání na millis a spojení obou úkolů, by program s blikáním LED mohl vypadat asi takhle.

unsigned long aktualniMillis; //aktualni cas
unsigned long predchoziMillis; //cas poseldni akce
boolean led_svetlo; // promenna pro stav LED
int led = 13; //port pro LED

void setup() {
  pinMode(led, OUTPUT);
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Seriovy port aktivni");
}
void loop(){
  aktualniMillis = millis(); //podivam se na hodinky
  if(led_svetlo){ //potrebuju LED zhasnout nebo rosvitit?
    if(aktualniMillis - predchoziMillis > 500) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
            led_svetlo=LOW; //zhasni led
    }
  }else if(aktualniMillis - predchoziMillis > 1000) { //pokud zhasnout ubehlu uz 1000ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
            led_svetlo=HIGH; //rozsvit led
  }
  digitalWrite(led, led_svetlo); //aktualizace stavu LED
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial.write(inByte);
  }
}

Program neobsahuje jediný delay a přesto obsluhuje dvě pauzy a plynule odbavuje tok na sériovém portu. Základní myšlenou je nechat cyklus funkce loop co nejrychlejší a brzdit jej pouze vykonáváním akcí pokud je to potřeba. Kód je o něco složitější, je potřeba proměnné na to aby si pamatovaly časy, ale běh je potom plynulý. V některém dalším díle se podíváme ještě na přerušení. Využití přerušení je postup, kterak donutit arduino obsloužit opravdu neodkladné akce bez ohledu na to co je právě rozdělané.

Arduino 6: Modelářská serva

Modelářské servo je velice zajímavá součástka pokud máte v úmyslu tvořit pohyblivé věci. Servo je v podstatě elektromotor s převodovkou a elektronikou, která za vás vyřeší řízení motoru. Na rozdíl od elektromotoru se klasické servo neumí kontinuálně otáčet, ale zvládá pohyb v rozmezí 180 stupňů. Pro kontinuální rotační pohyb se musí servo upravit a nebo koupit již upravené. K tomu se dostaneme později.

Noname servo z Dealextreme a servo značky Hitec

Serva koupíte v modelářských obchodech a nebo stejně jako většinou součástek přes eBay či DealExtreme z Číny za pár korun. Pokud si servo objednáte tak dostanete přibližně to co vidíte na fotkách. Modul serva a nějaké příslušenství, které se používá k přenosu síly v modelařině typicky na pohyb křidélek na letadle a podobně.

Po elektrické stránce se servo ovládá pomocí impulsů 1ms – 2ms. Kdy impuls dlouhý 1ms znamená 0° natočení , 1.5ms 90° a 2ms 180°. Doporučená frekvence je 50Hz. Pro řízení pomocí arduina ovšem použijeme již připravenou knihovnu a ta tyto detaily pohlídá za nás.
Ze serva vedou tři dráty: červený kladné napájení, černý záporné napájení (na čínských servech může být i hnědý), žlutý řídící impulsy. Typicky se serva fungují na 5V napájení, ale vždy si dejte pozor na specifikace toho co koupíte. Některá serva s větší silou potřebují vyšší napětí, aby dosáhly udávané síly. Pokud začínáte s obyčejným malým servem tak jej můžete napojit přímo na arduino podle následujícího obrázku.

Schéma připojení serva k Arduinu

Pro ovládání budeme potřebovat již slíbenou knihovnu, která je teda součástí instalačního balíku arduina, ale použití knihoven jsem v návodech ještě neukazoval.
Je to poměrně jednoduché na začátku  přidáme knihovnu.

#include <Servo.h>

To bude fungovat pokud je knihovna Servo.h správně přidaná v adresáři “libraries”. Dále v definicích vytvoříme proměnou typu “Servo”.

Servo mojeServo;

Pak v sekci “setup” nadefinujeme ke kterému portu máme servo připojené.

mojeServo.attach(9);

Následně můžeme libovolně volat metodu “write” a říkat pod jakým úhlem má být servo natočeno(0-180).

mojeServo.write(uhel);

Dohromady by tedy mohl celý příklad vypadat takto:

/*
Program na ovládání serva
www.pistek.eu
*/

#include <Servo.h>

Servo mojeServo;

void setup(){
   mojeServo.attach(9);//definice portu připojení serva
}

void loop(){
   mojeServo.write(0);//nastav servo na uhel 0
   delay(500);//počkej 500ms
   mojeServo.write(30);//nastav servo na uhel 30
   delay(60*1000UL);//pockej 60*1000ms
}

A co to bude dělat. Nadefinujeme servo připojené na port 9, jednou za vteřinu přejde na 50ms do úhlu 0 a pak se zase vrátí na úhel 180. Ještě vás na příkaldu může zarazit “UL” u výpočtu dlouhé pauzy. UL znamená Unsigned Long, neboli typ 32 bitů kladné číslo. UL dává vědět překladači, že výsledek výpočtu může být až takhle velký.  A celá tato konstrukce může sloužit přeba jako pravidelná spoušť fotoaparátu pro tvorbu takzvaných timelapse snímků.

Ještě poslední věc a tou je slibovaná úprava na kontinuální rotační pohyb. Takto se serva předělávají na pohonné jednotky pro jednodušší roboty. Šířkou impulsu potom neřídíte úhel natočení, ale rychlost a směr otáčení. Stačí tedy následně ke dvěma upraveným servům připevnit kolečka a máte jednoduchého robotka na diferenciální ovládání. Samotná úprava serva je možná jenom u některých serv a vyžaduje jeho rozebrání. Vevnitř je potřeba ubrousit zarážku na posledním ozubeném kole tak aby se mohlo otáčet o celou otáčku. V elektronice je potřeba nahradit potenciometr, který slouží jako zpětná vazba s informací o úhlu natočení, dvěma odpory které jsou polovičního odporu než původní dráha potenciometru. V některých servech je možné servo jenom mechanicky odpojit a nastavit na střed. Sám jsem úpravu ještě neprováděl, takže vlastní fotky nemám. Možná dodám později, zatím se můžete podívat třeba na tento návod.

Arduino 5: cykly

V dnešním díle zkusím rozebrat cykly, tedy jak donutit arduino vykonávat opakované činnosti, nekonečně nebo třeba jenom několikrát.

Základní a věčný cyklus v arduinu je funkce “loop()”, do té píšeme hlavní část programu. Tato hlavní část programu se vykonává pořád dokola v nekonečném cyklu. Na příkladu prvního programu jste určitě rozpoznali obsah cyklu:

  1. zapni led
  2. pockej vterinu
  3. vypni led
  4. pockej vteřinu
/*
Blink
Zapne led diodu na jednu vteřinu, následně ji na vteřinu vypne, takhle pořád dokola.
Tento příklad je možno volně šířit.
*/

// k pinu 13 je připojena led dioda na většině Arduino desek.
// provedeme pojmenování:
int led = 13;

// následující funkce setup se provede vždy jen jednou a to po stisknutí tlačítka reset nebo zapnutí desky:
void setup() {
// nastavíme pin s LED jako výstupní(EN: output).
pinMode(led, OUTPUT);
}

// funkce loop(CZ: smyčka) se pouští pořád dokola dokud je deska zapnutá:
void loop() {
digitalWrite(led, HIGH); // zapni LED (HIGH (CZ: vysoká) je úroveň napětí nebo taky logická úroveň
delay(1000); // čekej 1000ms
digitalWrite(led, LOW); // vypni LED nastavením napětí nebo logické úrovně na LOW (CZ: nízká)
delay(1000); // čekej 1000ms
}

Pro vysvětlení dalších cycklů napíšeme program, který 10krát blikne rychle a 10krát pomaleji. Pro začátek použijeme cyklus “for”, ten má tři parametry:

  1. nastavení počitadla, nebo příkaz který se provede jenom na začátku. Klasicky začínáme od nuly: “pocitadlo=0;”
  2. podmínka pro ukončení, v našem případu dokud je pocitadlo menší než 10: “pocitadlo<10;”
  3. Navýšení počitadla, v našem příkladu je to navýšení počitadla o jedničku příkazem: “pocitadlo++;”

Cyklus “for” je ideální pro případy kdy předem znáte počet opakování, který má cyklus vykonat.
Následuje zdrojový kód s dvěma cykly, jeden pro rychlé blikání a druhý pro pomalé a ty se budou navěky opakovat. Oproti předchozímu příkladu jsem přidal ještě deklaraci proměnné “poc” v úvodu, která slouží jako počitadlo cyklů.

/*
Blink cykly
Tento příklad je možno volně šířit.
*/

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  for(poc=0;poc<10;poc++){  //rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
  }
  for(poc=0;poc<10;poc++){  //pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
  }
}

Zbývají nám k vysvětlení dva druhy cyklů a to je “while” a “do while”. Dělají v podstatě to samé jenom jejich syntaxe je trochu jiná. While cyklus má jediný parametr a to je podmínka pro ukončení. “While” a “do while” se liší jenom tím, že jeden kontroluje podmínku než začne provádět činnosti a “do while” kontroluje podmínku na konci činností. V praxi to znamená, že “do while” proběhne alespoň jednou, kdežto “while” nemusí proběhnout ani jednou. Tyto cykly se hodí tam kde neprovádíte jednoduché počítání, ale kontrolujete nějaký parametr co se mění v průběhu cyklu. Na vykonávání jednoduchého počítání je lepší “for”, protože všechny parametry a nastavení máte hezky pohromadě na jednom místě.
V následujícím příkladu je ukázka použití obou druhů cyklů.

/*
  Blink cykly
 */

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  poc=0; //nejddriv nastaveni pocitadla
  while(poc<10){  //cyklus pro rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
    poc++; //navyseni pocitadla o jednicku
  }
  poc=0; //nejddriv nastaveni pocitadla
  do{  //cyklus pro pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
    poc++; //navyseni pocitadla o jednicku
  }while (poc<10); //podminka pro ukonceni nakonci
}

Jenom jako zopakování předchozí lekce přidám kód doplněný o výpisy na sériový port, aby jste nemuseli počítat blikání, když si budete zkoušet cykly upravovat.

/*
  Blink cykly
 */

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  poc=0; //nejddriv nastaveni pocitadla
  while(poc<10){  //cyklus pro rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
    poc++; //navyseni pocitadla o jednicku
    Serial.print("rychle ");
    Serial.println(poc);
  }
  poc=0; //nejddriv nastaveni pocitadla
  do{  //cyklus pro pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
    poc++; //navyseni pocitadla o jednicku
    Serial.print("pomalu ");
    Serial.println(poc);
  }while (poc<10); //podminka pro ukonceni nakonci
}

Arduino 4: sériový port a podmínky

Sériový port je hodně důležité rozhraní, se kterým by jste se určitě měli naučit pracovat. Můžete pomocí něho zjistit co se děje uvnitř obvodu, když máte pocit, že je s programem něco špatně a přesně nevíte co. Také pomocí něho můžete komunikovat s počítačem nebo jinými obvody či arduiny.

Sériový port je na arduinu standardně vyveden na převodník “USB<>Serial” a přes USB připojen k počítači. Díky tzv. bootloaderu je sériový port využíván také k nahrávání programů do arduina. Tato konstrukce nám umožňuje vyzkoušet používat sériový port aniž bychom museli na běžném arduinu cokoliv měnit nebo zapojovat.

Nahrajte do arduina náledující zdrojový kód a zapněte v programu “Serial Monitor”, který najdete v menu “Tools”. Pozor rychlost musíte nastavit na stejnou hodnotu jakou jsme použili v programu tedy 9600, ale to by mělo být přednastaveno.

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}

void loop(){
  Serial.println("Odpocet jedne sekundy"); // vypis hlaseni v cyklu po jedne vterine
  delay(1000); // pauza jedna vterina
}

Okno výstupu sériového portu

Na obrazovce máte právě toto okno na kterém každou vteřinu přibývá jedno hlášení. Abych tuto kapitolu nevěnoval jenom téhle drobnosti tak přidáme ještě nějaké kostičky ať si máte s čím hrát. Pro ty kteří už něco programovali bude tahle část dost jednoduchá a zdlouhává.

Naučíme se použít proměnnou typu int. Typ int je základním typem pro ukládání celých čísel. Vejdou se do něj čísla od -32768 do 32767 protože je ukládán v 16 bitech paměti (tohle se může lišit podle typu procesoru, třeba arduino due používá k ukládání dvojnásobek místa a tak je potom rozsah -2147483648 až 2147483647).

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}
int pocitadlo;
void loop(){
  pocitadlo++; // zvetseni promenne pocitadlo o jednicku na zmenseni muzeme pouzit --
  Serial.print("Ubehlo "); //funkce print je podobná println jenom neukonci radek
  Serial.print(pocitadlo); // vypiseme obsah promene pocitadlo
  Serial.println(" sekund");
  delay(1000); // pauza jedna vterina
}

Když použijete tento program tak výstup vypadá následovně:

Ahoj tady Arduino
Ubehlo 1 sekund
Ubehlo 2 sekund
Ubehlo 3 sekund
Ubehlo 4 sekund
Ubehlo 5 sekund
Ubehlo 6 sekund
Ubehlo 7 sekund
Ubehlo 8 sekund
Ubehlo 9 sekund
Ubehlo 10 sekund
Ubehlo 11 sekund

Program by počítal až do 32767 a potom by takzvaně přetekla proměnná a začal by od znovu od -32767.

Taky se vám ta čeština výpisu moc nelíbí? Tak vylepšíme program ještě o použití podmínek.
Podmínka se píše následovně:

if(pocitadlo>5){ // podmínka "je pocitadlo větší než 5", pokud platí proveď příkazy v následujících složených závorkách
   Serial.println("Ubehlo vice nez 5 sekund");
}else{ // pokud podmínka neplatila proveď v těchto složených závorkách
   Serial.println("Ubehlo mene nez 5 sekund");
}

Tu část, která začíná else nemusíte používat a můžete psaní ukončit uzavřením závorek. Else část je volitelná. Podnímky jdou taky skládat za sebe a to si ukážeme na příkladu.

Podmínku použijeme k tomu abychom narovnali pošramocenou češtinu programu.

void setup() {
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Ahoj tady Arduino");
}
int pocitadlo;
void loop(){
  pocitadlo++; // zvetseni promenne pocitadlo o jednicku na zmenseni muzeme pouzit --
  Serial.print("Ubehlo "); //funkce print je podobná println jenom neukonci radek
  Serial.print(pocitadlo); // vypiseme obsah promene pocitadlo

  if(pocitadlo==1){ // pocitadlo je rovno presne 1
    Serial.println(" sekunda");
  }else if(pocitadlo<5){ // pocitadlo je mensi 5
    Serial.println(" sekundy");
  }else{ // pocitadlo je vetsi 5
    Serial.println(" sekund");
  }

  delay(1000); // pauza jedna vterina

}

Opravu slova sekundy jsme provedli podmínkou pokud se rovná jedné vypiš sekunda, pokud ne tak se rozhodni, je menší než 5 napiš sekundy, pokud je vetší napiš sekund.
Ještě pro úplnost jak se porovnávají čísla:

  • == rovná se (pozor na jedno = to není porovnání, ale přiřazení, tedy nastavení proměnné na hodnotu)
  •  > je větší
  • < je menší
  • <= je menší nebo stené
  • >= je větší nebo stejné
  • != nerovná se

Slovo “Ubehlo” už si určitě napravíte sami. Aby byl výklad o podmínkách trochu kompletní tak si ukážeme ještě konstrukci přepínače. Co kdybychom chtěli vypisovat vteřiny ne čísly, ale slovy? Pomocí nám známých podmínek by to bylo snadné, ale poměrně zdlouhavé a tak trochu kostrbaté.

if(pocitadlo==1){
  Serial.print(" jedna ");
}
if(pocitadlo==2){
  Serial.print(" dve ");
}
if(pocitadlo==3){
  Serial.print(" tri ");
}
// a tak dále

K tomu existuje přepínač neboli anglicky switch.

switch (pocitadlo) {
    case 1:
      Serial.print(" jedna ");
      break;
    case 2:
      Serial.print(" dva");
      break;
    case 3:
      Serial.print(" tri");
      break;
    default:
      Serial.print(" neco jineho");
  }

Je mi jasné,že jeho krásu objevíte až časem, protože ta vynikne až při delším kódu než jsou tyhle hrátky.

Myslím, že máte stavební kameny, se kterými už můžete začít stavět svoje programy. Brzo dopíšu článek o cyklech a pak snad půjdem na něco komplikovanějšího.

Rychlost dodávek z Číny

Věřím, že tento zápisek může zajímat každého kdo se chystá nakupovat na eBay a DX.com od čínských dodavatelů. Pokusím se zde vést statistiku časů od objednání do dodání, časy budou převážně z Číny, protože zde nakupuji nejčastěji. Pokud máte vlastní zkušenosti tak se neváhejte podělit v komentářích, ideálně když pošlete i data.

Dodavatel čas objednání čas dodání celkový čas poznámka
eBay seller CN Shenzen 16.10. 2012 2.11.2012 17 dní
eBay seller CN Shenzen 4.11. 2012 19.11.2012 15 dní
eBay seller CN Shenzen 14.11. 2012 26.11.2014 12 dní
DX.com  2.10. 2012  10.12.2012 69 dní pravděpodobně ztracená zásilka, 19.11.2012 odeslána stížnost, opětovné odeslání nemám potvrzeno, takže čistě spekulace
eBay seller CN Hong Kong  6.1. 2013  16.1.2013  10 dní
eBay seller CN Hong Kong  26.4. 2014  9.4.2014  13 dní
eBay seller CN Hong Kong  26.4. 2014  9.4.2014  13 dní
eBay seller CN Hong Kong  26.4. 2014  10.4.2014  14 dní

V tabulce počítám běžné objednávky bez dodatečných komunikací s prodejci placené přes PayPal. Pokud se mi nějaký balík dostane do spárů celního řízení, tak přidám komentář, aby to šlo v tabulce rozlišit. Celní řízení může výrazně prodloužit délku dodání obzvláště v období vánoc.

Článek budu aktualizovat podle nových zkušeností a případně podle vašich komentářů.

Arduino: Kde a jak nakoupit

Dnes to nebude moc o bastlení, ale spíš o tom jak si arduino pořídit. Předem upozorňuji, že popisovat budu jenom obchody které jsem sám vyzkoušel. Když přidáte do komentářů jak nakupujete arduina, shieldy a moduly na bastlení budu jenom rád.

  1. hwkitchen.com
    Nenechte se vyděsit anglickým eshopem a cenami v eurech. Je to český obchod, určitě se s nimi domluvíte, dodání je díky tomu opravdu rychlé, cenami ale nemůžou konkurovat číně.
  2. dealextreme.com
    Tohle je čínský obchod s harampádím všeho druhu. Arduina a zajímavé moduly tu najdete nejsnáze v následující kategorii http://dx.com/c/electrical-tools-499/arduino-scm-supplies-436. Nevýhoda je dlouhá doba dodání a taky omezení bezcelními limity EU. Objednávky doporučuji rozdělit tak aby cena jednotlivého balíku nepřesáhla $20. Vyhnete se tak celnímu řízení, které může znamenat výrazné navýšení ceny. Platit se dá přes PayPal. Nevýhodou je trochu pochybná kvalita. Nevsázejte na to, že se vám tu podaří koupit originál. Můj poslední nákup byl ethernet shield,kterému proti originálu chyběla jedna součástka. Nic co by mělo zásadní vliv na funkci, ale nepotěší to. Další zvláštnost je, že jednu desku tam často najdete v několika drobně odlišných provedeních a různých cenách, asi podle různých dodavatelů.
  3. http://shop.snailinstruments.com/
    Pokud se chystáte vyrábět roboty a pohyblivé konstrukce tak tady najdete velký výběr součástek, nejen pro arduino. E-shop nabízí asi největší výběr zajímavých modulů v čechách. Pokud nespěcháte a jste zvyklí nakupovat v zahraničí tak se vám tento e-shop bude určitě líbit jako inspirace.
  4. gme.cz
    GM je tradiční dodavatel součástek a je dobré znát cestu do jeho nejbližší prodejny. Často je to nejrychlejší cesta jak si arduino pořídit, když už ho konečně přidali do nabídky. Použitelné hlavně pro ty kteří mají GM ve městě a desku skladem.

Krom subjektivních dojmů zkusím udělat srovnávací tabulku dodavatelů.

hwkitchen.com dealextreme.com snailinstruments.com GM
Poštovné  63 0, riziko cla  ??? 0
Rychlost dodání 2-3 dny 2 týdny a víc 2-3 dny v prodejnách hned
Jazyk EN(mail – tel. CZ) EN CZ CZ
Uno  595  299  650  680
Leonardo  538  459  650  650
Duemilanove  262  490
Mega 2560  1162  422 1260  1290
Nejlevnější nano klon  956  262 1764

Ceny v porovnání beru podle aktuálního kurzu ČNB.U českých eshopů jsem nakupoval docela dávno tak si tou rychlostí dodání nejsem moc jistý, ale vždy to bylo v pohodě. V ceně poštovného trošku zvýhodňuji GM, ale já tam prostě nakupuji na místě. Nejlevnějším nano klonem jsem měl na mysli libovolnou desku malého formátu s procesorem a ftdi čipem, krom DX měli ostatní originál Nano a proto to srovnání moc nedopadlo.

Než jsem začal dělat tohle porovnání tak mě nenapadlo jak zdrcujícím způsobem dopadne pro české prodejce. Je potřeba si uvědomit, že DealExtreme.com prodává čínské klony a často nemůžete přesně vědět jak bude vypadat to co vám dorazí. Jak se tedy při nákupu rozhodnout?
Pokud začínáte, tak se vám asi nebude chtít čekat a ani nebudete chtít riskovat problémy s  čínskými klony. Jako začátečník budete mít horší pozici při hledání zda problém způsobila vaše chyba a nebo vlastnost čínského klonu. Kupte si Uno z HWkitchen.com nebo si zajděte do GM ve městě a vezměte ho tam. Uno vám bude na hraní stačit a i když si nějakým totálním nadáním odpravíte procesor tak ho vyměníte v patici(tohle se mi zatím nestalo a ta patice má ještě pár dalších výhod). Pokud by vás neodradila čekací doba tak v případě Uno desky by nákup v DealExtreme nemusel být až takovým riskem, ale klony a malé desky pro začátek nedoporučuji.

Pokud se už trochu vyznáte tak asi nečtete tenhle článek, ale jinak já často nakupuju na DealExtremu. Většinou na to nespěchám a rozdíl ceny je obrovský. Zatím jsem neměl příležitost moc litovat.

+ Ondra

Arduino 3: První program

Dnešní díl věnuju tomu jak arduino oživit a donutit jej vykonávat nějako činnost, kterou si vymyslíte. Budete potřebovat nějakou Arduino desku ať již originál, nebo některý z jeho klonů. Dále si musíte stáhnout GUI, neboli program kterým budeme kód překládat a nahrávat do desky. Program je zdarma ke stažení na webu http://arduino.cc/en/Main/Software.
Po spuštění před sebou uvídíte zhruba toto (různé verze se drobně liší).
Pohled na hlavní gui po spuštění

Popořadě projdeme všechny možnosti, které se nám nabízejí, pokud by vás to nudilo přeskočte nakonec na odeslání prvního programu.

Ikony:

  •  Verify: kontrola zdrojového kódu programu na výskyt formálních chyb
  •  Upload: provede to samé co verify a nakonci nahraje program do Arduina
  •  New: otevře nové okno s čistým souborem
  •  Open: slouží k otevření staršího souboru (soubory pro arduino se nazývají Sketch)
  •  Save: uloží hotový nebo rozpracovaný soubor
  •  Serial monitor: spustí zobrazení výstupu sériového rozhraní Arduina, význam tohoto výstupu si ukážeme v dalších dílech

Menu: Vyberu pouze podstatné a zajímavé položky, k ostatním se dostanete sami nebo se jim budu věnovat až to bude nezbytné.

  • File > Upload Using Programmer: možnost nahrát kód pomocí programovacího prostředku přímo do čipu, může se hodit jste si koupili některou z minimalistických verzí arduina a programátor
  • File > Examples: tady najdete různé příklady programů s anglickým komentářem, doporučuji prozkoumat, některé z nich budeme používat abych vám ušetřil kopírování z webu
  • Sketch > Import Library: tady najdete připravené knihovny pro jednodušší programování pomocí předpřipravených funkcí, ukážeme si později
  • Tools > Board: předtím než začnete programovat je potřeba zde vybrat které konkrétní arduino vlastně máte
  • Tools > Serial Port: pokud máte připojených více desek najednou tak zde můžete vybrat kterou z nich programovat (který sériový port počítače využívat)
  • Tools > Burn bootloader: pokud máte programátor tak touto položkou se do prádného Atmega čipu nahrává základní SW adruina
  • Help: nápověda

Tam kde je na mém obrázku nápis “Arduino Mega (ATmega1280) on Com11″(spodní použek) tam by se mělo zobrazit jakou desku máte vy a kam je připojená. Pokud je to špatně, nebo to tam není, zvole v menu správné položky.

V černém poli výše se budou zobrazovat informace z průběhu kontroly a nahrávání programu. Pokud bude něco špatně tak zde zjistíte co.

Konec teorie vyberte příklad z menu “file”>”examples”>”1.basic”>”blink” a nebo zkopírujte následující text do hlavního okna. Jediný rozdíl je v překladu komentářů do češtiny

/*Blink
Zapne led diodu na jednu vteřinu, následně ji na vteřinu vypne, takhle pořád dokola.

Tento příklad je možno volně šířit.
*/

// k pinu 13 je připojena led dioda na většině Arduino desek.
// provedeme pojmenování:
int led = 13;

// následující funkce setup se provede vždy jen jednou a to po stisknutí tlačítka reset nebo zapnutí desky:
void setup() {
// nastavíme pin s LED jako výstupní(EN: output).
pinMode(led, OUTPUT);
}

// funkce loop(CZ: smyčka) se pouští pořád dokola dokud je deska zapnutá:
void loop() {
digitalWrite(led, HIGH); // zapni LED (HIGH (CZ: vysoká) je úroveň napětí nebo taky logická úroveň
delay(1000); // čekej 1000ms
digitalWrite(led, LOW); // vypni LED nastavením napětí nebo logické úrovně na LOW (CZ: nízká)
delay(1000); // čekej 1000ms
}

Pokud jste to doteď neudělali tak připojte arduino k počítači, vybrerte v menu správný Board, a můžete stisknout Upload. Následně uvídíte průběh Verify a následně průběh Uploadu. Je možné, že se vás teď Arduino zeptá na správný sériový port. Pokud ano tak je to pravděpodobně ten s nejvyšším číslem.

Pokud nikde nenastala chyba tak v programu vidíte informaci “Upload Done” a na arduinu vám poblikává červená led dioda. Gratuluji, je to tam, a teď si rozebereme proč se to vlastně děje a co znamenají jednotlivé části programu. Hlavní výhodou příkladu Blink je jeho jednoduchost a funkčnost bez připojování dalších součástek. Standardní arduino má totiž k vývodu(pinu) 13 připojenu led diodu.

Když se podíváte na zdrojový kód příkladu tak snadno zjistíte například způsob psaní komentářů a formátování textu.

 /* Takhle se píše libovolný komentář a ukončit ho musíme zase naopak */

//nebo můžete udělat jednodušší jednořádkovou poznámku takhle

//řádky se ukončují středníkem
int led = 13;

//na konci definice funkce se středník nepíše
setup(){
}

Dál uvidíte tři základní části programu, které jsou vždy podobné.

  1. deklarace Nastavení pojmenování portů(pinů), pojmenování proměnných, nastavení konstant, seznam použitých knihoven. Tato část je vždy na začátku před ostatními funkcemi.
  2. nastavení prostředí Funkce “setup”, tady provedete úkony, které jsou nezbytné pro to aby běžel hlavní program například: kontrolu připojených součástek, vynulování poloh mechanismů, nastavení provozních parametrů hardwaru
  3. hlavní smyčka programu Funkce “loop”, sem patří to hlavní co má program vykonávat po celou dobu zapnutí.

Tak to by bylo pro dnešek vše. Můžete pokračovat tím, že budete tento příklad zkoušet upravovat nebo můžete prozkoumat ostatní příklady. Pokud máte nějaké základy angličtiny tak na tom nic těžkého není. V dalším dílu se pokusím vysvětlit funkci a smysl sériového portu. Je to další vybavení arduina, které máte k dispozici aniž by jste museli něco kupovat a připojovat.

+ Ondra

Podlehl jsem wordpressu

Ahoj všichni, kdo to tu náhodou čtete. Po dlouhé době co se tu nic nedělo a začnou snad brzo změny k lepšímu. Začal jsem tím, že jsem z webu vyházel všechen kód vlastní výroby a nahradil ho redakčním systémem wordpress. Očekávám, že tato změna ubere některé funkčnosti, na které jsem byl zvyklý a které jste nidky neměli možnost vidět. Snad změna přinese snadnější správu obsahu a nové články, které se vás naopak týkají a o to tu běží.

Takže mi držte palce a já zkusím začít sázet článek o svém CNC bastlu a pár dalších projektech o kterých tu nebyla zmínka.

Mravenci Faraoni válečný stav

Snad každý to ve starším panelovém domě musel zažít, taková drobná setkání prvního druhu. Sedíte v kuchyni a najednou před vámi na stole nebo častěji na parapetu mrňavý zrzavý mravenec. Takhle to začíná a zatím se domnívám, že to neskončí. Každopádně si můžete přečíst průběh mojí války s faraony.

Dějství první: Stěhujeme se

Slyšel jsem o nich strašné pověsti, ale nikdy jsem je neviděl, “faraoni” zní to až mysticky. Při výběru bytu jsem takovou drobnost nebral v potaz a zatím bych svůj názor neměnil. Je to jenom drobná komplikace, zatím. Po nastěhování do bytu jsem našel zastrčených několik zaprášených domečků na návnadu a ani jednoho mravence. Domečky jsem vyhodil. Později jsem se dozvěděl, že byly součástí velké likvidace mravenců v celém domě, jako takové následné opatření kdyby něco náhodou přežilo.

Dějství druhé: Průzkumníci

Asi klasický začátek, v koupelně s umakartovým jádrem potkávám první průzkumníky na parapetu. Většinou tak maximálně 3 kousky. Tady přece nemají co žrát, situaci ignoruju a průzkumníky zabíjím manuálně jako kratochvíli.
Při konzultaci s kolegy vyslechnu zase nějaké děsivé historky a několik vynikajících rad.
Na faraony platí Biolit, ideálně aplikovaný rozdrcením mravence okrajem plechovky.
Chleba před mravenci na stole nejlépe ochrání magický kruh z Jaru.

Tohle nebudu doufám muset aplikovat, průzkumnická fáze života s faraony trvá pár roků. V průběhu jediný vážnější incident. Po vypnutí topení, proběhne vážnější kolonizace parapetu s kytkama z horního patra přes trubku topení. Studiem mravenců na netu zjistím, že mají extrémně citlivý čich. Čerstvý pepř je jenom lehce rozptýlí a tak aplikuji to nejsilnější co mám, Savem obstříkávám mezeru mezi stropem a trubkou topení. Invaze trvale zastavena.

Dějství třetí: Kolonizace kuchyně

Začalo to tentokrát prudce a ne z koupelny kde bych to čekal. Po kuchyni běhají větší množinky faraonů, zdroj nákazy zatím neznámý. Objednávám Liquid Gel Fortox a vyrábím větší množství provizorních domečků z vršků na PET. Nevím proč jsem vyhodil ty staré, které se mi povalovaly po bytě, dva domečky v kutilských potřebách stojí minimálně 150,- Kč. Vyděrači takhle zneužívat cizí nouze, kus plastu tak za 2 koruny a troška chemické břečky. Vršky PETek připravené na parapetu se díky sladkým zbytků stávají okamžitě oblíbeným místem našich faraonů. Jen si zvykejte, zítra uvidíme zač je toho loket.

Dějství snad poslední: Válka

Přišel mi poštou Fortox, nedočkavě jsem naplnil navnadní domečky a číhal jak mravenci zareagují. Jed je to opravdu kvalitní, mravenec po požití nevypadá zrovna OK a umírá. Bohužel sám, po dobu několika následujících dní jsou nástrahy jako jediná věc v našem bytě mravenci zcela ignorovány. Zkouším finty které zabíraly v dětství a to vylepšení jedu něčím voňavým a lákavým. Opět bez úspěchu.

Po několika dnech rezignuji a vybíhám do Bauhauzu prostudovat krabičky a složení všech dostupných jedů. Volím Maxforce LN od AgroBio Opava, účinná látka imidacloprid 0.5g/kg. Drobné granulky sypu mravencům k dispozici a marně očekávám pozitivní reakci. Situace se změní v můj prospěch teprve po zakápnutí granulek vodou, mravenci v ten moment žerou návnadu jak najatí. Po dvou dnech se projevuje výrazný úbytek faraonů na všech lokalitách. V průběhu dalšího měsíce pouze zakápnu návnadu když náhodou nějakého spatřím. Podle množství usuzuji, že se v hnízdech ještě v jedné vlně vylíhli a potom již potkávám jen průzkumníky z okolních prostor domu.

Doufám, že vám můj článek pomůže pokud jste náhodou ve kterékoliv fázi boje. Tuba Fortoxu je zadamo k dispozici prvnímu kdo si o ni řekne, na větší mravence bude možná dobrá. Na dobré rady, zkušenosti a osvědčené prostředky se těším v komentářích.

Doplněno 5.8.2012
Opravdový konec všech problémů a tedy i průzkumníků z ostatních bytů nastal až po zásahu profesionální deratizační firmy, která po všech bytech v baráku napatlala čirý gel na všechna místa kde by mravenci mohli být. Teď je klid už skutečný. Nakonec tedy doporučuji toto řešení, i když vyžaduje spolupráci celého domu. Tímto samozřejmě taky děkuji lidem co u nás dělají tu strašně nevděčnou práci okolo domovní správy.

+ Ondra