Reklama (sponzoruje chod webu)
1 x hodnoceno

Arduino UNO

Arduino UNO je malý, levný vývojový a výukový modul založený na mikroprocesoru ATMEGA328. Samotný modul obsahuje výstupy, vstupy, analogové vstupy s převodníkem, RX/TX linku atd. Skrz otevřený HW i SW lze ale modul využít pro vývoj vlastních aplikací. Navíc je možno dokoupit velké množství zajímavého příslušenství jako ethernetový modul, čtečku paměťových karet, displej, WIFI modul, GSM modul a mnoho dalších. Lze tak snadno vytvořit automaty, loggery, roboty,… a to bez potřeby neustálého kreslení a výroby DPS. Jakmile je vývoj dokončen, můžeme použít přímo dodávané Arduino nebo procesor přenést do vlastní DPS. Často ale postačí použít hotový modul Arduina i do profesionální aplikace.


 

 


Základní vlastnosti Arduina UNO:

Procesor ATMEGA328
16 MHz
32 kB flash paměť
2 kB SRAM paměť
1 kB EEPROM paměť
Rozhraní USB
Rozhraní RS-232
Napájení 5V z USB
Napájení 7-12V z DC konektoru
I/O (0 – 13) Nastavitelné vstupy / výstupy
I/O (0,1) RX/TX linka
I/O (2,3) externí přerušení
I/O (3,5,6,9,10,11) PWM
I/O (10,11,12,13) SPI
I/O (4,5) I2C
GND
(A0 – A5) šestice analogových vstupů s převodníkem
3,3V
5.0V


Příprava Arduina:

Před připojením Arduina je třeba nainstalovat ovladače: FTDI a program Arduino SW. Po spuštění programu a výběru COM portu můžeme pracovat. Program slouží pro psaní kódu podobného jazykům C, kompilaci, debug, načtení kódu do připojeného Arduina a pro čtení dat na COM portu. Popis struktury, funkcí programovacího jazyku je přímo na stránce výrobce italského Arduina.


Struktura programu, sériová linka

Základní program pro výpis ASCI textu po sériové lince ukazuje strukturu programu a práci s daty.

Do okna napíšeme nebo zkopírujeme zdrojový kód. Na počátku programu nalezneme sekvenci „void setup“ která inicializuje HW. V tomto případě se jedná o nastavení sériové linky na 9600bps. Nastavují i vstupy, výstupy a jiné možnosti jako volání funkcí.

Dalším krokem je „void loop“ tedy neustále se opakující část programu. Je třeba rozlišovat druhy závorek. Obyčejná závorka obsahuje parametr, složená závorka část podprogramu. Dokončení příkazu se uvádí v plastnost středníkem. Dvojice lomítek slouží pro vložení komentáře.

Náš kód vypisuje text a čísla po sériové lince. Pro nahrání tohoto kódu do Arduina můžeme spustit monitor sériové linky (Tools – Serial Monitor). Náhled ukáže rozlišení příkazů print (pošle data) a println (pošle data a ukončí řádek). Dále ukázka práce s čísly (pozor na rozlišení desetinné tečky a čárky).

 

 

Zdrojový kód:

 void setup() {                         //inicializace po spuštění
  Serial.begin(9600);                   //spustí sériovou komunikaci na 9600bps
}
void loop() {                           //opakující se program
  Serial.print("AHOJ: ");               //vypíše text ASCI po sériové lince
  Serial.println("Nova zprava.");       //vypíše text ASCI po sériové lince a ukončí řádek
  Serial.println(33);                   //vypíše tuto hodnotu po sériové lince
  Serial.println(33.123456);            //vypíše tuto hodnotu na 2 des. místa po sériové lince 
  Serial.println(33.123456, 4);         //vypíše tuto hodnotu na 4 des. místa po sériové lince
  Serial.println(78, BIN);              //vypíše tuto hodnotu ve dvojkové soustavě po sériové lince
  Serial.println(78, OCT);              //vypíše tuto hodnotu v osmičkové soustavě po sériové lince 
  Serial.println(78, DEC);              //vypíše tuto hodnotu v desítkové soustavě po sériové lince 
  Serial.println(78, HEX);              //vypíše tuto hodnotu v šestnáctkové soustavě po sériové lince
  Serial.println();                     //vypíše prázdný řádek po sériové lince  
  delay(5000);                          //vyčká 5000ms (5s)
}

