实验十一:PWM调控灯光亮度

Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 或5V 的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么是5V(ON),要么是0V(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM 进行编码。输出的电压值是通过通和断的时间进行计算的。输出电压=(接通时间/脉冲时间)*最大电压值

PWM 被用在许多地方,调光灯具、电机调速、声音的制作等等。
下面介绍一下PWM 的三个基本参数:

1、脉冲宽度变化幅度(最小值/最大值)
2、脉冲周期(1 秒内脉冲频率个数的倒数)
3、电压高度(例如:0V-5V)
Arduino 控制器有6 个PWM 接口分别是数字接口3、5、6、9、10、11,前面我们已经做了按键控制小灯的实验,那是数字信号控制数字接口的实验,我们也做过电位计的实验,这次我们就来完成一个用电位计控制小灯的实验。

实验器材清单

  1. 电位器模块 1个
  2. 红色M5直插LED 1个
  3. 220欧姆电阻 1个
  4. 面包板 1个
  5. 面包板跳线 1扎

电位计即为模拟值输入我们接到模拟口,小灯我们接到PWM 接口上,这样通过产生不同的PWM 信号就可以让小灯有亮度不同的变化。

实验原理图

我们也可以把11脚和13脚用跳线连起来,我们就不用接LED的线了,更方便。效果一样。


在编写程序的过程中,我们会用到模拟写入analogWrite(PWM 接口,模拟值)函数,对于模拟写入analogWrite()函数,此函数用法也很简单,我们在本实验中读取电位计的模拟值信号并将其赋给PWM 接口使小灯产生相应的亮度变化,再在屏幕上显示出读取的模拟值,大家可以理解为此程序是在模拟值读取的实验程序中多加了将模拟值赋给PWM 接口这一部分,下面给大家提供一段参考源程序。


参考源程序:
int potpin=0;//定义模拟接口0
int ledpin=11;//定义数字接口11(PWM 输出)
int val=0;// 暂存来自传感器的变量数值
void setup()
{
pinMode(ledpin,OUTPUT);//定义数字接口11 为输出
Serial.begin(9600);//设置波特率为9600
//注意:模拟接口自动设置为输入
}
void loop()
{
val=analogRead(potpin);// 读取传感器的模拟值并赋值给val
Serial.println(val);//显示val 变量
analogWrite(ledpin,val/4);// 打开LED 并设置亮度(PWM 输
__________出最大值255)
delay(10);//延时0.01 秒
}


实验截图

实验现象

下载完程序,我们旋转电位计的旋钮不但可以看到屏幕上数值的变化还也可以清楚的看到我们面包板上的LED 小灯的亮度也在随之变化。

程序代码

int potpin=0;//定义模拟接口0
int ledpin=11;//定义数字接口11(PWM 输出)
int val=0;// 暂存来自传感器的变量数值
void setup()
{
pinMode(ledpin,OUTPUT);//定义数字接口11 为输出
Serial.begin(9600);//设置波特率为9600
//注意:模拟接口自动设置为输入
}
void loop()
{
val=analogRead(potpin);// 读取传感器的模拟值并赋值给val
Serial.println(val);//显示val 变量
analogWrite(ledpin,val/4);// 打开LED 并设置亮度(PWM 输__________出最大值255)
delay(10);//延时0.01 秒
}

