您的当前位置:首页正文

四种LED灯实验汇总

来源:花图问答

本篇将介绍有关LED灯的四个不同类型的实验

实验一:闪烁的LED

实验材料:
  • Nano开发板
  • 配套USB数据线
  • 一个LED灯
  • 一个470Ω的电阻
  • 若干导线
电路连接图:
电路连接图

把LED和电阻插入面包板, LED灯的负极连接Nano板的GND引脚,LED的正极连入电阻的一端,电阻的另一端接入nano板的A5引脚。

为何本实验需要串联一个电阻?

我们所购买的LED灯最大电流只允许20毫安,能够承受的电压范围在2.0-2.2之间,当其电压超过其所承受范围时,LED灯通过的电流就会快速上升,很容易造成LED灯的损坏,因此需要串联进一个合适的分压电阻才能保证LED灯的正常工作,这样就可以保证即使供电电压出现小幅度的波动时,LED灯仍可以正常工作。

编写代码:

新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

int pin=A5;//LED的管脚

void setup(){
   pinMode(pin,OUTPUT);//设置管脚为输出模式
}
void loop() {
    digitalWrite(pin,1);//向管脚写入1,设置为高电平,则LED灯亮
}

连接开发板,设置好对应端口号和开发板类型,进行程序下载。


上传图
实验现象

LED灯亮起

再写个程序让它闪烁吧
int pin=A5;//连接LEDA5引脚

void setup(){
 pinMode(pin,OUTPUT);//设置管脚为输出模式
}
 
void loop(){
  digitalWrite(pin,HIGH);//将管脚设置为高电平,则LED灯亮
delay(1000);//等待1000毫秒
digitalWrite(pin,LOW);//将管脚设置为低电平,则LED灯灭
delay(1000);//等待1000毫秒
}

连接开发板,设置好对应端口号和开发板类型,进行程序下载。


上传图
实验现象

LED灯闪烁(亮一秒,暗一秒)

函数讲解

-delay函数:

  • 暂停程序指定为参数的时间量(以毫秒为单位)。(一秒钟内有1000毫秒)
  • 句法:delay(ms)
  • 参数:ms:暂停的毫秒数

实验二:按键控制LED灯

前面介绍了如何使LED闪烁,下面我们来看一下,通过检测按键状态来控制LED灯亮灭,把LED的亮灭变成人为可控制的。

实验材料:
  • Nano开发板
  • 配套USB数据线
  • 一个LED灯
  • 一个470Ω的电阻
    -2个按钮
  • 若干杜邦线
    实验中我们用到了轻触按键,常见的有2脚按键和4脚按键,其内部结构如下图所示:


    按钮图

当按下按键时,按键两端接通,当放开时,两端再次断开。

电路连接图:
电路连接图

LED与电阻的接法与实验一类似,将按钮左右两端连到A2与GND引脚上。

编写代码
/*
  * Digital_Button
  * 通过按键控制LED灯亮灭
  */
 
 int buttonPin = A2; // 按键的管脚定义
 int ledPin =  9;  // LED灯管脚定义
 
 int buttonState = 0; // 存储按键状态值
 
 void setup() {
   pinMode(ledPin, OUTPUT);  //设置LED管脚输出模式
   pinMode(buttonPin, INPUT_PULLUP); //设置按键管脚上拉输入模式
 }
