-
[4ํ์ฐจ-1] ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด GPIO ์ค์ต - 2๋ก๋ด๊ต์ก/4ํ์ฐจ_๋ผ์ฆ๋ฒ ๋ฆฌGPIO 2020. 9. 10. 23:55
1. ๋ฒํผ ์ค์ต
๊ฐ. ๋ฒํผ

ํธ์ฌ ๋ฒํผ ๋ฒํผ(์ค์์น)์ ์ ๊ธฐ์ ํ๋ฆ์ ์๊ฑฐ๋ ๋๊ธฐ ์ํ ์ ์ด์ฅ์น์ด๋ฉฐ, ์กฐ๋ช ์ด๋ ์ปดํจํฐ ๋ฑ์ ๋๊ฑฐ๋ ์ผค ๋ ๋๋ฅด๋ ๋ฒํผ๋ ์ค์์น์ ์ผ์ข ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ํธ์ฌ ๋ฒํผ์ ์๋จ์ ๋ฒํผ ๋ถ๋ถ๊ณผ ํ๋จ์ ๋ค๋ฆฌ(4)๊ฐ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ฒํผ์ ๋๋ฅด์ง ์์๋ A-C, B-D๋ ์ฐ๊ฒฐ์ด ๋์ด ์๋ ์ํ์ด๋ฉฐ, ๋ฒํผ์ ๋๋ฅผ ๋ A-B-C-D๊ฐ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์ ๊ธฐ๊ฐ ํ๋ฅด๊ฒ ๋ฉ๋๋ค.
๋. ํ๋ก ๊ตฌ์ฑ
๋ฒํผ์ ์ด์ฉํ์ฌ LED๋ฅผ ์ผค ์ ์๋๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น๋ฌผ ๋ฒํผ, ์ ์ , (+LED, ์ ์ , ์ ํญ330Ω์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก)

์ค๋น๋ฌผ

๋ฒํผ์ ์์น ์ฃผ์ ์ง๋ ์๊ฐ์ ๋ง๋ LED ํ๋ก์ ๋ฒํผ์ ์ถ๊ฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค. ๋ฒํผ์ ๋ค๋ฆฌ ๋ชจ์์ ์ฃผ์ํ๋ฉฐ ๋ธ๋ ๋๋ณด๋์ ๋ผ์๋ณด๊ฒ ์ต๋๋ค. ๋ฒํผ์ ๋ฐ๋ฅด๊ฒ ๋ผ์ฐ๋ฉด ๋ฒํผ์ ๋๋ฅด๊ธฐ ์ ์๋ ํ๋ก๊ฐ ๋์ด์ ธ ์์ด ์ ๊ธฐ๊ฐ ํ๋ฅด์ง ์์ผ๋ฉฐ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด ์ ๊ธฐ ํ๋ก๊ฐ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ฌ์์ ์ ๋ ฅ ์ ํธ๋ฅผ ๋ฐ์ต๋๋ค.

๋ฒํผ ์ฅ์ฐฉ 
๋ฒํผ์ ๋ค๋ฆฌ์ ์ฐ๊ฒฐ๋๋ ์ ์ ์ฐ๊ฒฐ 
๋ฒํผ์ ๋ค๋ฆฌ์ ์ฐ๊ฒฐ๋๋ ์ ์ ์ฐ๊ฒฐ ๋ฒํผ์ ๋ค๋ฆฌ์ ํ๋ก๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ ์ชฝ ๋ค๋ฆฌ์ Gnd๋ฅผ ์ ์ ์ผ๋ก ์ฐ๊ฒฐํ๋ฉฐ, ๋๋จธ์ง ๋ค๋ฆฌ๋ GPIO 16๋ฒ์ ์ ์ ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค. ๋ฒํผ์๋ ๋ฐ๋ก ๊ทน์ด ์์ผ๋ฏ๋ก ๋ค๋ฆฌ์ ์์์ ๊ด๊ณ์์ด Gnd์ GPIO 16๋ฒ์ ์ ์ฐ๊ฒฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.

