반응형

라즈베리Pi#20피에조 부저 사용하기!  with (파이썬 코드)
RaspberryPi Buzzer control with Python !

 안녕하세요 라즈이노 IoT 입니다.
이번 시간에는 라즈베리 Pi에서 부저를 사용해 보는 실습을 진행합니다.
GPIO 출력을 제어하여 부저를 울리는 방법을 설명드리며, 
주파수를 이용하여 음의 높낮이를 조절할 수 있기에, 실습5 에서는 간단한 동요를 출력해 보겠습니다.


1.  음계(Scale)와 옥타브(Octave)

  음계란, 음악에 쓰이는 음을 높이의 차례대로 배열한 음의 층계를 말합니다.   
음 높이는 Pitch.    

음계(Scale)

  "도, 레, 미, 파, 솔, 라, 시, 도" 의 8가지 음계를 옥타브라고 합니다.  즉, 옥타브는 어떤 음에서 완전 8도의 거리에 있는 음까지를 말하며, 물리학적으로는 주파수(진동수)가 두 배 차이나는 두 음 사이의 음정을 말하는데,  예를 들어, 음높이가 400Hz인 음과  800Hz인 음 사이의 음정은 옥타브라고 말하며, 인간의 귀는 이 두 음을 높이는 다르지만 서로 같은 음으로 인식합니다.  (예, 낮은 '도'와 높은'도',  낮은 '솔'과 높은 '솔')

옥타브
8 옥타브



2.  소리와 주파수 (음계 별 표준 주파수)


스피커나 부저를 통해서 듣게 되는 음도, 진동판의 떨림(주파수)에 의해 들을 수 있게 되는데요, 1초(Second)에 1회의 떨림을 1Hz라 부르며,  1초에 100회면 100Hz라 말합니다.  떨림(주파수)이 낮을수록 낮은음을 내게 되며, 높을수록 늪은 음을 내게 됩니다. 
음악에 사용되는 악기들의 종류는 매우 다양하고 많지만, 합주를 했을 때 음의 일치가 되는 이유는,  각각의 음 높이가 특정 주파수로 정리되었기에 가능합니다. 
아래가 각 음계 별 표준 주파수입니다.

이미지 참조 : control.cntc.ac.kr/cpu

 그럼, 이 번 실습에서 각 음계 별 주파수를 참고하여, 적당히 반올림한 수를 코드에 적용하면, 해당음의 소리를 출력할 수 있게 됩니다.   

 

 3. 부저의 종류와 특징 : 


    - Passive type : 전원만 가해서는 소리가 나지 않고, PWM 형태의 일정한 주파수일 때 소리가 나는 타입.
    - Active type : 전원만 연결해 주면 소리가 나는 타입.

위 이미지에서 녹색의 기판이 보이는 부저가 (좌) 패시브 타입이며,  PWM처리 회로를 내장하여 검은색으로 마감 처리한 부저가 (우) 액티브 타입 부저입니다.

  라즈베리 Pi의 포트에서 High 신호를 내보내어 직접 부저를 울릴 수도 있지만, 출력이 약할 수 있고, 포트를 통한 직접적인 출력을 제한하기 위해,  아래와 같은 Low level trigger 방식을 사용할 수 있습니다. 
이 방식은, GPIO 포트를 통한 직접적인 출력을 사용하지 않고, VCC 전원을 사용하게 함으로, 포트를 보호하게 되며, 부저에 충분한 전류를 공급할 수 있게 합니다. 

(Low level trigger 부저 연결회로도와 연결도)

 회로 연결을 보면, 입출력(I/O) 부분이 Low 신호가 되면, TR이 작동(스위치 On) 되어, VCC(+), Buzzer로 이어지는 전류가 E(에미터) - C(컬렉터)로 빠져나가면서, Buzzer를 울리게 됩니다.  그래서 이런 작동 형태를 '로우-레벨-트리거'(Low level trigger)라 말합니다.  
TR은 위 회로 기준으로,  가지고 있는 PNP타입의 TR 어떤 것이든 사용 가능합니다.
TR의 경우는  NPN 타입과 PNP타입으로 나뉘는데요,   PNP 타입도 제품 품번마다 E(에미터),  B(베이스),  C(컬렉터) 핀의  위치가 다르기 때문에  자신이 사용하는 TR의 스펙을 확인(검색 가능)해서 연결하면 됩니다. 

(좌)NPN 타입과  (우)PNP 타입 참고 이미지

즉,  같은 PNP 타입의 TR이라 하더라도, 위 이미지처럼, A1015품번의 경우 핀이 E C B의 순으로 되어 있지만,  
또 다른 PNP타입의 A9012 TR의 경우 핀 순서는 E B C로 되어 있습니다. (핀 배열 구분 주의!)   

또한 아래처럼,  액티브 타입 부저를 '로우-레벨-트리거' 방식으로 모듈화 한 제품도 있으니 참고하세요.
그림에 보면 TR과 저항이 내장되어 있습니다.(Low level trigger 방식)

모듈형 액티브 타입 부저

 

4.  라즈베리파이+부저 연결도 (실습을 위한 연결 도면)


 기본적으로 아래처럼 라즈베리 Pi 포트 출력으로 직접 부저를 작동시키는 연결을 하면 됩니다. 

또는 아래와 같이 TR과 저항을 이용한 Low level trigger 방식의 연결을 하여도 됩니다.  
이때, 사용한 TR은 PNP 타입의 A1015 품번을 사용했습니다. PNP타입의 다른 품번을 사용해도 되며, 이때는 ECB의 핀 배열이 다를 수도 있으니, 해당 TR의 스펙을 확인해 보세요.

 

또한 아래처럼, TR과 저항이 내장되어 모듈화 된 부저 모듈을 사용하여 간편하게 연결할 수도 있습니다.



부저를 이용한 실습

  (실습 1) 부저 1회 울리기

 : 아래 코드를 작성하여 동작시켜 보세요. 
부저가 1.5 동안 1회 울리고 종료됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
GPIO.setwarnings(False)
 
pwm = GPIO.PWM(buzzer, 262) # '262'는 음의 높이에 해당하는 특정 주파수
pwm.start(50.0)
time.sleep(1.5) # 1.5초간 음이 울리도록 시간지연
 
pwm.stop()
GPIO.cleanup()
cs

 

 (실습 2) 부저로 '도, 레, 미' 음 3회 반복 울리기

 : 아래 코드를 작성하여 동작시켜 보세요. 
