O Software

O foco dessa prática não é ensinar a programar em Arduino, mas como você já tem um bom conhecimento em programação não será difícil entender o código. Desse modo, vou apresentá-lo, com todos os comentários para facilitar o entendimento e a manutenção.

Código 1 – A programação do Arduino
x
1
#include <SimpleModbusSlave.h> // inclusão da biblioteca do protocolo modbus
2
3
//Definindo variaveis e seus respectivos pinos no arduino
4
//Digitais
5
const int led_B = 3; //pinos digitais onde está ligado no arduino
6
const int led_G = 4;
7
const int led_R = 5;
8
const int Botao1 = 6; //
9
const int Botao2 = 7; //
10
const int buzzer = 2; 
11
12
//Analogicos
13
const int LM35 = A0; //pinos analógicos onde está ligado no arduino
14
const int Potenciometro = A1;
15
const int LDR = A2;
16
//----------------------------------------------------------------
17
18
//Cria um vetor com todos os dados que serão enviados pelo protocolo
19
enum 
20
{     
21
    Led_R,// endereço offset 0
22
    Led_G, // endereço offset 1
23
    Led_B, // endereço offset 2
24
    Buzzer, // endereço offset 3
25
    EstadoBotao1, // endereço offset 4
26
    EstadoBotao2, // endereço offset 5
27
    temp,// endereço offset 6
28
    pot,// endereço offset 7
29
    luz, // endereço offset 8
30
    HOLDING_REGS_SIZE
31
};
32
unsigned int holdingRegs[HOLDING_REGS_SIZE];
33
34
35
// No setup definimos as variaveis que são entradas e saídas
36
void setup() {
37
38
    Serial.begin(9600); // inicia a porta serial
39
    modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);// configura o protocolo modbus
40
    modbus_update_comms(9600, SERIAL_8N1, 1);
41
42
43
    pinMode(Buzzer, OUTPUT);// configuraos pinos como entrada ou saída
44
    pinMode(led_R, OUTPUT);
45
    pinMode(led_G, OUTPUT);
46
    pinMode(led_B, OUTPUT);
47
    pinMode(Botao1, INPUT);
48
    pinMode(Botao2, INPUT);
49
50
}
51
52
void loop(){
53
54
    modbus_update();
55
56
    //Leitura dos botões
57
    holdingRegs[EstadoBotao1] = digitalRead(Botao1);
58
    holdingRegs[EstadoBotao2] = digitalRead(Botao2);
59
60
    //Leitura dos sensores
61
    holdingRegs[luz] = analogRead(LDR);// Ler valor do sensor de luminosidade e envia para o ScadaBR
62
    holdingRegs[pot] = analogRead(Potenciometro);// Ler valor do potenciometro e envia para o ScadaBR
63
    holdingRegs[temp] = analogRead(LM35);// Ler valor do sensore de temperatura e envia para o ScadaBR, posteriormente deve ser configurado no ScadaBR a conversão de |temp * 0.1075268817| para apresentar o valor em °C da forma correta
64
65
    //Recebendo os dados digitais
66
    digitalWrite(buzzer, holdingRegs[Buzzer]); //recebe o dado enviado pelo ScadaBr e envia para porta do arduino.
67
    digitalWrite(led_R, holdingRegs[Led_R]);
68
    digitalWrite(led_G, holdingRegs[Led_G]);
69
    digitalWrite(led_B, holdingRegs[Led_B]);
70
71
}

A programação do Arduino é feita em sua própria IDE (Integrated Development Environment), mas também tem suporte para ser usada em outras. Após digitar o código e conectar sua placa, você deverá fazer algumas configurações no menu ferramentas, lá você deve configurar a placa (Mega), o processador (Atmega2560) e a porta. A seleção da porta vai depender em geral da escolha computador, mas desde já adianto que não é a COM1, o ideal é verificar quais portas existem antes de colocar a placa, e ver qual passa a existir quando a placa é conectada, pois é nesse instante que o computador atribui a ela uma porta. Na Figura 14 observe o menu. Após a configuração, basta clicar no ícone

, localizado no canto superior esquerdo, e seu programa será gravado na placa.

Figura 14 - Configurações no IDE do Arduino
Configurações no IDE do Arduino

Versão 5.3 - Todos os Direitos reservados