๋ฒํผ๊ณผ LED ํ๋ก ๊ตฌ์ฑ#1 ํ๋ก ์์ฑ 
๋ฒํผ๊ณผ LED ํ๋ก ๊ตฌ์ฑ#2 ํ๋ก ์์ฑ ๊ธฐ์กด์ GPIO 13๋ฒ์ ์ฐ๊ฒฐ๋ LEDํ๋ก์ ๋ฒํผํ๋ก๋ฅผ ์ถ๊ฐํ์ฌ ์์ฑํ์์ต๋๋ค. ๋ค์์๋ ๋ฒํผ์ผ๋ก LED๋ฅผ ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋ค. ํ๋ก๊ทธ๋๋ฐ
์์ ์์ค(5-led_button.py) from gpiozero import LED, Button
from signal import pause
led = LED(13)
button = Button(16)
button.when_pressed = led.on
button.when_released = led.off
pause()
์์ ์์ค(5-led_button2.py) from gpiozero import LED, Button
from signal import pause
led = LED(13)
button = Button(16)
led.source = button
pause()
2. ์์ง์ ๊ฐ์ง ์ค์ต
๊ฐ. ์ธ์ฒด ๊ฐ์ง ์ผ์(PIR์ผ์)

HC-SR501 ์ธ์ฒด ๊ฐ์ง ์ผ์(PIR์ผ์, Passive Infrared Sensor)๋ ์ฌ๋์ด๋ ๋๋ฌผ์ด ์์ง์ผ ๋ ๋ฐ์๋๋ ์ ์ธ์ ๋ณํ๋ฅผ ๊ฐ์งํด ๋ด๋ ์ผ์๋ก์ ๋ชจ์ ์ผ์๋ผ๊ณ ๋ ํฉ๋๋ค. ์ผ์ ์ํ์ ํํ๊ฒ ์ฌ์ฉ๋๋ ์ฌ๋ก๋ ํ๊ด์ด๋ ์๋ฆฌ๋ฒ ์ดํฐ ์ ๊ตฌ์์ ์ฌ๋์ด ์ ๊ทผํ๋ฉด ์๋์ผ๋ก ๋ถ์ด ์ผ์ง๋ ์ ๋ฑ์ด ์์ต๋๋ค.
์์ง์์ ๊ฐ์งํ๋ฏ๋ก ์์ง์์ด ์์ผ๋ฉด ๋น์ฐํ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ๊ฐ๋ณ์ ํญ์ ์ด์ฉํ์ฌ ๊ฐ๋์ ๊ฐ์ง ์๊ฐ ๋ฑ์ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ์ 2ํ(VCC/GND)๊ณผ ์ ํธ๋ถ(SIG) ๋ฑ ์ด 3๊ฐ์ ํ์ ์ฌ์ฉํ๋ฉฐ, ์ฃผ๋ณ์ ์์ง์์ด ์ธ์๋๋ฉด ์ ํธ๋ถ๋ก ์ถ๋ ฅ์ด ๋์ค๋ ํํ์ ๋๋ค. ์ถ๋ ฅ์ HIGH, LOW๋ก ๋์งํธ ์ถ๋ ฅ๊ฐ์ ๊ฐ์ง๋๋ค.

HC-SR501 ์ผ์ ๊ฐ๋ ์กฐ์ (Distance Adjust) ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด, ๋ฏผ๊ฐ๋๊ฐ ๋ฎ์์ ธ์ ๊ฐ์ง ๊ฑฐ๋ฆฌ๊ฐ ์ค์ด๋ญ๋๋ค.
์ง์ฐ ์๊ฐ ์กฐ์ (Delay Time Adjust) ์ธ์ฒด ๊ฐ์ง ํ ๊ฐ์ง๋ ์ํ๋ฅผ ์ผ๋ง๊ฐ ์ ์งํ ๊ฒ์ธ๊ฐ ํ๋ ์๊ฐ์ ์กฐ์ ํฉ๋๋ค. ์๊ณ๋ฐฉํฅ(์ง์ฐ์๊ฐ ์งง๊ฒ), ๋ฐ์๊ณ๋ฐฉํฅ(์ง์ฐ์๊ฐ ๊ธธ๊ฒ)
ํธ๋ฆฌ๊ฑฐ ๋ชจ๋ ์ข์ธก์ ์ ํผ์ค์์น๋ฅผ L๋ก ์ฐ๊ฒฐํ๋ฉด ๊ฐ์ง ์ ํธ๋ฅผ ํ ๋ฒ๋ง ๋ณด๋ด์ฃผ๋ ๋ชจ๋์ด๊ณ , H๋ ๊ฐ์ง์ ํธ๋ฅผ ๊ณ์ํด์ ๋ณด๋ด์ฃผ๋ ๋ชจ๋์ ๋๋ค.
๋. ํ๋ก ๊ตฌ์ฑ
PIR์ผ์๋ฅผ ์ด์ฉํ์ฌ ์์ง์์ด ๊ฐ์ง๋๋ฉด LED๊ฐ ์ผ์ง๋๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น๋ฌผ PIR์ผ์, MF์ ์ , (+LED, ์ ์ , ์ ํญ330Ω์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก)