부저가 1.0초 간격으로 도, 레, 미 음을 3번 반복한 후 종료됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
GPIO.setwarnings(False)
 
pwm = GPIO.PWM(buzzer, 1.0)  # 초기 주파수 설정을 1Hz로 함.
pwm.start(50.0)
 
for cnt in range(0,3):
    pwm.ChangeFrequency(262)   # 262는 4옥타브의 '도'에 해당되는 주파수 
    time.sleep(1.0)
    pwm.ChangeFrequency(294)   # 294는 4옥타브의 '레'에 해당되는 주파수 
    time.sleep(1.0)
    pwm.ChangeFrequency(330)   # 330은 4옥타브의 '미'에 해당되는 주파수 
    time.sleep(1.0)
 
pwm.ChangeDutyCycle(0.0)
 
pwm.stop()
GPIO.cleanup()
 
 
cs

 

 (실습 3) 부저로 '도레미파솔라시도' 음계 출력하기

 : 아래 코드를 작성하여 동작시켜 보세요. 
부저가 4옥타브 영역의 주파수인 '도, 레, 미, 파, 솔, 라, 시, 도' 음을 출력한 후 종료됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
 
pwm = GPIO.PWM(buzzer, 1.0)   # 초기 주파수를 1Hz로 설정
pwm.start(50.0)               # 듀티비를 50%로 설정
 
scale = [262294330349392440494523]
 
for i in range(0,8):
    pwm.ChangeFrequency(scale[i])
    time.sleep(1.0)
 
pwm.stop()
GPIO.cleanup()
 
cs

 

(실습 4) 부저로 '도-레-미-파-솔-라-시- 도 -시-라-솔-파-미-레-도' 음계 출력하기

 : 아래 코드를 작성하여 동작시켜 보세요. 
부저가  '도, 레, 미, 파, 솔, 라, 시, 도' 음을 올리고 다시 내리는 형태로 출력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
 
pwm = GPIO.PWM(buzzer, 1.0)   # 초기 주파수를 1Hz로 설정
pwm.start(50.0)               # 듀티비를 50%로 설정
# 4옥타브 주파수 : 도(262)/레(294)/미(330)/파(349)/솔(392)/라(440)/시(494)/도(523)  
scale = [262294330349392440494523]
 
for i in range(0,8):
    pwm.ChangeFrequency(scale[i])
    time.sleep(1.0)
 
 
for i in range(7,-1,-1):
    pwm.ChangeFrequency(scale[i])
    time.sleep(1.0)
    
pwm.stop()
GPIO.cleanup()
 
cs

 

(실습 5) 부저로 '반짝반짝 작은 별' 동요를 출력해 봅니다.

 : 아래 코드를 작성하여 멜로디를 출력해 보세요.
부저가  '반짝 반짝 작은별' 계이름을 울리고 종료하도록 합니다. 
아래,  '작은 별' 악보를 참고하세요.  실습을 이해한 후, 다른 곡도 코딩하여 연습해 보세요.

작은 별 악보
작은 별 계이름
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import RPi.GPIO as GPIO
import time
 
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
 
