상세 컨텐츠

본문 제목

라즈베리파이 실습 1탄 ! [LED / 스위치 / 온습도 센서]

라즈베리파이 실습 및 미니 프로젝트 !

by 전자과_공대생 2021. 1. 21. 12:52

본문

728x90
반응형

날짜 : 2020.12.28 월요일 / 제목 : 시작 / 날씨 : 🌞

 

안녕하세요 ~ 전자과_공대생입니다 ! (⌐■_■)

오늘부터 차근차근 블로그를 채워나갈 생각입니다 ~

그럼 오늘의 하루 시작하도록 하겠습니다 😄

 

오늘 처음으로 라즈베리파이을 다루어 보았습니다 !

라즈베리파이 키트는 학과에서 지원받아 공부 중입니다.

어제 sd카드 리셋과 기본적인 파일 다운로드, 세팅을 어느 정도 해두어서 바로 실습에 들어갈 수 있었습니다 ! 👍

오늘은 첫날이고 아직 세팅이 완벽하지 못하여 사진을 핸드폰으로 찍었습니다 ㅠㅠ

세팅이 완벽하게 된다면 원격을 이용하여 스크린샷으로 찍을 생각입니다 !

그럼 오늘 할 실습부터 알려드리겠습니다 !

 

 

{ 오늘 할 실습 }

👉 LED 작동

👉 스위치를 이용한 LED 작동

👉 온습도 센서를 이용하여 현재 온습도 체크

 

 

우선 라즈베리파이의 핀 번호마다 하는 역할을 알려드리겠습니다 !

이미지 출처 :  https://www.elektronik-kompendium.de/sites/raspberry-pi/1907101.htm

위에 사진에 나와있는 것처럼 핀 위치, 번호마다 하는 역할이 다릅니다.

이번 LED 실습에서 사용할 핀 번호는 11번과 39번입니다 ! 

11번 핀은 GPIO 17이며 나중에 코딩을 작성할 때 자세하게 설명드리겠습니다.

또한 39번 핀은 GND입니다.

 

 

이제 LED 작동 실습에 대해서 설명드리겠습니다 !

{ 필요한 재료 }

👉 라즈베리파이

👉점퍼 케이블

👉 색상 LED 1개

👉 저항 10k 옴 -- 저항은 LED 구격에 맞게 사용

 

아래 사진은 재료들을 가지고 구성한 회로입니다 !

LED 회로 연결

좀 더 깔끔하게 정리해서 보여드리겠습니다 !

정리된 LED 회로 연결

LED 긴 다리를 GND로 연결하였고 짧은 다리를 GPIO 17에 연결했습니다.

그렇다면 이제 코드를 작성해보겠습니다.

코딩 출처 -  https://m.blog.naver.com/PostView.nhn?blogId=pk3152&logNo=221368477491&proxyReferer=https:%2F%2Fwww.google.com%2F

우선, 1, 2번째 줄에서는 GPIO을 불러와 사용하였고 약간의 delay를 걸기 위해서 time도 사용하였습니다 !

4번째 줄은 GPIO에서 BCM을 사용할지 BOARD를 사용할지 결정하는 단계입니다.

BCM을 사용하게 되면 setup으로 몇 번째 GPIO을 사용할지 작성해야 됩니다.

만약 BOARD를 사용하고 싶을 경우 setup에서 BOARD의 번호 즉, 핀 번호를 작성하면 됩니다.

블로그에서는 BCM을 꾸준히 사용할 생각입니다 ! 

5번째 줄에서 GPIO setup을 합니다.

setup을 할 때는 GPIO.setup(핀/GPIO 번호, 입력/출력 결정)으로 설정합니다.

현재 저는 GPIO 17을 사용할 것이며 17번 핀을 출력으로 사용하겠다고 설정했습니다.

이제 while문을 이용하여 LED가 꺼졌다가 켜졌다 하는 것을 반복하도록 설정해보겠습니다.

우선 7번째 줄처럼 while문을 실행시켜주시면 됩니다.

통상적으로 False 상태는 0V 상태, True 상태는 5V 상태입니다.

8번째 줄은 output으로 설정한 GPIO 17가 꺼져있는 상태(0V)를 나타냅니다.

10번째 줄은 반대로 GPIO 17가 켜져 있는 상태(5V)를 나타냅니다.

9, 11번째 줄은 delay 2초를 걸어 2초 동안 꺼졌다가 2초 동안 커졌다가를 반복합니다.

무한 반복을 시키기 위해서 break를 따로 사용하지는 않았습니다 !

 

 

