[RaspberryPI] 센서 & 센스헷
센서란?
정보를 수집하여, 수치 값으로 만들어내는 장치
사람의 시각/청각/후각/미각/촉각 뿐만 아니라, 초음파/압력/자기/온도/가스/가속도 등을 수치로 만들어 내는 장치
MEMS
MEMS
: Micro Electro Mechanical System로, 반도체 제조 공정으로 만드는
초소형 기계, 톱니바퀴 등을 Nano 공정으로 제작한다. 초소형 센서를 제작할 때
이 기술을 사용한다.
센스햇
센서들이 모여있는 Hat으로 자이로 센서,가속도 센서, 기압 센서, 지자기 센서, 온 습도 센서, 8x8 LED, 8 방향 조이스틱이 있다.
cmd
창을 통해 sudo apt-get install sense-emu-tools
을 통해 가상 Sense Hat
을 설치해줍니다.
8x8 LED 테스트
테스트 코드
from sense_emu import SenseHat # emualtor에서 동작되도록
from sense_hat import SenseHat # 실제 보드에서 동작되도록
sense = SenseHat()
sense.show_message("HELLO")
회전 출력
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
sense.show_message("A")
sense.set_rotation(90)
sense.show_message("A")
sense.set_rotation(180)
sense.show_message("A")
sense.set_rotation(270)
픽셀조정
from sense_emu import SenseHat
from time import sleep
sense = SenseHat()
X = [255,0,0] # RED
O = [255,255,255] # White
A = [233, 20,100]
B = [22,240,130]
question_mark = [
O,O,O,X,X,O,O,O,
O,O,X,O,O,X,O,O,
O,O,O,O,O,X,O,O,
O,O,O,O,O,X,O,A,
O,O,O,O,O,X,O,B,
O,O,O,O,O,X,O,O,
O,O,O,O,O,X,O,O,
O,O,O,O,O,X,O,O,
]
sense.set_pixels(question_mark)
sense.flip_v() # 글자 반전
원래 | 반전 |
---|---|
좌표로 픽셀 조작
from sense_emu import SenseHat
from time import sleep
sense = SenseHat()
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
sense.set_pixel(0,0,red)
sense.set_pixel(1,0,green)
sense.set_pixel(0,1,blue)
전체화면 조작
from sense_emu import SenseHat
from time import sleep
sense = SenseHat()
sense.clear() # ALL CLEAR
sleep(1)
sense.clear(255, 255, 255) # ALL White
밝기 & 속도 조절
밝기 조절
from sense_hat import SenseHat
import time
sense = SenseHat()
sense.clear(255,255,255)
sense.low_light = True
time.sleep(2)
sense.low-light = False
속도 조절
from sense_emu import SenseHat
import time
sense = SenseHat()
sense.show_message("1", 0.1, text_colour=[255,0,0]) # fast
sense.show_message("2", 0.15, text_colour=[255,255,0])
sense.show_message("3", 0.3, text_colour=[255,0,255]) # slow
한글자씩 출력
from sense_emu import SenseHat
from time import sleep
sense = SenseHat()
str = "HOON"
for i in range(4):
sense.show_letter(str[i])
sleep(1)
온습도센서
온도와 습도 모두 측정이 가능하다. 실크가 U3
으로 적혀있다.
실크
: 보드에 흰색으로 표기된 것
라즈베리파이 회로도에서 센스헷 회로도를 통해 온습도센서(U3) 확인가능하다.
HTS221 데이터시트에서도 살펴볼 수 있다.
테스트코드
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
humi = sense.get_humidity()
temp = sense.get_temperature()
print("Humidity : %s" % humi)
print("Temperature : %s" % temp)
sleep(1)
기압센서
대기압 측정이 가능하다. 실크는 U5
이다. 사용할 센서명은 LPS25H
이다.
테스트코드
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
press = sense.get_pressure()
print("Pressure : %s" % press)
sleep(1)
IMU
Inertial Measurement Unit 관성 측정 장치, 실크 U4
, 모델명 : LSM9DS1
종류
1. 3축센서 : 자이로스코프 or 가속도 센서 or 지자기 센서 - (X, Y, Z) 값을 읽을 수 있음
2. 6축센서 : 자이로스코프 + 가속도 센서 - (X, Y, Z) 두 set
값을 읽을 수 있음
3. 9축센서 : 자이로스코프 + 가속도 센서 + 지자기 센서 - •(X, Y, Z) 세 set
값을 읽을 수 있음
자이로스코프 값 출력하기
pitch / roll / yaw
으로 기울기를
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
ori = sense.get_orientation_degrees()
print(f'[{ori["pitch"]:5.1f}] - ', end = '')
print(f'[{ori["roll"]:5.1f}] - ', end = '')
print(f'[{ori["yaw"]:5.1f}]', end = '')
print()
가속도센서
X, Y, Z 축의 가속도
를 측정할 수 있다. 이 센서를 이용하여 속도
및 이동 경로
까지 알아낼 수 있다.
가속도 출력
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
acc = sense.get_accelerometer_raw()
print(f'[{acc["x"]:5.1f}] - ', end = '')
print(f'[{acc["y"]:5.1f}] - ', end = '')
print(f'[{acc["z"]:5.1f}]', end = '')
print()
자기력측정
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
com = sense.get_compass_raw()
print(f'[{com["x"]:5.1f}] - ', end = '')
print(f'[{com["y"]:5.1f}] - ', end = '')
print(f'[{com["z"]:5.1f}]', end = '')
print()
조이스틱
상 , 하 , 좌 , 우 , 클릭 가능
이벤트 발생 대기 코드
f
rom sense_hat import SenseHat
from time import sleep
sense = SenseHat()
while True:
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))
sleep(0.1)
인터럽트 방식
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_RELEASED
from signal import pause
def pushed_up(event):
global y
if event.action != ACTION_RELEASED: y-=1
def pushed_down(event):
global y
if event.action != ACTION_RELEASED: y+=1
def pushed_left(event):
global x
if event.action != ACTION_RELEASED: x-=1
def pushed_right(event):
global x
if event.action != ACTION_RELEASED: x+=1
def refresh():
sense.clear()
sense.set_pixel(x,y,255,255,255)
x = 3
y = 3
sense = SenseHat()
sense.stick.direction_up = pushed_up
sense.stick.direction_down = pushed_down
sense.stick.direction_left = pushed_left
sense.stick.direction_right = pushed_right
sense.stick.direction_any = refresh
pause()
폴링 방식
from sense_hat import SenseHat
sense = SenseHat()
while True:
for event in sense.stick.get_events():
print("The joystick was {} {}".format(event.action, event.direction))
Author And Source
이 문제에 관하여([RaspberryPI] 센서 & 센스헷), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev-hoon/센서저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)