행복한 하루

라즈베리파이 제로 프로젝트(5) – 스위치 입력 받기 본문

RaspberryPi/Raspberry Pi Zero

라즈베리파이 제로 프로젝트(5) – 스위치 입력 받기

변화의 물결 2020. 9. 30. 00:19

 

 

안녕하세요

  이번 회차에는 버튼의 입력을 받아 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()

 

- 소스 내용은 동일합니다. 초기 설정과 해제, 출력해주는 함수만 다르다고 보시면 됩니다.

 

감사합니다.

 

 

Comments