【花雕学编程】Arduino动手做(233)---读取ADXL345加速度值
ESP32-S3 UNO 开发板是基于 ESP32-S3-WROOM-1-N16R8 微控制器的扩展板,基于 Arduino 开发板架构。凭借 2.4GHz Wi-Fi 和集成蓝牙 5.0 等高级功能,它为开发各种项目提供了一个强大的平台。ESP32-S3 UNO 配备 16MB 闪存和 8MB RAM,特别适用于物联网 (IoT)、机器人和其他工程项目的复杂应用。该开发板支持 Python 和 C 等流行的编程语言,可以在 Arduino IDE 开发环境中轻松编程和使用。该板的高级功能,包括对多种通信协议的支持和高处理能力,使其成为专业工程师和开发人员的理想工具。
【花雕学编程】Arduino动手做(233)---读取ADXL345加速度值
ADXL345是一款由Analog Devices公司推出的三轴数字加速度计,具有高分辨率和低功耗的特点,非常适合移动设备和其他需要精确加速度测量的应用。以下是对ADXL345三轴模块的详细介绍:1、主要特点
高分辨率:ADXL345能够提供高达13位的分辨率,能够测量高达±16g的加速度1。
低功耗:在测量模式下,功耗低至23 μA,在待机模式下功耗仅为0.1 μA1。
多种测量范围:用户可以选择±2g、±4g、±8g或±16g的测量范围,适应不同的应用需求1。
数字接口:支持SPI(3线或4线)和I2C数字接口,方便与各种微控制器进行通信1。
内置功能:具有活动/非活动检测、单击/双击检测、自由落体检测等多种功能,可以独立映射到两个中断输出引脚1。
2、应用场景
移动设备:用于检测设备的倾斜、运动和冲击。
医疗仪器:用于监测患者的运动状态。
游戏和定点设备:用于检测用户的动作和姿态。
工业仪器仪表:用于监测机器的振动和运动状态。
个人导航设备:用于检测设备的方向和运动。
3、引脚功能
ADXL345模块通常有以下引脚:
VCC:电源引脚,连接到2.0V至3.6V的电源。
GND:地引脚。
SDA/SDI/SDIO:数据输入/输出引脚,用于I2C或SPI通信。
SCL/SCLK:时钟引脚,用于I2C或SPI通信。
CS:片选引脚,用于SPI通信。
INT1/INT2:中断引脚,用于输出检测到的事件。
4、使用步骤
连接电源和地:将VCC引脚连接到电源,GND引脚连接到地。
选择通信接口:根据需要选择I2C或SPI接口,并连接相应的引脚。
初始化传感器:在代码中初始化ADXL345传感器,设置测量范围和其他参数。
读取数据:通过I2C或SPI接口读取加速度数据,并进行处理。
ADXL345是一款功能强大且易于使用的三轴加速度计,适用于各种需要精确加速度测量的应用。
【花雕学编程】Arduino动手做(233)---读取ADXL345加速度值
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
{花雕动手做}项目之八:ESP32-S3 UNO使用ADXL345传感器读取加速度数据并计算俯仰角和滚动角
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
{花雕动手做}项目之八:ESP32-S3 UNO使用ADXL345传感器读取加速度数据并计算俯仰角和滚动角
*/
#include <Wire.h>// 引入Wire库,用于I2C通信
#define DEVICE (0x53)// ADXL345设备地址
#define TO_READ (6) // 每次要读取的字节数(每个轴两个字节)
byte buff; // 6字节缓冲区,用于保存从设备读取的数据
char str; // 字符串缓冲区,用于在将数据发送到串行端口之前对其进行转换
int regAddress = 0x32;// ADXL345上的第一个轴加速度数据寄存器
int x, y, z; // 三轴加速度数据
double roll = 0.00, pitch = 0.00;// Roll & Pitch 是绕X轴和Y轴旋转的角度
void setup() {
Wire.begin(4, 5);// 初始化I2C总线,设置SDA为GPIO4,SCL为GPIO5
Serial.begin(115200);// 启动串口输出
// 开启ADXL345
writeTo(DEVICE, 0x2D, 0); // 进入待机模式
writeTo(DEVICE, 0x2D, 16);// 重置所有位
writeTo(DEVICE, 0x2D, 8); // 设置测量模式
}
void loop() {
readFrom(DEVICE, regAddress, TO_READ, buff); // 从ADXL345读取加速度数据
// 每个轴读数的分辨率为10位,即2个字节。最低有效字节优先!!
// 因此我们将两个字节转换为一个整数
x = (((int)buff) << 8) | buff;
y = (((int)buff) << 8) | buff;
z = (((int)buff) << 8) | buff;
// 将x, y, z值作为字符串发送到串口
Serial.print("x, y, z的加速度信息为:");
sprintf(str, "%d %d %d", x, y, z);
Serial.print(str);
Serial.write(10);
// 计算Roll & Pitch
RP_calculate();
Serial.print("滚动:");
Serial.println(roll);
Serial.print("俯仰:");
Serial.println(pitch);
Serial.println("");
// 延迟以避免阻塞端口
delay(2000);
}
// 将val写入设备上的地址寄存器
void writeTo(int device, byte address, byte val) {
Wire.beginTransmission(device); // 开始传输到设备
Wire.write(address); // 发送寄存器地址
Wire.write(val); // 发送要写入的值
Wire.endTransmission(); // 结束传输
}
// 从设备上的地址寄存器开始读取num字节到buff数组
void readFrom(int device, byte address, int num, byte buff[]) {
Wire.beginTransmission(device); // 开始传输到设备
Wire.write(address); // 发送要读取的地址
Wire.endTransmission(); // 结束传输
Wire.beginTransmission(device); // 开始传输到设备
Wire.requestFrom(device, num);// 从设备请求num个字节
int i = 0;
while (Wire.available()) // 设备发送的数据可能少于请求的数据(异常)
{
buff = Wire.read(); // 接收一个字节
i++;
}
Wire.endTransmission(); // 结束传输
}
// 计算Roll & Pitch
void RP_calculate() {
double x_Buff = float(x);
double y_Buff = float(y);
double z_Buff = float(z);
roll = atan2(y_Buff, z_Buff) * 57.3;// 计算滚动角
pitch = atan2(-x_Buff, sqrt(y_Buff * y_Buff + z_Buff * z_Buff)) * 57.3;// 计算俯仰角
}
【花雕学编程】Arduino动手做(233)---读取ADXL345加速度值
实验串口返回情况【花雕学编程】Arduino动手做(233)---读取ADXL345加速度值
实验串口绘图器返回情况
页:
[1]