极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11056|回复: 1

《博哥Arduino学习笔记系列》- 第五课 模拟IO实验

[复制链接]
发表于 2016-12-8 20:49:24 | 显示全部楼层 |阅读模式
一、前言

      这段时间没有更新过学习笔记,原因是楼主要考试,都没有在玩Arduino。趁着今晚有空,继续就着之前讲的内容讲解下去。还记得前几个我们都是在讲解数字IO,而其实我们生活中大多数信号都是模拟信号,如声音以及温度变化。在Arduino中,常用0~5v的电压来表示模拟信号。
      1. 模拟输入功能
      在Arduino,编号前带有“A”的引脚是模拟输入引脚,Arduino可以读取这些引脚上输入的模拟值,也就是可以读取引脚上输入的电压大小。
      模拟输入引脚带有ADC功能(ADC:Analog-to-Digital Converter 模数转换)。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读取模拟值的功能。
      使用AVR芯片的Arduino模拟输入功能有10位精度,意味着0~5V电压会转换成0~1023的整数形式表示。
      模拟输入功能需要使用analogRead(pin)函数,其中pin是读取模拟值的引脚,被指定的引脚必须是模拟输入引脚。
      2.模拟输出功能
      要使用analogWrite()函数来实现模拟输出功能。
      注意:该函数并不是输出真正意义上的模拟值,而是以一种特殊的方式来达到输出模拟值的效果,也就是我们经常听到的“PWM”(脉冲宽度调制 Pulse Width Modulation)。
      当使用analogWrite函数,指定引脚会通过高低电平的不断转换来输出一个周期固定(约490Hz)的方波,通过改变高低电平在每个周期中所占比例(占空比),而得到近似输出不同电压的效果。
      
      analogWrite(pin,value):参数pin为要输出的PWM波的引脚,参数value是PWM的脉冲宽度,范围为0~255。
      大多数Arduino控制器的PWM引脚都会用“~”标识,可以查看一下自己的板子。常见几款板子PWM引脚为:
      
      基础知识介绍好了,那么就开始接下来的实验了。

二、实验介绍

1.固定呼吸灯
     将LED连接到PWM引脚,主要利用模拟输出功能 analogWrite 函数输出电压,呼吸频率固定
2.可调呼吸灯
     在固定呼吸灯基础上,通过读入的模拟电压大小(模拟输入我们采用一个电位器来分压)来调整频率,同时利用analogRead以及analogWrite函数

注意:实验器材是基于前面课程

三、实验过程

1.固定呼吸灯
  1. /**
  2. * @Desc  固定呼吸灯
  3. * @author 单片机菜鸟
  4. * @Date  2016/12/8
  5. * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
  6. *       按键是高电平有效
  7. */

  8. #define LED 9
  9. #define DELAY_TIME 30 //延时时间

  10. void setup() {
  11.   // put your setup code here, to run once:

  12. }

  13. void loop() {
  14.   //从暗到亮,每次亮度值加5,直到最亮
  15.   for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
  16.      //输出PWM
  17.      analogWrite(LED,fadeValue);
  18.      //延时一下
  19.      delay(DELAY_TIME);  
  20.   }

  21.   //从亮到暗 每次亮度-5直到最暗
  22.   for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
  23.      //输出PWM
  24.      analogWrite(LED,fadeValue);
  25.      //延时一下
  26.      delay(DELAY_TIME);  
  27.   }
  28. }
复制代码


2.可调呼吸灯
  1. /**
  2. * @Desc  可调呼吸灯
  3. * @author 单片机菜鸟
  4. * @Date  2016/12/8
  5. * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
  6. *       按键是高电平有效
  7. */

  8. #define LED 9

  9. void setup() {
  10.   // put your setup code here, to run once:

  11. }

  12. void loop() {
  13.   //从暗到亮,每次亮度值加5,直到最亮
  14.   for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
  15.      //输出PWM
  16.      analogWrite(LED,fadeValue);
  17.      //延时一下
  18.      int delaytime = analogRead(A0)/5;//读取电位器输出电压 用于延时
  19.      delay(delaytime);  
  20.   }

  21.   //从亮到暗 每次亮度-5直到最暗
  22.   for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
  23.      //输出PWM
  24.      analogWrite(LED,fadeValue);
  25.      //延时一下
  26.      int delaytime = analogRead(A0)/5;
  27.      delay(delaytime);  
  28.   }
  29. }
复制代码


当然,上面电位器可以换成光敏电阻之类的,这样就可以考虑做一个晚上呼吸白天熄灭的呼吸灯。

四、总结
这一课,相对很简单,我们主要学习模拟IO口的使用。以后当我们遇到光敏电阻、热敏电阻、温度传感器、气体传感器之类的可以产生模拟信号的,就应该想到模拟IO口了。

博哥学习笔记系列:

《博哥Arduino学习笔记系列》- 第一课 初识Arduino
        http://www.geek-workshop.com/thread-27936-1-1.html

《博哥Arduino学习笔记系列》- 第二课 Arduino语言基础
        http://www.geek-workshop.com/thread-27938-1-1.html

《博哥Arduino学习笔记系列》- 第三课 经典LED
        http://www.geek-workshop.com/thread-27948-1-1.html

《博哥Arduino学习笔记系列》- 第四课 经典按键实验
        http://www.geek-workshop.com/thread-27958-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 02:06 , Processed in 0.042296 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表