基于Arduino之智能小夜灯项目
一、功能介绍
- 智能台灯亮度调节:我们设计的台灯支持通过电脑串口输入来精确调整亮度等级,范围覆盖从0到9的十个不同亮度级别。为了更直观地了解当前亮度,特别加入了一位数码管来实时显示当前的亮度数值。
- 智能感应小夜灯:借助HC-SR501人体红外感应模块,台灯能够智能感应人体活动。当有人进入感应范围时,台灯自动亮起;人离开后,台灯则自动熄灭,为用户营造舒适的夜晚环境。
- 光感自动亮度调节:台灯内置光敏电阻,能够实时检测室内光线亮度。根据光线变化,台灯将自动调整LED灯的亮度,为用户营造最适宜的照明环境。用户可根据个人喜好和实际需求,自行调整光敏电阻的灵敏度。
- 智能混合调节模式:在光感自动亮度调节的基础上,我们加入了人体红外感应模块,实现更为智能的灯光控制。当室内光线低于设定阈值时,台灯将自动进入亮度调节模式;一旦有人触发红外感应模块,台灯将立即切换至全亮状态,确保用户获得足够的照明。
- 蓝牙智能控制:为了提供更为便捷的操作体验,我们特别加入了HC-06蓝牙模块。用户可通过蓝牙连接,利用手机或其他智能设备远程掌控台灯的各项功能,实现更加个性化的照明体验。
二、实物图
三、设置代码
1.开头程序:
#include<SoftwareSerial.h>//定义库函数
const int Seg_a=6;//定义6脚
const int Seg_b=7;
const int Seg_c=8;
const int Seg_d=11;
const int Seg_e=12;
const int Seg_f=A5;
const int Seg_g=A2;
const int Seg_dp=A3;
unsigned char Seg_num[10][8]={
{1,1,1,1,1,1,0,0},//0
{0,1,1,0,0,0,0,0},//1
{1,1,0,1,1,0,1,0},//2
{1,1,1,1,0,0,1,0},//3
{0,1,1,0,0,1,1,0},//4
{1,0,1,1,0,1,1,0},//5
{1,0,1,1,1,1,1,0},//6
{1,1,1,0,0,0,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0},//9
};//对一位数码管定义
int LED = 3;//定义3引脚
int LED2 = 13;
int tx = 9;
int rx = 10;
int button1 = 4;
int rotry = A0;//定义A0引脚
int idr = A1;//定义光敏电阻
int hw = 2;//定义红外
SoftwareSerial BTserial(rx,tx);//设置串口输入输出引脚
bool pd = 0;
int dataa;
int light = 0;
2.开头setup程序:
void setup() {
Serial.begin(9600);
pinMode(Seg_a,OUTPUT);//设置口打开,输出
pinMode(Seg_b,OUTPUT);
pinMode(Seg_c,OUTPUT);
pinMode(Seg_d,OUTPUT);
pinMode(Seg_e,OUTPUT);
pinMode(Seg_f,OUTPUT);
pinMode(Seg_g,OUTPUT);
pinMode(Seg_dp,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(tx,OUTPUT);
pinMode(rx,INPUT);//设置输入
pinMode(LED2,OUTPUT);
pinMode(button1,INPUT);
pinMode(hw,INPUT);
BTserial.println(“hc_06 is started”);
BTserial.begin(9600);//蓝牙串口设置
digitalWrite(LED,LOW);//灯灭
}
3.loop 循环程序(智能台灯亮度调节):
void loop()
{
bool buttonstate;
buttonstate=digitalRead(button1);//按钮控制开关
if(buttonstate==HIGH)
{
delay(200);
pd=!pd;
}
if(pd==1)
{
char mode;
mode= BTserial.read();
digitalWrite(LED2,HIGH);
switch(mode)
{
case’A’:xiaotaideng();break;//小台灯
case’B’:hongwaideng();break;//小夜灯
case’C’:shineiguangxian();break;//光敏电阻控制
case’D’:shineiguangxianPLUS();break;//光敏电阻控制加红外扫描
}
}
else
{
digitalWrite(LED2,LOW);
}
}
4.小夜灯功能部分(智能感应小夜灯):
void hongwaideng()
{byte s=1;
while(s==1)
{
int val = digitalRead(hw);//扫描红外,进行检测
Serial.println(val);
if(val==1)//是否输入了一
{
for(byte i=0;i<255;i++) { analogWrite(LED,i); delay(2); } for(byte i=255;i>=0;i–)//从255到0
{
analogWrite(LED,i);
delay(2);
}
}
else
{
digitalWrite(LED,LOW);
}
if(BTserial.available()>0)
s=0;
}
}
5.台灯功能部分(蓝牙智能控制):
void xiaotaideng()
{
byte s=1;
while(s==1)
{
while(Serial.available()>1)//判断是否有输入
{
byte data =Serial.parseInt();
digitalWrite(Seg_a,Seg_num[data][0]);//写入亮或灭
digitalWrite(Seg_b,Seg_num[data][1]);
digitalWrite(Seg_c,Seg_num[data][2]);
digitalWrite(Seg_d,Seg_num[data][3]);
digitalWrite(Seg_e,Seg_num[data][4]);
digitalWrite(Seg_f,Seg_num[data][5]);
digitalWrite(Seg_g,Seg_num[data][6]);
digitalWrite(Seg_dp,Seg_num[data][7]);
delay(20);
light=data*150;
analogWrite(LED,light);
BTserial.println(data);//蓝牙输入值
int lednumber = analogRead(LED);
BTserial.println(lednumber);
delay(150);//延迟150ms
if(BTserial.available()>0)
s=0;
}
}
}
6.光敏电阻功能(光感自动亮度调节):
void shineiguangxian()
{byte s=1;
while(s==1)
{
int findlight = analogRead(idr);//读取光敏电阻值
delay(800);
int data=findlight*20;
Serial.println(data);//串口输出data值
analogWrite(LED,data);//写入data值
if(BTserial.available()>0)
s=0;
}
}
7.光敏电阻+人体感应部分(智能混合调节模式)
void shineiguangxianPLUS()
{
byte s=1;
while(s==1)
{
int findlight = analogRead(idr);
Serial.println(findlight);
delay(500);
if(findlight>500)//如果阻值超过阈值:500
{
analogWrite(LED,findlight);//亮灯
if(digitalRead(hw))//读取红外值
{
digitalWrite(LED,HIGH);
}
}
else//若无人体感应
{
digitalWrite(LED,LOW);//关灯
}
}
if(BTserial.available()>0)
s=0;
}