본문 바로가기

라즈베리파이 5

ADXL345 가속도계를 라즈베리 파이에 연결

반응형

 

이 라즈베리 파이 가속도계 프로젝트에서는 ADXL345 가속도계를 라즈베리 파이에 연결하는 방법을 보여드리겠습니다. 또한, 가속도계와 상호 작용하도록 Python 스크립트를 프로그래밍하는 방법도 보여드립니다. 

 

 

이 튜토리얼에서는 ADXL345를 Raspberry Pi에 연결하는 과정을 안내합니다. 또한 Adafruit의 ADXL34x 라이브러리를 구현하여 장치와 통신하는 방법도 단계별로 설명합니다. 두 과정 모두 비교적 간단합니다.

 

ADXL345는 I2C 및 SPI 직렬 인터페이스를 활용하는 저전력 3축(X, Y, Z 가속도를 모두 추적) MEMS 가속도계입니다.

 

MEMS는 Micro Electro Mechanical System의 약자로, 잘 모르시는 분들을 위해 설명드리자면 , 가속도계의 경우 센서가 감지하는 현재 가속도를 계산하는 데 사용되는 미세한 부품이 있다는 것을 의미합니다. 

 

I2C와 SPI 직렬 프로토콜을 모두 지원하므로 가속도계에서 오는 데이터를 해석하기 위해 추가 하드웨어가 필요하지 않으므로 Raspberry Pi에서 사용하기가 매우 쉽습니다. 

 

이 가속도계와 잘 어울리는 라즈베리 파이용 센서는 여러 가지가 있습니다 . 예를 들어, 거리 센서는 센서와 물체 사이의 거리를 측정하는 데 매우 유용합니다. 

 

Raspberry Pi에 ADXL345 가속도계를 설정하는 데 필요한 모든 장비는 다음과 같습니다.

  • 라즈베리파이 아마존
  • 마이크로 SD 카드 아마존 (8GB 이상 권장)
  • 전원 공급 장치 아마존
  • 브레드보드 와이어 아마존
  • ADXL345 가속도계 아마존 

 

라즈베리파이 ADXL345 가속도계 설정

 

이 튜토리얼의 이 부분에서는 디지털 ADXL345 가속도계를 Raspberry Pi에 연결하는 방법을 보여드리겠습니다.

 

ADXL345는 디지털 센서이므로 아날로그-디지털 변환기와 같은 추가 회로를 사용할 필요가 없습니다 . 디지털 센서이기 때문에 라즈베리파이에 직접 연결할 수 있습니다.

 

아래 가이드를 따라 Raspberry Pi에 ADXL345 가속도계를 설정하는 방법을 알아보세요.

 

ADXL345 가속도계 회로

 

아래에서는 Raspberry Pi에 가속도계를 연결하는 두 가지 방법을 보여드리겠습니다.

 

다이어그램을 따르거나 필요한 전선과 GPIO 핀에 대한 서면 단계를 활용할 수 있습니다.

 

가속도계의 GND 핀을 Raspberry Pi의 물리적 핀 6 ( GND )에 연결합니다 .

가속도계의 VCC 핀을 Raspberry Pi의 물리적 핀 1 ( 3v3 )에 연결합니다 .

가속도계의 SDA 핀을 Raspberry Pi의 물리적 핀 3 ( SDA )에 연결합니다 .

가속도계의 SCL 핀을 Raspberry Pi의 물리적 핀 5 ( SCL )에 연결합니다 .

 

 

 

 

가속도계와 통신하기 위한 Raspberry Pi 준비

 

1.Raspberry Pi가 ADXL345 가속도계에서 데이터를 검색하기 전에 Pi 구성을 몇 가지 변경해야 합니다. 먼저 다음 두 명령을 실행하여 모든 것이 최신 상태인지 확인해 보겠습니다. 

 

sudo apt-get update
sudo apt-get upgrade

 

2.Raspberry Pi 업데이트가 완료되면 Raspberry Pi 구성 도구를 실행하여 Raspberry Pi에서 I2C를 활성화 해야 합니다. 다음 명령을 실행하여 raspi 구성 도구를 시작합니다 . 

 

sudo raspi-config

 

 

3.이 화면에서는 " 5가지 인터페이싱 옵션 " 메뉴 로 가야 합니다 .

 

키를 사용하여 raspi-config 도구 메뉴를 탐색할 수 있습니다 . 키를 사용하여 특정 옵션을 선택하세요.ARROW ENTER

 

4.이제 인터페이싱 옵션 메뉴에서 " P5 I2C " 를 선택하세요 .

 

ARM I2C 인터페이스를 활성화할지 묻는 메시지가 표시되면 “ “를 선택합니다.

5.I2C 인터페이스를 활성화한 후 다음 명령을 실행하여 Raspberry Pi를 다시 시작해야 합니다.

 

sudo reboot

 

6.이제 I2C를 활성화 하고 Raspberry Pi를 재시작했으므로 가속도계와 통신하는 데 필요한 패키지를 설치할 수 있습니다. 

 

다음 명령을 실행하여 설치하세요. 

 

sudo apt-get install python3-dev python3-pip python3-smbus i2c-tools -y

 

6.필요한 패키지를 모두 설치했으니 이제 Raspberry Pi가 ADXL345 가속도계를 인식하는지 확인해 보겠습니다.

 

다음 명령을 실행하면 됩니다. 

 

sudo i2cdetect -y 1

 

이 명령을 실행하면 명령줄에 꽤 많은 정보가 표시됩니다. 이 결과 내에 적어도 " 53"와 같은 숫자가 표시되어야 합니다.

 

아무 반응이 없으면 ADXL345 가속도계를 Raspberry Pi에 제대로 연결했는지, 센서 핀의 모든 납땜 부위가 깨끗한지 확인하세요. 오류가 발생하면 I2C를 다시 활성화해 보세요. 

 

ADXL345 가속도계와 통신하기 위한 스크립트 코딩 

 

1.이제 필요한 모든 패키지를 Raspberry Pi에 설치했으니, 간단한 Python 스크립트를 작성해 보겠습니다. 이 스크립트는 가속도계에서 정보를 읽어오는 데 사용됩니다.

 

ADXL345와 통신하기 위해 Adafruit의 ADXL34x Python 라이브러리를 사용합니다 . 이 라이브러리를 설치하고 활용하려면 다음 pip명령을 실행해야 합니다 .

 

sudo pip3 install adafruit-circuitpython-ADXL34x

 

2.라이브러리가 설치되었으므로 이제 작은 Python 스크립트를 코딩할 수 있습니다.

다음 명령을 실행하여 이 파일을 쓰기 시작하세요.

 

nano ~/accelerometer.py

 

3.새로운 스크립트에 다음 코드 줄을 작성하세요.

 

import time

 

먼저 " " 라이브러리를 가져옵니다 time. " time" 라이브러리를 활용하여 스크립트를 잠시 대기 상태로 만들 수 있습니다.

 

import board

 

여기서는 Adafruit의 " " 라이브러리를 가져옵니다 board. 이 고유한 라이브러리는 장치에서 사용 가능한 핀을 빠르게 파악하도록 설계되었습니다.

 

따라서 특정 핀을 지정하는 대신 " "와 같은 명령어를 사용하면 board.scl현재 마이크로컨트롤러에 맞는 올바른 핀을 반환합니다. 이 경우에는 Raspberry Pi입니다.

 

import busio

 

다음으로, Adafruit의 " " 모듈을 가져옵니다 busio. 이 모듈에는 다양한 직렬 프로토콜을 처리하는 다양한 라이브러리가 포함되어 있습니다. 이 모듈 라이브러리를 사용하여 I2C 직렬 프로토콜을 처리합니다.

 

import adafruit_adxl34x

 

