查看: 2840|回复: 0

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

[复制链接]

53

主题

55

帖子

431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
431
发表于 2019-12-1 23:54:00 | 显示全部楼层 |阅读模式
本帖最后由 Astilbe001 于 2019-12-2 22:52 编辑

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

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

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

  5. void loop() {
  6.   // put your main code here, to run repeatedly:
  7.     digitalWrite(13,LOW);
  8.     delay(1000);
  9.     digitalWrite(13,HIGH);
  10.     delay(1000);
  11.    
  12. }
复制代码
但是13引脚输出的电压只有高低两种(即1与0,因此被称为数字信号),不能实现灯的明暗过渡。这该怎么办?


我们先看一看Stduino这块板上有没有其他引脚。
微信图片_20191201230703.jpg
大家仔细观察,可以发现其中有的孔边上的编号后面有波浪线,有的没有。这其实是划分了两种引脚:一类就是我们已经用过的数字引脚,可以输出数字信号,而另一类被称作模拟引脚,可以输出pwm模拟信号。模拟引脚正是我们需要的,因为模拟信号它随时间的变化规律就是正弦函数。
a2cc7cd98d1001e99e0de790b60e7bec54e79778.png (数字信号,随时间只能输出有与没有两个信号)(图片来自网络)
5243fbf2b211931310027d286b380cd790238de1.jpg (模拟信号,随时间呈正弦函数关系,先增加后降低,周期性变化)(图片来自网络)
模拟引脚的初始化,首先我们要选择一个模拟引脚,其次信号参数也变了。
  1. void setup() {
  2. // put your setup code here, to run once:
  3. pinMode(2,OUTPUT_PMW);//13号引脚只能输出数字信号,我们需要选择一个带波浪线的,即2号引脚
  4. }
复制代码
有同学发现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代表占空比。
那么呼吸灯也就很容易实现了。代码如下:
  1. void setup() {
  2.     // put your setup code here, to run once:
  3.     pinMode(2,OUTPUT_PWM);
  4. }

  5. void loop() {
  6.     // put your main code here, to run repeatedly:
  7.     for(int i=0; i<256; i++) {//for循环语句,让亮度从0到255
  8.         analogWrite(2,i);
  9.         delay(15);//变化太快可能看不清
  10.     }
  11.     for(int i=255;i>-1;i--) {//for循环语句,让亮度从255到0
  12.         analogWrite(2,i);
  13.         delay(15);
  14.     }
  15. }
复制代码


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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Stduino 零基础入门课程系列(五) 实验三:按键输入
Stduino 零基础入门课程系
Hello!各位同学大家好~上节课我们利用管脚输出高低电平信号,控制LED的亮灭,那么我
Stduino小白练习第六弹--按键控制串口通信
Stduino小白练习第六弹--
2020/01/08 星期三 作者:Astilbe 问题:我们如何通过按下按键来传输固定的信息给PC呢
37种传感器(二十九)MPU6050陀螺仪模块+Stduino Nano&UNO
37种传感器(二十九)MPU6
StduinoUno /纳米37种传感器(二十九)六轴 MPU陀螺仪模块关键词: 51 ; stm32 ; ar
stm32 最小系统 小蓝板 LED闪烁灯(三),无需刷Bootloader
stm32 最小系统 小蓝板 LE
关键词:stm32 小蓝板 STM32F103C8T6 Stduino IDE Stduino Nano LED闪烁灯 通过Stduin
Stduino IDE软件下载专区
Stduino IDE软件下载专区
Stduino IDE软件下载专区 Windows版:7月29号发布1.01, 现可
今天在文涛老大的帮助下我的stm32zet6终于把simlpefoc库跑起...
今天在文涛老大的帮助下我
[md]首先本身是刚刚从MDK转到arduino过来的新人,只因为要完开源的simplefoc,期间由
连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据
连接ADS1292模拟前端芯片
[md]连接ADS1292模拟前端芯片,使用SPI库,导致串口不输出数据 ![QSJSBEZF83I8C907%$
©2001-2018  Stduino官网  Powered by©Discuz!   ( 皖ICP备17011998号 )
快速回复 返回顶部 返回列表