223浏览
查看: 223|回复: 5

[项目] 【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试

[复制链接]
【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试图1

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加速度计测试图2

驴友花雕  中级技神
 楼主|

发表于 2024-10-5 21:20:05

【花雕学编程】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加速度计测试图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-5 21:22:21

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
  {花雕动手做}项目之十:以 m/s^2 为单位的ADXL345加速度计测试

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
  4.   {花雕动手做}项目之十:以 m/s^2 为单位的ADXL345加速度计测试
  5. */
  6. #include <Wire.h>
  7. #include <Adafruit_Sensor.h>
  8. #include <Adafruit_ADXL345_U.h>
  9. //同时给这个传感器分配一个唯一的ID
  10. Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
  11. void displaySensorDetails(void){
  12.   sensor_t sensor;
  13.   accel.getSensor(&sensor);
  14.   Serial.println("------------------------------------");
  15.   Serial.print  ("传感器:       "); Serial.println(sensor.name);
  16.   Serial.print  ("驱动版本:   "); Serial.println(sensor.version);
  17.   Serial.print  ("唯一标识:    "); Serial.println(sensor.sensor_id);
  18.   Serial.print  ("最大值:    "); Serial.print(sensor.max_value); Serial.println(" m/s^2");
  19.   Serial.print  ("最小值:    "); Serial.print(sensor.min_value); Serial.println(" m/s^2");
  20.   Serial.print  ("分辨率:   "); Serial.print(sensor.resolution); Serial.println(" m/s^2");  
  21.   Serial.println("------------------------------------");
  22.   Serial.println("");
  23.   delay(500);
  24. }
  25. void displayDataRate(void){
  26.   Serial.print  ("数据速率:  ");
  27.   
  28.   switch(accel.getDataRate())
  29.   {
  30.     case ADXL345_DATARATE_3200_HZ:
  31.       Serial.print  ("3200 ");
  32.       break;
  33.     case ADXL345_DATARATE_1600_HZ:
  34.       Serial.print  ("1600 ");
  35.       break;
  36.     case ADXL345_DATARATE_800_HZ:
  37.       Serial.print  ("800 ");
  38.       break;
  39.     case ADXL345_DATARATE_400_HZ:
  40.       Serial.print  ("400 ");
  41.       break;
  42.     case ADXL345_DATARATE_200_HZ:
  43.       Serial.print  ("200 ");
  44.       break;
  45.     case ADXL345_DATARATE_100_HZ:
  46.       Serial.print  ("100 ");
  47.       break;
  48.     case ADXL345_DATARATE_50_HZ:
  49.       Serial.print  ("50 ");
  50.       break;
  51.     case ADXL345_DATARATE_25_HZ:
  52.       Serial.print  ("25 ");
  53.       break;
  54.     case ADXL345_DATARATE_12_5_HZ:
  55.       Serial.print  ("12.5 ");
  56.       break;
  57.     case ADXL345_DATARATE_6_25HZ:
  58.       Serial.print  ("6.25 ");
  59.       break;
  60.     case ADXL345_DATARATE_3_13_HZ:
  61.       Serial.print  ("3.13 ");
  62.       break;
  63.     case ADXL345_DATARATE_1_56_HZ:
  64.       Serial.print  ("1.56 ");
  65.       break;
  66.     case ADXL345_DATARATE_0_78_HZ:
  67.       Serial.print  ("0.78 ");
  68.       break;
  69.     case ADXL345_DATARATE_0_39_HZ:
  70.       Serial.print  ("0.39 ");
  71.       break;
  72.     case ADXL345_DATARATE_0_20_HZ:
  73.       Serial.print  ("0.20 ");
  74.       break;
  75.     case ADXL345_DATARATE_0_10_HZ:
  76.       Serial.print  ("0.10 ");
  77.       break;
  78.     default:
  79.       Serial.print  ("???? ");
  80.       break;
  81.   }  
  82.   Serial.println(" Hz");  
  83. }
  84. void displayRange(void){
  85.   Serial.print  ("范围:  +/- ");
  86.   
  87.   switch(accel.getRange())
  88.   {
  89.     case ADXL345_RANGE_16_G:
  90.       Serial.print  ("16 ");
  91.       break;
  92.     case ADXL345_RANGE_8_G:
  93.       Serial.print  ("8 ");
  94.       break;
  95.     case ADXL345_RANGE_4_G:
  96.       Serial.print  ("4 ");
  97.       break;
  98.     case ADXL345_RANGE_2_G:
  99.       Serial.print  ("2 ");
  100.       break;
  101.     default:
  102.       Serial.print  ("?? ");
  103.       break;
  104.   }  
  105.   Serial.println(" g");  
  106. }
  107. void setup(void){
  108. #ifndef ESP32
  109.   while (!Serial);
  110. #endif
  111.   Serial.begin(115200);  // 初始化串口通信,波特率为115200
  112.   Wire.begin(4, 5);  // 初始化I2C总线,设置SDA为GPIO4,SCL为GPIO5
  113.   Serial.println("加速度计测试"); Serial.println("");
  114.   
  115.   //初始化传感器
  116.   if(!accel.begin())
  117.   {
  118.     //检测 ADXL345 时出现问题...检查您的连接
  119.     Serial.println("糟糕,没有检测到 ADXL345……检查你的接线!");
  120.     while(1);
  121.   }
  122.   //将范围设置为适合您项目的范围
  123.   accel.setRange(ADXL345_RANGE_16_G);
  124.   // accel.setRange(ADXL345_RANGE_8_G);
  125.   // accel.setRange(ADXL345_RANGE_4_G);
  126.   // accel.setRange(ADXL345_RANGE_2_G);
  127.   
  128.   //显示这个传感器的一些基本信息
  129.   displaySensorDetails();
  130.   
  131.   // 显示附加设置(sensor_t 范围之外)
  132.   displayDataRate();
  133.   displayRange();
  134.   Serial.println("");
  135. }
  136. void loop(void){
  137.   //获取新的传感器事件
  138.   sensors_event_t event;
  139.   accel.getEvent(&event);
  140.   //显示结果(加速度以 m/s^2 为单位)
  141.   Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");
  142.   Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");
  143.   Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");Serial.println("m/s^2 ");
  144.   delay(1000);
  145. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-5 21:24:34

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试

实验串口返回情况

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-5 21:26:37

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试

实验串口绘图器返回情况

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-5 21:28:17

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试图2

【花雕学编程】Arduino动手做(233)---ADXL345加速度计测试图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail