Controlando um LED no Arduino usando C# e Visual Studio
Controlando um LED no Arduino usando C# e Visual Studio
Por Fábio dos Reis
Neste projeto vamos mostrar como é possível controlar um Arduino usando um aplicativo com interface gráfica a partir de um PC. Mais especificamente, vamos usar o Microsoft Visual Studio para criar uma aplicação gráfica em C# que permita acender ou apagar um LED conectado a um pino digital no Arduino, clicando em botões.
A aplicação é dividida em duas partes:
- Código de controle do LED em si, programado no Arduino, usando sua linguagem padrão;
- Código do aplicativo gráfico, em C#, que irá se comunicar com o Arduino para enviar comandos especificados.
Portanto, teremos de escrever dois códigos distintos: um no Visual Studio e outro no IDE do Arduino, e eles irão interagir entre si por meio de comando enviados pela porta serial (USB no caso) do seu computador.
O aplicativo gráfico se parecerá com a imagem abaixo:
Note que se trata de uma aplicação bem simples, contendo apenas um formulário e dois botões de controle, um para acender o LED e outro para apagá-lo. Um dos botões receberá o nome de btnLigaLED e o outro, btnDesligaLED
Para realizar a comunicação entre a aplicação gráfica e o Arduino iremos utilizar a classe SerialPort no Visual Studio, a qual estudaremos a seguir.
A Classe SerialPort
A classe SerialPort, pertencente ao namespace System.IO.ports, permite representar um recurso de porta serial em uma aplicação do .Net Framework.
Ela possui uma série de propriedades e métodos, que podem ser consultados na página correspondente no MSDN da Microsoft, mas para nossa aplicação necessitaremos apenas dos itens a seguir:
- Propriedade PortName – Retorna ou ajusta a porta que será utilizada para efetuar a comunicação, incluindo todas as portas COM disponíveis
- Propriedade BaudRate – Obtém ou ajusta a taxa de transmissão serial, em Bauds
- Propriedade IsOpen – Retorna um valor indicando o status do objeto SerialPort, que pode estar aberto (true) ou fechado (false).
- Método Open() – Abre uma nova conexão de porta serial.
- Método WriteLine(string) – Escreve a string passada como parâmetro na porta serial.
- Método Close() – Fecha a conexão à porta, configura a propriedade IsOpen para falso, e elimina o objeto interno Stream.
O componente SerialPort pode ser adicionado à aplicação por meio da Toolbox -> Components.
Descobrindo a porta serial a utilizar
Para descobrir a porta serial que será utilizada na aplicação, acesse Ferramentas -> Porta na IDE do Arduino, e verifique qual porta COM está selecionada.
No meu exemplo, a porta a ser utilizada é a porta COM4.
Código no Arduino
A seguir temos o código que será digitado na IDE do Arduino. Neste código inicializamos a porta serial, ajustamos o pino a ser usado pelo LED (pino 13), e na função de loop, verificamos se existem dados disponíveis na porta serial (ou seja, se um comando / caractere foi enviado a ela), e em caso afirmativo, fazemos a leitura do caractere, armazenando seu valor na variável estado.
Se o valor presente na variável estado por igual a 1, o LED será aceso. Caso seja igual a zero, o LED será apagado.
char estado = '0'; const int LED = 13; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); digitalWrite(LED, LOW); } void loop(){ if (Serial.available() > 0) { estado = Serial.read(); } if (estado == '1'){ digitalWrite(LED, HIGH); } if (estado == '0'){ digitalWrite(LED, LOW); } } |
Códigos no Visual Studio:
Primeiramente, devemos importar o namespace System.IO.Ports:
using System.IO.Ports
No código do Form1, configuramos o nome da porta serial a utilizar, assim como sua taxa de transferência de dados (Baud Rate):
public Form1() { InitializeComponent(); serialPort1.PortName = "COM4"; serialPort1.BaudRate = 9600; // Configurando cor de fundo dos botões btnLigaLED.BackColor = Color.White; btnDesligaLED.BackColor = Color.White; } |
Na linha serialPort1.PortName devemos atribuir o nome da porta serial que o Arduino está utilizando, a qual descobrimos anteriormente consultando o menu Ferramentas da IDE do Arduino. Em meu caso, é a porta COM4, que deve ser fornecida entre aspas na instrução.
A taxa de transferência será a padrão: 9600.
Botão btnLigaLED
A seguir temos o código que deverá ser associado ao evento click do botão que acenderá o LED. Ao clicar no botão, a porta serial é aberta, e um condicional if verifica se ela foi realmente aberta, e em caso afirmativo, será enviado para a porta o valor “1”. Logo após, a porta serial é fechada, e mudamos a cor de fundo dos botões para sinalizar houve pressionamento.
serialPort1.Open(); if (serialPort1.IsOpen) { serialPort1.WriteLine("1"); } serialPort1.Close(); btnLigaLED.BackColor = Color.Aqua; btnDesligaLED.BackColor = Color.White; |
Botão btnDesligaLED
A seguir temos o código que deverá ser associado ao evento click do botão que apagará o LED. É feita a mesma verificação realizada no botão btnLigaLED, mas agora se a porta estiver aberta, é enviado o dígito 0 à porta serial.
serialPort1.Open(); if (serialPort1.IsOpen) { serialPort1.WriteLine("0"); } serialPort1.Close(); btnDesligaLED.BackColor = Color.Aqua; btnLigaLED.BackColor = Color.White; |
Esquema eletrônico do circuito
A ilustração abaixo mostra o diagrama esquemático do circuito que será acionado pelo aplicativo:
O resistor R1 deve possuir uma resistência de 220Ω ou mais, para evitar sobrecarga de corrente no LED, e deve estar conectado ao pino 13 do Arduino. O LED pode ser de qualquer cor, genérico.
Após criar o circuito, abra o IDE do Arduino e digite o código apresentado anteriormente. Então, abra o Microsoft Visual Studio em seu PC ou notebook e crie a aplicação de controle.
Para testar, conecte o Arduino a seu PC, e execute a aplicação. Clicando nos botões o LED deve acender e apagar, de acordo com o botão clicado.
É isso aí! No próximo tutorial vamos explorar mais a fundo essa integração entre C# e a plataforma Arduino. Até!
estou tentando usar php e banco de dados para acender um led, gostaria de saber se é possível e como realizar …
desde já agradeço
Boa tarde,
Gostaria de trabalhar mais projetos com visual studio com arduino, pode indicar um livro ou até mesmo um curso que aborde.