pwm = GPIO.PWM(buzzer, 1.0# 초기 주파수를 1Hz로 설정
pwm.start(90.0) # 듀티비를 90%로 높여 설정함(음 구분이 더 잘되고 조금 더 부드럽게 들림)
 
# == 동요 : 반짝 반짝 작은별 계이름 ==
#도도솔솔라라솔파파미미레레도 솔솔파파미미레 솔솔파파미미레 도도솔솔라라솔파파미미레레도
 
# 4옥타브:도(1)/ 레(2)/ 미(3)/ 파(4)/ 솔(5)/ 라(6) / 시(7)  
scale = [ 262 , 294  , 330 ,  349 , 392 ,  440 ,   494 ]
twinkle = [ 11556654433221, \
            55443325544332, \
            11556654433221 ]
try :
    for i in range(0,42):
        pwm.ChangeFrequency(scale[twinkle[i]])
        if i==6 or i==13 or i==20 or i==27 or i==34 or i==41:
            time.sleep(1.0)   # 2분음표 부분을 모두 1초로 출력
        else :
            time.sleep(0.5)   # 기타 4분음표는 모두 0.5초로 출력함 
    pwm.stop()
 
finally :
    GPIO.cleanup()
 
cs

 

자, 어떠신가요?   비록 단순 부저여서 음질이 좋지는 못하지만, 음 고유의 주파수를 이용하여 동요나 가요의 멜로디를 얼마든지 연주할 수 있습니다.

그럼, 아래 전체 과정을 담은 동영상을 함께 보면서 실습해 보세요. 

라즈베리파이에 부저 사용하기 영상으로 학습하기

 

반응형
반응형

【라즈베리파이 화면 해상도 설정

 

 라즈베리파이를 처음 설치하게 되면 화면사이즈가 모니터에 꽉차지 않고 모니터 크기(해상도) 보다 조금 작게 나타납니다.  이럴때는 HDMI 설정과 관련한 옵션파일을 열어 강제로 지정해주면 간단히 해결 됩니다. 

 

▶ 해상도 강제 지정하기

 

1. 나노 에디터를 이용하여, 아래와 같은 명령어로 부팅환경 설정 파일을 파일을 열어 봅니다. 

: ~$  sudo nano /boot/config.txt     

 

2. 에디터에서 중간쯤에 아래와 같은 문장이 있어요. 

# uncomment to force a specific HDMI mode (this will force VGA) 

# hdmi_group=1

# hdmi_mode=1

 

3. 이것을 일반적으로 22인치 이상 모니터에 많이 사용하는 1920*1080(16:9) 1080p 해상도로 할 경우에는 아래 숫자로 바꾸어 주면 됩니다. 

# uncomment to force a specific HDMI mode (this will force VGA) 

hdmi_group=2

hdmi_mode=82

수정후에는 Ctrl + X ,   저장할까요?  --> Y  엔터    

저장하고 빠져 나온 후,   재부팅 한다.  ( : ~$  sudo reboot )

 

4. 기타 그외에 다른 해상도는 아래를 참고해주세요~

( 여기에서 주의해야 할 것은 ,  자신의 모니터가 지원되지 않는 해상도로 변경해서 재부팅하면 화면이 보여지지 않는 경우가 생기게 되고,  설정값을 원래대로 다시 돌려 놓을 수 없는 상황이 생깁니다.  그렇게 되면, 다른 모니터나 TV 등에 연결해서 볼 수 있는 상태를 찾아다녀서 복구시키거나,  방법이 없는 경우는 운영체제를 다시 설치해야 되는 경우도 발생 할 수 있으니 잘 확인 후 변경하시길 바랍니다.  ^^;;  )  

- hdmi_group

아래값은 HDMI 출력 그룹이 CEA(Consumer Electronics Association, TV에서 일반적으로 사용되는 표준)인지 DMT(Display Monitor Timings, 모니터에서 일반적으로 사용되는 표준)인지를 정합니다. 이 설정은 hdmi_mode와 함께 사용됩니다.

hdmi_group결과

0 EDID로부터 자동 감지
1 CEA
2 DMT

- hdmi_mode

아래 값들은 hdmi_group=2(DMT)인 경우에 유효합니다. (TV용이 아닌 디지털 모니터용에 대한 설정 값들입니다)

 

hdmi_mode해상도주파수비고

1 640x350 85Hz
2 640x400 85Hz
3 720x400 85Hz
4 640x480 60Hz
5 640x480 72Hz
6 640x480 75Hz
7 640x480 85Hz
8 800x600 56Hz
9 800x600 60Hz
10 800x600 72Hz
11 800x600 75Hz
12 800x600 85Hz
13 800x600 120Hz
14 848x480 60Hz
15 1024x768 43Hz Raspberry Pi와 호환되지 않음
16 1024x768 60Hz
17 1024x768 70Hz
18 1024x768 75Hz
19 1024x768 85Hz
20 1024x768 120Hz
21 1152x864 75Hz
22 1280x768 블랭킹 감소
23 1280x768 60Hz
24 1280x768 75Hz
25 1280x768 85Hz
26 1280x768 120Hz 블랭킹 감소
27 1280x800 블랭킹 감소
28 1280x800 60Hz
29 1280x800 75Hz
30 1280x800 85Hz
31 1280x800 120Hz 블랭킹 감소
32 1280x960 60Hz
33 1280x960 85Hz
34 1280x960 120Hz 블랭킹 감소
35 1280x1024 60Hz
36 1280x1024 75Hz
37 1280x1024 85Hz
38 1280x1024 120Hz 블랭킹 감소
39 1360x768 60Hz
40 1360x768 120Hz 블랭킹 감소
41 1400x1050 블랭킹 감소
42 1400x1050 60Hz
43 1400x1050 75Hz
44 1400x1050 85Hz
45 1400x1050 120Hz 블랭킹 감소
46 1440x900 블랭킹 감소
47 1440x900 60Hz
48 1440x900 75Hz
49 1440x900 85Hz
50 1440x900 120Hz 블랭킹 감소
51 1600x1200 60Hz
52 1600x1200 65Hz
53 1600x1200 70Hz
54 1600x1200 75Hz
55 1600x1200 85Hz
56 1600x1200 120Hz 블랭킹 감소
57 1680x1050 블랭킹 감소
58 1680x1050 60Hz
59 1680x1050 75Hz
60 1680x1050 85Hz
61 1680x1050 120Hz 블랭킹 감소
62 1792x1344 60Hz
63 1792x1344 75Hz
64 1792x1344 120Hz 블랭킹 감소
65 1856x1392 60Hz
66 1856x1392 75Hz
67 1856x1392 120Hz 블랭킹 감소
68 1920x1200 블랭킹 감소
69 1920x1200 60Hz
70 1920x1200 75Hz
71 1920x1200 85Hz
72 1920x1200 120Hz 블랭킹 감소
73 1920x1440 60Hz
74 1920x1440 75Hz
75 1920x1440 120Hz 블랭킹 감소
76 2560x1600 블랭킹 감소
77 2560x1600 60Hz
78 2560x1600 75Hz
79 2560x1600 85Hz
80 2560x1600 120Hz 블랭킹 감소
81 1366x768 60Hz
82 1920x1080 60Hz 1080p
83 1600x900 블랭킹 감소
84 2048x1152 블랭킹 감소
85 1280x720 60Hz 720p
86 1366x768 블랭킹 감소

 

- 위 설정값들은 RasberryPi WiKi를 참고 하였습니다. 

 ( https://wikidocs.net/7826 )

 

감사합니다. 

오늘 하루도 행복하세요! ~

 

반응형
반응형

【 라즈베리파이】 Raspberry Pi ↔ windows , 간편한 파일 전송 프로그램 WinSCP 설치 & 셋업

 

라즈베리파이와 윈도우 시스템 사이에서 파일을 주고 받을 일이 생기는데, 이 때 설치와 사용이 간편한 WinSCP에 대해 소개하고자 합니다.

FTP 접속 WinScp은  오픈소스(무료) 이면서 , 파일 전송을 위해 최근 많이 사용되고 있고, 사용법도 어렵지 않습니다. 

 

우선, 아래 사이트로 이동합니다.

https://winscp.net/eng/download.php

- 위 화면에서 DOWNLOAD WINSCP 5.15...xxx (9.4 MB) 버전을 다운 받는다.

- 단, 이 때 설치가 필요 없는 포터블 버전을 받고자 한다면 , 오른쪽에 있는  OTHER DOWNLOADS를 클릭하면,

아래와 같은 포터블 다운로드 화면이 나온다.

 

- 여기서는 설치 버전으로 직접 설치해서 프로그램 사용법에 대해 설명하겠습니다.

아래와 같은 다운받은 파일을 실행해 주세요~

- 그런데, 막상 설치를 진행 하려고 하면 아래와 같은 경고 메시지를 보여줍니다.

 그럼, 당황하지 말고, 화면 중간에 있는 추가 정보 를 클릭해 줍니다.

- 그러면 아래처럼 실행 버튼이 나오게 됩니다.

- 실행을 눌러 설치를 진행합니다.

 

- 아래 화면에서, 파일을 복사해서 주고 받을 때에는 전통적인 FTP 스타일이 편하므로, 컴맨더(C)를 선택하는 것을 추천합니다.

- 설치가 완료되면 아래와 같은 완료 화면을 보실 수 있습니다.

- 완료를 누르고 바탕화면에 있는 WinSCP 아이콘을 실행시킵니다.

- 그럼 아래와 같은 화면이 나타납니다. 

- 그럼 접속 하려는 라즈베리파이의 IP 주소를 아래처럼 입력해줍니다.  (접속할 포트 번호는 디폴트 값으로 22 입니다)

- 사용자 이름은 특별히 변경하지 않았으면, 소문자료  ' pi ' 이며 ,  비번도 ' raspberry ' 로 하면 됩니다.  만약 접속이 안 된다면, ID 와 비번을 바꾼 경우 이니 확인해야 합니다.  그리고, 접속하려는 라즈베리파이에 인터넷 연결이 제대로 되어 있는지 확인하면 됩니다. 

 

- 그런데 이때 ,  User name과 Password 는 일치하나 다른 문제로 접속이 안되는 문제가 발생할 거예요. 

- 라즈베리파이와는 원격 접속형태로 이루어 지는데, 이때 사용되는 암호와된 접속 방식이 바로 SSH(Secure SHell) 입니다.   다만, 라즈베리파이의 기본 설정 상태는 접속 할 수 없는 Disable 상태로 되어 있어요.   따라서 이 설정을 Enable로 변경해주면 접속이 잘 됩니다. 

 

 그럼, 라즈베리파이의 주 메뉴중에어 아래에 표시한 'Raspberry Pi Configuration ' 을 클릭하여 들어 갑니다. 

[ 메뉴 ≫ 기본 설정 ≫ Raspberry Pi Configuration ]

 

- 그럼 아래와 같은 설정 메뉴가 뜨면 두 번째 탭에서 SSH 설정 부분의 Enable 영역에 클릭해 주고 OK 를 누르면 됩니다. 

그리고 재부팅해주고, 윈도우의 WinSCP 프로그램에서 다시 접속 시도해보면 접속이 잘 될 거예요.  

 

 

- 호스트 접속에 성공했다면, 맨처음 접속시에는 아래와 같은 메시지가 뜨는데, '예'를 눌러 주면 이후로는 뜨지 않습니다.

 

- 여기서 만약 라즈베리파이의 IP 주소를 바로 알고 싶다면, 라즈베리파이 화면 우측 상단에  인터넷(또는 WiFi) 연결 모양에 마우스 커서를 가져다 대면 IP 주소를 바로 볼 수 있어요.  저의 경우는 일반 랜선과 WiFi 둘 다 동시에 접속되어 있는 경우 입니다. 

- 접속이 제대로 이루어 지면 아래 처럼 윈도우 PC 탐색창 화면과,  라즈베리파이 PC 탐색창 화면으로 각각 나뉘어진 창을 볼 수 있습니다.   ( 라즈베리파이 첫 화면 위치는 ' /home/pi/ '  )

 

- 그러면 원하는 파일들을 선택해서 끓어다 놓으면 복사가 됩니다.  폴더 지정과 생성도 가능하며, 삭제 또한 자유자제로 가능합니다.  접속한 라즈베리파이에서도 파일의 복사와 삭제 또한 가능합니다. 

 

만약, 파일을 분명히 복사 해 넣었는데, 탐색창에 보이지 않는 다면,   이는 FTP와 같은 접속 툴 방식의 특성인데, 이럴 때는 상단 메뉴 중 아래와 같은 새로고침 버튼을 클릭하면 보일 거예요. 

 

 그럼 즐겁게 라즈베리파이 공부하세요~

반응형
반응형

【 라즈베리파이 】 #17 4LED 순차 점멸 with Timing chart

 지난시간 2개의 LED를 이용해서 타이밍 차트에 따라 반복 점멸을 하도록 만들어 보았다. 이번에는 4개의 LED이용할 것이며, 타이밍 차트 대로 순차로 점멸하되, 총 10회만 반복하도록 프로그래밍 해보자. 


▶ 선수 학습 :

 

  1. (기초#16State Diagram 구현 실습 (타이밍 차트 참고 강좌클릭


▶ 회로 구성 : 

( 이미지를 클릭하면 크게 확대 됩니다)



▶ 개요 

  GPIO의 출력을 순서대로 제어 해보는 실습으로,  파이썬의 while 구문을 함께 연습해 볼 수 있다.  아래 이미지는 스테이트 다이어그램(State Diagram)으로 동작의 순서를 도식화 해서 이를 다시 프로그래밍으로 구현해 보는 연습을 통해 정확한 동작의 구현을 기대할 수 있다. 



(아래 이미지를 클릭해서 보면 눈금등을 더 선명하게 보실 수 있어요) 



▶ 실습절차 

 저항과 LED를 준비하고 위 회로도와 같이 연결한다. 
(저항은 LED가 보호되면서 적당량의 밝기를 가질 수 있도록 용량값을 선택하는데, 통상적으로 100
Ω~470Ω 사이값으로 준비하면 실험을 위한 짧은 실습에는 크게 문제가 없다)

  

- LED1 → GPIO 18번 핀 연결  / LED2 → GPIO 23번 핀 연결

- LED3 → GPIO 24번 핀 연결  / LED4 → GPIO 25번 핀 연결

(LED 극성에 주의 : 리드선이 긴 쪽이 '+'  ,  짧은 쪽이 '-' 이다)


1. 부품 : 220Ω x 4 ,  LED x 4




▶ 파이썬 코드 


라즈베리파이에서 파이선을 실행시킨다. 

메뉴에서 새파일을 선택하고 아래와 같이 작성 저장후 실행시킨다.(F5)




▶ 코드설명 

4개의 LED가 순차적으로 반복 실행

-타이밍 차트에서 한 눈금당 0.2초 씩 계산함.
-L1High 신호 : 0.8초 동안 On
-L2High 신호 : L1신호 시작부터 0.4Delay 0.8초 동안 On
-L3High 신호 : L2신호 시작부터 0.4Delay 0.8초 동안 On
-L4High 신호 : L3신호 시작부터 0.4Delay 0.8초 동안 On
-L1High 신호 : L4신호 종료부터 1.2Delay 0.8초 동안 On

-이후 반복   (10회 반복)


-위 타이밍 차트를 분석해보면 패턴 L L L L의 패턴이 순서 대로 이어지고 있고, L4가 Off 된 이후 12개의 눈금(각0.2초 총 1.2초)

이후 다시 첫 L1으로 반복되는 것을 알 수 있다.  


- 총 10회를 반복하도록 while 구문에 조건을 주어야 한다. 

- ' no += 0.1 ' 은   'no = no + 0.1' 과 동일한 코드이다.

- State_1(0.4)  :  State_1() 함수를 호출하면서 delay 타임을 위한 인자값으로 0.4(초)를 전달하고 있다.   [ State_1(0.4)  ]



▶ 실행 결과 

( 영상을 전체보기로 크게 하여 보세요)



ED On Off 실습 with Python

반응형
반응형

라즈베리파이#16 State Diagram 구현 실습

▶ 회로 구성 : 


▶ 개요 


희망하는 GPIO의 출력을 State Diagram으로 도식화 해서 이를 다시 프로그래밍을 통해  하드웨어적으로 구현 해보도록 하자. 

( 이전글 참조  :  #15 LED SOS 신호와 동기신호 실습 )





▶ 실습절차 

저항과 LED, 준비하고 위 도면과 같이 연결한다.  

(LED1 → GPIO 18번 핀 연결  / LED2 → GPIO 23번 핀 연결)

(LED 극성에 주의 : 리드선이 긴 쪽이 '+'  ,  짧은 쪽이 '-' 이다)

1. 부품 : 220Ω x 2 ,  LED x 2



▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.




▶ 코드설명 

【 GPIO 신호를 타이밍 차트로 분석하여 구현하기 


 - 위 신호를 분석 해보면 아래와 같은 4개의 패턴이 순서대로 반복 되는 것을 확인 할 수 있다.



-위 타이밍 차트를 분석해보면 패턴 S1 S2 S3 S4 의 패턴이 순서 대로 이어지고 있고, 3개 패턴의 delay가 나온 후 전체 반복되는 것을 확인 할 수 있다.

-S1패턴 →  ‘True’ , ’ False
-S2패턴 →  True, ’ True
-S3패턴 →  False, ’ True
-S4패턴 →  False, ’ False
-delay패턴 → S4뒤에S4패턴과 같은 패턴 3번 반복(delay)

-위 타이밍 차트에서 한 눈금당 0.2초 씩 계산함.
- 각 상태(State) 별로 def (definition:정의 함수) 형태로 만들어 사용한다



▶ 실행 결과 


아래 영상은 위 프로그램을 두 번 연속 실행 시킨 영상이다. 




ED On Off 실습 with Python

반응형
반응형

 

라즈베리Pi라즈베리Pi 리눅스(Linux) 명령어 정리

 

라즈베리파이에서(현재 라즈비안 OS) 주로 사용되는 주요 리눅스 명령어에 대한 정리입니다.

▶ OS 시동 및 기본 명령어

   ~$ sudo reboot (라즈베리파이 재시작)

   ~$ sudo shutdown -h now (라즈베리파이 즉시 종료)

   ~$ sudo raspi-config (라즈베리파이 설정화면 띄우기)

   ~$ sudo su (관리자권한 모드:'sudo' 없이 실행가능, 'exit' 유저모드)

 

▶ OS 및 프로그램 update & upgrade :    

   ~$ sudo apt-get update (설치된 프로그램 업데이트 내역 확인)

   ~$ sudo apt-get upgrade (확인된 업데이트가 있을 경우 upgrade)

   ~$ sudo apt-get dist-upgrade (필요한 세부내역까지 모두 업데이트)

 

▶ 프로그램 설치 : 

   ~$ sudo apt-get install 프로그램명

 

▶ 프로그램 삭제 : 

   ~$ sudo apt-get remove 프로그램명

   ~$ sudo apt-get remove --purge 프로그램명(셋업file까지 삭제)

   ~$ sudo apt-get autoremove (사용 안하는 프로그램 자동삭제)

   ~$ sudo apt-get remove 프로그램명

 

▶ 프로그램 설치 : 

   ~$ sudo apt-get install 프로그램명

   

▶ 화면 캡쳐 ( scrot ) : 

   ~$ scrot -d 5   (delay time 5초 뒤 캡쳐)   

   ~$ scrot -c     (d 옵션과 함께 사용하여 캡쳐 count down 표시해줌)   

   ~$ scrot -u      (현재 활성화 창 캡쳐) 

   ~$ scrot -u -b  또는 -ub (현재 활성화 창의 보더-테두리까지 캡쳐) 

 (사용 예 : scrot -d 3 -ub  : 3초 뒤 활성창을 테두리 포함하여 캡쳐)

 (캡쳐 된 파일의 저장 위치 :  home 디렉토리의 pi 폴더, png파일로 저장)

 

   ~$ scrot -cd 5    (5초의 카운트 다운과 함께, 라즈비안 화면 메뉴 등 전체 캡쳐에 용이) 

   ~$ scrot -ucd 5    (5초의 카운트 다운과 함께, 마우스로 선택한 활성윈도우창 화면 만 캡쳐해줌. ) 

 

 

▶ 디스크 용량 확인 ( df ) : 

   ~$ df        ( 1byte 단위)

   ~$ df -h    ( G, M 등의 단위로 정렬해서 보여 줌)

 

주요 Linux 명령어 : 

1)  디렉토리(.... 위치) 관련 명령어
~$ pwd    →   현재의 작업 디렉토리(위치) 알려줌 
 /            → 루트 디렉토리
 .   또는 ./      →  현재 디렉토리  
..   또는 ../      →   상위(부모) 디렉토리
~/        → 유저의 홈 디렉토리
../../      →  부모의 부모 디렉토리

2) touch 명령어
- 비어있는 (용량 0) 파일을 생성함
ex)  ~$ touch  filename.c

3) 파일 이동(옮기기) 명령어  :  mv
ex)  ~$ mv filename.c  ..    (filename.c 파일을 상위 폴더로 이동 시켜라) 
아래 예시는 현재 위치( . ) 에 있는 filename.c 파일을 상위 폴더로 이동시킨 후,  다시 현재 위치로 옮겨오는 예시를 보입니다. 

