라즈베리 파이에서 DS18B20 온도 센서 테스트하기
라즈베리 파이에서 DS18B20 온도 센서 테스트하기
- sudo modprobe w1-gpio
- sudo modprobe w1-therm
- cd /sys/bus/w1/devices
- ls
- cd 28-xxxx (나타나는 시리얼 번호로 교체)
- cat w1_slave
1-와이어 인터페이스는 약간 변덕스러울 수 있지만 온도 값 사용 가능 여부를 신뢰성 있게 보고합니다. 센서가 데이터를 단순 텍스트 파일로 노출하므로 파일을 읽기만 하면 됩니다.
첫 줄은 YES 또는 NO로 끝납니다. YES면 두 번째 줄에 천분의 1도 섭씨 단위 온도가 포함됩니다. 위 예에서 센서는 20.687°C와 26.125°C를 보고합니다.
여러 센서 연결 시 각기 별도 28-xxxx 디렉토리로 나타납니다. 하나씩 꽂으며 생성된 디렉토리 기록하고 향후 참조용으로 센서에 라벨 붙이세요.
초음파 센서 작업
HC-SR04 초음파 센서는 파이의 +5V 레일(핀 2)에서 전원 공급. 트리거 핀(GPIO 23)이 측정 개시, 에코 핀이 왕복 거리에 해당하는 폭의 HIGH 펄스 반환. GPIO 핀은 3.3V만 견디므로 에코 라인에 저항 분배기로 보호.
예제 코드
#!/usr/bin/python
# 필수 파이썬 라이브러리 임포트
import time
import RPi.GPIO as GPIO
# 물리적 핀 번호 대신 BCM GPIO 참조 사용
GPIO.setmode(GPIO.BCM)
# 파이에서 사용할 GPIO 정의
GPIO_TRIGGER = 23
GPIO_ECHO = 24
print("Ultrasonic Measurement")
# 핀을 출력과 입력으로 설정
GPIO.setup(GPIO_TRIGGER, GPIO.OUT) # 트리거
GPIO.setup(GPIO_ECHO, GPIO.IN) # 에코
# 트리거를 False(Low)로 설정
GPIO.output(GPIO_TRIGGER, False)
# 모듈 안정화 대기
time.sleep(0.5)
# 트리거에 10us 펄스 전송
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO) == 0:
start = time.time()
while GPIO.input(GPIO_ECHO) == 1:
stop = time.time()
# 펄스 길이 계산
elapsed = stop - start
# 그 시간 동안 펄스가 이동한 거리는 시간 × 음속(cm/s)
distance = elapsed * 34000
# 왕복 거리이므로 절반으로 나눔
distance = distance / 2
print("Distance : %.1f" % distance)
# GPIO 설정 초기화
GPIO.cleanup()
초음파 구동 로켓 발사기
다음 스크립트는 사용자 정의 거리보다 물체가 가까우면 로켓 발사 트리거. 이미지 캡처와 LED 시각적 표시도 포함.
#!/usr/bin/python
# Author : Julian and Kyle Milligan
# Date : 09/01/2013
# 필수 파이썬 라이브러리 임포트
import time
import RPi.GPIO as GPIO
from subprocess import call
# 물리적 핀 번호 대신 BCM GPIO 참조 사용
GPIO.setmode(GPIO.BCM)
# 파이에서 사용할 GPIO 정의
GPIO_TRIGGER = 23
GPIO_ECHO = 24
GPIO_FIRE = 4
print("Ultrasonic Measurement")
# 핀을 출력과 입력으로 설정
GPIO.setup(GPIO_TRIGGER, GPIO.OUT) # 트리거
GPIO.setup(GPIO_ECHO, GPIO.IN) # 에코
GPIO.setup(GPIO_FIRE, GPIO.OUT) # 발사
# 트리거를 False(Low)로 설정
GPIO.output(GPIO_TRIGGER, False)
# 모듈 안정화 대기
time.sleep(0.5)
# 트리거 거리 설정
setdistance = input('Please enter a value to trigger the camera:')
while True:
time.sleep(0.1)
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
s = start
quit = 0
while quit == 0:
quit = GPIO.input(GPIO_ECHO)
start = time.time()
if start - s > 0.1:
quit = 1
if start - s < 0.1:
while GPIO.input(GPIO_ECHO) == 1:
stop = time.time()
elapsed = stop - start
distance = elapsed * 34300
distance = distance / 2
print("Distance : %.1f" % distance)
if distance < setdistance:
call(["raspistill -o image.jpg"], shell=True) # 파이 카메라로 사진 촬영
print("Fire")
GPIO.output(GPIO_FIRE, True) # GPIO 핀 7 켜서 로켓 발사
# GPIO 설정 초기화
GPIO.cleanup()
라즈베리 파이에서 웹캠 스트리밍
USB 웹캠에서 비디오 스트리밍하려면 파이가 네트워크에 연결돼 있는지 확인. 최신 웹캠 연결 후 MJPEG 스트리밍 설정 공식 가이드 따름. 더 깊은 내용은 DS18B20 센서 테스트 문서 참조.