본문 바로가기

아두이노우노 R4

ADXL345 가속도계와 아두이노 UNO 연동하기

반응형

 

 

https://circuitdigest.com/microcontroller-projects/interface-adxl345-accelerometer-with-arduino-uno

 

가속도계와 자이로스코프는 주로 가속도를 감지하는 데 사용되는 가속도계와 자이로스코프에 대해 모두 알고 있습니다. 가속도계는 선형 가속도를 측정할 수 있지만 자이로스코프는 회전 가속도를 찾는 데 도움이 됩니다. 자이로스코프는 지구의 중력을 이용해 움직이는 물체의 방향을 결정하는 각속도를 측정하는 데 사용됩니다. 가속도계와 자이로스코프가 모두 있는 MPU6050과 같은 센서가 있으며 방향, 위치 및 속도를 찾기 위해 관성 측정 장치(IMU)로 작동합니다.

 

여기서는 가속도 또는 x, y 및 z 축의 속도 변화를 측정하는 데 사용되는 ADXL345 가속도계에 대해 논의하고 있습니다. 이 소형 센서는 자동차나 자전거에서 사고를 감지하여 에어백을 전개하는 데 사용되며 휴대폰에서도 나침반 및 위치 추적과 같은 다양한 애플리케이션에 사용됩니다. 가속도계를 사용하여 아래 링크에서 확인할 수 있는 다양한 유용한 애플리케이션을 만들었습니다: 차량 사고 경보 시스템 아두이노 지진 감지기를 이용한 손동작 제어 로봇 지진 감지기 알람 핑퐁 게임

 

여기에서 가속도계 기반 프로젝트를 모두 볼 수 있습니다.

 

가속도 센서의 종류

 

시중에는 다양한 유형의 MEMS 가속도 센서가 나와 있습니다. 정밀도, 전력 소비 및 인터페이스를 기준으로 분류할 수 있습니다. 이 모든 센서는 휴대가 가능하며 웨어러블과 같은 모든 종류의 디바이스에 장착할 수 있습니다. 이 센서는 3축(x, y, z) 가속도를 측정합니다. 널리 사용되는 센서는 다음과 같습니다:

 

  • ADXL335
  • ADXL345
  • ADXL356 

 

 

 

 

이 가속도계 센서는 매우 인기가 있으며 이 세 가지 외에도 ADXL354, ADXL355, ADXL372 등과 같은 다른 가속도계 센서가 많이 있습니다. 

 

이러한 센서의 차이점을 살펴보겠습니다. 

 

비교: ADXL335 vs ADXL345 vs ADXL356 

 

  ADXL356 ADXL345 ADXL335
Range ±10g to ±40g ±16g ±3g, small range with precise readings
Interface Analog SPI, I2C Analog
Power Consumption Low
Typical: 150µ
Low
Typical: 140µ
Standard
Typical: 350µ
Pricing High Low Lowest

 

위의 세 가지 중 ADXL345는 디지털 특성으로 인해 인터페이스가 쉽습니다. 하지만 SPI/I2C 프로토콜에서 작동하기 때문에 프로그래밍이 어렵습니다. ADXL345는 정적 및 동적 가속도를 측정할 수 있으며 모바일 애플리케이션에 적합합니다. 또한 이 센서는 실험실에서 보정되었기 때문에 추가 보정이 필요하지 않습니다. 

 

 

여기에서는 ADXL345 센서용 Adafruit 라이브러리를 사용하여 Arduino Uno와 인터페이스 합니다.

 

필요한 구성 요소

  1. Arduino UNO
  2. ADXL345 가속도계
  3. 수-암 와이어
  4. 브레드 기판

 

회로도

 

ADXL345 가속도계와 Arduino 인터페이스용 회로도는 아래에 나와 있습니다. 

 

 

