Un sensor magnético, un amplificador operacional y la que se lió…

Sensor magnético y amplificador operacional¡Bueno que ya estoy de vuelta! Voy a seguir contándote eso que tú y yo dejamos a medias. Acabamos con un amplificador operacional utilizado como comparador al que habíamos conectado un sensor magnético.

Vamos a ponerle nombre y cara a eso que te conté, que dejar a medias a las personas es regular-bajo. Para ello necesitarás un led, resistencias, un potenciómetro, el amplificador operacional LM358N, un sensor magnético, la protoboard, cables y ganas..muchas ganas.

sensor Hall, led, potenciómetro, cables, LM358N, Arduino y Protoboard

Empezamos con el sensor magnético

Teníamos un sensor magnético, por ejemplo si yo le pusiese nombre te diría que se llama A1301. Es un sensor de Efecto Hall. Tiene tres patas. Cómo ya dominas los datasheet, verás en la página siete (siendo mi paquete el UA) que en la primera pata conectaré 5 Voltios, en la segunda GND y en la tercera obtendré el voltaje de salida que ofrece el sensor. Ese voltaje es el que me dice si hay un imán cerca o no.

Pero, ¿Cómo coño sabes cuál es la primera pata? Tranquilo que la primera vez yo estuve dándole vueltas hasta que me fijé un poco. La cosa está que en esa misma página del datasheet puedes ver el orden de las patas. Y no me refiero a los números que se incluyen sino al dibujo en sí. Justo la vista muestra como tres rectángulos. Eso es porque el componente tienen una parte plana y otra con dos pequeñas pendientes. Esta es la parte delantera.

A1301 UA Vista frontal

Ahora, hay dos maneras de ver cómo funciona. O leyéndote la hoja de especificaciones o echándole morro. Con lo que te acabo de explicar debería de ser fácil probar el componente, ¿no? Un pin a 5 Voltios, otro a GND y otro a un pin de Arduino que permita leer valores analógicos. Digamos que el código sería algo así:

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.println(analogRead(5));
delay(1000);
}

Y, suponiendo que conectas al pin analógico A5, te debería quedar algo tal que así:

A1301 conectado a Arduino

Ahora abres la comunicación serie y…y no entiendes nada. Claro, lo que te sucede es que te salen números que rondan el valor de 400 y no sabes por qué. ¿Te acuerdas que una vez te dije que los pines analógicos iban de 0 a 1023? Pues eso es lo que pasa, te está apareciendo el número, el cuál puedes transformar a Voltios. Al final es una regla de 3 como esta:

1023 - 5 Voltios analogRead - x Voltios

De esta manera nos aparece que la transformación que hay que hacer es:

x = 5*analogRead/1023

Ahora falta otro punto a tener en cuenta: si pegas esto directamente en el println no te van a salir decimales. Estás utilizando int, que como ya sabes son números enteros. Para los decimales necesitas float. Así que te dejo el código como quedaría:

float valor = 0;

void setup() {
Serial.begin(9600);
}

void loop() {
valor = analogRead(5)*5;
valor = valor/1023;
Serial.println(valor);
delay(1000);
}

Si te fijas, no hago todas las operaciones de una. Si las haces todas de una te saldrán los números enteros con una coma y dos ceros. Vamos que no te saldrá bien.

Con los float distribuye las operaciones. Ya sabes que se ha hecho un poco de magia para que se puedan utilizar los float en Arduino, pero hasta la magia tiene sus límites.

Nada, si juegas un poco con el sensor verás que está normalmente a una tensión de 2.37 Voltios pero que va cambiando al acercarle un imán (el de la cocina vale, no te me agobies). Depende del lado por el que acerques el imán al sensor y el lado del imán que utilices, la tensión puede subir o bajar. De hecho le cuesta menos subir que bajar. Supongo que vendrá el porqué en las especificaciones, ciclos de histéresis o movidas así pero no tenemos tiempo que aún te queda trabajo aquí.

Así que céntrate, tenemos un sensor que nos da normalmente la mitad de la tensión que le hemos metido y que al acercarle un imán ésta baja o sube. Vale, ya te dije en el anterior post que los amplificadores operacionales nos iban a ayudar a comparar. entonces le vas a poner una tensión de referencia menor a 2.5 Voltios y así cuando se acerque el imán y baje, apagaremos un led.

¿Y cómo creas la tensión de referencia?

