본문 바로가기
라즈베리파이_피코_피코 W/circuitPython

08. Circuit 파이썬 라즈베리파 피코 W 릴레이제어

by 커피하는조이 2023. 3. 17.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 릴레이 제어를 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

1) 릴레이 제어 구동 원리
(1) 동작설명
릴레이는 우리말로 “계전기(繼電器)”라고 합니다. 말뜻을 풀어보면 “전기(전원)을 잇는 기기”라는 뜻입니다
릴레이의 원리는 간단하게 말해서 “전원 스위치”라고 할 수 있습니다. 입력이 어떤 값에 도달하였을 때 작동하여 다른 회로를 열고 닫는 역할을 하기 때문입니다.

릴레이의 내부는 아래 그림과 같이 코일과 전기자, 그리고 코일핀과 NO, COM, NC 핀으로 구성되어 있습니다.
NO는 Normal Open의 뜻으로 전류가 흐르지 않을 경우에는 스위치가 열려 있다고 보면 됩니다. COM은 Common Terminal의 뜻으로 공통 단자입니다. 이것은 항상 연결되어야 하는 포트입니다. 마지막으로 NC는 Normal Close의 뜻으로 전류가 흐르지 않을 경우에 스위치가 닫혀 있다고 보면 됩니다.

코일핀을 통해 코일에 전류가 흐르면 코일 주변에 자기장이 형성됩니다. 이렇게 생성된 자기장은 감겨있는 코일에 중첩되면서 코일 중앙에 한 방향으로만 작용하는 자기장이 형성되게 됩니다.
이런 코일 안에 철심을 넣으면 자기장이 강해지면서 자석과 같은 힘이 발생하게 됩니다.
이러한 힘을 이용하여 전기자를 움직여 회로를 열었다 닫았다 하게 됩니다. 이것이 릴레이의 기본적인 구동원리입니다.
 

 


2) 릴레이 제어
(1) 동작설명
센서 값에 따라 릴레이가 구동됩니다.

 

주석을 풀어주는 실행 시키는 거에 따라 가변저항과 cds 값에 따라 변경됩니다.

 

  cds_input = adc_input(0)
#cds_input = adc_input(1)

 

(2) 코드작성
code.py

import time
import board
import digitalio
import analogio

led1 = digitalio.DigitalInOut(board.GP2)
led1.direction = digitalio.Direction.OUTPUT
led2 = digitalio.DigitalInOut(board.GP3)
led2.direction = digitalio.Direction.OUTPUT

relay = digitalio.DigitalInOut(board.GP12)  # 릴레이 설정
relay.direction = digitalio.Direction.OUTPUT

cds_adc = analogio.AnalogIn(board.GP27)
vr_adc = analogio.AnalogIn(board.GP26)


def adc_input(ch):
    global vr_data
    if ch == 0:  # VR
        vr_data = vr_adc.value
        vr_data_v = (3.3 / 65535) * vr_data
        vr_data_v = round(vr_data_v, 2)
        return vr_data_v
    elif ch == 1:  # CdS
        cds_data = cds_adc.value
        cds_data_v = (3.3 / 65535) * cds_data
        cds_data_v = round(cds_data_v, 2)
        return cds_data_v


relay_state = 0

while True:
    print('CdS Volt   = {}V'.format(adc_input(1)))
    print('RELAY STATE = {}\n'.format(relay_state))

    adc_data = adc_input(0)  #  VR
    #adc_data = adc_input(1) # CDS
    
 
    if adc_data <= 1:
         led2.value = False
         relay.value = False  # relay on
         relay_state = 1
    else:
         led2.value = False
         relay.value = True  # relay off
         relay_state = 0

    time.sleep(0.5)

 (3) 동작 결과

 

반응형

 

728x90
반응형
LIST

댓글