37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。
Arduino实验接线示意图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之一:从AS5600读取角度值
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之一:从AS5600读取角度值
*/
#include <Wire.h>
#define AS5600_I2C_ADDRESS 0x36
void setup() {
Serial.begin(9600);
Wire.begin();
Serial.println("AS5600准备就绪!开始测量");
}
void loop() {
//向AS5600请求2字节的数据
Wire.beginTransmission(AS5600_I2C_ADDRESS);
//角度值的注册地址
Wire.write(0x0E);
Wire.endTransmission();
Wire.requestFrom(AS5600_I2C_ADDRESS, 2);
//从AS5600读取角度值
int angleValue = (Wire.read() << 8) | Wire.read();
//将寄存器值转换为度数
float angle = (float)angleValue * 0.08789;
//打印角度到串行监视器
Serial.print("角度:");
Serial.print(angle);
Serial.println("度");
delay(2000);
}
实验串口返回情况
这个项目实验一演示了如何通过I2C通信协议读取AS5600磁编码器的角度值。在setup()函数中,初始化了串口通信和Wire库(用于I2C通信)。在loop()函数中,通过向AS5600发送请求,并读取2个字节的数据。然后,将读取的数据转换为角度值,并打印到串口监视器中。通过调整延迟时间,可以控制采样频率。
实验场景图