【Arduino实验06 呼吸灯】

目录

一、实验目的

二、实验设备与环境

三、实验重点

四、实验难点

五、实验内容

5.1实验任务

5.2实验原理

5.3实验内容

5.4实验结果

5.5思考题


一、实验目的

        1熟悉PWM控制与程序编写原理;

        2掌握模拟I/O接口特性与函数的功能;

        3掌握映射函数的功能;

        4掌握编程控制实现呼吸灯功能的方法

二、实验设备与环境

        Arduino UNO套件、Arduino IDE、计算机、电位器、LED灯、电阻、杜邦线等

三、实验重点

        1实验电路连接;2控制程序代码编写;3程序功能调试

四、实验难点

        1程序代码编写、调试

五、实验内容

5.1实验任务

        任务描述:读取、输出电位器模拟信号值;电位器的LED亮度控制(PWM);呼吸灯制作。

5.2实验原理

        1.PWM控制

        PWM为信号周期内保持高电平的时间,是以占空比进行脉宽调试的技术,用于将信息编码为脉冲信号。Arduino UNO的PWM信号频率f=490Hz,输出端口为3、5、6、9、10、11,标识“~”。

        2.电位器

        电位器是具有三个引出端、阻值可按某种变化规律调节的电阻元件。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时,在输出端即获得与位移量成一定关系的电阻值或电压。电位器既可作三端元件使用也可作二端元件使用。后者可视作一可变电阻器,由于它在电路中的作用是获得与输入电压(外加电压)成一定关系的输出电压,因此称之为电位器。

        通过电位器滑动端口可以控制输出电压取值从0 –Vcc变化,如果输出值为呼吸灯渐变亮度的最大值,则可以通过输出值的变化控制呼吸灯亮灭的频率。

        3.arduino程序

        函数:analogRead()、analogWrite()、map()、Serial()

        控制语句:for„„、while„„

        4.呼吸灯电路原理

        (1)呼吸灯电路

        (2)呼吸灯电路原理图

         (3)呼吸灯原理

        人在呼吸时,通过扩大胸腔、压缩胸腔进行吸气、呼气实现呼吸功能,不断吸气、呼气形成规律的呼吸功能。呼吸灯通过控制灯的亮度,从暗逐渐变化最亮、再逐渐变化到最暗,不断重复,形似人的呼吸,称为呼吸灯。

5.3实验内容

        1.电位器模拟信号值的输出

        步骤1:电路连接

        步骤2:程序流程图

        步骤3:程序源代码

        Arduino IDE程序:

const int light_Pin = A0;

void setup() {

    Serial.begin(9600);

    int light_Value;

}

void loop() {

    light_Value = analogRead(light_Pin);

    Serial.print(“light_Value =:”);

    Serial.println(light_Value); // 输出光敏电阻读取的数据

    Serial.println(light_Value,BIN); // 以二进制输出光敏电阻读取的数据        

    Serial.println(light_Value,HEX); // 以十六进制输出光敏电阻读取的数据        

    delay(500);

}

        Mixly程序:略„„

        步骤4: 程序编译与调试

        2.电位器控制LED灯的亮度

        步骤1:电路连接

        步骤2:画流程图

        步骤3:程序源代码

        Arduino IDE程序:

const int light_Pin = A0;

const int ledPin = 5;

void setup() {

    Serial.begin(9600);

    int light_Value;

}

void loop() {

    light_Value = analogRead(light_Pin);

    Serial.print(“light_Value =:”);

    Serial.println(light_Value); // 输出电位器读取的数据

    Light_Value = map(light_Value,0,1023,0,255); 
    //将读取的值映射到0-255的输出精度                

    analogWrite(ledPin,light_Value);delay(100);
    
}

        Mixly程序:略„„        

        步骤4: 程序编译与调试

        3.自动a呼吸灯

        步骤1:连接电路

        步骤2:画流程图

        步骤3:编写源程序