Ardino基础教程 11_PWM调控灯光亮度相关推荐

  1. Ardino基础教程 15_火焰报警器

    实验十五:火焰报警器 认识火焰传感器 火焰传感器(即红外接收三极管)是机器人专门用来搜寻火源的传感器,本传感器对火焰特别灵敏.实物如图: 火焰传感器利用红外线对火焰非常敏感的特点,使用特制的红外线接收 ...

  2. Ardino基础教程 12_感光灯

    实验十二:感光灯 完成以上的各种实验后,我们对Arduino 的应用也应该有一些认识和了解了,在基本的数字量输入输出和模拟量输入以及PWM 的产生都掌握以后,我们就可以开始进行一些传感器的应用了. 光 ...

  3. Ardino基础教程 25_8X8LED点阵

    实验二十五:8X8LED点阵 点阵实验另一版本代码参考如下链接下载:ArduinoCode25-8X8LED点阵num.ino 点阵在我们生活中很常见,很多都有用到他,比如LED 广告显示屏,电梯显示 ...

  4. Ardino基础教程 24_RGB全彩LED

    实验二十四:RGB全彩LED 使用三色全彩LED 制造 显示原理,其实原理是在一棵LED 灯里,有三种颜色的灯,红,绿,蓝.每种颜色的灯上的驱动电压不一样,亮度就不一样,它们组合在一起,就形成了各种颜 ...

  5. Ardino基础教程 19_舵机控制

    实验十九:舵机控制 舵机控制实验Servo库版本的代码参考如下链接:ArduinoCode19-舵机控制Servo库版本代码.ino 舵机是一种位置伺服的驱动器,主要是由外壳.电路板.无核心马达.齿轮 ...

  6. Ardino基础教程 17_四位数码管

    实验十七:四位数码管 这次我们进行的实验是使用arduino 驱动一块共阴四位数码管.驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4 颗.这种接法好处是需求 ...

  7. Ardino基础教程 14_倾斜开关

    实验十四:倾斜开关 倾斜开关控制led灯的亮灭 实验器材清单 滚珠开关 1个 LED灯 1个 220欧姆直插电阻 1个 面包板 1个 面包板跳线 1扎 实验接线图 按照Arduino教程将控制板.扩展 ...

  8. Ardino基础教程 10_光控声音

    实验十:光控声音 这个实验虽然很简单,可是用处非常大,也很有趣.这样的电路很常 用,希望读者要记住这种用法,举一反三,这才是目的.根据光的强 度,控制蜂鸣器发声的频率,光强越大,声音越急促. 效果很明 ...

  9. Ardino基础教程 2_LED闪烁实验

    实验二:LED 闪烁实验 LED 小灯实验是比较基础的实验之一,上一个" Hello World!"实 验里已经利用到了Arduino 自带的LED,这次我们利用其他I/O 口和 ...

最新文章

  1. 二分类变量相关性分析spss_spss:两个有序分类变量的相关分析『kendallstau-b相关系数』...
  2. centos 6.5 关闭防火墙
  3. 快速排序及C语言实现
  4. spring创建复杂对象的三种方式
  5. 使用FFmpeg实现抽取多媒体文件的音频并按照AAC格式进行保存--附源码
  6. RNFL视网膜神经纤维层报告(青光眼检测)解读
  7. java io流的学习总结~~
  8. html可以用坐标画svg图吗,HTML5如何使用SVG的方法示例
  9. leetcode两数之和,三数之和,四数之和问题
  10. Delphi XE不生成__history目录
  11. html5特性检测,HTML5 简介(七):在线检测、contenteditable、classList 等特性介绍
  12. npm下载地址的查询与切换
  13. 从软件开发到 AI 领域工程师:模型训练篇
  14. 锂电池充电管理芯片ic XSC01支持筋膜枪8.4V12.6V16.8充电
  15. matlab波形叠加,matlab程序两列波相向传播叠加波形图和动画.doc
  16. 父爱动画代码python_情人节锦囊:简单的python表白程序(动画效果)
  17. BGP(1):BGP 的基本机制
  18. 护网HVV(蓝队)小白必知必会
  19. 中考英语计算机,中考英语作文模板:计算机 The computer
  20. 混合云——企业的最佳解决方案?

热门文章

  1. 8.依赖的传递、排除、冲突
  2. MySQL知识点链接
  3. OVER(PARTITION BY)函数用法
  4. 启动Mysql时发生的一个关于PID文件错误问题
  5. 【JNI】javah使用(初步)
  6. 自定义TabHost,TabWidget样式 .
  7. Google cpp style guide 之 include
  8. UA OPTI570 量子力学22 2-D Isotropic Q.H.O.简介
  9. UA MATH567 高维统计IV Lipschitz组合1 Lipschitz函数
  10. VC++2019 使用wininet下载文件