Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Komunikace s mikrokontrolerem Arduino

Arduino je otevřená platforma založená na mikrokontrolerech ATMega od firmy Atmel. Viz http://www.arduino.cc.
 
Mikrokontroler Arduino má mnoho možností komunikace s počítačem nebo s jinými mikrokontrolery.
 

Protokol Modbus

Pro komunikaci aplikace PROMOTIC s Arduinem se jeví jako nejvhodnější použít protokol Modbus.

Jako komunikační rozhraní lze použít (podle možností mikrokontroleru) sériovou linku (Modbus RTU) nebo Ethernet (Modbus TCP).

 
Postup pro Arduino:

- Ze stránek "http://code.google.com/p/arduino-modbus-slave/" stáhnout knihovnu "arduino-modbus-slave". V této knihovně je i příklad, který pomůže při používání této knihovny.
- Nainstalovat vývojový software pro Arduino ze stránek "http://www.arduino.cc".
- Spustit software.
- Nastavit komunikační port pro komunikaci s PC (v menu "Nástroje / Port").
- Přidat stáhnutou knihovnu (v menu "Projekt / Include Library / Add .ZIP Library").
- Podle příkladu v knihovně vytvořit projekt pro Arduino.

 
Postup pro PROMOTIC:

Pro tuto komunikaci lze v systému PROMOTIC použít: PmModbusMr - Ovladač pro komunikaci protokolem Modbus Master.

Pro snadné přidání tohoto ovladače do aplikace je vhodné použít:

Komunikace uživatelsky konfigurovaným protokolem

Pro komunikaci aplikace PROMOTIC s Arduinem lze také vytvořit vlastní (uživatelsky definovaný) protokol. Většinou se bude asi jednat o velmi jednoduchý protokol např. typu:
- Aplikace PROMOTIC zašle text "ai2" (žádá hodnotu analogového vstupu číslo 2)
- Arduino odpoví textem "24.3"

Takový protokol lze naprogramovat do Arduina (bude Slave) i do aplikace PROMOTIC (bude Master).

 
Postup pro PROMOTIC:

Pro tuto komunikaci lze v systému PROMOTIC použít: PmChar - Ovladač pro komunikaci uživatelsky konfigurovatelným ASCII/BIN protokolem.

Pro snadné přidání tohoto ovladače do aplikace je vhodné použít:

Programování Arduina

Arduino je možné programovat v jazyce C a C++. Nevyžaduje však praktické znalosti těchto programovacích jazyků.
 
Jednou z hlavních částí každého programu je funkce void setup() {}. Mezi složené závorky této funkce se píše kód, který se provede pouze jednou na začátku programu. To znamená, buď po připojení napájení, zmáčknutí tlačítka restart, nebo nahrání kódu do Arduina.
 
Druhou důležitou funkcí pro chod programu je funkce void loop() {}. Mezi složené závorky se zapisuje kód, který se bude opakovat neustále dokola, až do odpojení napájení.
 
Digitální vstupy a výstupy:

Jelikož Arduino je určeno k dalšímu rozšiřování, obsahuje vstupy a výstupy nazývané piny. K těmto pinů se dá vodičem připojit další obvody, čipy, relé, paměti atd. K práci s těmito piny má Arduino k dispozici jednoduché funkce.

- Funkce pinMode(p1, p2) je nutno volat pro určení zda se má s pinem pracovat jako se vstupem nebo výstupem. Parametr p1 je číslo pinu, parametr p2 určuje, zda se jedná o vstup nebo výstup.
- Funkce digitalWrite(p1, p2) slouží k ovládání výstupu. Parametr p1 je číslo pinu, parametr p2 určuje, zda má do pinu téct proud (HIGH = teče, LOW = neteče).
- Funkce value = digitalRead(p1) slouží ke čtení, zda proud do vstupu teče. Parametr p1 je číslo pinu. Funkce vrací hodnotu: HIGH = teče, LOW = neteče.
 
Analogové vstupy a výstupy:

Programování analogových vstupních a výstupních hodnot je trochu komplikovanější a složitější než programování digitálních hodnot. Název "Analogové" hodnoty není totiž v tom případě zcela přesný, protože se o žádné analogové hodnoty nejedná. Pokud by bylo zapotřebí opravdu použít analogovou hodnotu v rozsahu například 0-5V, pak by se musel použít externí D/A převodník. Tato funkce totiž na vybraných pinech generuje PWM signál, což je jakási digitální "náhražka" analogového signálu. Ta v praxi funguje tak, že rychle střídá 0 a 5V.

- Funkce value = analogWrite() slouží k nastavení analogové hodnoty. Tuto funkci je možné použít pouze na vybraných pinech označených PWM.
- Funkce analogRead() slouží ke čtení analogových hodnot na vstupních pinech, označených A.

Elementární Arduino program pro sériovou linku a protokol Modbus

#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
modbusDevice regBank; //Setup the brewtrollers register bank. All of the data accumulated will be stored here
modbusSlave slave; //Create the modbus slave protocol handler
void setup()
{
  pinMode(2, INPUT); //Declare DI2
  pinMode(13, OUTPUT); //Declare LED as output
  regBank.setId(1); //Assign the modbus device ID
  regBank.add(10002); //Add Digital Input register
  regBank.add(13); //Add Digital Output register
  regBank.add(30001); //Add Analog Input register
  slave._device = &regBank; //Assign the modbus device object to the protocol handler
  slave.setBaud(9600); //Initialize the serial port for coms at 9600 baud
}
void loop()
{
  byte DI2 = digitalRead(2); //Digital Input
  if(DI2 >= 1)regBank.set(10002,1);
  if(DI2 <= 0)regBank.set(10002,0);
  int DO13 = regBank.get(13); //Digital output
  if(DO13 <= 0 && digitalRead(13) == HIGH) digitalWrite(13,LOW);
  if(DO13 >= 1 && digitalRead(13) == LOW) digitalWrite(13,HIGH);
  float valueAI0 = analogRead(0); //Analog Input
  regBank.set(30001, (word)valueAI0);
  slave.run();
}

Elementární Arduino program pro sériovou linku a uživatelsky konfigurovatelný protokol

float val;
char received;
void setup()
{
  pinMode(2,INPUT); //Declare DI2
  Serial.begin(9600); //Begin serial communication
}
void loop()
{
  while(Serial.available() > 0)
  {
    received = Serial.read();
    if(received == 'a')
    {
      val = analogRead(0);
      val = val*(5.0/1024.0);
      Serial.println(val);
    }
    else if(received == 'd')
    {
      val = digitalRead(2);
      Serial.println(val);
    }
  }
}
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice