Embedded

Raspberry Pi - Sense Hat을 통한 진동감지 구현

Code GGOON 2023. 3. 25. 23:00
반응형

 

라즈베리 파이에서 진동을 측정하기 위해서는 진동 센서 모듈이 필요하다. 대표적으로 SW-420 같은 센서를 사용하면 진동측정이 가능하다.  그러나 이번에는 라즈베리파이의 아스트로 파이(Astro Pi)프로젝트로 개발되어 판매되는 통합 센서모듈 Sense-Hat을 통해서 진동감지를 구현해 보려고 한다.

Raspberry Sense-Hat V.1.2

Sense-Hat에는 온/습도 센서, 압력 센서, 가속도 센서, LED매트릭스, 조이스틱 등 다양한 센서가 Hat으로 통합되어 제공되는데 진동감지 구현을 위해서는 내장된 가속도계 센서(Accelerometer)를 활용하여 진동감지(측정)을 구현하려고 한다.

 

먼저 Sense Hat을 사용하기 위해서는 관련 라이브러리를 설치해야 한다. (샘플코드도 같이 설치된다)

$ sudo apt install sense-hat

Sense Hat 라이브러리 설치 후 재부팅 권장.

 

Python 언어로 설치된 Sense Hat 라이브러리를 통해 가속도계값을 가져올 수 있고, 정밀도를 위한 약간의 수학식을 통해서 진동값을 최대한 정밀하게 표시하려고 노력하였다.

 

구현한 소스코드는 아래와 같다.

 

from sense_hat import SenseHat
import math

#Sense Hat 객체 생성
sense = SenseHat()

try:
        while True:
                #가속도계 값을 가져와 진동 센서 값 계산
                acceleration = sense.get_accelerometer_raw()
                x = acceleration['x']
                y = acceleration['y']
                z = acceleration['z']

                #정밀도 향상을 위해 중력값 제거
                # 'x'와 'z'값에 대해 'y'값을 기준으로 회전 변환을 수행하여
                # 중력값을 제거함. 그리고 각각의 값의 제곱을 더한 후 제곱근을 구하여 진동 센서 값을 계산함.
                x = x * math.cos(y) + z * math.sin(y)
                y = y + math.cos(x) + z * math.sin(x)

                #vibration = ((x**2) + (y**2) + (z**2)) * 0.5
                vibration = math.sqrt(x**2 + y**2 + z**2)
                vibration = vibration - 1.4

                #진동이 감지되면 출력
                if vibration > 0.1:
                        print("진동감지 >> {:.3f} ".format(vibration))

except KeyboardInterrupt:
        pass

 

코드에서는 vibration 값을 계산하는 부분이 수정되었습니다. 먼저 x와 z 값에 대해 y 값을 기준으로 회전 변환을 수행하여 중력값을 제거 후 각각의 값에 제곱을 더한 후 제곱근을 구하여 진동 센서 값을 계산함.

 

이 코드를 실행하면 Sense HAT 모듈에서 측정한 진동값이 더욱 정밀하게 콘솔에 출력됩니다. 코드 실행 중 Ctrl + C를 누르면 KeyboardInterrupt 예외가 발생하여 프로그램 종료.

 

[출력결과]

 

반응형