아래 예시처럼 mv (이동) 명령어를 이용해 같은 위치에 이동시키며 파일 이름을 바꿀 수 있습니다.

4) rm   :  파일 삭제 명령어 
ex) rm new.c    :  new.c 파일을 삭제함

5) mkdir : 디렉토리(폴더) 만들기 
ex)  mkdir pump   :  pump 디렉토리를 생성함,    
또는  한 번에 두 개 또는 여려개의 디렉토리를 생성할 수 있습니다.  
ex)  mkdir pump  pumpkin  :  두 개의 디렉토리를 한 번에 생성함.

그리고, '~$ cd pu' 까지 입력한 상태에서 탭키를 한 번 입력하면, 해당 문장으로 시작되는 디렉토리 중 알파벳 순으로 제일 처음 나오는 폴더의 이름으로 자동 입력시켜주며,  탭키를 이어서 두 번더 입력할 경우,  동일한 문장으로 시작되는 폴더가 있을 경우 모두 보여 줍니다.  (위 이미지 참조)

6) echo 명령어  :   텍스트(문자열)을 바로 보여주는 명령어이며,  디렉션 '>' 을 사용하면 해당 문자열을 파일 형태로 저장시킬 수 있습니다. 
또한, ' cat '명령어는  해당 파일의 내용을 보여줍니다. (아래 이미지)