이제 " " 라이브러리를 가져옵니다 adafruit_adxl34x. 이 라이브러리에는 ADXL345 가속도계에서 정보를 읽는 데 필요한 모든 코드가 포함되어 있어 프로세스를 매우 간단하게 만들어 줍니다.

 

i2c = busio.I2C(board.SCL, board.SDA)

 

여기서는 " " 라이브러리를 사용하여 busio현재 보드의 SCL 및 SDA 핀에 대한 I2C 연결을 준비합니다. 핸들을 " i2c" 변수에 저장합니다.

 

accelerometer = adafruit_adxl34x.ADXL345(i2c)

 

이제 ADXL345 라이브러리를 " accelerometer" 객체에 인스턴스화합니다. 이 객체를 사용하여 센서에서 정보를 읽고 가져옵니다. 라이브러리 생성자에 I2C 핸들을 전달합니다.

 

 

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(0.5)

 

여기서는 " "를 사용하여 무한 루프를 시작합니다 while True:.

 

이 무한 루프 내에서 라이브러리가 가속도계에서 검색한 X , Y , Z 가속도 값을 출력합니다 .

 

X, Y, Z 값을 출력한 후 스크립트를 반 초 동안 절전 모드로 전환합니다. 

 

가속도계에서 제공하는 값이 명령줄에 범람하는 것을 막기 위해 스크립트를 절전 모드로 전환합니다.

 

4.가속도계 코드의 최종 버전은 아래와 같습니다. 최종 코드를 이 코드와 비교해 보세요. 

 

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(1)

 

모든 코드가 정확한지 확인한 후 CTRL+를 누르고 . 를 눌러 저장하세요.X,Y, ENTER

 

5.이제 코드가 완성되었으니 다음 명령을 실행하여 스크립트를 실행해 보겠습니다. 

 

python3 ~/accelerometer.py 

 

6.이 코드를 실행하면 가속도계에서 읽혀지는 값을 볼 수 있습니다. 

 

0.117680 0.313813 8.355266
0.117680 0.313813 8.394492
0.117680 0.313813 8.355266
0.117680 0.353039 8.316039
0.117680 0.431493 8.316039
0.117680 0.313813 8.276813

 

7.이제 가속도계가 데이터를 반환하고 Raspberry Pi가 올바르게 데이터를 읽고 있다는 것을 알았으므로 ADXL345 라이브러리의 다른 기능을 살펴볼 수 있습니다.

 

ADXL345 가속도계 라이브러리 탐색

 

1.Raspberry Pi 가속도계 튜토리얼의 이 섹션에서는 Adafruit의 ADXL345 가속도계 라이브러리가 제공하는 다른 기능 중 일부를 살펴보겠습니다.

 

events특히, 라이브러리가 활성화될 때 자동으로 감지할 수 있는 " "를 살펴보겠습니다 .

 

accelerometer.py시작하려면 다음 명령을 사용하여 " " 스크립트를 열어 보겠습니다 .

 

nano ~/accelerometer.py

 

2.파일 내에서 아래 표시된 줄을 찾아 추가하세요. 각 섹션의 용도와 기능을 설명하겠습니다.

 

accelerometer = adafruit_adxl34x.ADXL345(i2c)

 

위의 줄 아래에 다음 줄을 추가합니다.

 

accelerometer.enable_freefall_detection(threshold=10, time=25)

 

이 줄은 라이브러리의 자유낙하 감지 이벤트를 활성화합니다. 두 개의 변수를 받는데, 하나는 임계값이고 다른 하나는 시간입니다.

 

threshold낙하로 기록되기 위해 모든 축의 가속도가 이보다 작아야 하는 값입니다. 축척 계수는 62.5mg이므로, 예시는 10*62.5=625mg 입니다 .

 

다음으로, time변수는 모든 축의 가속도가 임계값보다 작아야 드롭으로 인식되는 시간입니다. 배율은 5ms이므로, 예시는 25×5=125ms 입니다 .

 

