Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FORTALEZA - CE
2017
UCAM – UNIVERSIDADE CÂNDIDO MENDES
JOSÉ CICERO GOMES MAIA
FORTALEZA - CE
2017
UCAM – UNIVERSIDADE CANDIDO MENDES
UCAMPROMINAS
Matrícula: 26853
Aluno: JOSE CICERO GOMES MAIA
Curso: AUTOMAÇÃO INDUSTRIAL
Título: COMUNICAÇÃO SERIAL COM MICROCONTROLADOR USANDO VBA
___Exige Reformulação.
___Foi Reprovado.
Data: 02/11/2017
COMUNICAÇÃO SERIAL COM MICROCONTROLADOR USANDO VBA
RESUMO
Este trabalho tem por objetivo demonstrar, de forma fácil, como ler os dados de um
microcontrolador adquiridos por meio de uma aplicação desenvolvida no MsExcel,
usando a linguagem VBA. Estes dados lidos podem ser úteis para monitoramento
remoto. Esta mesma aplicação pode acionar vários tipos de atuadores, tais como:
Leds, servomotores, motores DC e muito mais.
1
Graduado em Análise e Desenvolvimento de Sistemas pela FATENE Fortaleza-Ce. Atualmente, atua como
programador de VBA (Access/Excel) no Banco do Nordeste/IVIA em Fortaleza-Ce e Professor de cursos
profissionalizantes na área de linguagem de programação no Instituto Evolução em Fortaleza-Ce. Interessa-se
por Computação, Automação, Desenho técnico e Ensino técnico.
ABSTRACT
The objective of this work is to demonstrate how to read the data of a microcontroller
acquired through an application developed in MsExcel using the VBA language. This
data read can be useful for remote monitoring. This same application can trigger
several types of Actuators, such as: Leds, servo motors, DC motors and more.
The main idea is to create a supervisory system in a simple way and that can control
the distance a microcontrolled device. This application developed in VBA within Excel
can be useful for the control and monitoring of this data
Keywords: Robotics, Arduino, Excel, VBA, Serial Port, Supervisory System, Data
Acquisition, Monitoring and Control, Microcontroller.
Sumário
1. Introdução .................................................................................................................................................... 10
2. Fundamentos de Instrumentação............................................................................................................. 11
2.1. Classificação dos instrumentos....................................................................................................... 12
3. Os primórdios do controle industrial ........................................................................................................ 13
3.1. Controle Lógico Programável – CLP .............................................................................................. 14
3.1.1. O CLP moderno ............................................................................................................................ 16
3.1.2. A arquitetura básica...................................................................................................................... 16
3.1.3. A linguagem de programação ..................................................................................................... 18
3.2. A sala de controle.............................................................................................................................. 20
3.3. Os supervisórios ................................................................................................................................ 21
3.4. Prós e Contras ................................................................................................................................... 23
4. Breve introdução aos microcontroladores .............................................................................................. 25
4.1. Diferenças entre MCU e CPU ......................................................................................................... 25
4.2. Arduino – Breve Histórico ................................................................................................................ 27
5. Linguagem VBA .......................................................................................................................................... 29
5.1. Justificativa ......................................................................................................................................... 33
6. O projeto modelo ........................................................................................................................................ 34
6.1. Hardware de controle ....................................................................................................................... 34
6.1.1. Considerações iniciais ................................................................................................................. 34
6.1.2. Descrição do hardware do projeto ............................................................................................. 34
6.1.2.1. Microcontrolador usado ........................................................................................................... 36
6.1.3. Descrição dos componentes ....................................................................................................... 38
6.2. Montagem do projeto ........................................................................................................................ 41
6.2.1. Conectando o Arduino na Protoboard ....................................................................................... 42
6.2.2. Conectando o Potenciômetro no Arduino ................................................................................. 43
6.2.3. Conectando o Sensor de temperatura LM35 no Arduino ....................................................... 44
6.2.4. Conectando o Led no Arduino .................................................................................................... 45
6.2.5. Conectando o Servomotor no Arduino ...................................................................................... 46
6.3. Software de Controle ........................................................................................................................ 47
6.3.1. Considerações iniciais ................................................................................................................. 47
6.3.1.1. O que é um sinal PWM ................................................................................................................ 50
6.3.1.2. Modos de comunicação ............................................................................................................... 51
6.3.1.3. Protocolos de comunicação ........................................................................................................ 52
6.3.2. Como se comunicar...................................................................................................................... 53
6.3.2.1. Drivers de terceiros....................................................................................................................... 53
6.3.2.2. Comunicação nativa ..................................................................................................................... 55
6.3.3. Comunicação usando o VBA e o MsDOS................................................................................. 57
6.3.3.1. Ler os dados do Arduino com VBA ............................................................................................ 59
6.3.3.2. Acionando um atuador com VBA ............................................................................................... 65
6.3.4. Programando o Arduino ............................................................................................................... 67
6.3.4.1. Arquitetura do projeto ................................................................................................................... 67
6.3.4.2. O que é um Firmware................................................................................................................... 69
6.3.4.3. Qual é a melhor IDE para programar......................................................................................... 69
6.3.4.3.1. Programar para Arduino sem Arduino................................................................................... 73
6.3.4.4. Iniciando um novo Sketch ........................................................................................................... 74
6.3.4.5. Entendendo o Firmware do projeto ............................................................................................ 75
6.3.4.5.1. Acionando um Servomotor...................................................................................................... 77
6.3.4.5.2. Acionando um Led ................................................................................................................... 78
6.3.4.5.3. Lendo os sinais das portas analógicas ................................................................................. 79
6.3.4.6. Vamos embarcar ........................................................................................................................... 79
6.3.4.6.1. Entendendo a compilação ....................................................................................................... 82
6.3.5. Conhecendo a interface do usuário ........................................................................................... 83
6.3.5.1. Entrada A ....................................................................................................................................... 84
6.3.5.2. Entrada AST .................................................................................................................................. 85
6.3.5.3. Saída DS ........................................................................................................................................ 87
6.3.5.4. Saída DL ........................................................................................................................................ 88
Conclusão ............................................................................................................................................................ 89
Bibliografia ........................................................................................................................................................... 91
Anexos.................................................................................................................................................................. 93
Índice de ilustrações
FIGURA 1: QUADRO DE COMANDOS ELÉTRICOS INDUSTRIAL ................................................................................................ 14
FIGURA 2: ESQUEMA ELÉTRICO ..................................................................................................................................... 14
FIGURA 3: MODICON-84 .......................................................................................................................................... 15
FIGURA 4: DA ESQUERDA PARA DIREITA, DICK MORLEY, TOM BOSSEVAIN, GEORGE SCHWENK E JONAS LANDAU .......................... 16
FIGURA 5: FLUXO BÁSICO DE UM CLP............................................................................................................................. 17
FIGURA 6: DIAGRAMA EM BLOCOS DE UM CLP ................................................................................................................ 17
FIGURA 7: DIAGRAMA EM BLOCOS DE UM CLP E SEUS MÓDULOS......................................................................................... 18
FIGURA 8: ESQUEMA ELÉTRICO E A LINGUAGEM LADDER. ................................................................................................... 19
FIGURA 9: TELA DO RSLOGIX 5000, MOSTRANDO AS 4 LINGUAGENS. .................................................................................. 19
FIGURA 10: TDC-2000. ............................................................................................................................................. 20
FIGURA 11: SISTEMA SCADA-AUTOMAÇÃO DO SISTEMA DE TRATAMENTO DE ÁGUA. ............................................................. 22
FIGURA 12: DIAGRAMA EM BLOCOS DE UM COMPUTADOR MODERNO. ................................................................................. 26
FIGURA 13: DIAGRAMA EM BLOCOS DE UM MICROCONTROLADOR PIC FAMÍLIA 18F. ............................................................... 26
FIGURA 14: TIME ARDUINO. ........................................................................................................................................ 28
FIGURA 15: PRIMEIRA PLACA ARDUINO-RS232 FABRICADA NA ITÁLIA.................................................................................. 28
FIGURA 16: TELA DO VISUAL BASIC VERSÃO 1.0. ............................................................................................................. 30
FIGURA 17: LOGOMARCA DO VBA( INTERNET) ................................................................................................................ 31
FIGURA 18: GERENTE DE MARKETING DA MICROSOFT FALA SOBRE O VBA. ........................................................................... 32
FIGURA 19: PLACA BLACKBOARD COM O ATMEGA328. ..................................................................................................... 35
FIGURA 20: DESCRIÇÃO DA BLACKBOARD V1.0. .............................................................................................................. 35
FIGURA 21: DESCRIÇÃO DOS COMPONENTES. .................................................................................................................. 36
FIGURA 22: DIAGRAMA EM BLOCOS SIMPLIFICADO DO ATMEGA328P. ................................................................................ 37
FIGURA 23: PINOS DO ATMEGA328P. ........................................................................................................................... 38
FIGURA 24: POTENCIÔMETRO. ..................................................................................................................................... 39
FIGURA 25: DIODO EMISSOR DE LUZ - LED. .................................................................................................................... 39
FIGURA 26: SENSOR DE TEMPERATURA LM35. ............................................................................................................... 39
FIGURA 27: RESISTOR DE 330R DE 1/8W. ..................................................................................................................... 39
FIGURA 28: SERVOMOTOR SG90. ................................................................................................................................. 39
FIGURA 29: PROTOBOARD DE 840 FUROS. ...................................................................................................................... 40
FIGURA 30: PLACA BLACKBOARD - ARDUINO. .................................................................................................................. 40
FIGURA 31: RASCUNHO DO ESQUEMA DE MONTAGEM. ..................................................................................................... 41
FIGURA 32: TELA DO FRITZING...................................................................................................................................... 42
FIGURA 33: BLACKBOARD - ARDUINO UNO R3 ............................................................................................................... 42
FIGURA 34: MONTAGEM 01 - LIGANDO O POSITIVO E O TERRA. .......................................................................................... 43
FIGURA 35: MONTAGEM 02 - LIGANDO O POTENCIÔMETRO. .............................................................................................. 43
FIGURA 36: PINAGEM DO LM35. (FONTE: DATASHEET) .................................................................................................... 44
FIGURA 37: MONTAGEM 03 – LIGANDO O LM35 ............................................................................................................ 44
FIGURA 38: MONTAGEM 04 – LIGANDO O LED. ............................................................................................................... 45
FIGURA 39: IDENTIFICAÇÃO DOS FIOS (FONTE: DATASHEET) ............................................................................................... 46
FIGURA 40: MONTAGEM 05 - LIGAÇÃO DO SERVO ........................................................................................................... 46
FIGURA 41: MONTAGEM COMPLETA .............................................................................................................................. 47
FIGURA 42: REPRESENTAÇÃO DE UM SINAL ANALÓGICO. .................................................................................................... 48
FIGURA 43: REPRESENTAÇÃO DE UM SINAL DIGITAL. ......................................................................................................... 49
FIGURA 44: DIAGRAMA DO SINAL PWM. ....................................................................................................................... 51
FIGURA 45: VARIAÇÃO DO SINAL PWM. ........................................................................................................................ 51
FIGURA 46: ESQUEMA DE LIGAÇÃO RX/TX. .................................................................................................................... 53
FIGURA 47: FRAGMENTO DO CÓDIGO PARA CONTROLAR A PORTA SERIAL. ............................................................................. 54
FIGURA 48: TELA DO SHELL CMD. .................................................................................................................................. 56
FIGURA 49: PARÂMETROS DE CONFIGURAÇÃO DA FUNÇÃO MODE. ...................................................................................... 56
FIGURA 50: TELA DA IDE E A CALCULADORA. .................................................................................................................. 57
FIGURA 51: FRAGMENTO DA FUNÇÃO ABRIR PORTA. ......................................................................................................... 58
FIGURA 52: FRAGMENTO DA ROTINA DO BOTÃO ON (BTNINICIAR). ..................................................................................... 59
FIGURA 53: FUNCAO TEMPERATURA (BTNINICIAR). ........................................................................................................... 64
FIGURA 54: FRAGMENTO DA ROTINA DO BOTÃO ON (BTNINICIAR), FIM DA ROTINA. ............................................................... 65
FIGURA 55: SINTAXE DO COMANDO DE ENVIO.................................................................................................................. 66
FIGURA 56: DIAGRAMA DA ARQUITETURA DA APLICAÇÃO. .................................................................................................. 68
FIGURA 57: TELA DA IDE PROCESSING. .......................................................................................................................... 70
FIGURA 58: TELA DA IDE WIRING. ................................................................................................................................ 70
FIGURA 59: IDE DO ARDUINO - VERSÃO 1.8.3 ................................................................................................................ 71
FIGURA 60: VISUAL STUDIO COM O ADDIN VISUAL MICRO. ................................................................................................ 72
FIGURA 61: PROGRAMA ESCRITO EM C PARA O MICROCONTROLADOR PIC18F4550. ............................................................. 73
FIGURA 62: CÓDIGO PISCA-PISCA EM C PARA O ATMEGA328P. .......................................................................................... 74
FIGURA 63: IDE DO ARDUINO COM NOVO SKETCH. .......................................................................................................... 75
FIGURA 64: BARRA DE FERRAMENTAS IDE DO ARDUINO. ................................................................................................... 80
FIGURA 65: PROCESSO DE COMPILAÇÃO DO ARDUINO. ...................................................................................................... 80
FIGURA 66: PROCESSO DE UPLOAD. .............................................................................................................................. 81
FIGURA 67: MONITOR SERIAL DA IDE. ........................................................................................................................... 81
FIGURA 68: MONITOR SERIAL, RECEBENDO OS DADOS. ...................................................................................................... 81
FIGURA 69: FLUXO BÁSICO DA COMPILAÇÃO. ................................................................................................................... 82
FIGURA 70: INTERFACE DO SUPERVISÓRIO. ...................................................................................................................... 83
FIGURA 71: BLOCO DE AJUSTE E CHAVE ON/OFF. ............................................................................................................ 84
FIGURA 72: GIRO DO POTENCIÔMETRO (ESQUERDA E DIREITA). ........................................................................................... 85
FIGURA 73: ENTRADA ANALÓGICA-RECEBENDO O VALOR. .................................................................................................. 85
FIGURA 74: MONITORAMENTO DE TEMPERATURA. .......................................................................................................... 86
FIGURA 75: CONFIGURAÇÃO DO ALARME E DEMONSTRAÇÃO. ............................................................................................. 87
FIGURA 76: MOVIMENTANDO O SERVOMOTOR. .............................................................................................................. 87
FIGURA 77: MOVIMENTAR SERVO COM VÁRIOS ÂNGULOS. ................................................................................................. 88
FIGURA 78: ACIONANDO E DESACIONANDO UM LED. ........................................................................................................ 89
1. Introdução
2. Fundamentos de Instrumentação
Figura 3: MODICON-84
(Fonte: http://repositorio.uniceub.br/bitstream/235/8690/1/21016990.pdf, 2017)
Os CLPs atuais têm muito mais funções que seus antecessores. Hoje em dia,
eles controlam diretamente os sensores; ou seja, pode-se ligar um sensor de
temperatura diretamente em um CLP, controlar a variação de temperatura e fazer as
correções para um equilíbrio do processo, e controlar atuadores à distância. Hoje,
ele pode se conectar a uma rede industrial com protocolos específicos para a
transmissão dos dados e sinais analógicos e digitais; enfim, superam e muito os
primeiros modelos e ainda usam a linguagem Ladder para facilitar sua programação.
Estes CLPs mais modernos têm uma variação entre R$ 300,00 até valores
acima de R$ 5.000,00, isto depende muito da marca, modelo, quantidade de portas
e recursos adicionais.
Este fluxo ocorre sempre desta maneira: o CLP faz uma varredura em todas
as entradas (Input), tanto as digitais como as analógicas, e as carregam para a
memória, depois o programa carregado executa as tarefas de acordo com a
programação feita e depois gera os retornos para as devidas portas de saída
(outputs).
O CLP é construído usando uma CPU que processa os dados recebidos da
memória e os envia para as saídas, mas para que tudo isto funcione tem-se uma
fonte de alimentação que varia entre 110 e 220V. Veja a figura 6.
Com toda a evolução da indústria deste os anos 1900, uma coisa era sempre
almejada: o “controle remoto”. Imagine em uma indústria de tecidos onde se tem
muitos vasos de pressão; sempre existiu a necessidade de ter um funcionário para
controlar a temperatura da caldeira, um outro para controlar a quantidade de água,
outro para controlar o fogo, e ainda mais um para controlar tudo isto.
Um controle que, à distância, poderia receber os sinais analógicos, controlar e
executar atuadores para controlar alguma situação sem haver a necessidade de ter
um funcionário perto o bastante de alguma caldeira ou forno. Isto sempre pensando
na melhoria do trabalho. Assim, tem-se o SDCD - Sistema Digital de Controle
Distribuído: um sistema de controle microprocessado que foi concebido de início
para controlar as variáveis analógicas.
Este sistema está apoiado em três pilares, assim: 1) A interface com o
processo (usando controladores locais e sistemas de aquisição de dados), 2) IHM
(a Interface-Home-Máquina), e 3) Data Highway (a via dos dados).
Deve-se perceber que o SDCD é um sistema que tem uma inteligência
computadorizada que pode tomar algumas decisões de acordo com as informações
recebidas. Enquanto o homem está em uma sala de controle a alguns metros de
distância do chão de fábrica, ele pode controlar remotamente algum atuador tipo
válvula de pressão, fluxo de ar, de agua etc., isto tudo à distância.
(Fonte:
https://www.automation.com/libra
ry/articles-white-papers/articles-
by-bill-lydon/do-plcs-eliminate-
Figura 10: TDC-2000. need-for-a-dcs, 2008)
No Brasil, o primeiro sistema tinha o controle da planta e interagia com o
processo. Foi importado da empresa americana Honeywell era o TDC-2000 (Total
Distribuited Control) (ver a figura 10). Este equipamento, lançado em 1975 pela
empresa Honeywell, era um dos primeiros a ter uma CPU de computador de uso
geral, uma tela de CRT (Tubo de Raios Catódicos) e um teclado que facilitava a
operação do sistema por parte do operador.
Este foi considerado um dos primeiros sistemas que recebia a leitura de um
sensor por meio de placas adaptadoras (existiam várias) e na tela do TDC-2000 era
possível, em tempo real, a temperatura de uma caldeira, por exemplo.
3.3. Os supervisórios
Os supervisórios, hoje em dia, são os SDCD com esteroide, pois ele tem hoje
muito mais recursos que os primeiros SDCD.
Em princípio, estes novos sistemas têm um poder de não só receber os dados
em tempo real, mas ter um banco de dados com histórico de tudo o que aconteceu e
também ter recurso de interfaceamento que é possível acionar sirenes, válvulas e
qualquer tipo de atuador usando somente um comando que está sempre visível na
tela do sistema.
Estes sistemas hoje são chamados de Controle Supervisório e Aquisição
de Dados ou, em inglês, SCADA (Supervisory Control and Data Aquisition).
Para que estes sistemas funcionem de maneira correta, faz-se necessário ter
seus periféricos já instalados e configurados dentro da planta industrial; ou seja, um
sistema SCADA é um software que tem o desenho da planta industrial, mas se
conecta a qualquer controlador externo, pode ser um CLP, Controler ou até mesmo
ser ligado a um sensor com controler embutido (vide tópico 2.1).
Tudo isto é facilmente conectado ao SCADA por meio de comunicação serial
que todo o computador (PC comum) tem. Uma porta de comunicação serial que
normalmente é conhecida no meio técnico como RS-232, mas qualquer
comunicação serial pode ser usada, RS-485, Ethernet e USB.
Basicamente, as principais funções dos sistemas SCADA são as seguintes:
O uso da interface gráfica, que ficou muito forte nos anos 1990, é um grande
atrativo para termos telas mais bonitas com muitos detalhes e muito mais eficientes.
Pode ser observado na figura 11 que existe um sistema SCADA feito para a
empresa AMBEV para o tratamento de água. Vê-se que o sistema tem uma tela
muito bem produzida, isto para facilitar os operadores do sistema que, diga-se de
passagem, não precisa ser mais um operário com extremo conhecimento dentro da
empresa, basta que este operador faça um treinamento para aprender como operar
o sistema e pronto: menos custo para a empresa.
3.4. Prós e Contras
Qual a empresa que não quer reduzir seus custos operacionais, se o principal
objetivo de uma empresa é ter lucro?
Tudo o que foi apresentado até o momento foi para embasar que tivemos
uma evolução muito grande e, por vezes, até muito rápida com toda a tecnologia
que temos dentro da indústria.
Mas nem tudo são flores. Deve-se ter em mente que, para as indústrias terem
uma redução de custo usando a tecnologia, pode ser demorado. Veja quando uma
indústria automobilística substitui vários operários (mecânicos, eletricistas,
soldadores, pintores etc...) por robôs. Eles têm em mente só uma coisa: a redução
de custos. Mas alguém pode se questionar como reduzir custos fazendo altos
investimentos em tecnologia. Tentar-se-á tratar desta questão brevemente.
Ao substituir os operários por robôs, principalmente em funções que exigem
muita repetição de movimento e, principalmente, podem trazer riscos ao homem, é
somente se proteger contra os processos de doenças do trabalho, o resultado é
melhor. Quanto mais rápido a indústria constrói, mais ela vende e mais ela tem lucro
e o seu setor de RH não tem problemas com acidentes ou DORT (Doenças
Osteoarticulares Relacionadas ao Trabalho) para lidar. Mas, e os trabalhadores que
foram dispensados de suas funções? Bom, este é um problema que pode levar por
outros caminhos; portanto, não será discutido neste trabalho já que está fora do
tema. Mas, de forma geral, acredita-se que os trabalhadores dispensados podem
assumir atividades mais humanas, como as de planejamento, desenvolvimento e as
de manutenção técnica.
Não ter um profissional extremamente especialista em sistemas SCADA pode
ser mais um ponto para os sistemas SCADA, pois um operário com apenas um
treinamento de operação do sistema poder operar sem muitas dificuldades. É claro
que a empresa deve ter um ou dois profissionais de infraestrutura (técnicos
especializados em rede industrial) para sempre manter a infra dos sistemas sempre
em ordem (computadores, CLPs, PACs e etc.).
Agora, ver-se-á que nem tudo são flores. Imagine que foi comprada uma
licença para um sistema supervisório (sim, a maioria dos sistemas SCADA são
vendidos por meio de licenças), foi chamada outra empresa para montar o seu
supervisório e, após um certo tempo, precisou-se adicionar um novo controlador
(que pode ser um controlador de temperatura, pressão etc.), faz-se esta aquisição e
chama-se um técnico e é solicitado que ele faça a integração deste novo
equipamento; e tem-se uma surpresa: o seu sistema SCADA, que custou muito caro,
não aceita novos DRIVERS. Isto é muito comum. É chamado de sistema FECHADO.
Ponto negativo.
Como foi mencionado antes, os sistemas SCADAs são vendidos por meio de
licenças. Estas licenças normalmente são baseadas no número de terminais (tags)
que sua planta tem, ou seja, o sistema é montado de acordo com todos os seus
terminais de controle. Estes sistemas SCADA são verdadeiramente uma tela em
branco onde o artista (o técnico especialista) desenha o fluxo do processo a ser
controlado. Neste desenho, ele tem que configurar todas as tags (terminais de
controle físico), e um sistema de tamanho razoável pode chegar a algumas centenas
de reais. Ponto negativo.
Não se pode deixar de comentar que algumas empresas disponibilizam uma
versão DEMO do seu software para que se estude e se tenha uma ideia de como
fazer o projeto; mas assim mesmo os DEMOS não são completos ou têm limitações.
Outra característica é a flexibilidade de poder criar novas funções. Alguns no
mercado permitem que você possa criar novas funções e adicionar como se fosse
um Plugin no sistema, até mesmo usando linguagens de programação de uso geral
como C/C++, VISUAL BASIC e etc. A National Instruments oferece este recurso no
seu sistema LabView. Ponto positivo.
Outro recurso que pode ser observado é ter a possibilidade de programar o
seu CLP e seu sistema SCADA dentro de uma única ferramenta. Isto é bem
interessante, mas isto pode ser uma faca de dois gumes pois aí pode-se estar
comprando um sistema FECHADO, e o valor será mais salgado. Ponto negativo.
Enfim, são os pontos mais comuns que devem ser observados.
Ainda nesta questão, é muito lógico que um sistema de grande porte com
todos estes recursos é uma excelente aquisição para a empresa, mas sempre se
tem alternativas. Uma delas é desenvolver seu próprio sistema supervisório (a
empresa vai ter custo com o funcionário, equipamentos de testes etc.), pode também
usar sistemas do tipo free, que são limitados (isto serve para que se compre a
versão completa do seu sistema), e é claro que pode contratar uma empresa para
desenvolver o sistema. Estas são somente as alternativas mais comuns.
4. Breve introdução aos microcontroladores
Já as MCUs não precisam de nada disto. Mas como assim não precisam?
Todos estes componentes que uma CPU precisa para funcionar um
microcontrolador já têm tudo isto, só que encapsulado em um único chip de circuito
integrado (C.I).
(Atrás)
Dave Mellis,
Tom Igoe;
(Frente)
Gianluca Martino,
David Cuartielles,
Massimo Banzi
A primeira placa em formato beta teve como conexão uma porta DB9, usando
o protocolo de comunicação RS232. Logo foi substituída pela versão 2.0.
5. Linguagem VBA
6. O projeto modelo
A placa de teste aqui é fabricada no Brasil pela Robocore, que fabrica uma
placa compatível com o Arduino. Sim, todas que são compatíveis suportam todas as
placas de acessórios chamadas de Shield.
Figura 19: Placa Blackboard com o Atmega328.
(Fonte: https://www.robocore.net/loja/produtos/arduino-blackboard.html,2017)
Conhecer-se-á um pouco melhor esta placa, pois é com ela que se vai
construir o sistema embarcado que vai fornecer os dados necessários.
Veja a descrição básica deste modelo na figura 20, mencionando seu
microcontrolador e suas principais características.
Esta é uma placa de prototipação rápida e como tal ela tem que ter os
principais componentes necessários a esta tarefa como, por exemplo, portas para a
conexão com os pinos analógicos, digitais, fonte de alimentação e muito mais. Não
se vai estender muito, pois como esta placa é bem documentada na internet e no
site do fabricante. Ater-se-á somente a explicar os componentes que serão usados,
mas tem uma visão com os principais componentes desta placa na figura 21.
Componentes Descrição
O potenciômetro é um componente analógico que permite alterar o valor da
resistência que passa por ele, ou seja, é muito comum o seu uso em
situações em que necessite de ajuste com muita constância, exemplo,
como o botão do volume usa nos aparelhos de som, em mesas de som ou
Figura 24:
qualquer lugar que seja necessário um ajuste.
Potenciômetro.
Figura 27: Resistor de É muito usado para redução da tensão ou da corrente em alguma parte do
330R de 1/8W. circuito elétrico.
É uma placa furada na superfície, mas por baixo tem uma malha de
contatos interligados.
Figura 29: Protoboard A sua utilização é bem fácil, conectamos os componentes na Protoboard e
de 840 furos. ligamos os fios necessários aos outros componentes, fazemos todos os
testes do projeto e assim que estiver tudo concluído já poderemos fazer a
PCB definitiva.
A placa usada no nosso projeto é uma placa clone do Arduino, esta é uma
placa fabricada no brasil com o nome de Blackboard, tem o mesmo
microcontrolador de um Arduino UNO
Figura 30: Placa
Blackboard - Arduino.
Para começar, é necessário ver quais os pinos de energia. Esta placa já vem
nos informando onde ficam os pinos relativos à energia, como é possível observar
na figura 33. Logo abaixo, é possível ver também os pinos 5V (5vcc – positivo) e um
dos pinos de TERRA (GND). Esta placa tem outros pinos a mais para tensão sendo
uma de 3,3V (não será usada). Será usada como referência a figura abaixo e para
os pinos será usada a figura 34
Agora deve-se saber exatamente o que se quer montar. Se o objetivo for ler
os dados adquiridos pelo Arduino, então tem-se que ter sensores que fazem a leitura
de um meio (do ambiente natural) de forma analógica a cada ciclo que o
microcontrolador estiver sendo executado. Assim, o potenciômetro será um sensor
analógico, e como um sensor analógico é bem óbvio que a ligação do pino do meio
do potenciômetro deve ser feita em alguma porta analógica.
Agora que se sabe quem são os pinos do LM35, pode-se fazer as ligações de
acordo com figura abaixo:
Agora é a vez do LED e tem-se que ligar um resistor também para fazer a
redução correta da tensão para o led.
Para calcular a resistência correta para o resistor de redução do led, vai-se
seguir a equação logo abaixo:
Onde:
Rst: Resistencia em Ohms do resistor
Valimentação: Tensão de alimentação do circuito
Vled: Tensão padrão de alimentação do led
Iled: Corrente do led em mA
Neste caso, o led que se vai usar é o vermelho que tem uma tensão padrão
entre 1,8 e 2,0V e a sua corrente de operação é 20mA. Sendo assim, fazendo as
devidas substituições, tem-se o resultado de 150 Ohms.
Conforme o manual, são ligados os fios aos seus devidos pinos, tanto na
Protoboard como o Arduino, lembrando que fio marrom (negativo), fio vermelho
(positivo) e fio laranja são o sinal PWM na porta digital Nº 6.
A comunicação tem por objetivo transmitir dados, dados estes que são
transmitidos na forma de bits, é possível transmitir um bit por vez. Isto é uma
comunicação em serie ou SERIAL. Também pode-se transmitir todos os bits de uma
única vez e assim pode-se transmitir mais bits por vez. Consequentemente, ter-se-á
uma transmissão em PARALELO.
Quanto aos modos de transmissão, há um que é muito conhecido e durante
bastante tempo foi muito usado, desde as primeiras impressoras comerciais
(matriciais) até chegar as novíssimas impressoras de jato de tinta. Todas as
impressoras usavam uma porta PARALELA.
Outra porta muito conhecida é a porta SERIAL, onde os bits são enviados em
pacotes. Cada pacote tem um conjunto de 10 bits, onde existe um 1 bit de start
(início) e na outra ponta existe um bit de stop (parada) e no meio segue os 8 bits do
dado a ser transmitido. Uma das suas principais características é o seu baixo custo
de fabricação, pois precisa de, no mínimo, uma linha para a transmissão do dado.
Para o projeto-modelo, usar-se-á uma conexão serial e quem vai controlar isto
é o circuito da UART do microcontrolador Atmeg328P.
O protocolo UART é uma forma de transmissão ASSÍNCRONA; ou seja, não
existe sincronia com o que está sendo enviado, pois a cada pacote enviado existe
uma forma de identificação deste pacote. Cada pacote tem sempre um bit de início e
um bit de parada para fechar o pacote. Como não existe sincronia, a sua construção
é bem mais barata pois só precisa de apenas um único fio para o envio dos bits, o
controle é feito por software. Outro fator que é muito importante é a taxa de
transmissão que é conhecida como Baud Rate. Este parâmetro tem que ser
especificado tanto do lado do emissor quanto do lado do receptor.
Como o Atmega328 tem apenas uma unidade de UART, ela tem 2 fios, um
para o TX (transmissor) e o outro para o RX(receptor). Além disso, como a
comunicação é do tipo ponto-a-ponto, a transmissão é feita ao mesmo tempo que
existe a recepção; é o FULL-DUPLEX.
Esta era sim a melhor solução, pois com este código é possível receber os
dados e enviá-los usando a porta serial. Neste sentido, com algumas modificações,
o código fica completamente usual, porém teria que rever todo o código e poderia ter
alguma incompatibilidade com as versões do Windows (nada preocupante, e até
fácil de se resolver). Entretanto, no fim, acabou não sendo usada esta solução (mas
poderia sim).
6.3.2.2. Comunicação nativa
Sabendo que a porta pode ser configurada via MsDOS (emulado), agora falta
saber quais são os valores para cada um destes parâmetros. Depois de muitos
testes, chegou-se aos seguintes valores e quais os parâmetros devem-se usados:
Agora tem-se outra questão a ser resolvida. Como será chamado este
comando do MsDOS usando o VBA, muito fácil, para todos os que trabalham
automatizando tarefas no MsExcel ou MsAccess usando o VBA, eles sabem que
tem como chamar um objeto externo ao ambiente de trabalho (no caso o MsExcel).
Para isto, vai ser usada uma instrução muito conhecida dos programadores
em VBA: a instrução Shell. Veja como é a sintaxe e seus parâmetros conforme o
documento de ajuda do próprio Excel.
Continuando. Já se sabe como configurar a porta serial usando o comando do
MsDOS. Já se sabe como fazer a chamada a partir do MsExcel. Agora, mostrar-se-á
um teste em VBA para chamar a calculadora do Windows.
Sub chamaCalc()
retorno=Shell("C:\Windows\System32\calc.exe",vbNormalFocus)
End Sub
Veja a transcrição do código que foi usado para chamar a calculadora. Tem
uma variável chamada retorno que recebe o resultado da chamada feita pela
instrução Shell. Assim são feitos os envios dos comandos para o Arduino e
recebidos os dados por ele lidos.
Para poder entender um pouco melhor este código, foi transcrito logo abaixo
um trecho deste código. Veja que há a variável retorno, que recebe o retorno da
instrução Shell que configura os parâmetros da porta serial. Logo depois, tem-se que
dar uma pausa na execução da rotina para dar tempo dar porta ser configurada e
ser possível trabalhar com ela. Deu-se uma pausa de 2 segundos e, por fim, tem-se
a instrução Open que lê a porta sCom$ e abre uma comunicação de leitura e escrita
na memória que recebe o número 1. Este é o nome desta porta aberta.
'retorno da função Shell, onde o retorno é um valor numérico
retorno = Shell("mode.com " + sCom$ + " baud=" + sBaud$ + _
" parity=n data=8 stop=2 to=off xon=off dtr=off rts=off")
'espera 2 segundos
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 2)
DoEvents
MyString$ = "" 'limpa a string
Trecho retirado da rotina btnIniciar()
DoEvents
MyString$ = "" 'limpa a string
Do
DoEvents
char$ = Input(1, #1) 'Pega o caractere da interface
Debug.Print ": " & char$
If (char > Chr(31)) Then 'se o caractere é imprimível
MyString$ = MyString$ + char$ 'adiciona o caractere a minha string
End If
Loop Until (char$ = Chr(44)) 'looping até o caractere ser uma virgula
Este trecho do código começa a ficar mais complicado, mas é aqui que está a
mágica deste código. É assim. Há uma instrução de looping chamada Do(Faça).
Dentro deste laço, tem-se uma variável chamada char$. Esta variável vai receber o
retorno da instrução Input() (nesta instrução só tem que informar quantos caracteres
serão retornados e qual o nome do arquivo, ficando assim Input(1, #1)). Esta
instrução é responsável por ficar lendo os valores da porta serial. Tudo o que for lido
por ela vai ser gravado na variável char$. A próxima instrução (vou pular a
instrução Debug) é uma condicional que vai checar se o caractere recebido é um
caractere válido, ou seja, imprimível (isto porque os valores imprimíveis começam a
partir do decimal 31 na tabela ASCII). Os valores que estamos querendo são
caracteres numéricos e estes iniciam a partir do decimal 47 (é o zero). Uma vez
encontrado os valores, estes são gravados na variável MyString$ e este laço vai
continuar até que uma virgula (nº 44 em ASCII), seja recebida por este laço. Neste
momento, o laço termina. Segue-se para o próximo bloco de instruções.
Para ser bem claro, estas rotinas têm que ler uma cadeia de caracteres da
forma “765,56”, onde estes são os valores analógicos vindos do Arduino. Portanto,
tem-se que localizar a vírgula para saber que a primeira cadeia de caracteres foi
encontrada e agora vai para a segunda cadeia de caracteres que compreende os
valores após a vírgula.
Continuando este código, os valores recebidos antes da virgula é o valor do
primeiro sensor (que neste caso é o potenciômetro) e este será gravado na célula
B6 e E7 que são as bases para gerar os gráficos referentes a estes valores.
O próximo bloco de comandos é idêntico ao comentado anteriormente, a
única diferença é que no final do laço não será mais procurada a vírgula (44 na
tabela ASCII). Agora, vai-se procurar o fim do retorno que é um simples ENTER (13
na tabela ASCII), assim a estrutura de laço é a mesma e só a condição no final é
que muda. Assim, vai ter recebido a informação completa. Não se pode esquecer de
gravar estes últimos valores (agora do sensor de temperatura), vai para C6 e F7 que
são as bases para gerar os gráficos da temperatura.
Falando neste bloco de comandos que vai receber os valores do segundo
sensor, tem-se que transformar estes valores em um valor de temperatura legível.
Para isto, foi criada uma função para ler os valores vindos do Arduino e convertê-los
em valor de temperatura em graus célsius.
'*************************************************************************
Trecho retirado da rotina btnIniciar()
Onde:
ADC: Leitura do Conversor Analógico Digital
VIN: Tensão de entrada em Volts
210: Resolução máxima do ADC = 1024
VREF: Tensão de referencia = 5 Volts
Agora que é sabido como o Arduino envia os dados, é preciso calcular o valor
da temperatura. Então, pega-se o valor lido pelo ADC (ValorADC). Aqui será chamado
simplesmente de VALOR e será multiplicada pela razão do VREF (5v) por 1023.
Onde:
temp: Temperatura em graus Celsius
ValorADC: Valor da leitura analógica
VREF: Tensão de referencia = 5 Volts
1023: Limite das leituras
Para fechar a rotina do botão iniciar (botão ON), temos que fechar a
comunicação quando o botão parar (botão OFF) for acionado. Veja que sempre no
fim do laço While é verificado se a célula A1 está vazia. Pois bem, quando o botão
Parar for acionado, ele insere um valor nesta célula. Assim, quando for o próximo
looping, será verificado se esta célula está vazia ou não e no caso não vai estar.
Assim, sai do laço (instrução Wend) e limpa as variáveis de transporte, e
envia a última instrução para o Arduino, quando ele ler “f + ENTER” ele vai saber
que não deve mandar mais nenhuma informação para a porta serial. Depois, o
arquivo de comunicação com a porta serial é fechado também por meio da instrução
“Close #1” e a rotina é encerrada (o código completo vai está disponível no final
deste trabalho).
Figura 54: Fragmento da rotina do botão ON (btnIniciar), fim da rotina.
Esta rotina parece um pouco extensa, mas na verdade não é (parece extensa
porque foi comentado as principais partes). Ver-se-á um pouco do que realmente é o
diferencial do Excel sobre as outras formas de comunicação. É possível enviar
comandos para o Arduino executar.
Esta é a parte mais legal. Comentar-se-á, por exemplo, como é feito para
mover um servo (vide tópico ver item 6.1.3-Descrição dos componentes). A mesma
lógica se aplica quando for acionar um led ou qualquer outro tipo de atuador, a
diferença vai estar no programa que fica rodando no Arduino e isto ainda será visto
neste trabalho. Ver-se-á um pouco da rotina que move o Servomotor.
End Function
Funcao para mover o Servomotor
Veja que esta função que foi criada é bem parecida com a estrutura anterior
do btnIniciar(). Sempre se define o objeto da planilha ativa e sempre início a função
fncAbrirPorta() (que já foi descrita) e testo o seu retorno (True/False). Se caso True
(Verdadeiro), enviar-se-á um comando ao Arduino para que ele movimente o
Servomotor. Em princípio, é só isto que esta função faz. A sintaxe de envio fica
assim: a variável que recebe os comandos na seguinte forma, letra do comando
(neste caso a letra s) concatenado (neste caso uso o sinal de +) com o valor (este
valor é a conversão do ângulo para um valor analógico que o servo entende)
concatenado com o ENTER (“CR” é Carriage Return – Retorno do Carro é o ENTER
que é usado na computação, decimal 13 na tabela ASCII). Veja a figura abaixo:
FTC = 1300
x = (grau * FTC) / 180
fncConvGrauToValor = Int(x)
End Function
Funcao para converter ângulo em valor analógico.
Agora é possível ver que é muito fácil ler as entradas analógicas do Arduino e
acionar Leds, Servomotor, coolers e quaisquer outros dispositivos que possam se
comunicar com a porta serial.
Para que o projeto modelo funcione, deve-se criar o software que vai
embarcado no microcontrolador (no Arduino). Este é, sem dúvida, um ponto
importante no projeto, pois depende muito do Arduino para que o projeto funcione;
ou seja, ler os dados dos sensores e controlar os atuadores é a principal função do
projeto.
Observe de forma macro como é a arquitetura do projeto. Veja a figura 56.
Nela, é possível ver os seguintes componentes: o dispositivo com o software
embarcado é o Arduino (Placa Blackboard com o Atmega328p), que é o principal
hardware; ligados a ele há um SENSOR (neste caso é o sensor de temperatura
LM35) e um ATUADOR (neste caso é um Servomotor), este dispositivo está
conectado a um computador por meio de uma porta serial (neste caso a porta serial
é somente o protocolo de uso, pois na realidade a porta física é uma porta USB) e
neste computador há o SOFTWARE do supervisório escrito em VBA e usando o
MsExcel como plataforma de desenvolvimento.
Figura 57: Tela da IDE Processing. Figura 58: Tela da IDE Wiring.
A linguagem Processing foi criada em 2001
Criado em 2003 por Hernando Barragán (já
por Ben Fry e Casey Reas enquanto ambos
citado anteriormente como o idealizador do
eram estudantes no MediaLab do MIT, esta
“arduino”)
linguagem foi baseada em Java
http://hackaday.com/2016/03/04/wiring-was-arduino-before-arduino/
Assim, um usuário avançado em C/C++ fica um pouco perdido no começo,
mas depois de algumas horas estudando ele já consegue dominar bem a linguagem.
Só um detalhe: a sintaxe de escrita em wiring tem algumas diferenças da linguagem
Processing (ela é bem mais parecida com o Java, pois é baseada em Java).
Para algumas pessoas que não têm nenhum conhecimento em programação
de computadores, a curva de aprendizagem é muito baixa, ou seja, um novato sem
conhecimento em eletrônica e nada de programação, em algumas horas, aprende a
fazer o “Hello World” do Arduino (exemplo chamado blink) e com mais alguns dias
ele vai estar desenvolvendo projetos muito interessantes.
A linguagem em si é bem fácil, pois não requer muitos conhecimentos
prévios. Porém, algumas aulas de lógica de programação e os fundamentos básicos
de eletrônica analógica vão tornar este usuário muito mais apto a desenvolver os
projetos para Arduino.
A interface para programação usando a IDE do Arduino é bem simples, porém
ela é suficiente para a atividade de programação. Para um usuário iniciante, esta
IDE é mais que suficiente, mas esta IDE não traz recursos importantes para o
usuário com experiência em programação.
Usar ou não uma IDE com mais recursos não invalida usar a IDE do próprio
Arduino, pois é perfeitamente possível criar todo um novo firmware em um bloco de
notas e compilar usando ferramentas livres para gerar o arquivo “HEX” para gravar
no microcontrolador. Porém, se a pessoa pode ter uma IDE com mais recursos,
porque não usá-la?
6.3.4.3.1. Programar para Arduino sem Arduino
Veja o que o framework do Arduino tem quando se abre a IDE e abre novo
Sketch em branco. Isto mesmo, agora só há duas rotinas para programar um µC.
Figura 63: IDE do Arduino com novo Sketch.
11 void setup()
12 {
13 Serial.begin(9600);
14 junta01.attach(6);
15 }
24 if (comando == 's')
25 {
26 //controlar o servo
27 valor = Serial.parseInt();
28 pot = map(valor, 0, 1023, 0, 179);
29 delay(15);
30 junta01.write(pot);
31 comando='j';
32 }
34 if (comando == 'e')
35 {
36 //controlar a luminisidade do led
37 valor = Serial.parseInt();
38 analogWrite(11,valor);
39 comando='j';
40 }
Código do Arduino – loop() – Parte 3.
42 if (comando == 'i')
43 {
44 //ler os dados das portas analogicas
45 //potenciometro 01
46 pot = analogRead(A0);
47 //Sensor de Temperatura lm35
48 lm35 = analogRead(A1);
49 Serial.print(pot);
50 Serial.print(",");
51 Serial.println(lm35);
52 delay(200);
53 }
54 }
55
Código do Arduino – loop() – Parte 4.
Agora que o firmware foi transferido para o Arduino, deve-se testar. Como
este projeto usa a comunicação serial para se comunicar, é possível usar uma
ferramenta da própria IDE do Arduino para ver se está funcionando. Para isto, abre-
se o monitor serial na tela da IDE (ver a figura 64). Para que ele funcione, deve-se
enviar o comando para de leitura, que no caso é a letra “i’ (ver item 6.3.4.5.3).
Assim, digita-se a letra “i” e pressiono o botão ENVIAR (ver figura 67).
Depois que foi mostrado como funciona a leitura das informações geradas
pelo Arduino, conheceu-se como mandar o Arduino executar uma ação, que no caso
foi controlar o led (ligar e desligar) e acionar o Servomotor.
Agora, vai-se controlar isto à distância. Para isto, usar-se-á uma interface
para o usuário feito no MsExcel e codificado em VBA. Assim, ver-se-á alguns
detalhes do funcionamento desta aplicação.
Como foi visto anteriormente, no tópico sobre supervisório (item 3.3-
Supervisório), o seu principal objetivo é supervisionar e controlar remotamente um
processo de produção. Por isto, o projeto tem somente o necessário para fazer estas
ações, conforme pode ser visto na figura 70. Veja como funciona esta interface.
6.3.5.1. Entrada A
6.3.5.3. Saída DS
6.3.5.4. Saída DL
Conclusão
Este trabalho foi realizado com o objetivo de demonstrar, de forma fácil, como
desenvolver um sistema de supervisório modelo para aquisição, monitoramento e
controle; ou seja, um projeto pequeno de um sistema SCADA.
Para o desenvolvimento deste trabalho, não houve a aquisição de qualquer
tipo de componente o que facilitou bastante o meu trabalho, sobrando tempo para as
pesquisas.
Em um primeiro momento, procurou-se na internet algum modelo de Sistema
Supervisório desenvolvido inteiramente em Excel e usando VBA. Na verdade, não
foi encontrado nada neste sentido. Achou-se muitas aplicações que apenas tratavam
os dados oriundos de um sistema SCADA. Com um pouco mais de pesquisa, foram
encontrados alguns modelos que já faziam a leitura dos dados de um Arduino. No
entanto, somente faziam a leitura; já em VBA, com a função especifica de ler e
controlar um microcontrolador, não foi achado.
Foi, neste momento, que foi percebida a oportunidade de demonstrar que era
possível fazer esta comunicação com um microcontrolador: no caso, um Arduino,
mas pode ser feito com um PIC também. Então, pesquisou-se como poderia ser feito
esta comunicação e foram encontradas várias formas de se comunicarem. Diante
delas, optou-se pela mais simples, já que o objetivo era ser simples mesmo.
Por este motivo, usou-se o protocolo de comunicação de dados com o padrão
RS-232, ou seja, foi usada a porta serial. Usou-se, para configurar e abrir a porta, as
instruções nativas do VBA (herdadas do seu primo mais velho o Visual Basic) e para
a comunicação. Usou-se o comando nativo MODE.COM do próprio Windows.
Desta forma, foi fácil a comunicação. Como o pesquisador deste trabalho
desenvolve há bastante tempo usando a linguagem VBA, o desenvolvimento do
sistema de supervisório não foi difícil.
Durante o desenvolvimento do projeto, encontrou-se vários problemas, como
incompatibilidade dos comandos do MsDOS (emulado dentro do Windows atual).
Alguns parâmetros que deveriam funcionar, mas simplesmente não funcionaram. Os
dados eram enviados para o notebook pela porta serial, mas a porta não passava
pela porta ou a porta já estava aberta e eu tinha problemas com o tempo em que o
Arduino enviava estes dados e o tempo para o Excel ler estes dados. Foi aí que se
decidiu inserir, em vários pontos do código, algumas instruções de delay para poder
funcionar corretamente. Isso sem falar de quando tudo funcionava, conseguia-se ler
os dados do Arduino, conseguia acender o led, mas quando desligava e ligava o
sistema novamente, nada mais funcionava. Testou-se em um sistema Windows XP
virtualizado e funcionou bem. Mas como o Windows 10 estava sendo usado,
precisou-se fazer algumas adaptações. Todos os tópicos abordados neste trabalho
já estão atualizados e adaptados.
Enfim, desenvolveu-se o sistema supervisório usando o VBA. Criou-se o
firmware embarcado dentro do Arduino. Conseguiu-se ler o sinal do potenciômetro,
monitorar a temperatura da sala aonde se trabalhou usando o LM35 como sensor.
Conseguiu-se também controlar o acionamento de um led, inclusive como Dimmer, e
fez-se mover um Servomotor por meio de ângulos digitados na interface da
aplicação.
Neste sentido, o objetivo deste trabalho foi alcançado: a interface da
aplicação foi bem elaborada, sendo de fácil uso e o sistema embarcado funciona
muito bem.
Bibliografia
LYDON, Bill. A PLC for process control can appear to be less expensive...
Do PLCs Eliminate Need for a DCS? Disponível em:
<https://www.automation.com/library/articles-white-papers/articles-by-bill-lydon/do-
plcs-eliminate-need-for-a-dcs>. Acesso em 05 de Fev. de 2017.
WILLIAMS, Elliot. Wiring was arduino before arduino. Disponível em: <
http://hackaday.com/2016/03/04/wiring-was-arduino-before-arduino/ >. Acesso em 18
de Mar. De 2017
Forum ozgrid. Use Open to connect to serial port. Disponível em: <
http://www.ozgrid.com/forum/showthread.php?t=194802 >. Acesso em 18 de Mar. De
2017
BERNADES, Andre Luiz. VBA – Visual Basic for Application. Disponível em: <
https://sites.google.com/site/vbabernardes/vba/vba >. Acesso em 18 de Mar. De
2017
Anexos
Sub btnIniciar()
Dim ws As Worksheet
Dim linha, valor As Integer
Dim temp As Double
Set ws = ActiveWorkbook.Sheets(painel)
gl_lin = 0
ws.Columns("e:e").ClearContents
ws.Columns("f:f").ClearContents
ws.Columns("d:d").ClearContents
'espera 2 segundos
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 2)
'Nº da linha inicial dos dados para montar o grafico em tempo real
linha = 7
DoEvents
MyString$ = "" 'limpa a string
Do
DoEvents
'Pega o caractere da interface
char$ = Input(1, #1)
Debug.Print ": " & char$
'se o caractere é imprimivel
If (char > Chr(31)) Then
'adiciona o caractere a minha string
MyString$ = MyString$ + char$
End If
'looping até o caractere ser uma virgula
Loop Until (char$ = Chr(44))
DoEvents
MyString$ = "" 'limpa a string
Do
DoEvents
char$ = Input(1, #1) 'Pega o caractere da interface
If (char$ > Chr(31)) Then 'se o caractere é imprimível
'adiciona o caractere a minha string
MyString$ = MyString$ + char$
End If
MyString$ = ""
MyString$ = "f" + Chr(13) 'Pega a string para o envio e junta a
um ENTER
Put #1, , MyString$ 'Envia o comando para a porta serial
Close #1 'Fecha o arquivo
Else
fncMensagem "Ocorreu um problema na recepção dos dados.", 2
End If
End Sub
Código do btnIniciar (botão ON)
Sub btnFechar()
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets(painel)
'fecha a recepcao dos dados
ws.Range("A1").Value2 = 1
Call fncExibeOcultaObjeto("led_off", 1)
Call fncExibeOcultaObjeto("led_on", 2)
End Sub
Código do btnFechar (botão OFF)
Sub moverServo()
Dim lin, valor As Long
lin = 26: col = 4
While Cells(lin, col).Value2 <> ""
valor = Cells(lin, col).Value2
Call fncMoverServo(valor)
lin = lin + 1
Wend
End Sub
Código do botão OK (botão para mover o servo por sequência de ângulos)
Sub moverServoGraus()
'mover o servo de acordo com o valor
'em graus digitado pelo usuario
Dim grau, x As Double
Dim lin, valor As Long
Sub enviarDados()
If Range("B1").Value = 0 Then
Call fncExibeOcultaObjeto("led_deslig", 1)
Call fncExibeOcultaObjeto("led_lig", 2)
Call fncEnviarSinal
End If
If Range("B1").Value > 0 Then
Call fncExibeOcultaObjeto("led_deslig", 2)
Call fncExibeOcultaObjeto("led_lig", 1)
Call fncEnviarSinal
End If
End Sub
Código do controle Dimmer do Led
Sub LedOn()
Range("B1").Value2 = 255
Call fncEnviarSinal
Call fncExibeOcultaObjeto("led_deslig", 2)
Call fncExibeOcultaObjeto("led_lig", 1)
End Sub
Código do botão Ligar Led
Sub LedOff()
Range("B1").Value2 = 0
Call fncEnviarSinal
Call fncExibeOcultaObjeto("led_deslig", 1)
Call fncExibeOcultaObjeto("led_lig", 2)
End Sub
Código do botão Desligar Led
Sub gravar()
'rotina para gravar os valores obtidos da entrada analogica
'no caso os valores vem do potenciometro
Dim valor As Integer
valor = Range("b6")
Call fncGravar(valor)
End Sub
Código do botão Gravar
Sub telaConfig()
frmConfig.Show
End Sub
Código do botão Abrir – Para mostrar a tela de configuração
Set ws = ActiveWorkbook.Worksheets(configSistema)
'pega o nome da porta
sCom = UCase(ws.Cells(1, 1))
fncGetPort = sCom
End Function
Function fncEnviarSinal()
'Função para acionar o Led
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets(painel)
'Limpa a variavel
MyString$ = ""
'Variavel recebe o comando S de servo
MyString$ = "s"
'Variavel recebe s + o valor inserido pelo usuario
MyString$ = MyString$ & valor
'Variavel recebe s+valor e junto ao ENTER
MyString$ = MyString$ + Chr(13)
End Function
'variavel de retorno
gl_ret = retorno
End Function
'retorno da função
fncTemperatura = tempR
End Function
Set ws = ThisWorkbook.Sheets(painel)
col = 4
If gl_lin = 0 Then
gl_lin = 26
Else
gl_lin = gl_lin + 1
End If
fncGetLastLine = linv
End Function
FTC = 1300
x = (grau * FTC) / 180
fncConvGrauToValor = Int(x)
End Function
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Orientation = 0
.IndentLevel = 0
.ReadingOrder = xlContext
End With
Selection.Interior.Color = vbRed
Else
Cells(lin, col).Clear
End If
End Function
Sub chamaCalc()
'primeira funcao de teste
retorno = Shell("C:\Windows\System32\calc.exe", vbNormalFocus)
End Sub
Function fncAlarme()
Dim tempo As Long
tempo = 500
Call fncExibeOcultaObjeto("txtAlarme", 2)
Call fncDelay(tempo)
Call fncExibeOcultaObjeto("txtAlarme", 1)
Call fncDelay(tempo)
Call fncExibeOcultaObjeto("txtAlarme", 2)
End Function
#include <Servo.h>
char comando;
int valor;
int pot;
int lm35;
void setup()
{
Serial.begin(9600);
junta01.attach(6);
}
void loop()
{
if (Serial.available()>0)
{
comando = Serial.read();
}
if (comando == 's')
{
//controlar o servo
valor = Serial.parseInt();
pot = map(valor, 0, 1023, 0, 179);
delay(15);
junta01.write(pot);
comando='j';
}
if (comando == 'e')
{
//controlar a luminisidade do led
valor = Serial.parseInt();
analogWrite(11,valor);
comando='j';
}
if (comando == 'i')
{
//ler os dados das portas analogicas
//e envia pela porta serial
//potenciometro 01
pot = analogRead(A0);
//Sensor de Temperatura lm35
lm35 = analogRead(A1);
Serial.print(pot);
Serial.print(",");
Serial.println(lm35);
delay(200);
}
}
Código em C que vai embarcado no Arduino.