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"
LiquidCrystallcd(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.