라즈베리파이 4 #4

jjinny_0609·2023년 3월 3일
0

라즈베리파이

목록 보기
4/8

라즈베리 파이를 위한 전자 기초

전기회로

전류

전류 : 전선을 통해 흐르는 전기의 양

전압

전압 : 수압과 같은 것으로, 물이 높은 곳에서 낮은곳으로 흐르는 것처럼 전류도
전압이 높은곳에서 낮은곳으로 흐른다.
그리고 전압을 '전위차'라고도 부른다. 단위는 볼트(V)로 표시

저항

전기의 흐름을 어렵게 만드는 방해요소를 의미
저항이 작아 전기가 잘 흐르는 물질을 도체라고 한다.
저항이 커서 전기가 잘 흐르지 않는 물질을 부도체라고 하며 그 중간 영역을 반도체라고 한다.
단위는 옴(Ω)으로 표시

v(전압) = i(전류) * r(저항)

r(저항) = v(전압)/i(전류)

LED

Light Emittin Diode의 약자로 전류가 흐르면 빛을 내는 다이오드라는 뜻을 가진다.
LED의 다리가 긴쪽이 +극(Anode) 반대로 다리가 짧은 쪽이 -극(Cathod)이다.

데이터시트(Datasheet)

회로도에서 LED를 켜기 위해서 LED의 특성과 저항의 용량을 선택하기 위해 먼저 봐야하는 사용 설명서와 같다.

푸시버튼 스위치

스위치를 누르면 핀들이 모두 연결된다.

콘덴서

축전기(Capacitor : 커패시터) 또는 콘덴서(condenser)라고 부르며 전기를 저장할 수 있는 장치입니다. 내부에 두개의 도체 판이 서로 마주보고 있는 구조로 되어있고 여기에 직류전압을 걸면 음극에는(-) 전하가 양극에는(+) 전하가 모여서 전기 에너지가 저장된다. 전기에너지가 저장되는 동안에는 전류가 흐르는데 콘덴서의 용량만큼 저장된 이후에는 전류가 흐르지 않는다.

콘덴서의 종류는 다양하게 많은데 그중에 많이 쓰이는 전해 콘덴서를 살펴보면 위의 사진처럼 콘덴서 표면에 용량과 극성 표시, 사용전압이 표시되어 있습니다.

트랜지스터

게르마늄, 규소 등의 반도체를 이용하여 전자 신호 및 전력을 증폭하거나 스위칭 하는데 사용되는 반도체소자이다.
트랜지스터의 기능
1. 증폭기능
2. 스위치 기능

다이오드(Diodes)

다이오드는 애노드(+극)에서 캐소드(-극)으로 전류를 흐르게 하고 그 반대로는 전류가 흐르지 않게합니다. 순방향으로는 전류가 잘 흐르지만 반대로 역방향으로는 전류가 흐르지 않도록 막습니다.

다이오드의 종류

  1. 범용 다이오드
  2. 발광 다이오드
  3. 쇼트키 다이오드
  4. 제너 다이오드

라즈베리파이 GPIO 및 센서 활용하기

GPIO란

General Purpose Input Output의 약자로써 마이크로프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력(I/O) 포트를 나타낸다.

GPIO 출력을 제어

GPIO 출력을 제어하기 위해 프로그램을 작성

예제2

#-*- coding: utf-8 -*-

# 필요한 라이브러리를 불러옵니다.
import RPi.GPIO as GPIO
import time

# button_callback
def button_callback(channel):
    print("Button pushed")

# 사용할 GPIO 핀의 번호를 선정합니다.
button_pin = 15
led_pin = 4

#불필요한 warning 제거
GPIO.setwarnings(False)

# GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM)

# 버튼 핀의 입력설정, PULL DOWN 설정
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# LED 핀의 OUT설정
GPIO.setup(led_pin, GPIO.OUT)

# boolean 변수 설정
light_on = False
# button_callback 함수를 정의합니다.
def button_callback(channel):
    global light_on
    if light_on == False:
        GPIO.output(led_pin,1)
        print("LED ON!")
    else:
        GPIO.output(led_pin,0)
        print("LED OFF!")
    light_on = not light_on

