Las características principales de esta placa son:
- LDR con valores de resistencia aproximados de: 13KΩ con luz ambiental en una habitación y cerca de 100KΩ con oscuridad total
- Está montada con otra resistencia en modo divisor de tensión
- No requiere componentes externos
- Rango de alimentación amplio al ser solo dos resistencias
PINEADO
El pineado de esta placa es:
1 : Este pin es la entrada negativa que alimenta la placa. Va a uno de los pines de la LDR.
2 : Este pin es la entrada positiva que alimenta la placa. Va a uno de los pines de la resistencia SMD de 10KΩ.
3 : Este pin es la salida del sensor. Está unido a la LDR y la resistencia de 10KΩ y es la salida del divisor de tensión que generan las dos resistencias.
Hay que tener cuidado con este modelo, ya qué existen en el mercado otros con los pines 1 y 3 intercambiados. Nosotros en nuestra prueba tenemos una versión todavía peor, ya que está serigrafiada con la S en el lado izquierdo y el - en el derecho, pero el pineado es al contrario... Ojo con estas placas y sus construcciones.
LED's INDICADORES
Esta placa no tiene led indicadores.
PROBEMOS EL SENSOR KY-018
Vamos a montar en una placa protoboard el sensor KY-018 y conectarlo a un Arduino UNO.
NECESITAREMOS
Placa sensora KY-018
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 o cable para placas protoboard
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-018 está conectada directamente a la protoboard y así medir la luminosidad
- 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 analógico 0 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.
Como se verá en las siguientes imagenes,la placa sensora KY-018 que yo tengo está mal montada de fábrica. Por lo que pude observar el circuito impreso está al revés, por lo que la serigrafía no corresponde.
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
PROGRAMACIÓN
¿Qué vamos a programar?, una lectura continua del pin A0 (donde está conectada la salida de la placa sensora). La lectura se mandará al display LCD y se comprobará si su valor es inferior o igual a 400, y en ese caso encenderemos el led incluido en la placa UNO y que está conectado a la salida digital 13.
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-018 y presentación de resultados en un Display LCD 1602
*
* Modulo_KY-018.ino
*
* www.fantasystudios.es/arduino
*
* Creado el 13 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 = A0; //pin por donde entra la señal del KY-018
//Variables del programa
int lectura_sensor = 0; //almacenaremos aquí el estado leido del sensor
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-018 "); //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-018"); //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("lectura= "); //mostramos un mensaje en esa posición
//Declaramos entradas y salidas del Arduino UNO
pinMode(LED_BUILTIN, OUTPUT); //pin de salida al led de la placa UNO en el pin 13
}
void loop() {
lectura_sensor = analogRead(sensor_pin); //leemos el estado del sensor analógico
lcd.setCursor(9,1); //movemos el cursor a 10ª columna y 2ª fila
lcd.print(" "); //borramos las cuatro posiciones con la lectura anterior
lcd.setCursor(9,1); //movemos de nuevo el cursor a 10ª columna y 2ª fila
lcd.print(lectura_sensor); //mostramos el valor leido del sensor
//Si la lectura es menor o igual a 400 encendemos el led del arduino UNO pin 13, si no lo apagamos
if (lectura_sensor <= 400) {
digitalWrite (LED_BUILTIN, HIGH);
}
else {
digitalWrite (LED_BUILTIN, LOW);
}
delay(200); //delay que espera para realizar la siguiente medida
}
CÓDIGO ARDUINO
A continuación tenemos un video con todo el proceso completo.