03 - Arduino板的模拟信号的输出/输入

03-1 模拟输出管脚


(一)模拟信号的形式

周围世界中的声音、色彩、温度等都是一模拟信号存在,信号连续变化,可以有多个数值,如0.3,2.6等。

数字信号只有5V和0V两种状态。

在这里插入图片描述

(二)PWM(Puslse Width Modulation,脉冲宽度调制)—将数字信号转换成模拟信号

PWM信号通过调整一个信号周期中,高电位持续的时间,所占的比例,模拟出介于0V~5V之间的电压信号,这个比例称为占空比。
下图中高电位占50%的PWM信号,相当于5V X 50% = 2.5V的电压值的模拟信号。占空比越大,等效的平均模拟电压值就越大,反之,越小。
在这里插入图片描述

(三)模拟信号PWM输出函数:

analogWrite(管脚编号,模拟数值)

*analogWrite()是 Arduino 中的一个函数,用于向一个支持脉宽调制(PWM)的引脚输出模拟值(实际上是一个特定占空比的方波)。

语法为:analogWrite(pin, value)

  • pin:要进行模拟输出的引脚编号。
  • value:一个介于 0 和 255 之间的值,表示输出的占空比。0 表示完全关闭(低电平),255 表示完全打开(高电平),中间的值表示不同的占空比,从而产生不同程度的模拟输出。

例如,analogWrite(9, 128)将在引脚 9 上输出占空比为 50%左右的方波,可用于控制 LED 的亮度或电机的速度等。*


03-2 实验:PWM改变LED灯亮度


(一)接线图

在这里插入图片描述

(二)程序

仿真图

发光二极管会逐渐点亮逐渐熄灭


控制代码

void setup() {
    pinMode(3, OUTPUT);
}
void loop() {
  //第1个循环
  for (int i = 0; i <= 256; i++) {
    analogWrite(3, i);
    delay(5);
  }
  //第2个循环
  for (int i = 256; i > 0; i--) {
    analogWrite(3, i - 1);
    delay(5);
  }
}

(三)功能解释

程序。其功能是让连接在数字引脚 3 上的设备(比如 LED)逐渐变亮然后再逐渐变暗,不断循环这个过程。
1:void setup():
pinMode(3, OUTPUT);:将数字引脚 3 设置为输出模式,以便后续可以通过这个引脚输出高电平或低电平来控制连接的设备。
2.void loop():
这个函数中的代码会不断重复执行。
第1个循环:
for (int i = 0; i <= 256; i++):从 0 开始逐步递增到 256。
analogWrite(3, i),将引脚 3 的PWM输出模拟数值设置为当前循环变量 i 的值。由于 i 的值在每次循环中逐渐增大,输出的模拟信号大小也逐步增大,这会使连接在该引脚上的LED发光二极管逐渐变亮。delay(5)是每次循环暂停 5 毫秒,以控制变化的速度,避免变化过快。
第2个循环:
for (int i = 256; i > 0; i–):从 256 开始逐步递减到 1。analogWrite(3, i - 1)将引脚 3 的输出模拟数值设置为 i - 1 的值,使连接在该引脚上的LED逐渐变暗。delay(5)是同样每次循环暂停 5 毫秒。


03-3 模拟量输入管脚


(一)电阻分压原理

在串联电路中,电阻分配到的电压会与电阻成正比,电阻值占比越大,分配到的电压就越大。
在这里插入图片描述
两个电阻串联电路中,R1电阻分配到的电压计算公式:
V 1 = R 1 R 1 + R 2 ∗ V 总 V_1= \frac{R1}{R1+R2}*V_总 V1=R1+R2R1V

(二)可变电阻

可变电阻器照片,内部结构,电路符号
在这里插入图片描述

(三)模拟信号测量函数:

analogRead(模拟管脚编号)

analogRead()是用于读取模拟输入引脚的电压值,回传一个 0 到 1023 之间的整数值,对应到0~5V的模拟信号。
模拟管脚的编号是:A0,A1,A2,A3,A4…
例如,如果要读取模拟引脚 A0 的值,可以这样写:
int value = analogRead(A0);
返回的整数值与输入的电压成正比,即 0 对应 0V,1023 对应参考电压(通常为 5V 或 3.3V,取决于 Arduino 板的类型)。
这个函数在需要读取传感器的模拟输出值(如光敏电阻、电位器等)时非常有用。通过读取模拟输入引脚的值,可以获取传感器测量的物理量,并根据需要进行进一步的处理和控制。