# Event 알림 방식으로 GPIO 핀의 Rising 신호를 감지하면 button_callback
# 함수를 실행합니다. 300ms 바운스타임을 설정하여 잘못된 신호를 방지합니다.
GPIO.add_event_detect(button_pin,GPIO.RISING,callback=button_callback, bouncetime=300)

while 1:    #무한반복
    time.sleep(0.1) # 0.1초 딜레이

버튼을 누르고 led의 상태를 아래와 같이 나타냄

예제3

#필요한 라이브러리를 불러옵니다
import RPi.GPIO as GPIO
import time
#불필요한 warning 제거, GPIO핀의 번호 모드설정
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#GPIO 18번 핀을 출력으로 설정
GPIO.setup(18, GPIO.OUT)

#PWM 인스턴스 p를 만들고 GPIO 19번을 PWM 핀으로 설정, 주파수 50Hz
p=GPIO.PWM(18,50)

p.start(0) #PWM 시작, 듀티비 = 0

try:
    while 1:
        for dc in range(0, 101, 5):         #dc의 값은 0에서 100까지 5만큼 증가
            p.ChangeDutyCycle(dc)           #dc의 값으로 듀티비 변경
            time.sleep(0.001)                 #0.1초 딜레이
        for dc in range(100, -1, -5):       #dc의 값은 100에서 0까지 5만큼 감소
            p.ChangeDutyCycle(dc)           #dc의 값으로 듀티비 변경
            time.sleep(0.001)                 #0.1초 딜레이

except KeyboardInterrupt:                   #키보드 CTR+C 눌렀을때 예외발생
    pass                                    #무한 반복을 빠져나와 아래의 코드를 실행
p.stop()                                    #PWM을 종료
GPIO.cleanup()                              #GPIO 설정을 초기화

결과

예제4

#-*- coding: utf-8 -*-

# 필요한 라이브러리를 불러옵니다.
import RPi.GPIO as GPIO
import time

# 불필요한 warnin 제거, GPIO핀의 번호 모드 설정
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# GPIO 18번 핀을 출력으로 설정
GPIO.setup(18, GPIO.OUT)
# PWM 인스턴스 p를 만들고 GPIO 18번을 PWM 핀으로 설정, 주파수 = 100HZ
p = GPIO.PWM(18,100)

# 4옥타브 도~시, 5옥타브 도의 주파수
Frq = [ 262, 294, 330, 349, 392, 440, 493, 523]
speed = 0.5 # 음과 음 사이 연주시간 설정(0.5초)

p.start(10)

try:
    while 1:
        for fr in Frq:
            p.ChangeFrequency(fr)
            time.sleep(speed)

except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

실행하면 도레미파솔라시도 부저음이 들림

예제5

#-*- coding: utf-8 -*-

# 필요한 라이브러리를 불러옵니다.
import RPi.GPIO as GPIO
import time

# 서브모터를 PM으로 제어할 핀 번호 설정
SERVO_PIN = 18

# 불필요한 WARNING 제거
GPIO.setwarnings(False)

# GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM)

# 서보핀의 출력 설정
GPIO.setup(SERVO_PIN, GPIO.OUT)

# PWM 인스턴스 servo 생성, 주파수 50으로 설정
servo = GPIO.PWM(SERVO_PIN,50)
# PWM 듀티비 0으로 시작
servo.start(0)

try:
    while True:
        #듀티비를 변경하여 서브모터를 원하는 만큼 움직임
        servo.ChangeDutyCycle(7.5)  # 90도
        time.sleep(0.05)
        servo.ChangeDutyCycle(180) # 180도
        time.sleep(0.05)
        servo.ChangeDutyCycle(2.5)  # 0도
        time.sleep(0.05)

except KeyboardInterrupt:
    servo.stop()
    GPIO.cleanup()

서보모터가 움직는걸 확인할 수 있다.

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글