const int ledPin = 5;

void setup() {

        Serial.begin(9600);

}

void loop() {

        for(int i=0;i<=255;i+=5) {

        Serial.println(i);

        analogWrige(ledPin,i);

        delay(100);

        }

        for(int i=255;i>=0;i-=5) {

        Serial.println(i);

        analogWrige(ledPin,i);

        delay(100);

        }

}

        步骤4:程序编译与功能调试

        4.电位器控制的呼吸灯

        步骤1:电路连接

        步骤2:程序流程图

        步骤3:程序源代码

const lightPin = 0;

const int ledPin = 5;

int light_Value= 0;

int ledValue = 0;

void setup() {

        Serial.begin(9600);

}

void loop() {

        light_Value = analogRead(lightPin);

        ledValue = map(light_Value,0,1023,0,255);

        for(int i=0;i<=ledValue;i+=5) {

        Serial.println(i);

        analogWrite(ledPin,i);

        delay(100);

        }

        for(int i=ledValue;i>=0;i-=5) {

        Serial.println(i);

        analogWrite(ledPin,i);

        delay(100);        

        }

}

        步骤4: 程序编译与调试

        步骤5:修改以上程序控制参数实现:(1)呼吸灯逐渐急促、逐渐舒缓的变化;(2)呼吸灯急促、舒缓与最大亮度的同步变化。

        5. 程序拓展更改以上电路与源程序,用R、G、B三色的LED实现一个颜色不断变化的炫彩灯效果,要求:(1)R\G\B单色渐变;(2)R\G\B双色渐变;(3)R\G\B三色渐变;(4)R\G\B颜色随机变化。发光体颜色的叠加原理参考:

#define led_red 9     //Pin 9 连接上 led的红色引脚
#define led_green 10
#define led_blue 11
void setup() {
  pinMode(led_red,OUTPUT);  //设置为输出模式
  pinMode(led_green,OUTPUT);
  pinMode(led_blue,OUTPUT);
  analogWrite(led_red,255);     //首先,先把所有的灯都关闭
  analogWrite(led_green,255);   //可以随意设置开启关闭哪些灯,搭配出不同组合有不同颜色
  analogWrite(led_blue,255);
}
void loop() {
  // put your main code here, to run repeatedly:
  for(int i=200;i>0;i--)      //渐亮
  {
    analogWrite(led_red,i);     //慢慢开启红色和绿色会搭配出黄色
    analogWrite(led_green,i);  
    analogWrite(led_blue,255);  
    delay(10);
  }
  for(int i=0;i<200;i++)   //渐灭
  {
    analogWrite(led_red,255);    //慢慢关闭绿色和蓝色会搭配出较鲜艳的蓝色
    analogWrite(led_green,i);
    analogWrite(led_blue,i);
    delay(10);
  }
}
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
unsigned int red = 10;
unsigned int green = 10;
unsigned int blue = 10;
//颜色控制函数
void color(unsigned int red,unsigned int green,unsigned int blue){ 
  analogWrite(redPin, 255- red);
  analogWrite(bluePin, 255- blue);
  analogWrite(greenPin, 255- green);
}
void setup() {
  // put your setup code here, to run once:
  pinMode(redPin,OUTPUT);
  pinMode(greenPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); 
}
void loop() {
} 
void serialEvent() 
{ if (Serial.available() > 0) 
  { red = Serial.readStringUntil(',').toInt(); 
  green = Serial.readStringUntil(',').toInt(); 
  blue = Serial.readStringUntil(';').toInt(); 
  color(red, green, blue);
   }
 }

5.4实验结果

        结论:略

        反思:略

        作品:略

5.5思考题

1.呼吸灯可以调节变化快、慢的节奏,你怎样实现?

2.光感应式呼吸灯通过控制什么参数条件实现?

3.可否用R、G、B色LED灯实现一个颜色渐变的幻彩小夜灯?

  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小花-Soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值