KY-017

Esta placa sensora está basada en una pequeña ampolla de cristal donde una bola de mercurio se encarga de cerrar los contactos.

Tendríamos a grandes rasgos una placa que:
- Sensible a los movimientos y a las inclinaciones
- Diferentes posiciones de funcionamiento para detectar inclinación

CARACTERISTICAS

Las características principales de esta placa son:
- Ampolla sensora con cierre de contacto en la parte cercana a la placa
- El pin de salida estará a nivel alto hasta que la bola de mercurio baje al lado de la placa, pasando la salida a nivel bajo
- No requiere componentes externos
- Rango de alimentación entre 3,0V y 5,5V

PINEADO

El pineado de esta placa es:

1 : Este pin es la entrada negativa que alimenta la placa.

2 : Este pin es la entrada positiva que alimenta la placa. Tiene que estar entre +3,0V y +5V. Sirve de referencia a la salida cuando el sensor no está activado y para alimentar el led incluido en la placa.

3 : Este pin es la salida del sensor. Mantiene una salida a nivel alto mientras no este cerrado el contacto de la ampolla. En cuando el sensor se inclina y se cierra el contacto la señal de este pin pasa a nivel bajo.














LED's INDICADORES

Tenemos un led indicador conectado a una resistencia de 680Ω que se enciende cuando el sensor se activa.

PROBEMOS EL SENSOR KY-017

Vamos a montar en una placa protoboard el sensor KY-017 y conectarlo a un Arduino UNO.

NECESITAREMOS

Placa sensora KY-017

Placa protoboard pequeña

Arduino UNO R3

Display LCD 1602 con interface paralelo

Diodo LED verde de 3mm y una resistencia que calcularemos de 220Ω y 1/4W

Potenciómetro de 10KΩ

Cableado macho-macho y 3 macho-hembra para conectar el sensor

Soporte AFTP para Arduino UNO y protoboard pequeña

Cable USB corto de USB tipo A a USB tipo B

ESQUEMA

En el esquema podemos ver:

- La placa Arduino UNO se encarga de alimentar la protoboard
- La placa sensora KY-017 está conectada en la protoboard mediante unos alargadores para poder así moverla sin problemas y conectada a la alimentación de +5V
- 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 pin de la placa sensora de salida está conectado al pin 10 del Arduino UNO
- El potenciómetro lo ajustaremos a nuestro gusto, hasta que la imagen del display LCD sea correcta
- 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 LCD 1602

Detalle de la conexión de la placa Arduino UNO

Detalle de la conexión de la placa Arduino UNO

PROGRAMACIÓN

¿Qué vamos a programar?, una lectura continua del pin 10 (donde está conectada la salida de la placa sensora) para poder contar el número de veces que tenemos un nivel alto (la placa sensora nos indica inclinación). Tenemos que tener en cuenta que solo contaremos las variaciones de alto a bajo, porque si no corremos el riesgo de contar sin parar cuando el sensor esté a nivel bajo, indicando inclinación. Eso no es lo buscado, si no qué nos indique las inclinaciones que realiza el sensor. Para solucionarlo creamos una variable estado_anterior que nos almacena el estado anterior leido del sensor y solo contamos una inclinación cuando el estado actual es bajo (activado) y el anterior es alto (desactivado).

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-017 y presentación de resultados en un Display LCD 1602
 * 
 * Modulo_KY-017.ino
 * 
 * www.fantasystudios.es/arduino
 * 
 * Creado el 12 de Diciembre de 2020
 * Por Manuel Peláez
 * 
 */

 
// Librerías necesarias
#include <LiquidCrystal.h>                  //necesaria para el display LCD

//Definimos las I/O del display lcd
const int LCD_rs = 2, LCD_en = 3, LCD_d4 = 4, LCD_d5 = 5, LCD_d6 = 6, LCD_d7 = 7;

