KY-025

Esta placa está basada en un sensor magnético que nos dará lecturas analógica y digital.

Tendríamos a grandes rasgos una placa que:
- Alimentación de +5V
- Salida analógica de nivel magnético
- Salida digital de superación de nivel
- Ajuste de sensibilidad del sensor

CARACTERISTICAS

Las características principales de esta placa son:
- Se alimenta con la misma tensión que el Arduino al que será conectado. En nuestro caso al ser una placa Arduino Mega, esta se alimenta a 5V.
- La salida analógoca dará un nivel de 0V ó +5V dependiendo del nivel magnético detectado. En ausencia de magnetismo dará una señal medida de +5V. Tener en cuenta que la salida solo tendrá dos niveles "analógicos", alto (1024) y bajo (0).
- Con el potenciómetro multivuelta incluido en la placa podremos variar la sensibilidad de la lectura y así tener más rango de medida.
- La salida digital cambiará de estado cuando se detecta cualquier campo magnético.
- Tanto la salida analógica como la digital irán a la par.

PINEADO

El pineado de esta placa es:

1 : Este pin es la salida analógica del sensor. Dará 0V ó +5V. +5V en reposo.

2 : Este pin es la entrada negativa que alimenta la placa. Tiene que estar a GND

3 : Este pin es la entrada positiva que alimenta la placa. Tiene que estar a +5V

4 : Este pin es la salida digital. A nivel bajo en reposo. Nivel alto cuando detecte campo magnético.
















LED's INDICADORES

L1 : Este led se enciende con la alimentación de la placa y nos indica su presencia.

L2 : Este led se enciende junto la salida digital del sensor.

PROBEMOS EL SENSOR KY-025

Vamos a montar en una placa protoboard el sensor KY-025 y conectarlo a un Arduino MEGA. Los resultados de las lecturas del sensor, tanto la analógica como la digital se mandarán al puerto serie de la placa MEGA y serán mostrados en el IDE del ordenador, si esta enchufado. Ademas se mostrarán en un display lcd de 4 filas y 20 columnas modelo 2004.

NECESITAREMOS

Placa sensora KY-025

Placa protoboard grande

Arduino MEGA 2560

Diodo LED rojo y una resistencia que calcularemos de 220Ω y 1/4W

Display LCD modelo 2004 retroiluminado

Potenciómetro de 10KΩ para regular el contraste del display LCD

Imán de neodimio o similar

Cableado macho-macho o hilo rígido que entre en la protoboard

Soporte AFTP para Arduino MEGA y protoboard grande

Cable USB corto de USB tipo A a USB tipo B

ESQUEMA

En es esquema podemos ver:

- La placa Arduino MEGA se encarga de alimentar la protoboard
- La placa sensora KY-025 está conectada en la protoboard para coger alimentación de +5V y GND, además a una entradas analógica y una digital del Arduino MEGA.
- El led D1 y la resistencia R1 están conectados a la alimentación de +5V para indicarnos cuando tiene alimentación la protoboard
- El display LCD 2004 lo hemos conectado de manera tradicional (LCD_rs = 18, LCD_en = 19, LCD_d4 = 22, LCD_d5 = 23, LCD_d6 = 24, LCD_d7 = 25). Para detalles más avanzados del LCD puedes consultar Pruebas display's LCD AFPT
- La alimentación de todo el sistema se realiza a través del puerto USB

Para calcular la resistencia R1 del LED, solo tenemos que ver el voltaje que va a caer en la resistencia y dividirlo entre la intensidad que queremos que pase por el LED.
La tensión que tiene la resistencia sería el voltaje total menos el voltaje que se queda el LED rojo (aprox. 1,5V). Esto nos deja 5V-1,5V = 3,5V caen en la resistencia.
Vamos a fijar una intensidad por el LED de 15mA (suficientes para que se encienda a buen brillo un LED rojo). Tendriamos entonces una resistencia de 3,5V/0,015A = 233,33Ω
El valor mas cercano al calculado es de 220Ω (Rojo-Rojo-Marrón). Las resistencias comunes de 1/4W deberían servir, ya que la potencia disipada por nuestra resistencia será de 3,5Vx0,015A = 0,05W, valor muy por debajo de los 0,25W máximos que es capaz la resistencia de disipar.


Vamos a ver algunas imágenes mas de cerca del montaje

Detalle de la conexión de la placa sensora

Detalle de la conexión de la placa sensora

Detalle de la conexión del display y el potenciómetro

Detalle de la conexión del display y el potenciómetro

Detalle general de la conexión de la placa Arduino MEGA

Detalle de la conexión del display y el potenciómetro

Detalle general del montaje

PROGRAMACIÓN

¿Qué vamos a programar?, una lectura continua del pin analógico 1 (campo magnético) y del pin 2 digital (detección de campo magnético). Las lecturas se conformarán adecuadamente y se mandarán al puerto serie para ser mostradas en el ordendor (monitor serie y plotter) y al display que gestiona el arduino para mostralo.

A continuación tenemos el código fuente del Sketch terminado para consultarlo. Se puede escribir copiándolo o descargarlo desde aquí

CÓDIGO ARDUINO
/*
 * AFPT - Arduino Fácil Para Todos
 * 
 * Lectura del sensor KY-025 y presentación de los resultados en un Display 2004
 *
 * Este Sketch es una copia del KY-024, ya que este tipo de sensores comparten
 * el mismo pineado
 * 
 * Modulo_KY-025.ino
 * 
 * www.fantasystudios.es/arduino
 * 
 * Creado el 7 de Marzo de 2023
 * Por Manuel Peláez
 * 
 */


// Librerias necesarias
#include <LiquidCrystal.h>  //librería para manejar el display 2004

//Definimos las I/O del display y lo inicializamos como "lcd"
const int LCD_rs = 18, LCD_en = 19, LCD_d4 = 22, LCD_d5 = 23, LCD_d6 = 24, LCD_d7 = 25;
LiquidCrystal lcd(LCD_rs, LCD_en, LCD_d4, LCD_d5, LCD_d6, LCD_d7);

//Definimos pines I/O
int pin_sensor_analogico = 0;                 //pin de entrada analógico del sensor
int pin_sensor_digital = 2;                   //pin de entrada digital del sensor



//Variables
int valor_sensor_analogico = 0;               //variable para almacenar el valor analogico leido
bool valor_sensor_digital = false;            //variable para almacenar el valor digital leido

char VAL_sensor_analogico[5];                 //variable que almacena el valor corregido del eje X

String VAL_sensor_digital;                    //variable tipo string para almacenar SI o NO



void setup() {
  //Configuramos el puerto serie del Arduino Mega
  Serial.begin(9600);                         //Iniciamos la transmisión al puerto serie a 9600bps

  //Configuramos el lcd_2 (20x4)
  lcd.begin(20, 4);                           //informamos del tamaño del lcd (20 columnas y 4 filas)
  lcd.print("   ARDUINO  FACIL   ");          //mostramos un mensaje desde la primera columna, primera fila
  lcd.setCursor(0, 1);                        //movemos el cursor a 1ª columna y 2ª fila (recordar empezamos en 0)
  lcd.print("     PARA TODOS     ");          //mostramos un mensaje en esa posición
  lcd.setCursor(0, 2);                        //movemos el cursor a 1ª columna y 3ª fila
  lcd.print(" MONTAJE DE PRUEBA  ");          //mostramos un mensaje en esa posición
  lcd.setCursor(0, 3);                        //movemos el cursor a 1ª columna y 4ª fila
  lcd.print("       KY-025       ");          //mostramos un mensaje en esa posición

  Serial.println ("Arduino Fácil Para Todos");        //mostramos un mensaje en el puerto serie
  Serial.println ("Test KY-025 - Sensor magnético");  //mostramos un mensaje en el puerto serie

  delay(3000);                                //pausamos 3 segundos para ver el mensaje en el display
  lcd.clear();                                //borrarmos el lcd completo

  //Vamos a mostrar los mensajes fijos
  lcd.setCursor(0, 0);                        //movemos el cursor a 1ª columna y 1ª fila
  lcd.print("AFPT");                          //mostramos un mensaje en esa posición
  lcd.setCursor(0, 3);                        //movemos el cursor a 4ª columna y 1ª fila
  lcd.print("KY-025");                        //mostramos un mensaje en esa posición

  lcd.setCursor(9, 0);                        //movemos el cursor a 1ª columna y 12ª fila
  lcd.print("SENSOR");                        //mostramos un mensaje en esa posición
  lcd.setCursor(11, 1);                       //movemos el cursor a 2ª columna y 14ª fila
  lcd.print("ANA=");                          //mostramos un mensaje en esa posición
  lcd.setCursor(11, 2);                       //movemos el cursor a 4ª columna y 12ª fila
  lcd.print("DIG=");                          //mostramos un mensaje en esa posición

}


void loop() {
  sprintf(VAL_sensor_analogico,"%04d",valor_sensor_analogico);  //convierte Valor_X a 4 digital siempre

  //Asignamos SI o NO al string dependiendo del valor leido del pulsador
  if (valor_sensor_digital == HIGH) {
    VAL_sensor_digital="SI";
  }
  else {
    VAL_sensor_digital="NO";
  }

  //enviamos los valores actuales al puerto serie
  Serial.print("Analógico = ");
  Serial.print(VAL_sensor_analogico);
  Serial.print("    Digital = ");
  Serial.println(VAL_sensor_digital);

  //enviamos los valores actuales al display
  lcd.setCursor(15, 1);
  lcd.print(VAL_sensor_analogico);
  lcd.setCursor(15, 2);
  lcd.print(VAL_sensor_digital);


  //leemos los siguientes valores del sensor
  valor_sensor_analogico = analogRead (pin_sensor_analogico);   //leemos el valor del sensor magnético
  valor_sensor_digital = digitalRead (pin_sensor_digital);      //leemos el valor digital del sensor

  //delay para estabilizar el skecth
  delay (1);

}

CÓDIGO ARDUINO

A continuación tenemos un video con todo el proceso completo.