You are on page 1of 13

ARDUINO COM SUPERVISORIO

Mais uma vez, ns do EMBARCADOS queremos trazer para o leitor um material referente utilizao
do SCADABR juntamente com o Arduino UNO para fins de automao. Este vem dar sequncia ao
artigo anterior, que por sua vez demonstrou os passos iniciais para realizar a interao citada
anteriormente, o qual pode ser encontrado neste link. Neste artigo iremos abordar o acionamento do
conjunto de vrios leds (um com comportamento on/off e trs outros simulando um led RGB), no
entanto aqui ser elaborado um supervisrio com SCADABR, completo, para o controle de todo o
sistema em questo. Pretende-se aqui dar prosseguimento aos conceitos introdutrios j apresentados
e levar o leitor a um outro patamar no que diz respeito manipulao de sistemas envolvendo o
protocolo MODBUS e o SCADABR.

Explicando de maneira mais aprofundada, o objetivo do projeto desenvolvido neste artigo consiste
em produzir um sistema onde o usurio pode definir o valor do PWM a ser utilizado no acionamento
das componentes do led RGB alm de ligar ou desligar um nico led de duas formas: uma manual,
onde o leitor pode alterar estas propriedades diretamente por meio de potencimetros e de um boto
(bloqueando qualquer ao feita atravs do supervisrio) e a outra onde o mesmo pode modificar
qualquer um dos parmetros do sistema atravs do supervisrio apenas.

Assim como no artigo anterior, para realizar esta proposta utilizaremos o Arduino UNO atravs de
uma simulao no Proteus/ISIS devido ao fato de que, dessa maneira, possvel apresentar o
conhecimento para aqueles que desejam assim fazer, alm de proporcionar um material com imagens
mais claras e de fcil compreenso.

Arduino

Conhecendo os componentes do projeto

Primeiramente, o sistema alvo deste artigo consiste na utilizao de um Arduino UNO, trs
potnciometros responsveis pelo acionamento de 3 leds utilizando PWM, um boto para o
acionamento on/off de um outro led, alm de uma chave seletora para definir os modos de operao
automtico e manual.

1
Figura 1 - Diagrama esquemtico de ligaes

Desenvolvimento do cdigo

No decorrer desta seo sero explicados todos os passos utilizados para o desenvolvimento do
projeto proposto, isto , o cdigo ser comentado de modo que todo conhecimento aplicado seja
facilmente compreendido.

Num primeiro momento deve-se incluir as bibliotecas necessrias para que o cdigo a ser inserido
no Arduino UNO funcione adequadamente. Neste artigo utilizaremos somente a biblioteca desejada
para estabelecer a comunicao entre o Arduino UNO e o SCADABR atravs do protocolo MODBUS.
Esta pode ser encontrada aqui (baixar o arquivo SimpleModbusSlaveV10.zip).

O cdigo a ser utilizado foi derivado diretamente do exemplo disponvel, juntamente com a
biblioteca em questo. Portanto, caso o leitor queira, pode apenas modificar o exemplo citado.

1 #include <SimpleModbusSlave.h>

Em seguida realizou-se o uso da diretiva #define para associarmos as palavras que definem os
componentes em questo aos seus respectivos pinos do Arduino UNO.
2
1 #define LED_VM 9
2 #define LED_VD 10
3 #define LED_AZ 11
4 #define LED_AM 12
5 #define BOTAO 13
6 #define CHAVE 7

Antes de prosseguirmos com o cdigo, foi necessrio criar algumas variveis para uso posterior no
acionamento dos componentes.

1 int PWM_R;
2 int PWM_G;
3 int PWM_B;

Neste momento sero definidos os registradores holding utilizados no SCADABR. Caso o leitor tenha
alguma dvida neste ponto, insistimos em pedir para o leitor consultar o link disponibilizado no incio
deste artigo, nele esto contidas todas as informaes para que o leitor compreenda cada um dos
pontos deste desenvolvimento de cdigo.

Os registradores holding POT_R/POT_G/POT_B so responsveis por conter os valores referentes


s leituras realizadas atravs dos potencimetros enquanto os registradores LED_R/LED_G/LED_B
esto diretamente ligados ao acionamento do led RGB (simulado por 3 leds independentes). Os
registradores BOT e LED_ON_OFF definem o comportamento do led on/off, enquanto o registrador
MAN_AUTO est relacionado com a chave que determina o modo de operao (manual ou
automtico).

1 enum
2 {
3 POT_R,
4 POT_G,
5 POT_B,
6 BOT,
7 LED_R,

3
8 LED_G,
9 LED_B,
10 LED_ON_OFF,
11 MAN_AUTO,
12 HOLDING_REGS_SIZE
13 };
14
15 unsigned int holdingRegs[HOLDING_REGS_SIZE];
16