//El display 1602 (16x2) se llamará "lcd"
LiquidCrystal lcd(LCD_rs, LCD_en, LCD_d4, LCD_d5, LCD_d6, LCD_d7);

//Constantes
const int sensor_pin = 10;                  //pin por donde entra la señal del KY-017

//Variables del programa
unsigned long contador = 0;                 //variable para almacenar el número de activaciones
                                            //hasta 2^32 - 1 = 4.294.967.295 activaciones (4 bytes)
int estado_sensor = 0;                      //almacenaremos aquí el estado leido del sensor
int estado_anterior = LOW;                  //almacena si hemos activado el sensor para ver cambios


void setup() {
  //Configuramos el lcd
  lcd.begin(16, 2);                         //informamos del tamaño del display

  //Presentamos mensajes de bienvenida
  lcd.print(" ARDUINO  FACIL ");            //mostramos un mensaje de bienvenida
  lcd.setCursor(0,1);                       //movemos el cursor a 1ª columna y 2ª fila
  lcd.print("   PARA TODOS   ");            //mostramos un mensaje en esa posición

  delay(2000);                              //pausamos 2seg
  lcd.clear();                              //borramos el lcd entero

  //Presentamos mensajes informativos del montaje
  lcd.setCursor(0,0);                       //movemos el cursor a 1ª columna y 1ª fila
  lcd.print(" MONTAJE PRUEBA ");            //mostramos un mensaje de bienbenida
  lcd.setCursor(0,1);                       //movemos el cursor a 1ª columna y 2ª fila
  lcd.print(" SENSOR  KY-017 ");            //mostramos un mensaje en esa posición

  delay(2000);                              //pausamos 2seg
  lcd.clear();                              //borramos el lcd entero

 

  //Ponemos en la esquina superior derecha el modelo de la placa que estamos probando
  //Si no borramos o escribimos encima, se mantendrá visible siempre
  lcd.setCursor(10,0);                      //movemos el cursor a 11ª columna y 1ª fila
  lcd.print("KY-017");                      //mostramos el modelo del sensor

  //Ponemos en la esquina inferior izquierda el texto "inclinado" y se mantendrá siempre
  lcd.setCursor(0,1);                       //movemos el cursor a 1 columna y 2ª fila
  lcd.print("inclinado= ");                 //mostramos un mensaje en esa posición
  lcd.print(contador);                      //mostramos el valor del contador

  //Declaramos entradas y salidas del Arduino UNO
  pinMode(sensor_pin, INPUT);               //pin de entrada del sensor, por defecto el 10
  pinMode(LED_BUILTIN, OUTPUT);             //pin de salida al led de la placa UNO en el pin 13
}


void loop() {
  
  estado_sensor = digitalRead(sensor_pin);  //leemos el estado del sensor

  //Si el estado del sensor esta activado (bajo) y ademas en estado anterior era desactivado (bajo),
  //sumamos 1 a la variable contador y encendemos el led de la placa UNO
  if (estado_sensor == LOW) {               //comprobamos si el sensor esta activo
    if (estado_anterior == LOW) {           //comprobamos si el sensor estaba activo la última vez
      digitalWrite(LED_BUILTIN, HIGH);      //encendemos el led de la placa UNO
      contador++;                           //sumamos 1 al contador
      estado_anterior = HIGH;               //marcamos que el sensor esta activo

      lcd.setCursor(11,1);                  //movemos el cursor a 12ª columna y 2ª fila
      lcd.print(contador);                  //mostramos el valor del contador
    }
  }
  //Si el estado del sensor esta desactivado (alto), apagamos el led de la placa UNO y 
  //cambiamos el estado anterior a desactivado
  else {
    estado_anterior = LOW;                  //marcamos que el sensor esta desactivado
    digitalWrite(LED_BUILTIN, LOW);         //apagamos el led de la placa UNO
  }

  delay(1);                                 //delay para generar estabilidad en el Sketch
}

CÓDIGO ARDUINO

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