sábado, octubre 08, 2016

Cuando Arduino viene al rescate

La crisis. Sin muchas ganas de gastar dólares y hay problemas que resolver donde tiempo atrás no dudaríamos en colocar un PLC pequeño que nos sacara la pata del barro. Aquí es donde ideas ingeniosas como el uso de una tarjeta Arduino vienen a hacernos el día.

Un Arduino es una plataforma electrónica abierta basada en hardware y software fácil de usar. Se supone que está dirigida a cualquiera que le interese un proyecto donde haga falta un controlador de bajo coste y que nos permita interactuar con dispositivos de campo como motores o sensores de todo tipo. Hay por allí muchas otras plataformas, como el famoso Raspberry por ejemplo, pero creo que Arduino es uno de los más poderosos y populares además de barato.

Supongamos que tenemos en nuestra planta por ejemplo un filtro manga que queremos poner a funcionar y que necesitamos que algo haga operar diez válvulas solenoides que permiten que aire comprimido sople las mangas en secuencia cada cierto tiempo. ¿Podemos hacer eso con un PLC? Desde luego que si, pero con un Arduino es mucho más económico y hasta sencillo.

Lo primero es elegir el Arduino. Creo que lo mejor es tratar de conseguir un Arduino que no sea de esos chinos extremadamente baratos que hay por ahí. El Arduino Uno hecho en Italia es uno de los mejores y más confiables, así que es una buena opción ya que no necesitaremos mayor cosa para esta aplicación sencilla.

El Arduino trae 12 puntos digitales que pueden ser configurados como entradas o salidas así que bastan para cubrir las diez válvulas de nuestro proyecto. También tiene seis entradas analógicas que no usaremos. Y si tuviéramos disponible un interruptor de diferencial de presión que nos permitiera saber si el filtro está muy sucio y tenemos que soplarlo también serviría ya que tenemos dos puntos digitales de reserva.

El Arduino no tiene la capacidad de manejar la carga de las válvulas solenoides así que le podemos colocar módulos de relevadores electromecánicos o de estado sólido que también se consiguen en el mercado a muy bajo precio. El plano de conexiones vendría siendo como luce la figura (click para agrandar).


Para la alimentación solamente nos basta una fuente de poder que nos de los 5 VDC que requiere el Arduino. Dependiendo del ambiente, si es muy húmedo o muy polvoriento por ejemplo, podremos decidir la calidad de esta fuente.

Ahora veamos como se programa.

El Arduino trae su propio ambiente de desarrollo, el cual es gratis y podemos bajar de la página del proyecto. Bajamos este ambiente de desarrollo y lo instalamos.

Una vez instalado el sistema conectamos nuestra placa arduino con el puerto USB y creamos un nuevo programa que en jerga de arduino llamamos "sketch". Este sketch nuevo contiene dos funciones, una llamada setup y otra llamada loop. En setup colocamos lo referente a la inicialización de nuestro programa y en loop lo que queremos que el arduino haga en modo de lazo infinito, es decir, un programa tipo PLC que se ejecutará eternamente en barridos secuenciales.

void setup() {

  // put your setup code here, to run once:

}

void loop() {

  // put your main code here, to run repeatedly:

}


Nada del otro mundo como vemos.

En nuestro caso en particular el código final, usando la librería para escribir en el puerto serial para mensajes de diagnóstico interesantes, sería algo como esto:


const long timer1 = 2000; // tiempo en ms entre soplado de cada válvula
const long timer2 = 120; // tiempo en seg entre soplado del conjunto completo
const long timer3 = 400; // tiempo en ms de soplado de cada válvula

// la función setup inicializa las variables en el inicio

void setup() {

  // inicializar puerto serial para mensajes

  Serial.begin(9600);
  Serial.println("Programa de control de soplado del Filtro Manga");
  Serial.println("Rev 1.1");
  Serial.print("Timer1 = ");
  Serial.println(timer1);
  Serial.print("Timer2 = ");
  Serial.println(timer2);
  Serial.print("Timer3 = ");
  Serial.println(timer3);


  // inicializar todos los pins como salidas, del 2 al 11 son las válvulas

  for (int thisPin = 2; thisPin < 14; thisPin++) {
    pinMode(thisPin, OUTPUT);
  }
}

// la función loop corre en modo de lazo infinito

void loop() {

// inicio ciclo de soplado

  Serial.println("Soplando...");
  for (int thisPin = 2; thisPin < 12; thisPin++) {
    digitalWrite(thisPin, HIGH);
    digitalWrite(13, HIGH);
    Serial.print("V: ");
    Serial.println(thisPin - 1);
    delay(timer3);
    digitalWrite(thisPin, LOW);
    digitalWrite(13, LOW);
    delay(timer1);
  }

// fin de ciclo de soplado

Serial.println("Inicio pausa...");

for (int tiempo = 0; tiempo <= timer2; tiempo++) {
  Serial.println(tiempo);
  digitalWrite(13, HIGH);
  delay(50);
  digitalWrite(13, LOW);
  delay(950);
}

}


Finalmente compilamos y lo subimos al arduino y listo. Armamos nuestro sistema y lo probamos.

Una solución interesante y económica.


No hay comentarios.: