本文将介绍如何使用Arduino和LDR传感器实现LCD液晶屏亮度的自动调节。这是一个简单的Arduino项目,项目主要由三大部分组成:传感器,Arduino控制板和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液晶屏接口定义
程序代码部分
#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的背光亮度就可以随周围的光强度变化而变化了。