여기서, 기존 파일에 내용을 추가하려면 이중 디렉션('>>')을 사용하면 됩니다. (아래 이미지)
ex)  echo "i love kimchi" >> food 

 -  디렉션('>') 은  특정 리눅스 명령으로 인한 결과을 화면 대신 파일로 저장시킬 수 있습니다. 
 ex)  ~$ ls -la  > ls_Output 라고 명령하면  ls -la의 결과를 화면 대신, 'ls_Output'이라는 파일로 저장시켜 줍니다. 

 

7)   less 명령어  :   내용이 긴 파일을 한 페이지 단위로 멈춤(보여줍니다) .  
 ex )  less  ls_Output  ↵
 화면에 한 페이지 단위로 멈출 때,  키보드를 누르거나  화살표 키로 다음 페이지로 넘길 수 있습니다.
 마지막 페이지에서 빠져나갈 때는  ' : q '   로 입력 합니다.

8)   gcc 컴파일러 실행  :   C언어로 코딩된 코드를 gcc 컴파일러를 이용하여 컴파일 하고, 실행 시키는 리눅스 명령어 입니다.
 ~$  gcc  hello.c   ↵    #    hello.c 파일을 gcc 컴파일러로 컴파일 하여  디스플레이를 통해 볼 수 있는 결과물 ( a.out )을 생성함
 ~$  ./a.out     ↵         #  화면에 a.out  의 내용을 출력함ㅜ
 

 

 Vim 편집기 관련 사용법 및 명령어 : 

