使用Arduino连接LDR传感器实现液晶屏的亮度控制

本文将介绍如何使用Arduino和LDR传感器实现LCD液晶屏亮度的自动调节。这是一个简单的Arduino项目,项目主要由三大部分组成:传感器,Arduino控制板和LCD模块。基本原理是:Arduino通过LDR传感器读取环境光强度,并将室内温度和湿度显示在LCD上,同时在光线不足时实现液晶屏幕亮度的自动调整。

智能亮度控制电路图

通过Arduino和LDR传感器实现LCD亮度控制电路图

LDR和DHT11(传感器部分)

为了能够检测到光强度,这里选用了LDR光强度传感器。LDR(光敏电阻)是一种特殊的电阻,当检测到有高强度的光照时,它呈低阻状态;反之,它呈现高阻状态。扩展阅读: Arduino的光强度检测 。LDR的电阻值与它探测到的光强度成反比,所以当环境中有足够的光线时,LDR的电阻值就会很低,经过LDR的电压降也就很低。本项目中,我们将通过LDR降低的电压作为输入,输入到arduino板的模拟输入针脚 A4。

项目中的温度和湿度是通过DHT-11模块获取的。DHT11是一个常见的、低成本的数字温湿度传感器。扩展阅读: 如何基于Arduino制作DHT22控制的风扇。DHT11内置了电容式湿度传感器和热敏电阻来测量周围的空气,并通过 data 引脚上发出数字信号。Arduino为它提供了一个专用库,这使我们从DHT11模块获取数据变得相对容易。

Arduino UNO(主控部分)

Arduino UNO是Arduino家族中非常常见的产品,本项目中它将作为主控板,UNO 包含了电源,USB接口,以及Atmel芯片。采用Arduino作为主控,简化了建立控制系统的过程,Arduino提供了完整的单片机,我们只需要编程上传并连接功能模块即可,而不需要去完成复杂的PCB设计。本项目中,arduino主控板是通过读取连接到模拟输入A4的LDR传感器和连接到第6个数字输入针的DHT11模块的数据来完成控制的。Arduino模拟输入的电压范围是0~5V,这个模拟范围值,可通过 analogRead () 命令转换为 0-1023 的数字值。

LCD Module (显示部分)

本项目使用的是LCD 1602 液晶屏模块,关于该模块的接口定义可查阅: 1602 LCD液晶屏接口定义

通过Arduino和LDR传感器实现LCD亮度控制

程序代码部分

#include <dht.h>
#include <LiquidCrystal.h>
#define DHT11_PIN 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
dht DHT;

int LDR_pin=A1;
int back_light=10;
int led=9;
int LDR_out;
int pwm_back_light;
int pwm_led;
int humidity;
int temperature;


void setup() 
{
 pinMode(LDR_pin,INPUT);
 pinMode(back_light,OUTPUT);
 pinMode(led,OUTPUT);
 lcd.begin(16,2);
 Serial.begin(9600);
}

void loop()
{
// READ DATA
 int chk = DHT.read11(DHT11_PIN);
 
 // DISPLAY DATA TO LCD
 humidity=(DHT.humidity);
 temperature=(DHT.temperature);
 lcd.setCursor(0,0);
 lcd.print("Humidity=");
 lcd.print(humidity);
 lcd.print("%");
 lcd.setCursor(0,1);
 lcd.print("Temperature=");
 lcd.print(temperature);
 lcd.print((char)223);
 lcd.print("C");

LDR_out=analogRead(LDR_pin);
 pwm_led=LDR_out/4;
 pwm_back_light=255-(LDR_out/4);
 
 Serial.println(pwm_back_light);
 analogWrite(back_light,pwm_back_light);
 analogWrite(led,pwm_led);
 delay(1000);
}

在程序中,首先我们配置了arduino uno的A4 针作为输入针,读取LDR传感器输出。在“setup”函数中,“Serial.begin(9600);”命令将打开Arduino和串口监视器之间的通信。在“ loop”函数中,我们将从传感器模拟针 A4读取数据,并将这些数据存储在“ldr_out”变量中,然后将这些值映射到0-255的范围。然后利用这个映射值在arduino的第10引脚(连接LCD模块led+的引脚)上生成一个pwm信号(脉冲宽度调制)输出。从而实现LCD的背光亮度就可以随周围的光强度变化而变化了。