์ค๋น๋ฌผ

์ปค๋ฒ๋ฅผ ์ ๊ฑฐํ PIR์ผ์ ๋ชจ์ต ์ปค๋ฒ๋ฅผ ์ ๊ฑฐํ์ฌ PIR์ผ์๋ฅผ ์ดํด๋ณด๋ฉด VCC-OUT-GND๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. PIR์ผ์๊ฐ ๋์ํ๋ ค๋ฉด 5~12V์ ์ ๋ ฅ์ ์์ด ํ์ํ๋ฏ๋ก ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ GPIO์์ 5V ์ ์์ VCC๋ฅผ ์ฐ๊ฒฐํ์ฌ์ผ ํ๋ค.
GND๋ ๋ธ๋ ๋๋ณด๋ GND(-๊ทน)์ ์ฐ๊ฒฐํ๋ฉฐ OUT์ ์์ง์์ ๊ฐ์งํ์ฌ ์ ํธ๋ฅผ ๋ณด๋ด์ฃผ๋ ๋ถ๋ถ์ด๋ฏ๋ก ์ด๋ฅผ GPIO 24๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์ ํธ๋ฅผ ๋ฐ๋๋ค.

VCC-OUT-GND ์ฐ๊ฒฐํ๊ธฐ#1 ์ ์ ์ ๊ฐ๊ฐ์ ํ์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ท์น์ ์ ํด VCC๋ ๋นจ๊ฐ์, GND๋ ์ด๋์ด์, OUT์ ์ค๊ฐ์์ผ๋ก ์ฐ๊ฒฐํด์ค๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ ์ ์ฐ๊ฒฐํ๋ฉด ๊ฐ๊ฐ์ ์ ์ ์ด ํ๋ ์ญํ ์ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.

VCC-OUT-GND ์ฐ๊ฒฐํ๊ธฐ#2 PIR์ผ์์ ์ฐ๊ฒฐ๋ ์ ์ ์์ VCC(5V)์ GND๋ฅผ ์ ํํ ํ์ธํ์ฌ ์ฐ๊ฒฐํ์ฌ ์ค๋๋ค.

VCC-OUT-GND ์ฐ๊ฒฐํ๊ธฐ#3 PIR์ผ์์์ OUT๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ GPIO 24๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์ค๋๋ค.

PIR์ผ์์ LED ํ๋ก ๊ตฌ์ฑ#1 ํ๋ก ์์ฑ 
PIR์ผ์์ LED ํ๋ก ๊ตฌ์ฑ#2 ํ๋ก ์์ฑ ๋ค. ํ๋ก๊ทธ๋๋ฐ
์์ ์์ค(6-led_motion.py) from gpiozero import MotionSensor, LED
from signal import pause
pir = MotionSensor(24)
led = LED(13)
pir.when_motion = led.on
pir.when_no_motion = led.off
pause()
2. 3์ LED ์ค์ต
๊ฐ. 3์ LED

3์ RGB 3์ LED๋ ์ด์ ์ ์ฌ์ฉํ LED์ ๋ฌ๋ฆฌ 4๊ฐ์ ํ์ด ์์ด ๊ฐ๊ฐ์ ํ์ด R(Red), G(Green), B(Blue), Gnd์ ๋๋ค. R, G, B ํ์ ๊ฐ์ ๋ฃ์ด ์์ ์กฐํฉํ์ฌ ํํํ ์ ์์ด ๋ค์ํ ์ ํํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋. ํ๋ก ๊ตฌ์ฑ
3์ LED๋ฅผ ํ์ด์ฌ์ผ๋ก ์ ์ดํ์ฌ ๋ค์ํ ์์ ํํํ๋ ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น๋ฌผ 3์ LED, ์ ์ , ์ ํญ330Ω
์ฐธ๊ณ ์ ํญ์ ์ ํญ์ด ์๋ 3์ LED๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ฐ๊ฒฐํ์ง ์์๋ ๋ฉ๋๋ค. ์ฌ์ง์ ๋ณด์ด๋ 3์ LED๋ชจ๋์ ์ ํญ์ด ์์ง๋ง ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ ํญ์ ์ฐ๊ฒฐํ์ฌ Gnd๋ฅผ ํํํ๊ณ ์ ํฉ๋๋ค.

