Arduino y .net

Hoy voy a contar algunas cosas acerca de un cacharro denominado Arduino.

El Arduino es una placa electrónica totalmente programable y de la cual disponemos de toda la información interna gracias a que se trata de hardware libre y toda la documentación se encuentra en disponible a través de internet.

Hace poco comencé a cacharrear con ella para ver todo lo que se podía hacer y la verdad, por lo que he comprobado yo mismo y por lo que otras personas hacen y muestran en internet, se puede hacer casi cualquier cosa.

La placa tiene un coste bajo, alrededor de los 20 euros según modelo y según donde se compre y el valor de los portes, pero es muy barata en comparación con otras placas del mercado y además hay que tener en cuenta la inmensa cantidad de documentación que podemos encontrar en la red.

Podéis ver las especificaciones de la placa en la web oficial de Arduino.

Para desarrollar sobre la placa podemos hacerlo de dos maneras, una es utilizar el IDE que nos proporciona desde la web de Arduino. Este IDE está programado en Java por lo que podemos utilizarlo desde cualquier sistema operativo, el lenguaje es una especie de C muy sencillo de utilizar, por lo que una persona puede hacer cosas interesantes incluso si acaba de aprender a programar.

Un programa de ejemplo podría ser este:

   1:   int ledPin = 13;                  
   2:   int inPin = 10;                    
   3:   int value = 0;                     
   4:   
   5:  void setup() { 
   6:    Serial.begin(9600);
   7:    pinMode(ledPin, OUTPUT);       
   8:    pinMode(inPin, INPUT);            
   9:  } 
  10:   
  11:   
  12:  void loop() 
  13:  {
  14:    value = digitalRead(inPin);       
  15:    digitalWrite(ledPin, value); 
  16:    delayMicroseconds(1000);
  17:    if (value==1)
  18:    {
  19:      Serial.println("Pulsado");
  20:    }
  21:    else{
  22:      Serial.println("Sin pulsar");
  23:    }
  24:    delayMicroseconds(10000);
  25:  }

 

Con este programa simplemente controlamos cuando pulsamos un botón para encender o apagar un diodo led. Según pulsamos enviamos por el puerto serie un string que indica si está pulsado o no.

Otra forma de programarlo es enviando ordenes a través del puerto serie y aquí es donde entra nuestro querido C#. Hacer un programa que utilice el puerto serie para monitorizar lo que hace el Arduino e incluso enviar órdenes a través del usb es tremendamente sencillo.

Si queremos ver los strings que envía el programa anterior por el puerto serie podemos usar el siguiente programa:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Linq;
   7:  using System.Text;
   8:  using System.Windows.Forms;
   9:  using System.IO.Ports;
  10:  using System.Threading;
  11:   
  12:  namespace Arduino_lee_recibe
  13:  {
  14:      public partial class Form1 : Form
  15:      {
  16:          SerialPort port;
  17:   
  18:          public Form1()
  19:          {
  20:              InitializeComponent();
  21:              port = new SerialPort("COM4", 9600);
  22:              port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
  23:          }
  24:   
  25:          private void button1_Click(object sender, EventArgs e)
  26:          {
  27:              if (!port.IsOpen)
  28:              {
  29:                  port.Open();
  30:                  button1.Text = "Terminar";
  31:              }
  32:              else
  33:              {
  34:                  port.Close();
  35:                  button1.Text = "Comenzar";
  36:   
  37:              }
  38:          }
  39:   
  40:          private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  41:          {
  42:              this.Invoke(new EventHandler(AdjuntarAlTextbox));
  43:          }
  44:   
  45:          private void AdjuntarAlTextbox(object sender, EventArgs e)
  46:          {
  47:              textBox1.AppendText(port.ReadLine()+'n');
  48:          }
  49:   
  50:          private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  51:          {
  52:              if (port.IsOpen) port.Close();
  53:          }
  54:      }
  55:  }
  56:   

Necesitamos disponer de un formulario con un textbox esté activada y un botón para poder parar y arrancar el programa.

Para hacer uso del puerto serie utilizamos el namespace System.IO.Ports, creamos un objeto de tipo SerialPort y lo inicializamos con el puerto por el que tenemos conectado el Arduino y Baud Rate.

Utilizaremos el método DataReceived para escribir en el textbox cuando el programa detecte la recepción de datos.

Por último debemos tener en cuenta la situación actual del puerto, es decir, si está abierto o cerrado para poder parar la recepción de información o iniciarla.

Como podéis ver es bastante sencillo hacer un pequeño programa. En los próximos post en los que me refiera al Arduino veremos cómo enviar información a la placa para que actue según nuestras pretensiones y como conectar diferentes sensores, servomotores, de cara a poder montar algunos robots sencillos con la placa.

Saludetes[H]