1)   Vim 편집기 설치  :   Vim 편집기는 라즈베리파이에서 코딩을 가장 간편히 할 수 있는 편집기여서 익혀두면 좋은데요,  원래 유닉스 버전에서 유명한 단순 편집기인 Vi를  1991년 Bram Moolenaar 라는 개발자가 개선된(improved) 형태의 편집기를 발표하였는데  그게 바로 Vim 입니다. 
이후, 리눅스 진영에서 Vim 편집기를 현재까지 많이 애용하게 되었습니다. 

물론, IDE 형태의 제대로 된 메뉴를 갖추고 좀더 사용하기 편하고 강력한 기능의 코딩 편집툴도 있지만, 경우에 따라서는 어쩔수 없이 텍스트 기반의 리눅스 터미널 화면에서 처리해야 하는 상황이 분명히 존재하는데 이 때 사용하기 제격인 Vim 편집기의 사용방법은 분명 익혀둘 필요가 있습니다. 

 - 설치 명령어 :   ~$ sudo  apt-get  install vim

1
~$ sudo  apt-get  install vim
cs

  (설치 중간 질문에  'y' 키 눌러주세요)

- Vim 에디터 환경설정 :  Vim 에디터 설치하게 되면,  글자색을 입혀주는 기능이나 좌측에 코딩의 편의를 위한 숫자를 넣어 줄 수 있는데요,  그냥 단순하게 명령어를 사용해서는 환경설정이 저장되지 않아 다음번 Vim을 오픈할 때는 다시 원래대로 돌아간 상태로 로딩되는데요, 
vimrc 라는 환경설정 파일을 만들어 옵션을 입력하여 저장하면 해결됩니다. 
리눅스 파일중에 이름앞에 ' . '(점)이 붙은 파일들은 숨김파일 표시인데요,  환경설정 파일을 숨김파일 형태인 ' .vimrc '로 해서 만들어 주면 됩니다.   그 외에 문법규칙, 환경 변수 등록, 에디터 테마 등을 설정해 둘 수 있습니다.

1
2
~$ cd
~$ vim .vimrc
cs

 먼저,  .vimrc 파일은 홈 디렉토리로 이동해서 설치해야 함으로,  cd  ↵   입력하면 홈디렉토리로 이동하게 되며,  vim  .vimrc  를 입력해서  아래와 같은 내용을 추가해 주면 됩니다. 
vim 에디터 편집화면에서  내용입력시 ' Insert ' 키는 키보드 ' i

1
2
syntax on
set number
cs

  1. 코드에 다른 색을 구분 표시 해주는 설정은  " syntax on " 라고 입력합니다.  
  2. 코드 옆에 숫자 표시를 해주는 설정은  " set number "  입니다. 
입력 완료 후에는  'ESC'키를 한 번 눌러주고  콜론 ' : ' 키를 누룬 후 ,  저장과 빠져나가기 ' wq '  엔터 하면 됩니다.  →   : wq

 아래 모습은 설정 전과 후의 모습입니다. 

.vimrc 환경설정 적용 전 모습
.vimrc 환경설정 적용 후 모습

만약  단순 명령어로 바로 적용할 수는 있지만,  환경설정 파일을 만들지 않고 하게 되면,  리셋되어 있어,  파일을 열때 마다 적용해야 하는 불편함이 있게 됩니다.

- 화면 이동,   Vim 편집화면에서,  처음 Insert 키를 입력하지 않았을 때,  키보드 화살표 키처럼 이동할 수 있는 키가  상-하는 K - J  ,   좌-우는  H - L  키 입니다.

 

 -  vim 파일 편집 화면 속에서,  Insert 등의 편집 모드가 아닌(ESC 된 상태) 상태에서 특정 라인으로 이동 하고 싶다면,   예를 들어 10번 라인,   숫자 '10' 입력후 대문자 'G' 키를 입력하면 됩니다. 
그리고, 해당 라인 끝으로 이동하려면,  '$' 입력하면 되고,  해당 라인 맨 앞으로 이동하려면,  '^' 입력 하면 됩니다.   그리고,  소문자 'w'  키를 계속 누르면 단어 단위로 이동 할 수 있습니다.   여기서  단어 단위 앞쪽으로 이동하고 싶다면 소문자 'b' 키를 누르면 됩니다.

1. 복사