Parece complicado pero respira y al lío. Lo que hay que hacer es marcar un valor de referencia. Esto se hace poniendo una tensión. Lo que hacemos para eso es utilizar una resistencia. ¡Pero si ya sabes calcular tensiones mejor que yo! El circuito sería más o menos éste:

Resistencias para amplificador operacional

La razón de poner dos resistencias iguales es por comodidad. La razón de que sean dos resistencias porque lo necesitas. Imagínate que conectas el operacional después de la primera resistencia y luego no pones nada, solo tierra. Algo más o menos como esto:

Ejemplo de resistencia y amplificador operacional

¿Lo ves ya? Venga bribón, está claro que la tensión que le llega ahora al operacional es siempre 0 Voltios (acuérdate de la regla de los nudos, todo lo que llega directamente a ese nudo tiene la misma tensión). ¡Si es que lo has conectado directamente a tierra! Digamos que la segunda resistencia lo que hacía era hacer de tapón. Tu pillabas la tensión que te interesaba y la segunda resistencia se apañaba de hacer desaparecer esa tensión sobrante. En este segundo caso la caída de tensión se da todo en la única resistencia que hay…y ahí estamos realmente jodidos.

Así que, si quieres comparar con algo que no sea 0 Voltios, te va a tocar utilizar dos resistencias. Ahora vas a calcular qué resistencias vas a poner para tener la tensión que quieres. La formula sería:

 5 Voltios = R*I +R*I  5 Voltios = 2*R*I

Ahora, sabiendo que la intensidad que da Arduino son 20mA puedes calcular la resistencia adecuada bla bla bla..seamos prácticos. Me parece que esto te va a resultar más sencillo de implementar. Voy a elegir una R que me dé la gana. Voy a pillar 1K, que tengo un par. Y calculo:

 5 Voltios = 2*1K*I I = 5 Voltios / 2 K  I = 2.5mA

Fácil, he puesto que 5 Voltios son dos resistencias de 1K multiplicados por la corriente que por ellas pasa. Si sigues el ‘camino‘ que he seguido después de las dos reistencias ya va GND que es 0 Voltios así que por eso no sumo esa tensión. Ahora con esa intensidad, voy a hacer un camino distinto: iré desde 5 Voltios a la tensión de entrada del operacional.

5 Voltios = R*I + V_{entrada} 5 Voltios = 1K*2.5mA + V_{entrada} V_{entrada}=2.5 Voltios

¡Ouch! ¡Shit happens! No es eso lo que quería. Quiero algo cerca de los 2 Voltios como mínimo 🙁 Pues nada, lo intento de nuevo desde el inicio con una resistencia un poco más grande, 2k2:

 5 Voltios = 2*R*I  5 Voltios = 2*2K2*I I = 5 Voltios / (2*2K2)  I = 1.13mA 5 Voltios = R*I + V_{entrada} 5 Voltios = 2K2*1.13mA + V_{entrada} V_{entrada}=2.52 Voltios

¿Ya ves lo que pasa o pruebo con una resistencia de 10K para que lo veas más claro? Al ser simétrico siempre sale la mitad. En las dos resistencias cae la misma tensión entonces se reparten por igual porque son iguales. De hecho en el segundo caso lo que me han traicionado son los decimales, sino sería 2.5 Voltios justos 😉

Así que ahora lo que tienes es que cambiar la resistencia y que sean distintas. Haces el cálculo y buscas que te dé 2 Voltios o similar. Otra opción que voy a utilizar yo es utilizar un potenciómetro. Esta estructura de resistencias iguales tiene sentido al poner un potenciómetro. De esta manera cae la misma tensión en cada una de ellas pero en el medio, al añadir el potenciómetro, variará según el valor que le hayamos dado al potenciómetro en ese momento. Es una manera de poder regular el voltaje de referencia de manera manual.

Utilizando el potenciómetro para modificar el voltaje de referencia

Al añadir el potenciómetro el circuito queda así:

Ejemplo de potenciómetro en amplificador operacional

Así que vuelvo a calcular la intensidad. Tomo el camino que va desde 5 Voltios a 0 Voltios, Cómo antes.

5 Voltios = R*I + R_pot *I + R*I 5 Voltios = 2*R*I + R_{pot} *I

Digamos que voy a utilizar las dos resistencias de 4K7 y el potenciómetro de 10K así que lo que pasaría sería que:

5 Voltios = (2*R + R_{pot} )*I I = 5 Voltios / (2*4K7+10K)  I = 0.25mA

