fbpixel
Etiquetas: ,

Un sensor analógico envía un nivel de voltaje, normalmente entre 0 y 5V, que representa un valor físico. Esta tensión puede estar sujeta a ruidos de medición (interferencias electrónicas, interferencias electromagnéticas, precisión de la medición, etc.). En algunas aplicaciones, tendrá que determinar valores umbrales precisos para realizar sus tareas. Un método simple es establecer una histéresis de medición que le permitirá saltar entre diferentes mediciones a costa de la precisión.

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB A macho a B macho
  • Sensor de temperatura (por ejemplo)

Principio de funcionamiento

El principio de la histéresis es definir un comportamiento diferente según si el valor aumenta o disminuye. Demos un ejemplo práctico. Imaginemos que quieres controlar un relé según la temperatura medida, para hacer funcionar un ventilador, por ejemplo. Cuando la temperatura es de 40°C o más, el relé se cierra y cuando la temperatura es más baja, el relé se abre. Si, por alguna razón, la temperatura oscila entre 39,5 y 40°C, el relé se abrirá y cerrará cuando se pase el valor umbral.
La técnica ampliamente utilizada es establecer un umbral ALTO y uno BAJO para cerrar y abrir el relé. Especificaremos el algoritmo para cerrar el relé cuando la temperatura sea de 40 o más y para cerrar el relé cuando la temperatura sea inferior a 30°C. Este es el principio de histéresis.

hysteresis-onoff-principle Implementación de una histéresis de medición en Arduino

Código

Crearemos una función que leerá la entrada analógica y aplicará la histéresis.

//Parameters
const int aihPin  = A0;
const int aihMargin  = 2;
const int aihThresh  = 306;

//Variables
int aihVal  = 0;
bool aihHystOn  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init AnalogHyst
  pinMode(aihPin, INPUT);
}

void loop() {
  readAnalogHyst();
  hystThresh();
  delay(200);
}

void readAnalogHyst( ) { /* function readAnalogHyst */
  ////Test routine for AnalogHyst
  aihVal = analogRead(aihPin);
  Serial.print(F("aih val ")); Serial.println(aihVal);
}

void hystThresh( ) { /* function hystThresh */
  ////Perform hysteresis on sensor readings

  if (aihVal >= (aihThresh + aihMargin)) {
    aihHystOn = true;
  }
  if (aihVal <= (aihThresh - aihMargin)) {
    aihHystOn = false;
  }

  Serial.print(F("aih hist : ")); Serial.println(aihHystOn);
}




Resultado

En el monitor de serie, vemos que el estado cambia a 1 para un valor superior a 308 y cambia a 0 para un valor inferior a 304.

arduino-monitor-hysteresis-result Implementación de una histéresis de medición en Arduino

Aplicaciones

  • Gestion d’un relais avec un capteur de température

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código