void loop() {
 
   buttonState = digitalRead(buttonPin);// 检查按键是否被按下

  if (buttonState == HIGH) //如果按键按下,那buttonState应该为高电平
{     
    
    digitalWrite(ledPin, HIGH);  // 点亮LED
  } 
  else {
   
    digitalWrite(ledPin, LOW);  // 熄灭LED
 
 }

连接开发板,设置好对应端口号和开发板类型,进行程序下载。


上传图.png
实验现象

按下按键,LED灯点亮。放开按键,LED灯熄灭。

小贴士
  • 由于Arduino上电后,数字I/O管脚处于悬空状态,此时通过digitalRead()读到的是一个不稳定的值(可能是高,也可能是低)。所以通过pinMode()函数设置按键引脚为上拉输入模式(INPUT_PULLUP)。
    通俗的说:上拉电阻(pullup resistor),目的是使在断路的时候,这一点变成高电压(5V)。当变成通路的时候,电压就会降下来。
  • 按键在按下的过程中,有一段接触未接触的不稳定过程,即按键的抖动。在判断按键状态时,通过delay()延时跳过抖动的不稳定状态.

实验三LED灯的减弱增强

本实验通过PWM脉宽调制来控制LED灯亮度。

由已学的PWM知识可知:
在我们的Nano开发板上,第3、5、6、9、10、11引脚具有PWM功能。
通过使用analogWrtie()函数,在指定的引脚上通过高低电平的不断转换输出一个周期固定的方波,通过改变高低电平的占空比,进而得到不同的电压输出。

电路连接图:
电路连接图
编写代码

新建sketch,拷贝如下代码替换自动生成的代码并进行保存

int ledPin = 9;
 
 void setup ()
 {
   pinMode(ledPin,OUTPUT);
 }
 
 void loop()
 {
   for (int a=0; a<=255;a++)                //循环语句,控制PWM亮度的增加
   {
     analogWrite(ledPin,a);
     delay(8);                             //当前亮度级别维持的时间,单位毫秒            
   }
   for (int a=255; a>=0;a--)             //循环语句,控制PWM亮度减小
   {
     analogWrite(ledPin,a);
     delay(8);                             //当前亮度的维持的时间,单位毫秒  
   }
 
 }

连接开发板,设置好对应端口号和开发板类型,进行程序下载。


上传图
实验现象:

LED灯由亮变暗,又由暗变亮


亮.jpg 暗.jpg
函数讲解:

analogWrite()

  • 功能:analogWrite()实现对引脚设置PWM的要求。可以被用来控制LED等,电机转动,舵机等。
  • 句法:analogWrite(pin,value)
  • 参数:pin:写入的引脚;value:占空比,在0~255之间。(0时候为关,即LOW;255为开,即HIGH)
  • 无返回值
  • 使用analogWrite()不需要再用pinMode()设置引脚为输出。
小贴士:

程序中使用analogWrite()函数,通过两个for循环,逐渐改变输出PWM占空比,进而改变LED灯的亮度。两个for循环中都有延时语句。

实验四(高能实验):流水LED

本实验讲解:多个LED依次点亮并以此熄灭的状态

实验材料:
  • Nano开发板
  • 配套USB数据线
  • 5个LED灯
  • 5个470Ω的电阻
  • 若干杜邦线
电路连接图:
电路图

5个LED灯的负极连接到开发板的GND引脚,正极分别连接限流电阻连接到开发板的数字I/O引脚。

实物连接图:
实物连接图
编写代码:
int delayTime = 200;
 int ledPin;
 
 void setup()
 {
   for (ledPin = 2; ledPin < 7; ledPin++) //依次设置2-6个数字引脚为输出模式
   { 
     pinMode(ledPin, OUTPUT); //设置第ledPin个引脚为输出模式
   }
 }

 void loop()
 {
   for (ledPin = 2; ledPin < 7; ledPin++) //每隔delayTime依次点亮2~6引脚相连的led灯
   {
     digitalWrite(ledPin, HIGH); //点亮ledPin引脚相连的led灯
     delay(delayTime);//延时delayTime
   }

   for (ledPin = 6; ledPin > 1; ledPin--) //每隔delayTime依次熄灭6~2引脚相连的led灯
   {
     digitalWrite(ledPin, LOW); //熄灭ledPin引脚相连的led灯
     delay(delayTime);//延时delayTime
   }
 }

连接开发板,设置好对应端口号和开发板类型,进行程序下载。


上传
实验现象:

五个LED灯依次点亮,又依次熄灭,如此往复循环。

小贴士:
  • 在setup部分通过for循环将2 ~ 6号引脚设置为输出模式。在loop部分,通过两个for循环依次点亮2 ~ 6号LED灯,依次熄灭6 ~ 2号LED灯,使用的依然是digitalWrite函数。
  • 延时时间定义为200,你可以改变它来控制流动速度。