행복한 하루
라즈베리파이 제로 프로젝트(5) – 스위치 입력 받기 본문
안녕하세요
이번 회차에는 버튼의 입력을 받아 LED의 깜박이는 속도를 조절해 보도록 하겠습니다.
핵심은 스위치를 통해 눌렀는지를 알 수 있도록 버튼 입력을 신호를 읽어보는 것입니다.
1. 필요한 부품
- 이전 LED 제어 때와 동일하고, 추가로 스위치와 저항이 필요합니다. 추가적인 부품을 적어보면
10K ohm 저항, Tact 스위치( 없으면 그냥 점퍼 케이블로도 가능합니다.) / (탄소 피막 저항 같은 경우도 가변저항으로 10k, 300 ohm을 조정해서 사용했습니다.)
- 추가로 작은 브레드보드(빵판)를 하나 구매했습니다. 이유는 스위치 한 핀에 여러 개를 연결하려면 점퍼 케이블로는 연결하기 힘들기 때문입니다.
2. 배선 방법
1) 버튼 한쪽을 PIN_1(3.3V)에 연결합니다.
2) 버튼 다른 한쪽을 PIN_10 (GPIO15)에 연결합니다. 그리고 동일한 쪽에서 10k ohm 이상 되는 저항 한쪽을 연결해줍니다. 그리고 남은 저항 한쪽을 PIN_6 그라운드(GND)에 연결합니다.
(이렇게 저항을 연결하는 “PULL DOWN”이라고 합니다. GND 쪽에 미리 연결해서 평상시에 ‘0’을 가지게 합니다. 나중에 하겠지만 평상시에 ‘1’이라는 값을 가지게 하는 방식을 PULL UP이라고 합니다. 저항 한쪽을 +에 연결해 놓는 방식을 말합니다.)
3) LED – (minus 다리가 짧은 쪽을 300 ohm 저항 한쪽과 연결합니다. 그리고 남은 저항 한쪽을 GND에 연결합니다. PIN6은 이미 연결했으니 PIN_9나 PIN_14 GND에 연결합니다.
4) LED 남은 한쪽 +를 PIN_8(GPIO14)에 연결합니다.
- 무료로 회로도면을 설계할 수 있는 사이트가 있어 이용해보았습니다. 간단하게 설명 정도 할 때 사용하면 될 것 같습니다. 파일을 저장하려면 로그인을 해야 합니다. 아니면 eagle을 사용해야 하는데, 간단한 설명을 위해서 온라인으로 간단하게 사용해보았습니다.
https://www.digikey.kr/schemeit/project/
3. 프로그램 작성
- GPIOzero 라이브러리 방법으로 작성해보겠습니다.
from gpiozero import LED, Button
from time import sleep
led = LED(14)
button = Button(15)
# Blink times in seconds:
shortblink = .2
longblink = 1
for i in range(1000):
# Set the LED pin to high for odd numbers, low for even.
if i % 2:
led.on()
else:
led.off()
if button.is_pressed:
sleep(shortblink)
else:
sleep(longblink)
4. 프로그램 설명
- 간단하게 설명해 드리면 루프 안에서 천천히 깜박이는 동안 버튼을 누르면 빠르게 깜박이게 됩니다.
- 조금 상세히 설명해 드리면, 1000번 루프를 실행하는 동안 짝수이면 LED가 On으로 Off 면 On으로 동작합니다.
그러는 중에 버튼을 누르면 Sleep(멈추는 시간)을 주는데, longblink 1초로 주게 합니다. 그러면 천천히 깜박이는 것처럼 보입니다. 누르지 않으면 shortblink가 200ms로 빠르게 깜박이는 것처럼 보이게 됩니다.
( 주의할 점 버튼을 누르지 않은 상태가 is_pressed 상태가 됩니다. 반대로 되어 있었습니다. 조금 헷갈릴 수도 있으니 참고하셔야 할 것 같습니다.)
< 참고로 RPi-gpio로 할 경우 소스입니다. >
import RPi.GPIO as GPIO
from time import sleep
# board pin numbers
GPIO.setmode(GPIO.BCM)
ledpin = 14
buttonpin = 15
shortblink = .2
longblink = 1
GPIO.setup(ledpin, GPIO.OUT)
GPIO.setup(buttonpin, GPIO.IN)
for i in range(100):
if i % 2:
GPIO.output(ledpin, GPIO.HIGH)
else:
GPIO.output(ledpin, GPIO.LOW)
if GPIO.input(buttonpin):
sleep(shortblink)
else:
sleep(longblink)
GPIO.cleanup()
- 소스 내용은 동일합니다. 초기 설정과 해제, 출력해주는 함수만 다르다고 보시면 됩니다.
감사합니다.
'RaspberryPi > Raspberry Pi Zero' 카테고리의 다른 글
라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-2편(HTU21D python 프로그래밍) (0) | 2020.10.05 |
---|---|
라즈베리파이 제로 프로젝트(6) – 온도,습도 구하기-1편(H/W 구성HTU21D) (0) | 2020.10.02 |
라즈베리파이 제로 프로젝트(4) – LED 제어 – 4 (밝기 조절) (0) | 2020.09.26 |
라즈베리파이 제로 프로젝트(4) – LED 제어 – 3 (python3) (0) | 2020.09.25 |
라즈베리파이 제로 프로젝트(4) – LED 제어 – 2 (SW) (0) | 2020.09.24 |