37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之二:将AS5600角度传感器集成到电机项目中
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之二:将AS5600角度传感器集成到电机项目中
*/
#include "AS5600.h"
#include "Wire.h"
AS5600 as5600; //默认情况下使用Wire
//不同变量的声明
int positionZero;
const int buttonPin = 2; //按钮的引脚号
int buttonState = 0; //用于读取按钮状态的变量
void setup() {
//初始化串行端口并设置串行通信的波特率
Serial.begin(115200);
Wire.begin();
//使用内部上拉将按钮初始化为输入
pinMode(buttonPin, INPUT_PULLUP);
Serial.println("文件路径信息:");
Serial.println(__FILE__);
Serial.println(" ");
//显示AS5600库的版本
Serial.print("AS5600库的版本: ");
Serial.println(AS5600_LIB_VERSION);
as5600.begin(4); //这条线初始化AS5600传感器
as5600.setDirection(AS5600_CLOCK_WISE); //确定传感器的旋转方向
//检查连接
int b = as5600.isConnected();
Serial.print("已连接: ");
Serial.println(b);
delay(5000);
//设置零位置
positionZero = as5600.rawAngle();
}
void loop() {
//读取按钮状态
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
positionZero = as5600.rawAngle();
}
//显示相对于零点和定义方向的角度值
Serial.print("点角值:");
Serial.print("\t");
//该代码行从AS5600传感器读取调整后的角度并将其显示在监视器上,
//这可能有助于跟踪或调试。
Serial.println(as5600.readAngle());
//显示零的值
Serial.print("零->位置的总值");
//命令serial.print(“\t”);在代码中,Arduino在串行端口上发送一个制表符(由\t表示)
Serial.print("\t");
Serial.println(positionZero);
//使用AS5600传感器测量角位置
//并以度为单位显示角度值
conversion_de_angle();
Serial.println(" ");
Serial.println(" ");
delay(3000);
}
conversion_de_angle函数:
void conversion_de_angle() {
//这行代码允许通过减去参考位置来计算相对角度
//测量的原始角度,这提供了更显著的角度测量
//在预定义的参考位置。
int angleBrut = as5600.rawAngle() - positionZero; //减去零位置
if (angleBrut < 0) angleBrut += 4096; //管理溢出
float angleBrutEnDegres = angleBrut * 0.088; //转换为度
Serial.print("读取角度值为: ");
Serial.println(angleBrutEnDegres);
}
实验串口返回情况
实验场景图