Na funo setup() utiliza-se a funo modbus_configure() para determinar os parmetros


necessrios para estabelecer a conexo via comunicao serial utilizando o protocolo MODBUS. Os
parmetros "mais importantes" so o segundo, o terceiro e o quarto, que dizem respeito taxa de
transmisso de dados e o formato do pacote utilizado no protocolo MODBUS. Note que estes trs
argumentos citados devem estar em conformidade com as configuraes do SCADABR.

Em seguida temos a funo modbus_update_comms(), que tambm responsvel pela comunicao


via MODBUS, enquanto a funo pinMode() determina os modos de operao (como sada) dos pinos
onde esto conectados os diversos elementos presentes no sistema em questo.

1 void setup()
2 {
3
4 modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE,
5 holdingRegs);
6
7 modbus_update_comms(9600, SERIAL_8N1, 1);
8
9 pinMode(LED_R, OUTPUT);
10 pinMode(LED_G, OUTPUT);
11 pinMode(LED_B, OUTPUT);
12 pinMode(LED_AM, OUTPUT);
13 pinMode(BOTAO, INPUT);
14 pinMode(CHAVE, INPUT);
15
16 }

O contedo da funo loop() comea com a funo modbus_update() utilizada para a atualizao
dos valores dos registradores citados anteriormente. Em seguida, realiza-se a leitura das informaes
presentes nas portas de entrada analgica A0, A1 e A2 e posteriormente realiza-se o mesmo
procedimento, porm nas portas de entrada digital, ou seja, onde est a chave seletora e o boto.

Num primeiro momento necessrio verificar em que posio est a chave seletora para que o
programa entenda a partir de que ponto o sistema est sendo controlado. Para isso utiliza-se uma
estrutura condicional if(), cuja sentena a ser testada inclui o registrador holding MAN_AUTO. Caso
o valor deste seja igual a zero, entende-se que o sistema est funcionando de forma manual, portanto,
4
os valores a serem utilizados nos PWMs para o acionamento dos leds so provenientes diretamente
dos valores obtidos atravs dos potencimetros. E o led com comportamento on/off responde
diretamente de acordo com o boto enquanto solto ou pressionado. Observe que apesar de no
utilizarmos os registradores holding nos acionamentos (no caso do led RGB), estes ainda assim so
atualizados para que seus valores sejam devidamente apresentados no SCADABR.

Em contrapartida, caso a chave seletora aponte para o modo de operao automtico, os


acionamentos sero feitos utilizando diretamente os registradores holding, pois assim possvel
realizar estes por meio da alterao de valores no supervisrio que ser apresentado a seguir.