vim에서 복사는 일반모드에서 y 또는 yy 명령을 사용해서 합니다. y는 '뽑아내다' 라는 뜻을 가진 yank 에서 따온 것이죠. 일반모드에서 사용되는 대부분의 명령들은 반복수를 지정할 수 있습니다. 
예를 들어 5yy 이렇게 입력하면 현재 행 기준 5행을 복사하는 것이죠. 

 명령어  설명
 y  레지스터에 복사. 
 yy  현재 행을 레지스터에 복사.
 :y
 Y


2. 붙여넣기

복사 또는 잘라내기로 레지스터에 저장한 내용을 일반모드에서 p 키를 이용해서 붙여넣을 수 있습니다.

 명령어  설명
 p  현재 행에 붙여넣기.  개행 문자가 포함된 경우에는 현재 행의 아래에 붙여넣기.
 :pu
 P  현재 행의 위쪽에 붙여넣기.

 

3. 삭제 (잘라내기)

일반적인 문서 편집기에서 내용을 삭제할 때는 키보드의 Delete 키를 사용하는데, vim 에서도 마찬가지로 입력모드에서 Delete 키를 이용해서 삭제할 수 있습니다. 일반모드에서 x 키를 이용해서 한글자씩 삭제할 수도 있습니다. 
그런데 실제로는 vim에서 삭제를 한다기 보다는 잘라내기를 수행하게 됩니다.

 명령어  설명
 x  커서에 위치한 문자 삭제.
 dd  현재 행 삭제
 :d
 D  현재 컬럼 위치에서 현재 행의 끝부분 까지 삭제  
 d$
 J  아래 행을 현재 행의 끝에 붙임 (아래 행의 앞부분 공백은 제거됨)

 

4. 실행취소

vim에서는 매우 강력한 실행취소 기능을 제공합니다. 일반모드에서 u 명령을 통해 직전 명령을 취소할 수 있는데요. u 명령을 계속해서 사용하면 해당 문서를 처음 열었던 상태까지 돌아갈 수 있습니다. 이 상태에서 Ctrl+R 명령으로 최근 상태까지 다시 복귀가 가능하기 때문에 편집하다가 실수로 잘못 편집하거나 이전 상태를 확인하고 다시 편집하려고 할 때 유용하게 사용할 수 있습니다. 

 명령어  설명
 u  undo 기능. 바로 직전 명령 취소. (이전 상태로 돌아감)
 Ctrl+R  redo 기능. 바로 직전에 취소했던(undo) 명령 되돌림.

 

gcc 컴파일 관련 명령어 2 : 

1)  컴파일 하기 ①
~$ gcc 파일명.c
~$ gcc hello.c

2)  컴파일 하기 ②
~$ gcc 소스_파일.c  -o  실행_파일
~$ gcc hello.c  -o  hello.out      또는 확장자 생략가능

3)  실행 하기
~$ ./a.out    또는
~$ ./hello.out

4)  컴파일과 실행 동시에하기
~$ gcc ./hello.c  &&  ./a.out

5)  디버그 정보 넣기
~$ gcc  -g  hello.c 
~$ a.out     hello.c

~$ a.out  hello.c

-g 옵션은 디버그 관련된 정보를 a.out 넣어주는 역할을 함.

 

6)  디버그 (Debug)
~$ gdb  a.out    (또는 gdb -q a.out)
~~~~~~

 

(gdb)  disassemble  main   (또는 disas main)  ( main() 함수의 어셈블리 명령어가 나옴 )
0x08034002f  .....
.......

(list 명령어)    ( 코드의 리스트를 보여줌)


(gdb) list
#include <stdio.h>
int main () {
~~~~
}

(break 라인또는 위치 명령어)   ( break 중지점을 넣어 줌, break 뒤에 줄 수를 입력하거나 특정함수명 또는 main함수 입력)
(gdb) break main
~~~~

(run 명령어)    ( 프로그램을 실행시킴)
(gdb) run

(ir 명령어)    ( 또는 info register , 현재 중지점에서의 모든 레지스터의 값을 보여줌)
(gdb) ir    또는 info register

(x  명령어)    ( 또는 examine , 해당 주소의 메모리에 어떤 값이 들어 있는지 확인함)
(gdb) x(/숫자 진법 바이트) 주소값 또는 레지스터 이름     
(진법옵션:   /o , /x , /u , /t  a  →  8진법/16진법/부호없는 10진법/2진법) 

(gdb)  x/2x eip
(gdb)  x/8xb eip 
(gdb)  x/8xh eip 
(gdb)  x/8xw eip 

(/b, /h, /w, /g  → 단일바이트/, 2바이트하프워드/, 4바이트워드/, 8바이트 자이언트)

 

 주요 Linux 명령어 3 : 

1)  IP 확인
~$ hostname  -I       (대문자 i)

   →   192.168.10.195 (예시)

 

 

 

반응형
반응형

【 라즈베리파이 】 #15 LED SOS 신호와 동기신호 실습


▶ 회로 구성 : 


▶ 개요 


LED1으로 SOS 신호를 나타 내고 LED2로 동기신호(일정한 크기와 간격의 기준 신호)를 출력해 보는 실습이다. 

