-
[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๋ฒ์ ์ ์ฐ๊ฒฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ธฐ์กด์ 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์ผ์)
์ธ์ฒด ๊ฐ์ง ์ผ์(PIR์ผ์, Passive Infrared Sensor)๋ ์ฌ๋์ด๋ ๋๋ฌผ์ด ์์ง์ผ ๋ ๋ฐ์๋๋ ์ ์ธ์ ๋ณํ๋ฅผ ๊ฐ์งํด ๋ด๋ ์ผ์๋ก์ ๋ชจ์ ์ผ์๋ผ๊ณ ๋ ํฉ๋๋ค. ์ผ์ ์ํ์ ํํ๊ฒ ์ฌ์ฉ๋๋ ์ฌ๋ก๋ ํ๊ด์ด๋ ์๋ฆฌ๋ฒ ์ดํฐ ์ ๊ตฌ์์ ์ฌ๋์ด ์ ๊ทผํ๋ฉด ์๋์ผ๋ก ๋ถ์ด ์ผ์ง๋ ์ ๋ฑ์ด ์์ต๋๋ค.
์์ง์์ ๊ฐ์งํ๋ฏ๋ก ์์ง์์ด ์์ผ๋ฉด ๋น์ฐํ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ๊ฐ๋ณ์ ํญ์ ์ด์ฉํ์ฌ ๊ฐ๋์ ๊ฐ์ง ์๊ฐ ๋ฑ์ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ์ 2ํ(VCC/GND)๊ณผ ์ ํธ๋ถ(SIG) ๋ฑ ์ด 3๊ฐ์ ํ์ ์ฌ์ฉํ๋ฉฐ, ์ฃผ๋ณ์ ์์ง์์ด ์ธ์๋๋ฉด ์ ํธ๋ถ๋ก ์ถ๋ ฅ์ด ๋์ค๋ ํํ์ ๋๋ค. ์ถ๋ ฅ์ HIGH, LOW๋ก ๋์งํธ ์ถ๋ ฅ๊ฐ์ ๊ฐ์ง๋๋ค.
์ผ์ ๊ฐ๋ ์กฐ์ (Distance Adjust) ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด, ๋ฏผ๊ฐ๋๊ฐ ๋ฎ์์ ธ์ ๊ฐ์ง ๊ฑฐ๋ฆฌ๊ฐ ์ค์ด๋ญ๋๋ค.
์ง์ฐ ์๊ฐ ์กฐ์ (Delay Time Adjust) ์ธ์ฒด ๊ฐ์ง ํ ๊ฐ์ง๋ ์ํ๋ฅผ ์ผ๋ง๊ฐ ์ ์งํ ๊ฒ์ธ๊ฐ ํ๋ ์๊ฐ์ ์กฐ์ ํฉ๋๋ค. ์๊ณ๋ฐฉํฅ(์ง์ฐ์๊ฐ ์งง๊ฒ), ๋ฐ์๊ณ๋ฐฉํฅ(์ง์ฐ์๊ฐ ๊ธธ๊ฒ)
ํธ๋ฆฌ๊ฑฐ ๋ชจ๋ ์ข์ธก์ ์ ํผ์ค์์น๋ฅผ L๋ก ์ฐ๊ฒฐํ๋ฉด ๊ฐ์ง ์ ํธ๋ฅผ ํ ๋ฒ๋ง ๋ณด๋ด์ฃผ๋ ๋ชจ๋์ด๊ณ , H๋ ๊ฐ์ง์ ํธ๋ฅผ ๊ณ์ํด์ ๋ณด๋ด์ฃผ๋ ๋ชจ๋์ ๋๋ค.
๋. ํ๋ก ๊ตฌ์ฑ
PIR์ผ์๋ฅผ ์ด์ฉํ์ฌ ์์ง์์ด ๊ฐ์ง๋๋ฉด LED๊ฐ ์ผ์ง๋๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น๋ฌผ PIR์ผ์, MF์ ์ , (+LED, ์ ์ , ์ ํญ330Ω์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก)
์ปค๋ฒ๋ฅผ ์ ๊ฑฐํ์ฌ PIR์ผ์๋ฅผ ์ดํด๋ณด๋ฉด VCC-OUT-GND๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. PIR์ผ์๊ฐ ๋์ํ๋ ค๋ฉด 5~12V์ ์ ๋ ฅ์ ์์ด ํ์ํ๋ฏ๋ก ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ GPIO์์ 5V ์ ์์ VCC๋ฅผ ์ฐ๊ฒฐํ์ฌ์ผ ํ๋ค.
GND๋ ๋ธ๋ ๋๋ณด๋ GND(-๊ทน)์ ์ฐ๊ฒฐํ๋ฉฐ OUT์ ์์ง์์ ๊ฐ์งํ์ฌ ์ ํธ๋ฅผ ๋ณด๋ด์ฃผ๋ ๋ถ๋ถ์ด๋ฏ๋ก ์ด๋ฅผ GPIO 24๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์ ํธ๋ฅผ ๋ฐ๋๋ค.
์ ์ ์ ๊ฐ๊ฐ์ ํ์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ท์น์ ์ ํด VCC๋ ๋นจ๊ฐ์, GND๋ ์ด๋์ด์, OUT์ ์ค๊ฐ์์ผ๋ก ์ฐ๊ฒฐํด์ค๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ ์ ์ฐ๊ฒฐํ๋ฉด ๊ฐ๊ฐ์ ์ ์ ์ด ํ๋ ์ญํ ์ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
PIR์ผ์์ ์ฐ๊ฒฐ๋ ์ ์ ์์ VCC(5V)์ GND๋ฅผ ์ ํํ ํ์ธํ์ฌ ์ฐ๊ฒฐํ์ฌ ์ค๋๋ค.
PIR์ผ์์์ OUT๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ GPIO 24๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์ค๋๋ค.
๋ค. ํ๋ก๊ทธ๋๋ฐ
์์ ์์ค(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์ 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๋ฒ์ R์ ํํํ๋ Red ์ ์ ์ ์ด์ฉํ์๊ณ , GPIO 5๋ฒ์ G๋ฅผ ํํํ๋ Green ์ ์ ์ด ์์ด Orange๋ก ์๋ฏธ๋ฅผ ๋์ฒดํด์ ์ฌ์ฉํ์ต๋๋ค. GPIO 6๋ฒ์ B๋ฅผ ํํํ๋ Blue ์ ์ ์ด ์์ด Black์ผ๋ก ์๋ฏธ๋ฅผ ๋์ฒดํ์ฌ ์ฌ์ฉํ์ต๋๋ค. ์ ์ ์ ์ฐ๊ฒฐํ ๋ ๊ท์น์ ์ฃผ์ด ์ฐ๊ฒฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
์ ํญ์ ํ ์ชฝ์ Gnd์ ์ฐ๊ฒฐํฉ๋๋ค. ์ ์ ์ ๋ฐ๋์ชฝ์ ๋ธ๋ ๋๋ณด๋์ ์ฌ์ง์ฒ๋ผ ์ฐจ๋ก๋๋ก ์ฐ๊ฒฐํฉ๋๋ค. GPIO 6 - GPIO 5 - GPIO 4 - ์ ํญ(Gnd) ์์ผ๋ก ํ ์นธ์ฉ ์์ ์ฐ๊ฒฐํฉ๋๋ค.
๋ค. ํ๋ก๊ทธ๋๋ฐ
์์ ์์ค(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