Arduino e Microsoft .NET Framework – Integrando os dois mundos

Arduino é uma plataforma eletrônica de hardware livre. Baseada em um microcontrolador Atmel AVR com suporte de entrada/saída embutido. O principal objetivo da plataforma é criar ferramentas acessíveis, de baixo custo e fáceis de serem utilizadas.

Neste post, será apresentado um modo de comunicação entre uma aplicação Microsoft .NET e um hardware Arduino.

clip_image002

O hardware utilizado é composto por: uma placa Arduino Leonardo, uma protoboard de 864 furos, um display LCD 16×2, um potenciômetro de 10Ω, dois Leds (verde e vermelho) e dois resistores de 300Ω.

Algumas fotos do modelo construído:

Foto 1 – Arduino Leonardo

clip_image004

Foto 2 – Protoboard

clip_image006

Nesse exemplo faremos uso de dois blocos de código: o primeiro bloco consiste de código C para a placa Arduino e o segundo bloco consiste de um código em C# para a console que fará a comunicação com o hardware Arduino.

Nosso desafio será definir uma lógica em linguagem C que espere por entradas vindas por entradas seriais. Ao mesmo tempo, o código C# irá conectar-se ao hardware Arduino e lhe enviar informações por meio de uma porta serial.

A lógica do exemplo será: uma console gerenciada irá requisitar uma cor (verde ou vermelho) que quando informada, será enviada via uma porta serial para o hardware Arduino. Quando recebida a cor, o hardware Arduino irá acender um Led com a cor escolhida e desligar o Led da cor oposta. Caso uma entrada inválida seja feita, então o hardware Arduino continuará alternando as cores entre verde e vermelho.

O código do hardware Arduino é listado abaixo (comentários no código detalham a implementação):

// Library used to load common functions to LCD display
#include <LiquidCrystal.h>  

// Display
// Using pins 12, 11, 5, 4, 3 and 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

// Red LED connected to pin number 13
const int redLedPin = 13;
// Green LED connected to pin number 06
const int greenLedPin = 6; 

void setup() {   
  
  // Start serial port at 9600 bps
  // Pay attention to C# code, you have to connect to the same port.
  Serial.begin(9600);
  
  // Setup RED LED
  pinMode(redLedPin, OUTPUT);  
  // Setup GREEN LED
  pinMode(greenLedPin, OUTPUT);  
}  

int inByte = 0; 
int pinToTurnOn = 0;
int pinToTurnOff = 0;

void loop() {    
      
   // Read the Serial/USB input
   inByte = Serial.read();  
       
   // If 'Red' was selected
   if (inByte == 'R') {
     showMessage("Selected color:", "\tRED");
     pinToTurnOn = redLedPin;
     pinToTurnOff = greenLedPin;
   } // If 'Green' was selected
   else if (inByte == 'G') {
     showMessage("Selected color:", "\tGREEN");
     pinToTurnOn = greenLedPin;
     pinToTurnOff = redLedPin;
   }
   else if (inByte >  -1){
     pinToTurnOn = 0;
     pinToTurnOff = 0;     
   }
   
   if (pinToTurnOn > 0 && pinToTurnOff > 0){
     
     // Turn off the oposite color
     turnOffPin(pinToTurnOff);  
  
     // Blink the selected color 
     turnOnPin(pinToTurnOn);        
     delay(1000);   
     turnOffPin(pinToTurnOn);  
     delay(1000);
   }   
   else {
     
     // Warning message
     showMessage("No input yet", (String)inByte);
     
     // Blink colors     
     // Show RED LED
     turnOnPin(redLedPin);   
     delay(1000);            
     turnOffPin(redLedPin);    
     delay(1000);     
     // Show GREEN LED
     turnOnPin(greenLedPin);   
     delay(1000);            
     turnOffPin(greenLedPin);    
     delay(1000);     
   }
} 

// Turn on Led on a specific pin
void turnOnPin(int pin) {
  
  digitalWrite(pin, HIGH);   
}

// Turn off Led on a specific pin
void turnOffPin(int pin) {
  
  digitalWrite(pin, LOW);   
}

// Show a text message on a LCD Display
void showMessage(String line1, String line2){
  
   lcd.begin(16, 2);   
   lcd.setCursor(0,0);   
   lcd.print(line1);   
   lcd.setCursor(0,1);   
   lcd.print(line2);
}

O código da console é listado abaixo (comentários no código detalham a implementação):

using System;
using System.IO.Ports;

class Program {

    private static SerialPort _port;

    static void Main(string[] args) {

        // By default, connections to Arduino have the same port name, 'COM3'.
        // Pay attention if your hardware has a different name.
        // We are connecting to port number 9600.
        _port = new SerialPort("COM3") { BaudRate = 9600 };

        // If you have 'Arduino Leonardo' (like me), so you have to 
        // enable 'DtrEnable'. It's a not limitation, or something like this. 
        // It's just a configuration 'by default'. 
        _port.DtrEnable = true;

        // Open connection to Arduino hardware.
        _port.Open();

        do {

            Console.WriteLine(":: Choose a color: ");
            Console.WriteLine("\tG - Green");
            Console.WriteLine("\tR - Red");

            string input = Console.ReadLine();

            if (input == "exit")
                break;

            if (!string.IsNullOrWhiteSpace(input))
                // Send just one charactere to Arduino hardware. 
                _port.Write(input.ToUpper()[0].ToString());

            Console.WriteLine();
        } while (true);

        // Close connection to Arduino hardware.
        _port.Close();
    }
}

Meu kit foi comprado na http://robocore.net/. O site contém diferentes kits básicos e componentes que podem ser adicionados a sua solução.

 

 

FH

 

Referências:

http://www.arduino.cc/

http://playground.arduino.cc/

http://pt.wikipedia.org/wiki/Arduino

http://en.wikipedia.org/wiki/Arduino

http://www.c-sharpcorner.com/uploadfile/mgold/using-the-arduino-microcontroller-board-with-C-Sharp-and-net/

http://playground.arduino.cc/Interfacing/Csharp

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.