구독자 여러뷴~
디바이스마트 엔지니어 흥프로 입니다~~!!~!
오늘의 포스팅은 !!!
라즈베리파이 실습 예제 1탄
GPIO를 풀업 / 풀다운 (Pull up / Pull down) 사용하기 입니다.!!
저는 Raspberry Pi 3 B+에 Raspbian 이고 python을 사용합니다. 참고하세요!
제가 라즈베리파이 담당이라 너무 힘들어요....ㅠㅠㅠ
이 친구(라즈베리파이)는 버전이 바뀌면
힘들게 작성한 매뉴얼을 통으로 바꿔야 하는....ㅠㅠ
그래서 쉽게 사용 할 수 있는 예제로 준비했습니다.
풀업 / 풀다운을 이해하기 위해서는
먼저 플로팅(floating) 현상을 알아야 합니다.
가장 기본적으로 라즈베리파이에서
택(Tack) 스위치를 GPIO에 연결 할때,
초보자 분들은 종종 저항을 안달고, 다이렉트로 연결하시는데요,
이때는 스위치를 눌렀을 때와, 안 눌렀을때 차이가 별로 없습니다.
바로 풀업 저항 / 풀다운 저항을 사용 하면 됩니다.
풀업 저항이란!!
풀업 저항(Pull-up)이란 저항을 전원쪽(+)에 붙여줘서, 플로팅 현상을 해결하는 방법입니다.
라즈베리파이 실습 예제 1탄
GPIO를 풀업 / 풀다운 (Pull up / Pull down) 사용하기 입니다.!!
저는 Raspberry Pi 3 B+에 Raspbian 이고 python을 사용합니다. 참고하세요!
제가 라즈베리파이 담당이라 너무 힘들어요....ㅠㅠㅠ
이 친구(라즈베리파이)는 버전이 바뀌면
힘들게 작성한 매뉴얼을 통으로 바꿔야 하는....ㅠㅠ
그래서 쉽게 사용 할 수 있는 예제로 준비했습니다.
풀업 / 풀다운을 이해하기 위해서는
먼저 플로팅(floating) 현상을 알아야 합니다.
가장 기본적으로 라즈베리파이에서
택(Tack) 스위치를 GPIO에 연결 할때,
초보자 분들은 종종 저항을 안달고, 다이렉트로 연결하시는데요,
이때는 스위치를 눌렀을 때와, 안 눌렀을때 차이가 별로 없습니다.
그 이유는 플로팅 현상 때문인데요.
플로팅(floating) 현상이란 영어 그대로 떠 있는 상태로
신호가 0(LOW)과 1(HIGH)사이에
애매한 위치에 떠 있기 때문에 발생하는 경우 입니다.
그렇다면 플로팅 현상을 없애기 위해 어떻게 해야할까요!?.
풀업 저항이란!!
풀업 저항(Pull-up)이란 저항을 전원쪽(+)에 붙여줘서, 플로팅 현상을 해결하는 방법입니다.
스위치가 열려(off) 있을 때, 전류의 방향은 전원에서 IO핀으로 진행합니다.
따라서 IO핀의 값은 HIGH(1)입니다.
스위치가 닫혀(on) 있을 때, 모든 전류의 방향은 그라운드로 진행합니다.
따라서 IO핀의 값은 LOW(0)입니다.
풀다운 저항!!
풀다운 저항(Pull-down)은 풀업 저항과 반대로 저항을 그라운드(-)쪽에 붙여줘서,
플로팅 현상을 해결하는 방법입니다.
스위치가 열려(off) 있을 때, 전류의 방향은 IO핀에서 그라운드로 진행합니다.
따라서 INPUT의 값은 LOW(0)입니다.
스위치가 닫혀(on) 있을 때, 전류의 방향은 전원에서 IO핀으로 진행합니다.
따라서 INPUT의 값은 HIGH(1)입니다.
자 여기까지 이해 되시겠죠..?? 열심히 설명한다고 했는데.. ㅠㅠ 회로를 이해 못하시면 어려울껍니다.. 자 이제!!! 본격적으로 예제 진행 해보겠습니다. !! 풀업 예시 !! 풀업 저항 없이 GPIO PIN 한개를 저항 대신 사용 하는 방법 입니다. 저는 Python3로 작성을 했습니다.~!!
#Python3 기반으로 작성된 스크립트입니다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(20,GPIO.IN)
GPIO.setup(21,GPIO.OUT)
print ("start")
try:
while(True):
GPIO.output(16,True)
if GPIO.input(20) == 0 :
print ("sw on -> led on")
GPIO.output(21,True)
elif GPIO.input(20) == 1 :
print ("sw off -> led off")
GPIO.output(21,False)
except KeyboardInterrupt:
GPIO.cleanup() GPIO 16번 ,21번은 OUTPUT으로 사용 GPIO 20번은 INPUT으로 사용합니다. 여기서 GPIO16번은 풀업으로 사용하였습니다. GPIO.output(16,True)를 보면 항상 '1' 상태를 유지하죠? 항상 업된 상태를 유지해 스위치 입력이 없을 땐 GPIO 20번으로 '1' 신호가 들어갑니다. 이러면 스위치가 아무리 플로팅을 해도 항상 '1'이 들어오니 문제가 없겠죠? 스위치를 누르게 되면 GPIO 20번으로 '0'이 들어갑니다. 그럼 GPIO 21번으로 '1'을 내보내 LED를 ON 시킵니다. 이런식으로 구성하면 LED가 깜박이는 플로팅 현상을 풀업 GPIO로 잡을 수 있는겁니다. !! 풀다운 예시 !! 동일하게 저항 없이 풀 다운 하는 방법입니다.
#Python3 기반으로 작성된 스크립트입니다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(20,GPIO.IN)
GPIO.setup(21,GPIO.OUT)
print ("start")
try:
while(True):
GPIO.output(16,False)
if GPIO.input(20) == 1 :
print ("sw on -> led on")
GPIO.output(21,True)
elif GPIO.input(20) == 0 :
print ("sw off -> led off")
GPIO.output(21,False)
except KeyboardInterrupt:
GPIO.cleanup()
이것도 간단하게 설명 드리면
GPIO 16번 ,21번은 OUTPUT으로 사용
GPIO 20번은 INPUT으로 사용합니다.
여기서 GPIO16번은 풀다운으로 사용하였습니다.
GPIO.output(16,False)를 보면 항상 '0' 상태를 유지하죠?
항상 다운된 상태를 유지해 스위치 입력이 없을 땐
GPIO 20번으로 '0' 신호가 들어갑니다.
이러면 스위치가 아무리 플로팅을 해도
항상 '0'이 들어오니 문제가 없겠죠?
스위치를 누르게 되면 GPIO 20번으로 '1'이 들어갑니다.
그럼 GPIO 21번으로 '1'을 내보내 LED를 ON 시킵니다.
플로팅 현상을 풀다운 GPIO로 잡을 수 있는 겁니다.
휴.... 어떠 셨나요? 어렵죠..? 아무래도 회로 이론이 들어 가다보니.. 정확하게 이해 하시려면 전기의 특성부터 기초 회로 이론까지 공부를 하셔야 해요!!! 오늘은 여기까지~ 다음 포스팅도 많은 기대 부탁 드려요~~ 라즈베리파이와 같이 쓰기 좋은 키트 소개 해드릴께요.! 기초적인 학습은 가능합니다.~ ▼▼▼라즈베리파이3 B+ 기본키트▼▼▼ http://www.devicemart.co.kr/goods/view?no=1385485 ▼▼▼라즈베리파이 베이직 키트▼▼▼ http://www.devicemart.co.kr/goods/view?no=1264628 |
감사합니다!!~ 안뇽!!!
0 댓글