medir-campos-magneticos-arduino-hall-49e

Medir campos magnéticos con Arduino y sensor Hall lineal 49E

¿Qué es un sensor Hall?

Un sensor Hall es un dispositivo que nos permite realizar mediciones de campo magnético.

Los sensores Hall son ampliamente utilizados. Por ejemplo, en la industria del automóvil se usan para funciones tan dispares como para el accionamiento de los cinturones de seguridad, o la medición de la posición del árbol de levas. También se usan para medir velocidades de fluidos, detección de metales, factores de inducción, entre otras muchas aplicaciones.

Una ventaja importante de los sensores Hall es que realizan la medición a distancia, sin necesidad de contacto físico. Aunque su alcance es limitado (típicamente pocos centímetros) esto supone que apenas presentan desgaste mecánico. Además son inmunes a ruidos y polvo. Esto los convierte en sensores fiables y duraderos.

En general, encontramos dos tipos de sensores Hall:

  • Analógicos. Generan una salida proporcional a la intensidad del campo magnético. Empleados para medir la intensidad de un campo magnético
  • Digitales. Proporcionan un valor Alto en presencia de campo magnético, y bajo en ausencia del mismo. Por tanto, son empleados para detectar la existencia de campos magnéticos. A su vez se dividen en,
  • Switch, se activan al acercar el polo, y se desactivan al retirar el polo
  • Latch, se activan al acercar un polo, y mantienen su valor hasta que se acerca un polo contrario

En esta entrada emplearemos un sensor Hall 49E, de tipo analógico. Podemos emplear este sensor para detectar la presencia de un objeto, al que previamente habremos colocado un pequeño imán, o para fabricar tacómetros (contadores de revoluciones) simplemente acoplando un pequeño imán de neodimio al eje.

Precio

Los sensores Hall 49E son realmente baratos. Podemos encontrar 10 dispositivos A49E por 0.90€ en vendedores internacionales en eBay o AliExpress.

arduino-sensor-hall-49e-componente

¿Cómo funciona un sensor Hall?

Su principio de funcionamiento es el efecto Hall, denominado así por su descubridor Edwin Herbery Hall, en 1849.

Al hacer circular una corriente eléctrica a lo largo de un semiconductor en presencia de un campo magnético, los electrones son desviados por efecto del campo magnético, dando lugar a una tensión perpendicular a la corriente y al campo magnético.

efecto-hall

Midiendo esta tensión originada por el efecto Hall podemos conseguir construir sensores y medidores de campos magnéticos.

La familia de sensores Hall 49E incorporan la electrónica necesaria para dar una respuesta de tensión lineal en el rango de -100 a 100 mT. Los circuitos están diseñados para minimizar el ruido de la señal, por lo que no es necesario filtrado externo.

arduino-sensor-hall-49e-funcionamiento

El rango operativo de temperaturas es de -40 a 85ºC, y tiene poca influencia en la medición. La sensibilidad típica a 25ºC es de 18 mV/mT

arduino-sensor-hall-49e-curva

Interpolando en la gráfica anterior obtenemos la siguiente expresión para la respuesta en tensión respecto al flujo magnético medido por el sensor Hall 49E,

O equivalentemente, invirtiendo la ecuación, llegamos a la ecuación necesaria para poder obtener la densidad de flujo magnético a partir de la respuesta del sensor,

Esquema de montaje

El esquema eléctrico que necesitamos es el siguiente.

arduino-sensor-hall-49e-esquema

Por lo que el esquema de conexión con Arduino quedaría así.

arduino-sensor-hall-49e-montaje

El esquema y valores de resistencias mostrador corresponden con el sensor 49E. Otros sensores hall requieren otros esquemas de montaje. Consultar su datasheet correspondiente si vuestro componente es distinto.

Ejemplo de código

Para poder calcular el campo magnético a partir de la medición, en primer lugar medimos el voltaje mediante una entrada analógica de Arduino. A continuación convertimos el voltaje en densidad de flujo magnético usando la fórmula que hemos interpolado anteriormente.

const int pinHall = A0;

void setup() {
  pinMode(pinHall, INPUT);
  Serial.begin(9600);
}

void loop() {

  //media de 10 medidas para filtrar ruido
  long measure = 0;
  for(int i = 0; i < 10; i++){
      int value = 
      measure += analogRead(pinHall);
  }
  measure /= 10;
  
  //calculo del voltaje en mV
  float outputV = measure * 5000.0 / 1023;
  Serial.print("Output Voltaje = ");
  Serial.print(outputV);
  Serial.print(" mV   ");
  
  //interpolacion a densidad de flujo magnético
  float magneticFlux =  outputV * 53.33 - 133.3;
  Serial.print("Magnetic Flux Density = ");
  Serial.print(magneticFlux);
  Serial.print(" mT");
  
  delay(2000);
}

Aprendemos a medir campos magnéticos con Arduino y el sensor Hall Lineal 49E

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full