. Patrz
posiada wiele możliwości komunikacji z komputerem lub z innymi mikrokontrolerami.
Protokół Modbus
Do komunikacji aplikacji PROMOTIC z
Arduino najodpowiedniejszym wydaje się zastosowanie
protokołu Modbus.
W zależności od możliwości mikrokontrolera można zastosować warstwę komunikacyjną łącza szeregowego (
MODBUS RTU) lub Ethernet (
MODBUS TCP).
Opis dla Arduino:
- Uruchom oprogramowanie.
- Ustaw port komunikacyjny do komunikacji z PC (w menu "Tools / Port").
- Dodaj pobraną bibliotekę (w menu "Projekt / Include Library / Add .ZIP Library").
- Na podstawie przykładu w bibliotece wytwórz projekt dla Arduino.
Opis dla PROMOTIC:
Do tej komunikacji w systemie PROMOTIC można zastosować:
Komunikacja poprzez protokół zdefiniowany przez użytkownika
Do komunikacji aplikacji PROMOTIC z Arduinem można również stworzyć własny protokół (zdefiniowany przez użytkownika). Zazwyczaj będzie too bardzo prosty protokół np. typu:
- Aplikacja PROMOTIC wyśle tekst "ai2" (pyta o wartość wejścia analogowego nr 2)
- Arduino odpowie tekstem "24.3"
Taki protokół można zaprogramować do Arduina (będzie
Slave) oraz do aplikacji PROMOTIC (będzie
Master).
Opis dla PROMOTIC:
Do tej komunikacji w systemie PROMOTIC można zastosować:
Programowanie Arduina
Arduino można programować w języku
C oraz
C++. Nie wymaga praktycznej wiedzy tych języków programowania.
Jedną z głównych części każdego programu jest funkcja
void setup() {}. W nawiasie złożonym tej funkcji trzeba wpisać kod, który zostanie wykonany
tylko raz na początku programu. To znaczy, że lub po podłączeniu do zasilania, po naciśnięciu przycisku
"restart" lub wgraniu kodu do
Arduina.
Drugą ważną funkcją dla działania programu jest funkcja
void loop() {}. W nawiasie złożonym tej funkcji trzeba wpisać kod, który
będzie wykonywany na okrągło, aż do odłaczenia zasilania.
Cyfrowe wejścia oraz wyjścia:
Ponieważ Arduino jest przeznaczone do dalszego rozszerzania, zawiera wejścia oraz wyjścia nazywane pinami. Do tych pinów można przewodnikiem podłączyć obwody, czipy, przekaźniki, pamięci itd. Do pracy z pinami Arduino posiada proste funkcje.
- Funkcję pinMode(p1, p2) należy wołać w celu określenia, czy z danym pinem należy pracować jako z wejściem lub wyjściem. Parametr p1 to numer pinu, parametr p2 określa, czy chodzi o wejście lub wyjście.
- Funkcja digitalWrite(p1, p2) służy do zarządzania wyjściem. Parametr p1 to numer pinu, parametr p2 określa, czy do pinu ma płynąć prąd (HIGH = płynie, LOW = nie płynie).
- Funkcja value = digitalRead(p1) służy do odczytu, czy do wejścia płynie prąd. Parametr p1 to numer pinu. Funkcja zwraca wartość: HIGH = płynie, LOW = nie płynie.
Analogowe wejścia i wyjścia:
Programowanie wejściowych oraz wyjściowych wartości analogowych jest nieco bardziej skomlikowane aniżeli programowanie wartości cyfrowych. Nazwa wartości "Analogowej" nie jest w tym przypadku tak całkiem dokłedna, ponieważ nie chodzi o wartości analogowe. Jeżeli jest konieczne zastosować wartość analogową w zakresie na przykład 0-5V, wtedy należałoby zastosować zawnętrzny konwerter D/A. Funkcja ta generuje na wybranych pinach sygnał
PWM, który jest jakoby cyfrowy "odpowiednik" sygnału analogowego. W rzeczywistości to działa w taki sposób, że szybko zmienia 0 na 5V.
- Funkcja value = analogWrite() służy do ustawienia wartości analogowej. Funkcję tą można zastosować tylko na wybranych pinach zaznaczonych PWM.
- Funkcja analogRead() jest przeznaczona do odczytu wartości analogowych na pinach wejściowych, zaznaczonych A.
Podstawowe oprogramowanie Arduino dla łącza szeregowego oraz protokół 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 = ®Bank; // 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();
}