accelerometer.enable_motion_detection(threshold=18)

 

이 줄은 라이브러리의 동작 감지 이벤트를 활성화합니다. 임계값이라는 변수 하나를 받습니다.

 

이 threshold변수는 동작 감지를 위해 모든 축의 가속도가 초과해야 하는 값입니다. 이 값이 너무 민감하거나 충분히 민감하지 않다고 생각되면 이 값을 수정할 수 있습니다. 배율은 62.5mg이므로, 예시는 18*62.5=1125mg 입니다 .

 

accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

 

이 줄은 라이브러리 탭 감지 이벤트를 활성화합니다.

 

변수 tap_count는 한 번 탭할지 두 번 탭할지를 감지합니다. 한 번 탭하려면 1로, 두 번 탭하려면 2로 설정합니다.

 

다음은 threshold탭의 감도를 설정하는 변수입니다. 값이 높을수록 코드가 탭을 감지하는 데 덜 민감해집니다. 다른 임계값 변수와 마찬가지로 스케일 팩터는 62.5mg입니다.

 

변수 duration는 동작이 발생해야 하는 시간(나노초)입니다. 동작 시간이 너무 길면 탭으로 감지되지 않습니다. 이 값은 ms 단위여야 합니다.

 

이제 latency변수는 초기 임펄스 이후 두 번째 탭을 찾기 시작하는 데 걸리는 시간입니다. 지연 시간 값은 ms 단위여야 합니다.

 

마지막으로, 이 window변수는 코드가 두 번째 탭이 발생할 때까지 기다려야 하는 시간입니다. 이 값 역시 ms 단위여야 합니다.

 

 

print("%f %f %f"%accelerometer.acceleration)

 

아래에 다음 줄을 추가하세요

 

    print("Dropped: %s"%accelerometer.events["freefall"])
    print("Tapped: %s"%accelerometer.events['tap'])
    print("Motion detected: %s"%accelerometer.events['motion'])

 

 

이 추가 줄은 스크립트에서 앞서 활성화한 모든 이벤트의 상태를 출력합니다. 이 출력 줄을 통해 현재 트리거되는 이벤트가 있는지 확인할 수 있습니다.

 

일반적으로 이 모든 이벤트를 한 번에 확인하지는 않습니다.

 

3.가속도계 코드에 모든 변경 사항을 적용하면 아래와 비슷해 보일 것입니다. 

 

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)
accelerometer.enable_freefall_detection(threshold=10, time=25)
accelerometer.enable_motion_detection(threshold=18)
accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    print("Dropped: %s"%accelerometer.events["freefall"])
    print("Tapped: %s"%accelerometer.events['tap'])
    print("Motion detected: %s"%accelerometer.events['motion'])
    time.sleep(0.5)

 

모든 코드가 정확한지 확인한 후 CTRL+를 누르고 . 를 눌러 저장하세요 .XYENTER

 

4.이제 코드가 완성되었으니 다음 명령을 실행하여 스크립트를 실행해 보겠습니다.

 

python3 ~/accelerometer.py

 

5.이 코드를 실행하면 명령줄에 텍스트가 인쇄되어 수신된 X , Y, Z 위치 와 모든 이벤트의 상태가 표시됩니다.

 

0.235360 0.353039 8.355266
Dropped: False
Tapped: False
Motion detected: False

 

 

모든 것이 끝났으니 이제 Raspberry Pi에서 ADXL345 가속도계를 사용하는 방법을 어느 정도 이해했을 것입니다.

 

이 라즈베리파이 가속도계 튜토리얼을 통해 ADXL345 설정의 모든 기본 사항을 익히셨기를 바랍니다. 질문이나 의견, 기타 문의 사항이 있으시면 언제든지 아래에 댓글을 남겨주세요. 

 

 

https://pimylifeup.com/raspberry-pi-accelerometer-adxl345/

 

Raspberry Pi Accelerometer using the ADXL345

It's an easy to set up sensor.

pimylifeup.com

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