加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Arduino PWM 调节LED 亮度

(2011-01-24 16:04:14)
标签:

arduino

pwm

智能控制

杂谈

大帅机器人工作室

分类: Arduino

淘宝店铺:http://dsrobot.taobao.com 群号: 259189548

 

实验器材:Arduino 168P 基础套件 互动媒体

          1.Arduino 168P 开发板一个

          2.USB下载线一条

          3.LED红、黄、绿各一个(这里使用了不同的颜色是为了突出实验效果)

          4.220欧姆电阻三个

          5.面包板一块

          6.面包板跳线若干条

 

实验目的:学习LED的工作原理,深刻理解Arduino进行PWM占空比的调节,从而改变LED的亮度。

 http://s1/middle/624e2b45t9a932c6b6400&690PWM 调节LED 亮度" TITLE="Arduino PWM 调节LED 亮度" />

实验电路:实验电路如下图所示

 

注意:这里要提醒大家了220欧姆的电阻在这非常重要(这里起限流保护的作用)

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

计算公式:输出电压= (接通时间/脉冲时间)*最大电压值

http://s16/middle/624e2b45t9a93344203ff&690PWM 调节LED 亮度" TITLE="Arduino PWM 调节LED 亮度" />

 

PWM被用到许多地方,如:调光灯具、电机调速、声音的制作等等。

我再看看LED原理图

http://s16/middle/624e2b45t9a9337c2c2bf&690PWM 调节LED 亮度" TITLE="Arduino PWM 调节LED 亮度" />

 

我们在使用LED时一定要注意加限流电阻,这个是我反复重复的。LED具有二极管正向导通的特性,我们在做实验是可能出现LED不亮的情况不要着急,可能是我们把LED的极性搞错了。调换一下正负极就好了。这里我教大家一个简单的方法区分电子原件正负极的方法:我看到上图中LED有两个引脚一长一短,那么较短的引脚就是正极、较长的引脚就是负极。

 

实验步骤

一.     按照以上电路正确搭建实验电路。

二.    将我提供的调试程序下载到Arduino开发板中。

三.    打开串口调试助手,查看信息。

 

 

 

 

http://s11/middle/624e2b45t9a933b066dfa&690PWM 调节LED 亮度" TITLE="Arduino PWM 调节LED 亮度" />

实验程序:
int redpin=11;//定义LED接口
int yellowpin=10;
int greenpin=9;
int redval;//定义LED变量
int yellowval;
int greenval;
int i=0;
void setup()
{
  pinMode(redpin,OUTPUT);//设置LED接口为输出接口
  pinMode(yellowpin,OUTPUT);
  pinMode(greenpin,OUTPUT); 
  pinMode(redval,INPUT);//设置LED变量为输入值
  pinMode(yellowval,INPUT);
  pinMode(greenval,INPUT);
  Serial.begin(9600);//连接到串行端口,波特率为9600
}
void loop()
{
  i++;
if(i<200)
{

  redval+=1;//红灯变亮
  greenval-=1;//绿灯变暗
  yellowval=1;//黄灯不变
}
else if(i<400)
{
   redval-=1;//红灯变暗
  greenval=1;//绿灯不变
  yellowval+=1;// 黄灯变亮
}
else if(i<600)
{
   redval=1;//红灯不变
  greenval+=1;//绿灯变亮
  yellowval-=1; //黄灯变暗
}
else
{
  i=0;//重新给i赋值进行新循环
}

analogWrite(redpin,redval);//给LED接口付模拟值
analogWrite(yellowpin,yellowval);
analogWrite(greenpin,greenval);
Serial.print(i,DEC);//显示出i的值
Serial.print(      R:");//分别显示出各个LED的模拟值
Serial.print(redval,DEC);
Serial.print(      Y:");
Serial.print(yellowval,DEC);
Serial.print(      G:");
Serial.println(greenval,DEC);

}

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有