ADXL345 아두이노 연결:

  • 아두이노의 A4 핀(SDA) 연결-> adxl345의 SDA 핀
  • 아두이노의 A5 핀(SCL) 연결-> adxl345의 SCL 핀
  • 아두이노의 GND 연결-> adxl345의 GND 핀
  • 아두이노의 5V 연결-> adxl345의 Vcc 연결 

 

 

ADXL345 아두이노 코드 설명

 

이 ADXL345 아두이노 프로젝트에는 ADXL345 센서용 라이브러리 두 개가 필요합니다.

  1. Adafruit ADXL345
  2. Adafruit 통합 센서

 

위의 라이브러리를 다운로드하려면 아두이노 IDE를 열고 스케치 -> 라이브러리 포함 -> 라이브러리 관리로 이동합니다. Adafruit ADXL345를 검색하여 설치합니다. 마찬가지로 Adafruit Unified 센서를 검색하여 설치합니다. 

 

아래는 아두이노 IDE 2 버전에서 사용한다고 할 때 라이브러리 설치 방법을 설명하는 이미지입니다.

 

 

 

이제 코드를 작성할 준비가 되었습니다.

 

예제 코드는 파일 -> 예제 -> Adafruit ADXL345 -> sensortest 1에서 찾을 수 있습니다.

 

1. 먼저 센서의 기능을 지원하는 데 필요한 모든 라이브러리 헤더 파일을 포함합니다. 여기서는 I2C 통신을 위해 와이어 라이브러리를 사용하고 있습니다.

 

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

 

2. ADXL345 아두이노 라이브러리의 다양한 기능을 사용하기 위해 accel과 같은 변수를 사용하여 인스턴스를 만듭니다.

 

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified();

 

 

3. void setup() 함수에서 Serial.start() 함수를 사용하여 직렬 모니터에 데이터를 출력할 수 있도록 직렬 통신을 초기화합니다. 이제 유효한 ADXL 센서가 연결되었는지 여부를 확인합니다. accel.begin() 함수에서 반환된 결과를 확인하여 false를 반환하면 유효한 센서를 찾지 못했다는 메시지를 출력합니다.

 

void setup()
{
   Serial.begin(9600); 
   if(!accel.begin())
   {
      Serial.println("No valid sensor found");
      while(1);
   }
}

 

4. void loop() 함수에서 sensors_event_t 구조를 사용할 변수를 생성합니다. 이 변수(이 경우 "event")를 사용하여 .getevent() 함수를 사용하여 구조체 멤버를 채웁니다. 이제 event.acceleration.x() 함수를 사용하여 x, y, z축의 가속도 값을 출력합니다.

 

void loop() 
{
sensors_event_t event; 
accel.getEvent(&event);
Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("");
Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("");
Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("");
Serial.println("m/s^2 ");
delay(500);
}

 

 

전체 코드와 데모 동영상은 이 글의 마지막에 제공됩니다.

 

ADXL345 가속도계 아두이노 인터페이스 테스트

 

마지막으로 ADXL345 센서와 아두이노 우노를 제대로 연결하고 아두이노 우노 보드에 코드를 업로드합니다. 그런 다음 직렬 모니터를 열면 아래와 같이 가속도 측정값이 x, y, z 축으로 표시됩니다. 

 

 

센서를 모든 방향으로 천천히 움직이면서 판독값을 관찰하세요. 

 

 

 

이것이 바로 가속도계를 아두이노 UNO와 함께 사용하여 x, y, z축의 변화를 감지하는 방법입니다. 아래 동영상을 통해 ADXL345 아두이노 코드를 완성하세요. 

 

 

#include <Wire.h>

#include <Adafruit_Sensor.h> 

#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified();

void setup(void) 

{

   Serial.begin(9600);  

   if(!accel.begin())

   {

      Serial.println("No valid sensor found");

      while(1);

   }

}

void loop(void) 

{

   sensors_event_t event; 

   accel.getEvent(&event);

   Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");

   Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");

   Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");

   Serial.println("m/s^2 ");

   delay(500);

}

 

 

데모 동영상 링크

 

문서 참고한 곳은 이 링크를 따라가세요.

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^