Un sensor magnético, un amplificador operacional y la que se lió…
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.
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.
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í:
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:
De esta manera nos aparece que la transformación que hay que hacer es:
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:
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:
¿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:
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:
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.
¡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:
¿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í:
Así que vuelvo a calcular la intensidad. Tomo el camino que va desde 5 Voltios a 0 Voltios, Cómo antes.
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:
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.
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:
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.
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.
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
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 , el voltaje se irá a cero y no se encenderá el led. Si la mayor es 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!