이제 LED를 스위치로 이용하여 켰다 껐다를 하도록 설계해보도록 하겠습니다 !

{ 필요한 재료 }

👉 라즈베리파이

👉점퍼 케이블

👉 색상 LED 1개

👉 저항 10k 옴 2개 -- 저항은 LED 구격에 맞게 사용

👉 스위치

 

아래 사진은 재료를 이용하여 설계한 회로입니다.

스위치를 이용하여 LED 끄고 키는 회로 연결

이것 역시 좀 더 깔끔하게 보여드리겠습니다 !

정리된 스위치를 이용하여 LED 끄고 키는 회로 연결

 

LED는 31번 핀을 연결하여 GPIO 6을 사용하였고 스위치는 40번 핀을 연결하여 GPIO 21을 사용하였습니다.

또한 스위치 다른 쪽을 1번 핀을 연결하여 3.3V을 인가해주고 있습니다.

그리고 GND는 39번 핀을 이용하였습니다.

코드에 들어가기 앞서 풀업과 풀다운에 대해서 설명드리겠습니다.

풀업과 풀다운을 설명하려면 플로팅 상태에 대해서 먼저 알아야 합니다.

플로팅 상태란 스위치가 열리게 될 때 0도 1도 아닌 0과 1 사이에서 방황하는 아무런 상태도 아닌 것을 뜻합니다.

즉, 스위치가 닫히게 되면 전류가 흐르고 있다는 것을 알 수 있으나

스위치가 열리게 되면 전류가 흐르고 있는지 안 흐르고 있는지 확인할 수 없다는 뜻입니다.

결국, 일반적인 연결로는 스위치를 사용할 수 없습니다.

따라서 플로팅 상태일 때를 감지하여 0(LOW)과 1(HIGH)을 출력해줍니다.

여기서 풀업은 플로팅 상태일 때 즉, 0(LOW) 일 때 ON이 되고 1(HIGH) 일 때 OFF가 됩니다.

풀다운은 풀업의 반대 개념이라고 생각하면 됩니다.

아래 표를 보시면 이해하기 좀 더 수월합니다 !

 

풀업 (PULL-UP) 풀다운 (PULL-DOWN)

 

ON 0 (LOW) ON 1(HIGH)
OFF 1 (HIGH) OFF 0 (LOW)

 

이번에 회로에서는 풀업을 이용하였습니다.

회로를 보면서 설명드리겠습니다.

회로를 보시면 스위치가 열려있을 때 전류가 GND로 빠지지 못합니다.

따라서 라즈베리파이와 연결된 검은 선은 1 (HIGH) 상태가 되어 LED에 불이 들어오지 않습니다.

반대로 스위치를 눌렀을 경우 전류가 GND로 빠지게 됩니다.

따라서 라즈베리파이와 연결된 검은 선은 0 (LOW) 상태가 되어 LED에 불이 들어옵니다.

또한 풀업을 사용할 경우는 VCC 쪽에 저항을 달아줘야 합니다.

반대로 풀다운을 사용할 경우 GND 쪽에 저항을 달아줘야 합니다.

그럼 이제 코드를 작성해보겠습니다 !

코딩 출처 -  https://pinkwink.kr/848

먼저 1, 2번째 줄에서 GPIO을 import 해주고 delay을 원할 경우 time도 import 해줍니다.

저는 delay를 사용해보았다가 delay 되는 게 싫어서 delay를 지웠습니다.

또한 4, 5번째 줄에서는 GPIO.setmode을 BCM으로 설정하였고 setwarnings은 안 뜨게 하였습니다.

7, 8번째 줄에서는 GPIO.setup을 이용하여 GPIO 번호와 입력, 출력을 설정하였습니다.

10, 20번째 줄은 각각 실행문과 삭제 문으로 생각하면 쉬울 것 같습니다 !

해서 11번째 줄에서 while문을 실행시킵니다.

우선, 12번째 줄에서 input으로 설정한 GPIO 21을 inputIO라는 변수로 지정해줍니다.

이제 if문을 사용하여 LED를 작동시킵니다.

14, 15번째 줄을 보시면 조건문을 사용하여 inputIO가 False일 경우 GPIO는 HIGH(1)을 보냅니다.

HIGH(1)을 보낼 경우 현재 풀업을 사용하기 때문에 LED는 켜지지 않습니다.

반대로 16, 17번째 줄에서 else를 사용하여 GPIO는 LOW(0)을 보내어 LED가 켜지게 합니다.