Výstup a blikání LED

Arduino UNO má celkem 13 pinů jenž můžou sloužit jako vstupy i jako výstupy. Při inicializaci programu si navolíme PIN2 jako výstup. V dalším kroku spustíme opakující se program „void loop“. Příkazem „digitalWrite“ zapíšeme do závorky PIN který chceme ovládat a novou logickou hodnotu (LOW = LOG 0 = Vypnuto, HIGH – LOG 1 – Zapnuto). Příkaz „delay“ umožňuje zpoždění dalšího kroku v ms.

Náš program aktivuje výstup, vyčká 1000ms, vypne výstup, vyčká 1000ms a tak stále dokola… Na výstup můžeme připojit např. LED. Anodu připojíme na PIN2 a katodu přes rezistor na GND (rezistor je třeba skrz úroveň LOG 1 = 5V). Zatížení výstupu je max. 20mA!

ARDUINO_004

ARDUINO_005

 

Zdrojový kód – blikání LED:

void setup() {                
  pinMode(2, OUTPUT);           // nastaví PIN2 jako výstup (např. pro LED)  
}
void loop() {
  digitalWrite(2, HIGH);        // na pinu 2 nastaví logickou 1 
  delay(1000);                  // počká 1000 milisekund = 1 sekunda
  digitalWrite(2, LOW);         // na pinu 2 nastaví logickou 0 
  delay(1000);                  // počká 1000 milisekund = 1 sekunda
}
 

Zdrojový kód – blikání LED, běžící světlo:

void setup() {                
  pinMode(2, OUTPUT);           // nastaví PIN2 jako výstup (např. pro LED)  
  pinMode(3, OUTPUT);           // nastaví PIN3 jako výstup (např. pro LED)  
  pinMode(4, OUTPUT);           // nastaví PIN4 jako výstup (např. pro LED)  
}
void loop() {
  digitalWrite(2, HIGH);        // na pinu 2 nastaví logickou 1
  delay(250);                   // počká 250milisekund
  digitalWrite(3, HIGH);        // na pinu 3 nastaví logickou 1
  delay(250);                   // počká 250milisekund
  digitalWrite(4, HIGH);        // na pinu 4 nastaví logickou 1
  delay(250);                   // počká 250milisekund  
  digitalWrite(2, LOW);         // na pinu 2 nastaví logickou 0
  delay(250);                   // počká 250milisekund
  digitalWrite(3, LOW);         // na pinu 3 nastaví logickou 0
  delay(250);                   // počká 250milisekund
  digitalWrite(4, LOW);         // na pinu 4 nastaví logickou 0
  delay(250);                   // počká 250milisekund  
}

Ovládání výstupu z PC

Ovládání výstupu z PC pomocí sériové linky je důležitou ukázkou demonstrující zasílání dat do Arduina. Pro zpracování je ale třeba použít několik nových vlastností programování.

const int LEDKA = 2; nám nastaví konstantu (const) pojmenovanou „LEDKA“ s pevně danou hodnotou „2“. Konstanta je pevně daná hodnota, která se při běhu programu nemění. Později nemusíme všude volat výstup 2, ale budeme si pamatovat výstup LEDKA. Toto je užitečné při práci s vícero výstupy. Můžeme je pojmenovat např. Svetlo, Motor, Sirena a pak s nimi pracovat přirozeněji. Samozřejmě se konstanty hodí i pro jiné účely. Např. si lze uložit pí, rychlost světla, rychlost zvuku apod. pro další výpočty abychom nemusely celá čísla vždy znovu vypisovat. Konstantu máme zvolenu jako celé číslo (int – integer).

