【花雕学编程】Arduino动手做(225)---动态读取AS5600位置变化并设阙值LED提示

在这里插入图片描述

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。

在这里插入图片描述
Arduino实验接线示意图

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之十八:动态读取AS5600位置变化并设阙值LED提示

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十八:动态读取AS5600位置变化并设阙值LED提示
*/

#include <Wire.h> // 包含Wire库,用于I2C通信
#include <AS5600.h> // 包含AS5600库,用于与AS5600传感器通信
#include <SimpleFOC.h> // 包含SimpleFOC库,用于低通滤波器

// 使用SimpleFOC库中的低通滤波器
LowPassFilter as5600_filter(0.01); // 创建一个低通滤波器对象,滤波系数为0.01
#define AS5600_ADDRESS 0x36 // 定义AS5600传感器的I2C地址
#define ANGLE_REG 0x0C // 定义AS5600传感器的角度寄存器地址

AS5600 encoder; // 创建AS5600传感器对象
const int ledPin = 13; // 定义LED引脚

void setup() {
  Serial.begin(115200); // 初始化串口通信,波特率为115200
  Wire.begin(); // 初始化I2C通信
  Serial.println("AS5600完成初始化I2C,准备就绪!"); // 输出初始化完成信息
  pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
}

void loop() {
  // 读取原始位置
  uint16_t rawPosition = readAS5600Position(); // 调用函数读取AS5600传感器的原始位置数据

  // 使用低通滤波器平滑位置变化
  float filteredPosition = as5600_filter(rawPosition); // 使用低通滤波器平滑位置数据

  // 打印原始位置和滤波后的位置
  Serial.print("原始位置: ");
  Serial.print(rawPosition);
  Serial.print(" - 滤波后的位置: ");
  Serial.println(filteredPosition);

  // 检测位置变化并触发LED提示
  static float last_position = 0; // 上一次的位置
  if (abs(filteredPosition - last_position) > 100) { // 如果位置变化超过100
    Serial.println("提示: 位置变化超过阈值,点亮LED灯!"); // 输出警报信息
    digitalWrite(ledPin, HIGH); // 点亮LED
    delay(1000); // LED亮1秒
    digitalWrite(ledPin, LOW); // 熄灭LED
  }

  // 更新上一次的位置
  last_position = filteredPosition; // 更新上一次的位置

  delay(500); // 延迟500毫秒
}

uint16_t readAS5600Position() {
  Wire.beginTransmission(AS5600_ADDRESS); // 开始与AS5600传感器的I2C通信
  Wire.write(ANGLE_REG); // 写入角度寄存器地址
  Wire.endTransmission(); // 结束I2C通信
  Wire.requestFrom(AS5600_ADDRESS, 2); // 请求从AS5600传感器读取2字节数据
  uint16_t position = Wire.read() << 8 | Wire.read(); // 读取并组合两个字节的数据
  return position; // 返回位置数据
}

实验串口返回情况

在这里插入图片描述
在这里插入图片描述

要点解读
1、传感器初始化:使用Wire.begin()初始化I2C通信,并通过AS5600库初始化传感器,确保能够正确读取位置数据。
2、低通滤波器:使用SimpleFOC库中的LowPassFilter类对位置数据进行平滑处理,减少噪声影响,提高数据稳定性。
3、位置数据缩放:使用map()函数将滤波后的位置数据从0-4095映射到0-100的范围,便于监控和处理。
4、阈值检测:设置位置变化阈值,当位置变化超过10时,触发LED报警,提示异常情况。
5、数据输出:通过串口输出原始位置和转换后的位置数据,便于调试和监控系统运行状态。

实验场景图

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
「雕爷编程Arduino动手做寻迹的实验可以使用TCRT5000红外反射光电开关寻迹传感器模块。这个传感器模块可以通过检测周围的光反射来进行寻迹操作。你可以将这个模块连接到mBot的主控板mCore V1.5的RJ25接口上,因为mBot的主控板兼容Arduino系统,所以你可以使用Arduino编程语言来控制mBot进行寻迹操作。请参考【Arduino】168种传感器模块系列实验中的实验六十六,该实验详细介绍了如何使用TCRT5000红外反射光电开关寻迹传感器模块进行寻迹。祝你成功完成实验!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【雕爷编程Arduino动手做(194)---makeblock mbot 主控板2](https://blog.csdn.net/weixin_41659040/article/details/132141677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【雕爷编程Arduino动手做(65)---红外寻迹传感器](https://blog.csdn.net/weixin_41659040/article/details/106604080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值