마지막으로 20, 21번째 줄은 삭제 문으로 GPIO를 한 번 삭제해줍니다.

단축키는 Ctrl + C입니다.

아래 영상은 작동하는 모습을 찍어보았습니다 !

작동 영상

 

 

마지막으로 온습도 센서에 대해서 보여드리겠습니다 !

{ 필요한 재료 }

👉 라즈베리파이

👉점퍼 케이블

👉 온습도 센서

 

회로, 코딩 설명에 앞서 온습도 센서에 대해서 설명드리겠습니다.

설명은 구글에 찾으면 나오는 데이터 시트를 이용하여 하겠습니다.

디지털 온습도 센서인 DHT-11은 보정된 온도, 습도 디지털 신호를 출력하는 복합 센서입니다.

주변에서 흔히 볼 수 있는 응용 장치는 제습기, 습도 조절 장치 등이 있습니다.

특징으로는 가격이 비싸지 않으며 상대 습도와 온도 측정을 할 수 있습니다.

또한 디지털 신호 출력과 정교한 보정 능력을 가지고 있습니다.

측정할 수 있는 최대치는 습도는 2~30%에서 8~90%이며 온도는 0~50도까지 가능합니다.

제가 가지고 있는 온습도 센서는 습도는 5~95%이며 온도는 -20~60도입니다 !

습도와 온도는 약간의 오차들이 존재합니다.

습도의 오차는 ±5%이며 온도의 오차는 ±2도입니다.

DHT-11은 일반적으로 핀이 3개가 있습니다.

첫 번째 핀은 VDD입니다.

전원 공급을 해주는 역할로서 3.3~5.5V까지 공급이 가능합니다.

두 번째 핀은 DATA 직렬 데이터 단일 버스입니다.

쉽게 얘기하면 GPIO와 연결해주는 단일 버스입니다. 

여기서 단일 버스란, 하나의 버스로 제어되어 데이터 교환을 완료하는 시스템입니다.

마지막 세 번째 핀은 GND입니다.

온습도 센서를 자세히 봤을 때 S라고 적혀있는 쪽부터 DATA 직렬 데이터 단일 버스, VDD, GND 순입니다.

데이터 형식은 8비트 습도 정수 데이터 + 8비트 습도 십진 데이터 + 8비트 온도 정수 데이터 + 8비트 온도 분수 데이터 + 8비트 패리티 비트로 이루어집니다.

여기서 패리티 비트는  8비트 습도 정수 데이터 + 8비트 습도 십진 데이터 + 8비트 온도 정수 데이터

+ 8비트 온도 분수 데이터입니다.

따라서 데이터 형식에서 나온 8비트 패리티 비트와 나머지 4개를 다 더한 값을 비교했을 때 같은 값이 나오면 통신이 정상적으로 이루어졌다고 판단합니다.

값이 다를 경우는 통신 에러가 발생했다고 판단하여 값을 재 수신합니다.

이제 회로에 대해서 설명해드리겠습니다.

아래 사진은 설계한 회로입니다 !

온습도 센서를 이용하여 설계한 회로

좀 더 깔끔하게 정리된 것으로 다시 한번 보여드리겠습니다 !

정리된 온습도 센서를 이용하여 설계한 회로

온습도 센서를 이용하기 위해서는 라이브러리를 설치해야 합니다.

git clone https://github.com/adafruit/Adafruit_Python_DHT.git 

cd Adafruit_Python_DHT


sudo python setup.py install

요렇게 작성하시면 라이브러리가 설치됩니다.

cd Adafruit_Python_DHT/examples

python AdafruitDHT.py 11 26

(코딩 출처 - devicemart.blogspot.com/2019/06/dht-11.html)

라고 작성하시면 이제 현재 온습도를 나타내 줍니다.

뒤에 11 26은 DHT-11을 사용하며 GPIO 26에 연결되어있다는 뜻입니다 !

온습도 센서 결과

위에 사진은 온습도 센서 결과입니다 !

현재 제가 있는 곳의 온도는 17도이며 습도는 35%라고 나오네요.

참고로 위에서 말씀드렸다시피 온도의 오차는 2도, 습도의 오차는 5%라는 것을 감안해야 합니다 !

 

 

오늘 할 실습을 모두 마쳤습니다 !

이제 카테고리를 정하여 따로 올릴 생각입니다 !

그럼 다음 라즈베리파이 실습 글로 뵙겠습니다 !

이상 전자과_공대생이었습니다 ~ ! (⌐■_■)

감사합니다 ~~

728x90
반응형

관련글 더보기