1 void loop()
2 {
3
4 modbus_update();
5
6 holdingRegs[POT_R] = analogRead(A0);
7 holdingRegs[POT_G] = analogRead(A1);
8 holdingRegs[POT_B] = analogRead(A2);
9 holdingRegs[BOT] = digitalRead(BOTAO);
10 holdingRegs[MAN_AUTO] = digitalRead(CHAVE);
11
12 if(holdingRegs[MAN_AUTO] == 0){
13
14 PWM_R = map(holdingRegs[POT_R],0,1023,0,255);
15 analogWrite(LED_VM,PWM_R);
16
17 holdingRegs[LED_R] = PWM_R;
18
19 PWM_G = map(holdingRegs[POT_G],0,1023,0,255);
20 analogWrite(LED_VD,PWM_G);
21
22 holdingRegs[LED_G] = PWM_G;
23
24 PWM_B = map(holdingRegs[POT_B],0,1023,0,255);
25 analogWrite(LED_AZ,PWM_B);
26
27 holdingRegs[LED_B] = PWM_B;
28
29 digitalWrite(LED_AM,holdingRegs[BOT]);
30
31 holdingRegs[LED_ON_OFF] = holdingRegs[BOT];
32
33 } else{
34
35 analogWrite(LED_VM, holdingRegs[LED_R]);
36

5
37 analogWrite(LED_VD, holdingRegs[LED_G]);
38
39 analogWrite(LED_AZ, holdingRegs[LED_B]);
40
41 digitalWrite(LED_AM,holdingRegs[LED_ON_OFF]);
42 }

SCADABR
Neste momento iremos abordar os passos necessrios para realizar interao do Arduino UNO com
o SCADABR. Vale ressaltar que neste artigo partiremos de uma parte mais avanada, no entanto,
conveniente que caso o leitor no esteja familiarizado com o contedo mostrado a seguir, veja como
so feitos os procedimentos iniciais para tal objetivo em nosso artigo anterior cujo link encontra-se
disponibilizado no incio deste artigo.

Criao dos Data points

Primeiramente necessrio produzir o Data source referente ao Arduino UNO utilizando a opo
modbus serial como modo de conexo e em seguida criar os Data points que sero utilizados no
programa. Por uma questo de didtica e tambm para facilitar a programao e o entendimento do
leitor, os nomes dos Data points so iguais aos dos registradores holding declarados no cdigo
(exceto os que possuem "/" no nome, pois este caractere no foi aceito no cdigo, dessa maneira este
foi substitudo por "_"). Observe que neste artigo alguns Data points foram declarados como inteiros
de 2 bytes sem sinal ao passo que outros foram tidos como binrios.

Figura 2 - Data points criados

Desenvolvimento do sistema supervisrio

Para desenvolver um sistema supervisrio, o usurio deve inicialmente clicar no cone referente ao
modo que por sua vez proporciona o ambiente necessrio para a produo de tal sistema. Este cone
possui o nome de representao grfica.

6
Figura 3 - Barra de ferramentas

Em seguida, o leitor deve escolher um nome para este sistema supervisrio assim como uma imagem
de fundo caso seja desejo do desenvolvedor (neste caso, aps selecionar a imagem desejada, basta
clicar no boto responsvel por fazer o upload da imagem).

Figura 4 - Propriedades na criao do supervisrio

Neste momento nosso supervisrio recm criado se encontra desta maneira:

Figura 5 - Imagem de fundo do supervisrio

7
Primeiramente sero criados os leds de sinalizao do modo de operao, isto , um mecanismo para
que o usurio saiba se o sistema esta em modo manual ou automtico. Como dito anteriormente, no
modo manual, as alteraes s podem ser realizadas atravs dos potencimetros e pelo boto, ao passo
que no modo automtico, as mudanas s podem ser realizadas pelo supervisrio. Observe que a
nica coisa que define o modo de operao a chave seletora diretamente contida no hardware.

Figura 6 - Modo automtico/manual

Para adicionar os componentes escritos, deve-se selecionar na lista de componentes a opo HTML
e clicar no cone ao lado da mesma lista. Posteriormente o desenvolvedor deve escrever as frases
desejadas. Neste caso, o procedimento em questo foi repetido 3 vezes com as seguintes frases:
"Modo de operao", "Automtico" e "Manual".

Figura 7 - Adicionando itens no supervisrio

J para inserir os elementos grficos deve-se selecionar na lista de componentes a opo GIF Binrio
e clicar no cone ao lado para adicion-lo ao supervisrio. Em seguida aparecer um cone igual ao
mostrado na figura abaixo (extremidade esquerda), de modo que o leitor deve definir alguns
parmetros para que o item grfico funcione de maneira efetiva. Num primeiro momento deve-se
posicionar o mouse sobre cone citado e aparecero algumas opes, o leitor deve primeiramente
clicar na opo marcada de vermelho e definir qual Data point estar "ligado" ao elemento grfico
em questo (no nosso caso, o Data point escolhido est relacionado ao registrador holding
responsvel por conter o valor relativo leitura da chave seletora que define o modo de operao).

8
Figura 8 - Atribuio do Data point ao elemento criado

Depois de realizar o procedimento anterior, o leitor deve clicar no cone abaixo do selecionado
anteriormente, e ento escolher qual tipo de elemento grfico deseja utilizar. Neste caso foi
selecionado o conjunto "leds24", composto por uma srie de imagens onde o usurio deve determinar
uma para o caso do Data point em questo atribuir o valor 0 (led apagado) ao registrador holding
correpondente e outra para o caso deste possuir o valor 1 (led aceso). Observe que a inteno neste
momento fazer com que o led acenda caso o modo vigente seja automtico, ou seja, quando a chave
seletora apresentar nvel alto na entrada correspondente do Arduino.

Figura 9 - Atribuio de imagens ao elemento criado

Conforme citado, o elemento que foi adicionado anteriormente est ligado sinalizao do modo
automtico. Para inserir outro relacionado ao modo manual deve-se proceder da mesma forma, no
entanto necessrio inverter as imagens pois, quando a chave seletora proporcionar nvel baixo na
entrada digital do Arduino, este deve entender que o sistema est em modo manual, acendendo
portanto o led referente a este modo de operao. Lembre-se sempre de salvar as alteraes clicando
no cone do disquete no canto superior direito.

O prximo passo no desenvolvimento do supervisrio consiste em construirmos estruturas para


sinalizar as componentes do led RGB.

9
Figura 10 - Led RGB

Basicamente, o procedimento para incluir os elementos grficos, a ser realizado neste ponto,
idntico ao anterior. No entanto, para esta aplicao ns no dispomos de Data points que
representam registradores holding binrios (como por exemplo MAN_AUTO) para controlar os 2
estados definidos pelas imagens dos leds acesos e apagados. Portanto deve-se criar alguns Data points
virtuais (neste momento utilizaremos o led que controla a componente vermelha do RGB como
exemplo, porm os passos a serem seguidos so os mesmos para as outras componentes), para isso
deve-se criar no mesmo lugar onde foi criado o Data source responsvel pela interao do Arduino
UNO com o SCADABR via MODBUS e escolher a opo Data Source Meta.

Figura 11 - Criao de um Data Source Meta

O Data Source Meta criado neste artigo possui o nome "Auxiliares" e no momento em que este
criado, abre-se uma tela de configuraes deste Data source onde o desenvolvedor deve procurar a
rea relativa criao de Data points para adiciona-los. Aps criar o Data point deve-se nome-lo,
definir o tipo de dado como binrio e selecionar outro Data point (j existente) no campo Contexto
do Script para criar uma estrutura que ir definir quando este recm criado assumir os valores 0 e 1,
neste caso escolhemos o Data point LED_R (responsvel por conter o valor utilizado no PWM para
o acionamento do led). Observe que existe uma coluna na tabela onde foi adicionado este Data point
j existente chamada Var, onde pode-se dar um nome para uma varivel que ir conter o valor presente
no registrador holding representado pelo Data point LED_R, cujo nome pwm_vm.

No script apresentado conforme a figura a seguir, utiliza-se uma estrutura condicional if() para que
este Data point criado retorne 1 (returne true) caso a varivel pwm_vm possua um valor maior do
que 0 (if (pwm_vm.value > 0)) ou retorne 0 (returne false) caso o valor da mesma varivel seja igual
a zero (else return false).

10
Figura 12 - Criao de um Data point virtual utilizando script

Voltando ao ambiente de desenvolvimento do sistema supervisrio deve-se associar o Data point


virtual criado ao elemento grfico em questo da mesma maneira realizada anteriormente alm de
definir as duas imagens, uma para quando este for 0 e outra para quando este for 1.

Repare que at o presente momento foram adicionados apenas elementos grficos, no entanto agora
ser inserido na representao grfica um dispositivo que mostre os valores que sero utilizados nos
PWMs dos acionamentos dos leds. Para isso deve-se selecionar a opo Data point simples na lista
de seleo de componentes e definir suas configuraes. Primeiramente, deve-se atribuir o Data point
desejado ao item (no caso o que est representando o registrador holding que contm o valor do PWM
a ser utilizado no acionamento do led vermelho), em seguida o usurio pode ou no definir um texto
para aparecer juntamente com o valor e por fim deve-se marcar as duas caixas de seleo. O prximo
passo consiste em simplesmente escolher as duas imagens para representar os estados distintos de
funcionamento.

Figura 13 - Atribuio do Data point ao elemento criado


11
Aps estes procedimentos torna-se possvel alterar os valores dos PWMs simplesmente
posicionando o valor mostrado e clicando no cone conforme mostrado na figura abaixo. Caso estes
valores sejam alterados enquanto o sistema estiver no modo manual, ocorrer somente a mudana no
supervisrio at a prxima atualizao do sistema (que retornar o valor que estava antes), no entanto,
no haver alterao no acionamento pelo fato de o cdigo ser protegido contra tal ao enquanto o
sistema estiver operando de forma manual.

Figura 14 - Alterando valor por meio do supervisrio

Por ltimo ser desenvolvido o mecanismo utilizado para o controle do led on/off. Este pode ter
sinalizao criada exatamente da mesma maneira que foi feita no incio deste item com os leds
indicando os modos de operao, no entanto, o Data point escolhido para as imagens que
representaro o led aceso e apagado deve ser o LED_ON_OFF.

Figura 15 - Led on/off

Para inserir o boto mostrado na figura anterior basta ir na lista de componentes do ambiente de
representao grfica e selecionar a opo boto (escrita) e adiciona-lo. Num primeiro momento
deve-se incluir o Data point correspondente (LED_ON_OFF) da mesma forma feita para os outros
elementos alm de marcar as caixas de seleo existentes. Posteriormente necessrio determinar os
textos que aparecero quando o Data point escolhido anteriormente assumir os possveis valores alm
da altura e comprimento do boto.

Figura 16 - Definindo as propriedades do boto

12
A figura a seguir exibe o resultado do projeto desenvolvido neste artigo, onde possvel ver o sistema
supervisrio em questo possibilitando a anlise dos valores alm da sua manipulao.

Figura 17 - Resultado final do supervisrio

Ns do EMBARCADOS esperamos que voc tenha gostado deste contedo, sinta-se vontade
para sugestes, crticas ou elogios. Deixe seu comentrio abaixo.

Sistema supervisrio com SCADABR, Arduino e MODBUS por Daniel Madeira. Esta obra est sob
a licena Creative Commons Atribuio-CompartilhaIgual 4.0 Internacional.

Sobre o Autor: Daniel Madeira

13