피코 보드의 핀으로 입력신호 받는법과, 이를 이용한 버튼형 신호등 만들어 보기

피코 보드의 핀으로 입력신호 받는법과,  이를 이용한 버튼형 신호등 만들어 보기

1. 신호등 예제와 출력 신호 사용법

앞의 글에서 라즈베리파이 피코 보드를 이용하여, 5초 간격으로 신호가 바뀌는 신호등을 만들어 보았고, 이를 통해, 라즈베리 피코 보드의 헤더 핀을 통해 신호를 출력하는 방법을 살펴보았다. (물론 시간은 편의상 5초 간격으로 설정한 것뿐으로 필요한 대로 자유롭게 변경할 수 있다.)

https://blog.naver.com/mythee1/223177311389

2. 피코 보드의 핀으로 입력을 받는 방법

그런데, 실제에 있어서는 피코 보드에서 외부로 신호를 출력하기만 하는 것이 아니라, 외부로부터 입력신호를 받아야 할 때도 있다. 이를 위해 다음과 같은 방법으로 앞에서 만들었던 신호등 코드에 외부 스위치 동작을 받아, 10초간 파란색 LED를 켜는 형태로 코드를 수정해 보았다.

* 10번 핀을 디지털 입력용으로 사용하도록 다음 문장으로 선언해 주었다.

button=machine.Pin(10, machine.Pin.IN, machine.Pin.PULL_DOWN)

여기서 machine.Pin.PULL_DOWN은 해당 핀으로 신호가 들어오지 않을 때 0으로 처리한다는 의미이다.

* 이 10번 핀에 외부 스위치를 연결해 주었다. 스위치의 한쪽은 위에서 할당한 10번 핀에, 그리고 반대편은 신호값 연결을 위해 +3.3V 값을 연결해 주었다.(피코 보드의 물리 번호 33번 핀과 연결했다.) 즉 스위치가 눌려지면, 이 3.3V 신호가 GP10번 핀으로 입력되는 것이다.

이를 브레드 보드상에 배선한 모양은 다음과 같다.

다음 그림의 물리 번호 36번에서 +3.3V를 스위치 한쪽 편에 연결했다.

스위치의 다른 한쪽은 아래 그림의 GP10번(물리 핀번호 14번)에 연결했다.

* 그리고 10번 핀으로 입력된 신호값을 button이라는 이름의 변수에 할당하고 이 값이 눌려진 상태(1)이 되는지를 비교하여 1이 되면, 모든 LED가 순차적으로 켜진 후 최종적으로 켜지는 파란색 LED가 10초간 유지되도록 했다.

* 이를 반영한 마이크로 파이썬 Code는 다음과 같다.

import machine
import time


redled=machine.Pin(11, machine.Pin.OUT)
greenled=machine.Pin(12, machine.Pin.OUT)
blueled=machine.Pin(13, machine.Pin.OUT)
button=machine.Pin(10, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
if button.value()== 1:
        redled.value(1)
        time.sleep(0.2)
        redled.value(0)
    
        greenled.value(1)
        time.sleep(0.2)
        greenled.value(0)
        
        blueled.value(1)
        time.sleep(10)
        blueled.value(0)
        
        button.value(0)

동작 모습은 다음과 같다.

3. 변형 – 외부 릴레이로도 출력을 보내기

바로 위의 코드에, 출력핀을 하나 더 추가하였다. 다음과 같이 GP15번을 (물리 핀번호 20)을 할당

relayout=machine.Pin(15, machine.Pin.OUT)

그리고 릴레이 모듈의 신호 입력단자(S 또는 IN 표기분)에 이 핀을 연결했다.

릴레이 모듈은 동작에 필요한 전원도 필요하므로, VCC와 GND 핀을 각기 피코 보드의 +와 GND에 연결해 주었다.

버튼스위치가 눌려지면, 위에서처럼 순차적으로 LED가 켜졌다가 최종적으로 켜진 파란색 LED 가 5초간 켜졌다가 꺼지도록 했으며, 동시에 이렇게 스위치가 눌려지면 파란색 LED가 꺼질 때까지 외부 릴레이 모듈에도 신호가 가도록 코드도 약간 수정했다. 이렇게 외부 릴레이 모듈에 신호를 주는 경우, 릴레이 모듈의 반대쪽 단자에 각종 외부 전기 장치를 연결하여 우리가 원하는 대로 제어할 수 있게 된다.

import machine
import time


redled=machine.Pin(11, machine.Pin.OUT)
greenled=machine.Pin(12, machine.Pin.OUT)
blueled=machine.Pin(13, machine.Pin.OUT)
button=machine.Pin(10, machine.Pin.IN, machine.Pin.PULL_DOWN)
relayout=machine.Pin(15, machine.Pin.OUT)
while True:
if button.value()== 1:
        relayout.value(1)
        redled.value(1)
        time.sleep(0.2)
        redled.value(0)
    
        greenled.value(1)
        time.sleep(0.2)
        greenled.value(0)
        
        blueled.value(1)
        time.sleep(5)
        blueled.value(0)
        
        relayout.value(0)
        button.value(0)

동일한 시험을 릴레이 모듈을 교체하여 다시 시도했다.

(위의 경우, 신호 입력이 확인되나, 마침 Low level trigger 방식 릴레이라 이를 HIGH level trigger 방식 릴레이로 단순 교체하여 추가 시험한 것이다.)

다음과 같이 외부 릴레이 모듈에 신호가 입력되는 것을 릴레이 모듈 상에 부착된 LED가 켜지는 것과 함께, 릴레이내부의 접점이 동작하는 소리로 확인 가능하다.

참고사항1.

한가지 기억할 것은 이러한 릴레이 모듈은 5V로 동작하는게 일반적인데, 라즈베리파이 피코보드는 3.3V로 동작하기 때문에, 릴레이의 DC 전원부는 피코 보드에서 유일하게 5V신호가 나오는 다음 부분에 연결해주어야 한다.

다음 2개의 사진에서 연결상태를 확인할 수 있는데, 릴레이 모듈의 적색선은 위에 소개한 물리번호 40번(VBUS)에 +5V 입력을 위해 연결했고, 주황색선은 GND에 연결해주었다. GND는 여러곳중 어디나 무방하지만 다음 사진에서는 물리번호 38번에 연결했다. 릴레이 모듈의 노란색 선은 신호선으로 위의 Code에서 릴레이용 출력으로 할당한 GP15 (물리번호 20번)에 연결했다.