分享

STM32-Stduino小白练习第三弹--制作呼吸灯

 Astilbe001 2020-01-10

2019/11/29 星期五作者:Astilbe
问题:如何利用Stduino制作一个呼吸灯。

我们之前已经学习过如何制作闪烁灯了,原理就是让LED灯电平时高时低,就能形成闪烁的效果。
那么什么是呼吸灯呢?它与闪烁灯的实现方法有何区别?

呼吸灯大家其实都见过,看看大家的手机,上面是不是有一颗灯由亮到暗的逐渐变化,又由亮到暗,好像人在呼吸一样,因而被称为呼吸灯。
呼吸灯的原理我们可以从闪烁灯的原理类比推理一下:如果给灯加上一个随时间先增后减的电平,不就实现由亮到暗了么?反之亦然。
我们之前学习的时候,先用pinMode()初始化13号接口,再在loop()中写入高电平与低电平的切换,如下:



void setup() {
  // put your setup code here, to run once:
pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
    digitalWrite(13,LOW);
    delay(1000);
    digitalWrite(13,HIGH);
    delay(1000);
    

}


但是13引脚输出的电压只有高低两种(即1与0,因此被称为数字信号),不能实现灯的明暗过渡。这该怎么办?

我们先看一看Stduino这块板上有没有其他引脚。

大家仔细观察,可以发现其中有的孔边上的编号后面有波浪线,有的没有。这其实是划分了两种引脚:一类就是我们已经用过的数字引脚,可以输出数字信号,而另一类被称作模拟引脚,可以输出pwm模拟信号。模拟引脚正是我们需要的,因为模拟信号它随时间的变化规律就是正弦函数。
(数字信号,随时间只能输出有与没有两个信号)(图片来自网络)
(模拟信号,随时间呈正弦函数关系,先增加后降低,周期性变化)(图片来自网络)
模拟引脚的初始化,首先我们要选择一个模拟引脚,其次信号参数也变了。

void setup() {
// put your setup code here, to run once:
pinMode(2,OUTPUT_PMW);//13号引脚只能输出数字信号,我们需要选择一个带波浪线的,即2号引脚

}


有同学发现OUTPUT参数后面跟了PWM,这是什么呢?
PMW是一种脉冲宽度调制的技术类型。单片机不能输出连续的正弦变化的信号,只能模拟,那么是如何做到的呢?
简单的说,比如你要控制手电筒的亮度,简单的办法就是串联一个电阻,改变电阻,灯的亮度就会改变。
还有没其他办法呢?
这种办法就是PWM调节。有一个非常流行的比喻。
假设在1秒内,有0.5秒的时间开关是打开的,0.5秒关闭,那么灯就亮0.5秒,灭0.5秒。现在实现了灯的闪烁。如果把频率调高一点,比如是0.010秒,0.005秒开,0.005秒灭,那么灯的闪烁频率就很高,而人眼是感觉不到的。这时你发现不了灯在闪烁,当时你会发现手电筒的灯光亮度一直保持在原来的一半亮度。你会觉得通电时间没有变化,手电筒的电压减到了原来的一半。同理,如果1毫秒内,0.1毫秒开,0.9毫秒灭,那么,灯的亮度就只有原来的10分之一,电压也会被认为减到了十分之一。
这就是PWM的基本原理。即通过改变开关接通时间等效改变用电器的电压。
而二极管的反应速度让它,能够让电压模拟出正弦变化。



那么我们可以怎么控制模拟引脚输出信号的大小呢?
通过analogWrite()。
其中,即0到255代表占空比。
那么呼吸灯也就很容易实现了。代码如下:

void setup() {
    // put your setup code here, to run once:
    pinMode(2,OUTPUT_PWM);
}

void loop() {
    // put your main code here, to run repeatedly:
    for(int i=0; i<256; i++) {//for循环语句,让亮度从0到255
        analogWrite(2,i);
        delay(15);//变化太快可能看不清
    }
    for(int i=255;i>-1;i--) {//for循环语句,让亮度从255到0
        analogWrite(2,i);
        delay(15);
    }

}

代码部分结束了,接下来是动手搭接线路。

首先,我们这里使用的是发光二极管,因为发光二极管能够对快速变化的电流反应。发光二极管的引线长边为正,短边为负。
接下来,将发光二极管长边与D2~相接,短边与3.3V孔相接(Stduino提供3.3V与5V两种电压,红色发光二极管工作电压为1.8~2.4V。)
编译下载即可~~~

本文转载自Stduino网http:///forum.php?mod=viewthread&tid=10&extra=

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多