User: alciro    User
 

microPLC para arduino

Share |
 Descargas microPLC

2.5.1. Ejemplo de convertidor ADC, Termostato

Se ha de implementar el termostato  según las siguientes características:

  • Se dispone de un pulsador de marcha y otro de paro para activar el sistema.
  • Un indicador informa del estado del sistema.
  • La temperatura deseada (consigna) se ha de establecer entre 18ºC y 50ºC, esta señal de referencia se lee de un potenciómetro situado en una entrada analógica.
  • Para medir la temperatura se dispone de un sensor de rango -10ºC a 100ºC conectado en una entra analógica. Este está calibrado con fondo de escala de 0-5V.
  • El regulador es del tipo todo/nada para actuar sobre una resistencia calefactora.
  • Se establece una histéresis para la conmutación de 1ºC.

Entradas

  • S1 Marcha
  • S2 Paro

Salidas

  • K1 Indicador de sistema en marcha
  • K2 Salida para la resistencia calefactora

Sensores

  • aic Consigna entregada por el potenciómetro
  • ait Temperatura entregada por el sensor
Escalado de las entradas analógicas del microPLC para arduino

Escalado de la señal analógica y digital al verdadero valor de la magnitud física.

Programa ladder del termostato con el microPLC arduino

Programa del termostato

 

/*
*  Ejemplo de termostato con convertidor analógico a digital ADC para el MicroPLC - arduino
*
*  Descripción: Programa básico para leer entradas analógicas 0 y 1
*		para realizar un termostato del tipo todo/nada
*		En la entrada 0 tenemos la temperatura de referencia con un potenciómetro
*		con valor escalado entre 18 y 50 ºC
*		En la entrada 1 tenemos la temperatura medida de un sensor
*		con valor escalado entre -10 y 100 ºC
*
*  Autor: Rafa Aranda
*  Fecha: 22-05-2014
*  Versión: 1.0
*/

// Asignación de Pins a Salidas digitales (están ordenados de forma decreciente por necesidades del PCB)
#define Out_1 6
#define Out_2 7
#define Out_3 8
#define Out_4 9

// Pins de entrada (están ordenados de forma decreciente por necesidades del PCB)
#define In_1 5
#define In_2 4
#define In_3 3
#define In_4 2

#define HTRS 0.5	// Histéresis/2 para el control de la temperatura 0,5 -> 1ºC

// Librerías
#include "microPLC.h"

// Funciones prototipo
void getInputs(void);
void setOutputs(void);

//  Variables globales

//Definición de las variables de trabajo
m4bits s;		// Entradas del MicroPLC
m4bits k;		// Salidas del MicroPLC
m4bits m1;	// Memoria temporal

// MicroPLC
microPLC uPLC;	// Declaración del MicroPLC

// Objetos del microPLC contadores, temporizadores, convertidores
Analog aic(0, 18, 50); // Iniciamos la entrada analógica 0 con escalado de 18ºC a 50ºC. Consigna
Analog ait(1, -10, 100); // Iniciamos la entrada analógica 1 con escalado de -10ºC a 100ºC. Temperatura

/*  setup
*  Tareas iníciales de preparación
*/
void setup(){
	// Establecer los pins de salida de los relés
	pinMode(Out_1, OUTPUT);
	pinMode(Out_2, OUTPUT);
	pinMode(Out_3, OUTPUT);
	pinMode(Out_4, OUTPUT);
	
	// Establecer los pins de entradas digitales optoacopladas
	pinMode(In_1, INPUT);
	pinMode(In_2, INPUT);
	pinMode(In_3, INPUT);
	pinMode(In_4, INPUT);
	
	// Preparar las variables
	uPLC.init(); // Iniciar funciones del tiempo
	Serial.begin(9600);    // Inicia el Puerto serie
}

/*  loop
*  Programa principal
*/
void loop() {
	getInputs();    // Leer las entradas digitales
	
	//-------- Termostato --------
	
	// A. Marcha paro del sistema
	k._1=(s._1|k._1)&!s._2;
	// B. Activar la entrada analógica 0, consigna
	aic.En(k._1);
	// C. Activar la entrada analógica 1, temperatura
	ait.En(k._1);
	// D. Control paro del calefactor
	if(ait.Out_e()>aic.Out_e()+HTRS)
		m1._1=false;	// Parar el calefactor
	// E. Control marcha del calefactor
	if(ait.Out_e()<aic.Out_e()-HTRS)
		m1._1=true;	// Marcha del calefactor
	// F. Activar la resistencia calefactora
	k._2=k._1&m1._1;

	// DEBUG
	//Serial.println(ait.Out_e());
	
	//------------------------
	
	setOutputs();   // Activar las salidas
	delay(1);				// CicloScan + 1ms, retardo para anti-rebotes
}

/*  GetInputs
*  Lee el estado de la entrada indicada en el parámetro y lo asigna invertido a las variables de trabajo
*/
void getInputs(void){
	s._1=!digitalRead(In_1);
	s._2=!digitalRead(In_2);
	s._3=!digitalRead(In_3);
	s._4=!digitalRead(In_4);
}

/*  setOutputs
*  Asigna el estado de las variables de trabajo a las salidas digitales
*/
void setOutputs(void){
	digitalWrite(Out_1, k._1);
	digitalWrite(Out_2, k._2);
	digitalWrite(Out_3, k._3);
	digitalWrite(Out_4, k._4);
}

 

Loading

copyright © 2007-2024  www.alciro.org  All rights reserved.         
Share |