《Arduino开发实战指南:机器人卷》一2.2 模拟I/O口的操作函数

简介:

本节书摘来华章计算机《Arduino开发实战指南:机器人卷》一书中的第2章 ,第2.2节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 模拟I/O口的操作函数

2.2.1 analogReference(type)
analogReference函数的作用是配置模拟输入引脚的基准电压(即输入范围的最大值),它是一个无返回值函数,只有一个参数type,type的选项有DEFAULT/INTERNAL/ INTERNAL1V1/INTERNAL2V56/EXTERNAL,其具体含义如下。

  • DEFAULT:默认5V或3.3V为基准电压(以Arduino板的电压为准)。
  • INTERNAL:低电压模式,使用片内基准电压源(Arduino Mega无此选项)。
  • INTERNAL1V1:低电压模式,以1.1V为基准电压(此选项仅针对Arduino Mega)。
  • INTERNAL2V56:低电压模式,以2.56V为基准电压(此选项仅针对Arduino Mega)。
  • EXTERNAL:扩展模式,以AREF引脚(0~5V)的电压作为基准电压,

其中AREF引脚的位置如图2.1所示。

image

设置模拟输入引脚的基准电压为默认值的语句如下:

analogReference (DEFAULT);

注意
使用AREF引脚上的电压作为基准电压时,需接一个5kΩ的上拉电阻,以实现外部和内部基准电压之间的切换。但总阻值会发生变化,因为AREF引脚内部有一个32kΩ电阻,接上拉电阻后会产生分压作用,因此,最终AREF引脚上的电压为,Varef为AREF引脚的输入电压。

2.2.2 analogRead(pin)

analogRead函数的作用是从指定的模拟引脚读取值,读取周期为100μs,即最大读取速度可达每秒10?000次。参数pin表示读取的模拟输入引脚号,返回值为int型(范围在
0~1023)。
Arduino Uno主板有6个通道(Mega有16个)10位AD(模数)转换器,即精度为10位,返回值是0~1023。也就是说输入电压为5V的读取精度为5V/1024个单位,约等于每个单位0.049V(4.9mV)。输入范围和进度可通过analogReference()进行修改。
如输入电压为a,那么获取模拟输入引脚3的电压值的示例程序如下:

int potPin = 3; 
int value = 0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  value = analogRead(potPin) *a*1000/1023;    // 输入电压是a
  Serial.println(value);                // 输出电压值的单位为mV
}

注意
对Arduino Uno而言,函数参数的pin范围是0~5,对应板上的模拟口A0~A5。其他型号的Arduino控制板以此类推。

2.2.3 analogWrite(pin,value)

analogWrite函数的作用是通过PWM的方式将模拟值输出到引脚,即调用analogWrite函数后,相应引脚将产生一个指定占空比的稳定方波(频率大约为490Hz),直到下一次调用该函数,可应用在LED亮度调节、电机速度控制等方面。
analogWrite函数是无返回值函数,有两个参数pin和value。参数pin表示将输出PWM的引脚,这里只能选择函数支持的引脚。对于大多数Arduino板(板载ATmega168或ATmega328),这个函数支持引脚3、5、6、9、10和11,对于ArduinoMega,它适用于2~13号引脚。参数value表示PWM输出的占空比,因为PWM输出位数为8,所以其范围在0(常闭)~255(常开)之间,对应占空比为0~100%。带PWM功能的引脚均标有波浪号“~”。
从引脚11输出PWM的示例程序如下:

int sensor=A0;
int LED=11;  
int value;
void setup()
{ 
   Serial.begin(9600);
}
void loop()
{  
   value =analogRead(sensor);
   Serial.println(value,DEC);    // 可以观察读取的模拟量
   analogWrite(LED, value /4);    // 读回的值范围是0~1023,结果除以4才能得到0~255的区间值
}

注意
引脚5和6的PWM输出将产生高于预期的占空比。这是因为millis()和delay()函数共享同一个内部定时器,使内部计时器在处理PWM输出时分心。这种情况一般出现在低占空比设置时,如0~10的情况下。还有些情况是占空比为0时,引脚5和6并没有关闭输出。

相关文章
|
4月前
|
机器学习/深度学习 机器人
马尔可夫决策过程与贝尔曼方程在扫地机器人中的应用(求解状态值和最优状态值函数和策略)
马尔可夫决策过程与贝尔曼方程在扫地机器人中的应用(求解状态值和最优状态值函数和策略)
43 0
|
4月前
|
算法 机器人 Python
动态规划法在扫地机器人中的实战应用(基于动作值函数的策略迭代 python 附源码)
动态规划法在扫地机器人中的实战应用(基于动作值函数的策略迭代 python 附源码)
37 0
|
4月前
|
机器学习/深度学习 算法 Python
动态规划法和策略迭代在扫地机器人中确定状态值和动作值函数的策略评估(python实现 附源码 超详细)
动态规划法和策略迭代在扫地机器人中确定状态值和动作值函数的策略评估(python实现 附源码 超详细)
35 0
|
6月前
|
机器学习/深度学习 存储 机器人
一文看懂!Go语言开发聊天机器人
一文看懂!Go语言开发聊天机器人
67 0
|
6月前
|
算法 机器人
秒合约期权机器人开发/秒合约系统/币币合约/技术开发应用
秒合约期权机器人开发/秒合约系统/币币合约/技术开发应用
|
2月前
|
缓存 数据可视化 安全
开发阿里云 RPA 机器人的技巧
在当今数字化时代,机器人流程自动化(RPA)技术正逐渐成为企业提高效率和优化业务流程的重要手段。阿里云 RPA 作为一种强大的工具,为开发高效的机器人提供了丰富的功能和支持。本文将分享一些开发阿里云 RPA 机器人的技巧,帮助您更好地利用该平台的能力。
|
2月前
|
人工智能 自然语言处理 机器人
自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人
如今,大模型层出不穷,这为自然语言处理、计算机视觉、语音识别和其他领域的人工智能任务带来了重大的突破和进展。大模型通常指那些参数量庞大、层数深、拥有巨大的计算能力和数据训练集的模型。 但不能不承认的是,普通人使用大模型还是有一定门槛的,首先大模型通常需要大量的计算资源才能进行训练和推理。这包括高性能的图形处理单元(GPU)或者专用的张量处理单元(TPU),以及大内存和高速存储器。说白了,本地没N卡,就断了玩大模型的念想吧。 其次,大模型的性能往往受到模型调优和微调的影响。这需要对模型的超参数进行调整和优化,以适应特定任务或数据集。对大模型的调优需要一定的经验和专业知识,包括对深度学
自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人
|
3月前
|
传感器 监控 安全
【全3D打印坦克——基于Arduino履带式机器人】
【全3D打印坦克——基于Arduino履带式机器人】
83 1
|
5月前
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
314 0
|
7月前
|
机器学习/深度学习 存储 人工智能
区块链、智能ai量化现货合约现货量化机器人开发公司
随着区块链技术和人工智能的不断发展,一个新的领域正在崭露头角,那就是区块链智能AI量化现货合约现货量化机器人。这种技术结合了区块链的去中心化特性和人工智能的智能分析能力,为现货市场的投资者提供了一个全新的工具。

热门文章

最新文章