Ahora calculo los casos límites. Que pasaría si el potenciómetro estuviese al tope y marcase 0 Ohms o si estuviese a tope hacia el otro lado y marcase 10K. Así sé entre que valores juego. Primero calculo para un potenciómetro con una resistencia de 0 Ohms.

5 Voltios = 4K7 * 0.25mA +V_{entrada}  V_{entrada} = 3.82V

Ahora podría hacer lo mismo. Tensión de 4k7 y la de 2k2 que es el potenciómetro, pero para ser más rápido cojo el camino que va desde el voltaje de entrada a GND, así calculo menos:

V_{entrada2} = 4K7 * 0.25mA + 0 Voltios V_{entrada2} = 1.175 Voltios

Vale, ahora sé que el voltaje va de 3.82V a 1.175V, lo cual es interesante para nuestros planes.. Así que lo elegimos. Fíjate que las resistencias lo que hacen es centrarme la tensión, si quitara la resistencia de bajo bajaría la tensión al inicio y luego regularía lo que me quedara entre ese valor y cero Voltios. Con un potenciómetro menos tocho tendría problemas…con este podría pasar pero estamos para hacer las cosas bien,¿no?

Por otra parte, el potenciómetro lo que hace es darme rango. Si pillaras un potenciómetro de 1K, tendrías más precisión ya que estarías muy focalizado en un valor entre 2.7V y 2.2V sí, lo he calculado..), y no como el monstruo que he creado yo, que va desde 1V a 3V, poca precisión voy a tener, pero ya sabes que no me importa demasiado para esto.

Conectando todos los elementos en la protoboard

Bueno, ahora te toca ponerte las pilas. Hay que conectar el  sensor a la protoboard y de ahí conectar la primera pata del sensor a 5 Voltios, la segunda a GND y la tercera a la entrada no inversora del operacional. Y luego conectamos 5 Voltios a una resistencia de 4K7, de ahí al potenciómetro y de ahí a la otra resistencia de 4K7, que se conectará a GND. En la pata del medio del potenciómetro es donde conectaremos un cable que llevará a la entrada inversora del amplificador operacional.

Cómo ya te he dicho por el operacional van a salir o 5 Voltios o 0, así que lo que haremos será conectar un led (con su respectiva resistencia para no quemarlo) y así no programas nada, que ya estarás deseando que acabe el post para tirarte por el balcón.

Circuito con amplificador operacional y sensor hall

Vista del circuito con amplificador operacional y sensor hall

Como ves, es tal cuál lo que te he dicho. Para la resistencia del led soy un animal y he puesto una de 10K que tenía en la mesa, ya calculamos que con una de 270 Ohms bastaba. Y nada, en el pin 1 del integrado (acuérdate que la parte superior es la que tiene la muesca en este integrado) he conectado la resistencia que va unida al led y que luego va a GND.

En el pin 2 he conectado lo que viene de la pata del medio del potenciómetro. Le he puesto 8K de manera que al acercarle el imán la tensión es menor y se apaga el led porque el comparador da 0 Voltios. En el caso de que pongas el potenciómetro a 2K por ejemplo la situación que se da es la contraria ya que la tensión más alta es la de referencia y se queda a cero, al poner el imán cerca puede no suceder nada. Gira el imán y verás cómo la tensión que da el sensor aumentará y el led se iluminará.

En el pin 3 va conectado un cable que viene de la tercera pata del sensor Hall o magnético. En el pin 4 GND y en el primero de la derecha (pin 5) 5 Voltios.

Ahora ya lo tienes todo, y simplemente es ir probando con el imán de la nevera a ver a qué conclusiones llegas.

Opt In Image

Por fin te dejo en paz…

Bueno, espero que aún sigas vivo y no hayas decidido cortarse las venas o similar. Al final lo que tienes que tener en cuenta es que , en los comparadores, la tensión mayor es la que manda. Si es mayor V_-, el voltaje se irá a cero y no se encenderá el led. Si la mayor es V_+ el voltaje irá a 5 Voltios y se encenderá. Ese es el juego en el que está el potenciómetro, según la tensión de referencia que pongas pasará una cosa o la inversa.

Espero que te resulte útil y ya sabes, ¡compárteme en las redes sociales que eso es bien!

[Total:4    Promedio:4.3/5]

Déjame un comentario que en el fondo soy buen chaval

  1. John

    Responder

    • Responder

  2. luis

    Responder

    • Responder

Deja un comentario