基于ADXL345和Arduino Uno制作一个显示传感器所在平面与水平面角度的水平仪
时间: 2024-05-02 16:17:40 浏览: 184
基于Android嵌入式平台传感器应用开发水平仪
1. 硬件准备
- Arduino Uno主板
- ADXL345三轴加速度传感器模块
- OLED屏幕
- 杜邦线若干
2. 软件准备
- Arduino IDE开发环境
- ADXL345库文件
3. 连接硬件
将ADXL345模块的VCC和GND引脚连接到Arduino的5V和GND引脚上,将SCL和SDA引脚连接到Arduino的A5和A4引脚上,然后将OLED屏幕的SDA和SCL引脚连接到Arduino的A4和A5引脚上。
4. 编写代码
首先,在Arduino IDE中导入ADXL345库文件,然后编写代码实现读取传感器数据,计算出传感器所在平面与水平面的角度,并将结果显示在OLED屏幕上。
以下是示例代码:
```
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_ADXL345_U.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
if(!accel.begin()){
display.println("Could not find a valid ADXL345 sensor, check wiring!");
display.display();
while(1);
}
}
void loop() {
sensors_event_t event;
accel.getEvent(&event);
float x = event.acceleration.x;
float y = event.acceleration.y;
float z = event.acceleration.z;
float pitch = atan2(x, sqrt(y * y + z * z)) * 180 / PI;
float roll = atan2(y, sqrt(x * x + z * z)) * 180 / PI;
display.clearDisplay();
display.setCursor(0,0);
display.print("Pitch: ");
display.print(pitch);
display.println(" degrees");
display.print("Roll: ");
display.print(roll);
display.println(" degrees");
display.display();
delay(100);
}
```
5. 调试测试
将Arduino Uno主板连接到电脑上,上传代码,然后观察OLED屏幕显示的结果,可以通过旋转传感器模块来验证是否正确显示角度。
阅读全文