03-4 实验:显示可变电阻值


(一)接线图:

在这里插入图片描述

(二)程序

在这里插入图片描述

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);  //将A0管脚设定成输入模式
}
void loop() {
  //将模拟管脚读到的数值存储在value变量中
  int value = analogRead(A0);
  //将读到的数值显示在串口监视器中,每行显示一次测量数值
  Serial.println(value);
  delay(100);
}

(三)实测

转动可变电阻器的旋钮,可以看到从0~1023不停变化的模拟数值。
在这里插入图片描述


03-5 实验7 Arduino 的模拟输入


从指定的模拟引脚读取值。Arduino 主板有 6 个通道(A0,A1,A2,A3,A4,A5) 。
在这里插入图片描述

这6个管脚连接到芯片内部的10 位 AD(模拟信号到数字信号的转换器)。
这意味着模拟输入电压: 0-5 伏,转换到0-1023 的数字数据的范围,这个就是 AD转换器的原理。
转换精度为:5 伏/1024 ,约等于每个数字单位 相当于0.049 伏电压(4.9 毫伏)。

(一)连线图

在这里插入图片描述

(二)程序代码

int analogPin = A5;
int val = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  val = analogRead(analogPin);
  Serial.println(val);
  Delay(1000);
}

(三)程序运行结果验证

在这里插入图片描述


03-6 实验8 Arduino 的模拟输出


Arduino 的 PWM 频率约为 500Hz。
analogWrite() 的括号里面的参数范围是: 0- 255
例如:
analogWrite( 255)需要 100%占空比 (常开)
analogWrite( 127)是 50%占空比(一半的时间)。
在这里插入图片描述
Arduino板(带有 ATmega168 或 ATmega328) ,这个analogWrite() 函数工作在数字信号引脚 3, 5 ,6 ,9 ,10 和 11。
在这里插入图片描述

(一)连线图

在这里插入图片描述

(二)程序代码

int ledPin = 3;
int analogPin = A5;
int val = 0;
void setup() {
  pinMode(ledPin, OUTPUT);
}
void loop() {
  val = analogRead(analogPin);
  analogWrite(ledPin, val / 4);
}

(三)程序运行结果验证

当旋转电位器时,LED发光二极管会随着电位器的变化而发生亮度的改变。

3-7 伺服电机

(一)伺服舵机是一种直流电机,可以固定在0-180度内旋转。

在这里插入图片描述
舵机有一个三线的接口。
黑色(或棕色)线接GND
红线接电压正5V
黄线(或是白色或橙色)接控制信号端
在这里插入图片描述
控制方式采用 PWM 信号
在这里插入图片描述

(二)旋钮控制伺服舵机(实验十六)

接线图

建议在wokwi仿真网站上的案例基础上改,从空白工程进行设计会导致编译不通过。
在这里插入图片描述

程序代码

#include <Servo.h>  //调用 arduino 自带的Servo.h舵机 库
Servo myservo;          //定义一个名为myservo的Servo类的对象
void setup() {
  myservo.attach(9);         //将9号管脚指定为控制舵机的管脚
}
void loop() {
  int value = analogRead(A0);     //将可变电阻的模拟数值存到value中
  int angle = map(value, 0, 1023, 0, 180);   //将模拟值转为角度值
  myservo.write(angle);  //使舵机转动到特定角度myservo.write(角度)  
  delay(15);
} 

程序运行调试

转动可变电阻器的旋钮,使伺服舵机的转轴随之转动。

map()函数

需要将读到的模拟数值(0-1023)等比例缩小到伺服舵机的角度范围(0-180),可以使用Arduino中的map()函数:

  int value = analogRead(A0);     //将可变电阻的模拟数值存到value中
  int angle = map(value, 0, 1023, 0, 180);   //将模拟值转为角度值

参考wokwi.com上的伺服舵机应用案例

链接: wokwi上的超声波传感器伺服舵机演示项目链接
打开链接后,点击开始仿真按钮,然后进入仿真,再点击“超声波传感器”,拖动滑条,改变超声波传感器检测的距离数据。可以看到伺服舵机的控制效果。

超声波传感器伺服舵机演示操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值