์ค๋น๋ฌผ

GPIO 4, 5, 6๋ฒ ์ฐ๊ฒฐ ๋ธ๋ ๋๋ณด๋์์ ์ ์ ์ ์ด์ฉํ์ฌ GPIO 4, 5, 6๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. GPIO 4๋ฒ์ R์ ํํํ๋ Red ์ ์ ์ ์ด์ฉํ์๊ณ , GPIO 5๋ฒ์ G๋ฅผ ํํํ๋ Green ์ ์ ์ด ์์ด Orange๋ก ์๋ฏธ๋ฅผ ๋์ฒดํด์ ์ฌ์ฉํ์ต๋๋ค. GPIO 6๋ฒ์ B๋ฅผ ํํํ๋ Blue ์ ์ ์ด ์์ด Black์ผ๋ก ์๋ฏธ๋ฅผ ๋์ฒดํ์ฌ ์ฌ์ฉํ์ต๋๋ค. ์ ์ ์ ์ฐ๊ฒฐํ ๋ ๊ท์น์ ์ฃผ์ด ์ฐ๊ฒฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.

GPIO 4, 5, 6๊ณผ ์ ํญ ์ฐ๊ฒฐ ์ ํญ์ ํ ์ชฝ์ Gnd์ ์ฐ๊ฒฐํฉ๋๋ค. ์ ์ ์ ๋ฐ๋์ชฝ์ ๋ธ๋ ๋๋ณด๋์ ์ฌ์ง์ฒ๋ผ ์ฐจ๋ก๋๋ก ์ฐ๊ฒฐํฉ๋๋ค. GPIO 6 - GPIO 5 - GPIO 4 - ์ ํญ(Gnd) ์์ผ๋ก ํ ์นธ์ฉ ์์ ์ฐ๊ฒฐํฉ๋๋ค.

3์ LED์ 4ํ 
3์ LED ๋ธ๋ ๋๋ณด๋ ์ฐ๊ฒฐ 
3์ LED ํ๋ก ๊ตฌ์ฑ#1 ํ๋ก ์์ฑ 
3์ LED ํ๋ก ๊ตฌ์ฑ#2 ํ๋ก ์์ฑ ๋ค. ํ๋ก๊ทธ๋๋ฐ
์์ ์์ค(7-full_color_led.py) from gpiozero import RGBLED
from time import sleep
led = RGBLED(red=4, green=5, blue=6)
led.red = 1
sleep(1)
led.red = 0.5
sleep(1)
led.red = 0
sleep(1)
led.green = 1
sleep(1)
led.green = 0.5
sleep(1)
led.green = 0
sleep(1)
led.blue = 1
sleep(1)
led.blue = 0.5
sleep(1)
led.blue = 0
sleep(1)
led.red = 1
led.green = 1
led.blue = 1
sleep(1)
led.red = 0
led.green = 0
led.blue = 0
sleep(1)
์์ ์์ค(7-full_color_led2.py) from gpiozero import RGBLED
from time import sleep
led = RGBLED(red=4, green=5, blue=6)
led.color = (0, 1, 0) # full green
sleep(1)
led.color = (1, 0, 1) # magenta
sleep(1)
led.color = (1, 1, 0) # yellow
sleep(1)
led.color = (0, 1, 1) # cyan
sleep(1)
led.color = (1, 1, 1) # white
sleep(1)
led.color = (0, 0, 0) # off
sleep(1)
์์ ์์ค(7-full_color_led3.py) from gpiozero import RGBLED
from time import sleep
led = RGBLED(red=4, green=5, blue=6)
for i in range(100):
led.blue = i/100
sleep(0.05)
led.blue = 0
sleep(0.1)
์ค์ต) ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๋๋ง์ ์ ์ ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ด ์๋ค.
'๋ก๋ด๊ต์ก > 4ํ์ฐจ_๋ผ์ฆ๋ฒ ๋ฆฌGPIO' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[gpiozero] RGBLED, MotionSensor (0) 2021.06.25