37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。
Arduino实验接线示意图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之十三:测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之十三:测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示
*/
#include <Wire.h>
#include <SimpleFOC.h>
// 使用SimpleFOC库中的低通滤波器
LowPassFilter as5600_filter(0.01);
void setup() {
Serial.begin(115200);
Wire.begin(); // 初始化I2C
}
void loop() {
uint16_t readValue = 0;
byte readArray[2];
// 通知设备即将读取数据
Wire.beginTransmission(0x36);
Wire.write(0x0C);
Wire.endTransmission(false);
// 读取数据的MSB和LSB
Wire.requestFrom(0x36, (uint8_t)2);
if (Wire.available() == 2) {
readArray[0] = Wire.read();
readArray[1] = Wire.read();
readValue = (readArray[0] << 8) | readArray[1];
float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
float filteredAngle = as5600_filter(angle);
Serial.println(filteredAngle); // 输出到串口监视器
} else {
Serial.println("Error reading data");
}
delay(50);
}
实验串口返回情况
为了测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示,可以使用AS5600传感器读取角度数据,并将其转换为度数。
要点解读
1、I2C初始化:使用Wire.begin()初始化I2C总线。
2、数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
3、数据读取:使用Wire.read()获取传感器数据。
4、数据转换:将原始数据除以4096,再乘以360,得到角度值。
5、低通滤波:对转换后的角度值进行低通滤波处理。
6、串口输出:将处理后的角度值通过串口输出,便于在串口绘图监视器中查看。
使用串口绘图监视器
1、打开Arduino IDE。
2、选择工具菜单中的“串口监视器”。
3、在串口监视器窗口中,选择右下角的“绘图”模式。
4、你将看到传感器数据的实时图形显示。