int INPRIKAZ; je proměnná, do které si uložíme nějaké často měnící se data. Je to malá lokální paměť při běhu programu. Po odpojení napájení se však vymaže. Pro uložení dat odeslaných po sériové lince je toto ideální pomůcka pro další zpracování.

if je začátek podmínky. Pokud je podmínka splněna pak se vykoná další sekvence programu uložená ve složené závorce. Pokud (if)) tedy přichází data po sériové lince, uloží se data do proměnné (INPRIKAZ). Pokud (if) je obsah proměnné (INPRIKAZ) shodný (==) se znakem H (v ASCI číslo 72), aktivuje se výstup přiřazený konstantě LEDKA. Pokud (if) je obsah proměnné (INPRIKAZ) shodný (==) se znakem L (v ASCI číslo 76), deaktivuje se výstup přiřazený konstantě LEDKA.

Výsledný program tedy umožní ovládat výstup (připojenou LED) z počítače – z monitoru sériové linky. Do horního pole zadáme písmeno H nebo L a odešleme do Arduina jenž vykoná požadovaný příkaz.

Zdrojový kód – ovládání LED z PC:

const int LEDKA = 2;              // Přiřadí konstantu LEDKA číslu 2
int INPRIKAZ;                     // Proměnná pro uložení sériové komunikace
void setup() {
  Serial.begin(9600);             // Inicializace sériové linky na 9600bps
  pinMode(LEDKA, OUTPUT);         // Inicializace výstupu LEDKA (tedy druhého výstupu)
}
void loop() {
  // Sleduje, zda-li přicházejí na sérivoé lince nějaká data:
  if (Serial.available() > 0) {
    // Pokud přicházení na sériové lince data, uloží je do proměnné INPRIKAZ:
    INPRIKAZ = Serial.read();
    // pokud byl přijat do proměnné INPRIKAZ znak H (ASCII 72), zapne LED / výstup 2:
    if (INPRIKAZ == 'H') {
      digitalWrite(LEDKA, HIGH);
    } 
    // pokud byl přijat do proměnné INPRIKAZ znak L (ASCII 76) vypne LED / výstup 2:
    if (INPRIKAZ == 'L') {
      digitalWrite(LEDKA, LOW);
    }
  }
}

 

Zdrojový kód – ovládání 3 LED z PC (příkaz 0 – 1 – 2 – 3 zapne požadovaný počet LED):

const int LED1 = 2;              // Přiřadí konstantu LED1 číslu 2
const int LED2 = 3;              // Přiřadí konstantu LED2 číslu 3
const int LED3 = 4;              // Přiřadí konstantu LED3 číslu 4
int INPRIKAZ;                    // Proměnná pro uložení sériové komunikace
void setup() {
  Serial.begin(9600);            // Inicializace sériové linky na 9600bps
  pinMode(LED1, OUTPUT);         // Inicializace výstupu LED1 (tedy 2 výstupu)
  pinMode(LED2, OUTPUT);         // Inicializace výstupu LED2 (tedy 3 výstupu)
  pinMode(LED3, OUTPUT);         // Inicializace výstupu LED3 (tedy 4 výstupu)
}
void loop() {
  if (Serial.available() > 0) {
    INPRIKAZ = Serial.read();
    if (INPRIKAZ == '0') {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
    } 
    if (INPRIKAZ == '1') {
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
    }
    if (INPRIKAZ == '2') {
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, LOW);
    }
    if (INPRIKAZ == '3') {
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
    }
  }
}

No comments

Analytics
Created by E.Sc. Petr Mejzlik, DiS.           © 2009 - 2017 X-IDEA.cz          Tento web používá COOKIES