( 이전글 참조  :  #14 타이밍 차트 활용한 LED 실습 )


▶ 실습절차 

저항과 LED, 준비하고 위 도면과 같이 연결한다.  

(LED1 → GPIO 18번 핀 연결  / LED2 → GPIO 23번 핀 연결)

(LED 극성에 주의 : 리드선이 긴 쪽이 '+'  ,  짧은 쪽이 '-' 이다)

1. 부품 : 220Ω x 2 ,  LED x 2



▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.




▶ 코드설명 

【 SOS 신호 타이밍 차트

-위 타이밍 차트에서 한 눈금당 0.2초 씩 계산함.


-S’ 신호 : 0.4On 0.4Off 0.4On 0.4Off0.4On (1.2Off :다음신호 사이의 공백 값)
-O’ 신호 1.2On 0.4Off 1.2On 0.4Off1.2On (1.2Off :다음신호 사이의 공백 값)

-LedOnLedOff 함수 , S, O, 모르스 신호 함수를 선언(def한다

-Led1(SOS 신호용)은 18번 포트를 사용하고, Led2(동기신호)는 23번 포트를 사용한다.
-반복패턴 a, b, c 세가지를 함수로 만들어 정의 한다.
-Led1, Led2 는 패턴에 따라 On(True), Off(False) 의 포트 출력을 설정한다(IoPort.output…)
-Port1 Led1(18번 포트)
-Port2 Led2(Clk, 23번 포트)
-S, O, 신호를 각각 함수로 정의 하되 이미 정의한 패턴 a,b,c 함수를 사용하여 간결화 시킨다
-타이밍 차트와 동일한 출력이 되도록 중간 중간에 패턴 a가 포함되어있음에 유의

【 SOS 신호와 동기신호 타이밍 차트


- 두 개의 신호상에서 반복되는 패턴을 살펴보면 아래와 같은 (a), (b), (c) 세 가지 패턴이 계속 반복되는 것을 발견 할 수 있다.  패턴상에서 위에 부분은 High,  아래에 위치하는 부분은 Low 신호라고 하며, High 신호일 때 LED를 켜고(On), Low 신호일 때 LED를 끄면(Off) 된다.

- 따라서 ‘S 신호는 패턴 (c)가 세 반복: ccc , ‘O 신호는 패턴(b)(c) 가 세 번 반복 : bcbcbc, 되며, 아래와 같은 차트를 만들려면 SOS 신호 사이사이 (a)패턴을 삽입 하면 동일한 신호를 만들 수 있다. 





▶ 실행 결과 


아래 영상은 위 프로그램을 두 번 연속 실행 시킨 영상이다. 

 S.O.S + 동기 신호 






LED On Off 실습 with Python

반응형
반응형

【 라즈베리파이 】 #14 타이밍 차트 활용한 LED 실습

▶ 회로 구성 : 


▶ 개요 


LED의 On Off 제어를 타이밍 차트 (timing chart) 라고 하는 시간에 따른 High- Low 신호에 맞추어 제어 해보는 실습이다. 

모르스 부호 중에 SOS 위급신호를 응용하여 실험해 보도록 한다.


▶ 실습절차 

저항과 LED, 준비하고 위 도면과 같이 연결한다.  (GPIO 18번핀 LED 연결)

1. 부품 : 220Ω x 1 ,  LED x 1



▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.




▶ 코드설명 

【 SOS 모르스 신호 타이밍 차트


-모르스 부호의 SOS 신호를 LED를 통해서 나타내는 실험


-위 타이밍 차트에서 한 눈금당 0.2초 씩 계산함.

-S신호 : 0.4On 0.4Off 0.4On 0.4Off0.4On (1.2Off :다음신호 사이의 공백 값)
-O신호 : 1.2On 0.4Off 1.2On 0.4Off1.2On (1.2Off :다음신호 사이의 공백 값)

-LedOn, LedOff 함수 , S, O, 모르스 신호 함수를 선언(def) 한다

-Led 포트는 18번 포트를 사용


▶ 실행 결과 

아래 영상은 위 코드를 두 번 연속 실행 시킨 영상이다. 

 S.O.S , S.O.S





LED On Off 실습 with Python

반응형
반응형

【 라즈베리파이 】 #13 LED Fade In Out 실습

▶ 회로 구성 : 




▶ 개요 


라즈베리파이의 GPIO 포트를 통해 연결된 LED의 밝기를 제어 해보는 실습이다. 회로는 이전 실험 회로와 같으며, 스위치를 누르면 LED의 밝기가 점점 밝아진후 다시 점점 어두워지는 회로이다. 


* Fade In : 연극 무대에서 사용하는 용어로, 처음 연극 시작시 무대가 점점 밝아지는 것을 의미한다.

* Fade Out : 연극 무대에서 사용하는 용어로, 연극이 종료 될 때 점점 어두워지는 것을 의미한다.



▶ 실습절차 


저항과 LED, PB(푸쉬버튼) 스위치를 준비하고 위 도면과 같이 연결한다. 

1. 부품 : 220Ω x 1 ,  10㏀ x 1,  PB SW x 1 ,  LED x 1




▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.





▶ 코드설명 

- def KeyInput(key)  :  푸쉬버튼 스위치가 눌려 졌는지 체크하는 함수를 선언한다. 

- def candle (Port, on, off)  :  LED를 On Off 해주는 루틴이다. 


- def State1(Led, sub) :  LED를 점점 밝게 Fade In 해주는 루틴이다.


- def State2(Led, sub) :  LED를 점점 어둡게 Fade Out 해주는 루틴이다.



▶ 실행 결과 

스위치를 한 번 누르면 LED가 Fade IN 하며 켜지고, 

다시 스위치를 한 누르면 LED가 Fade OUT 하며 꺼진다.




LED On Off 실습 with Python

반응형
반응형

【 라즈베리파이 】 #12 RaspberryPi 실습
③ LED On Off 실습 with Switch

▶ 회로 구성 : 



▶ 개요 

 라즈베리파이의 GPIO 커넥터를 이용하여 LED를 On Off 하는 실습을 해 볼 수 있다.  구동 프로그램으로는 라즈비안 OS에 포함되어 있는 파이썬(Python 3) 프로그램을 이용하여 작성한다.  파이썬 프로그램의 특징은 매우 간결하고 직관적인데, 마치 과거 도스(MS-DOS) 시절 쉬운프로그램인 BASIC 만큼이나 쉽다.  그러니 부담 갖지 말고 접근하길 바란다.   


LED 제어를 스위치를 통하여 제어 할 수 있는 회로를 구성하여 실습해본다.



▶ 실습절차 


저항과 LED, PB(푸쉬버튼) 스위치를 준비하고 위 도면과 같이 연결한다. 

1. 부품 : 220Ω x 1 ,  10㏀ x 1,  PB SW x 1 ,  LED x 1




▶ 파이썬 코드 

명령창에 한 줄씩 바로 입력 하지말고 저장파일을 만들어 아래와 같이 작성후 실행 시킨다.




▶ 코드설명 

- import RPi.GPIO as IoPort  :  기억하기 쉽고 쓰기 간단한 'IoPort' 라는 이름으로 포트를 지정 하는 것이다.


- Sw1 = 8  ,  Led = 18   :  Sw와 Led가 연결된 포트 번호를 적는다.


- IoPort.setmode(Led, IoPort.OUT)  :  Led가 연결된 포트를 출력 포트로 설정

- IoPort.setmode(Sw1, IoPort.IN)  :  Sw1이 연결된 포트를 입력 포트로 설정


- rcv = IoPort.input(Sw1) :  Sw1으로 입력되는 신호 값(High)을 rcv 변수에 저장

- IoPort.output(Led,rcv) :  rcv의 값을 그대로 Led 포트로 출력 함



▶ 실행 결과 

스위치를 누르면 즉각적으로 LED가 On / Off 반응한다.



LED On Off 실습 with Python

반응형