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

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

by 땜블리 2023. 3. 2.
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) 동작설명
센서 값에 따라 릴레이가 구동됩니다.
 
(2) 코드작성
main.py

import relay

relay.py

from machine import UART, Pin, ADC
from time import sleep

led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)

relay = Pin(12,Pin.OUT)#릴레이 설정

CdS_adc = ADC(Pin(27))
vr_adc = ADC(Pin(26))

swCount=0
def handle_interrupt(sw):
    global swCount
    swCount = swCount+1
    if swCount==3:
        swCount=0    
sw = Pin(22,Pin.IN,Pin.PULL_UP)    
sw.irq(trigger=Pin.IRQ_FALLING, handler=handle_interrupt)

VRData=0
def adcInput(ch):
    global VRData
    if ch ==0: #VR
        VRData = vr_adc.read_u16()
        VRDataV = (3.3/65535) * VRData
        VRDataV = round(VRDataV,2)
        return VRDataV
    elif ch ==1: #CdS
        CdSData = CdS_adc.read_u16()
        CdSDataV = (3.3/65535) * CdSData
        CdSDataV = round(CdSDataV,2)
        return CdSDataV
relayState=0

while True:         
    print('CdS Volt   = {}V'.format(adcInput(1)))
    print('SW COUNTER = {}   RELAY STATE = {}\n'.format(swCount,relayState))
    
    #vrInput = adcInput(0)
    cdsInput = adcInput(1)
    
    if swCount==1:
        led1.value(0)
        led2.value(1)
        relay.off() #relay on
        relayState=1
                    
    elif swCount==2:
        led1.value(1)
        led2.value(1)
        relay.on() #relay off
        relayState=0
        
    else:
        if cdsInput <=1:
            led2.value(0)
            relay.off() #relay on
            relayState=1
        else:
            led2.value(0)
            relay.on() #relay off
            relayState=0
                
    sleep(0.5)

(3) 동작결과
 
- SW0(초기상태 / CdS에 의한 릴레이 제어 / LED 2번 ON 상태 유지)

- SW1(릴레이 ON / LED1번 ON / LED 2번 OFF 상태 유지)

- SW2(릴레이 OFF / LED1번 OFF / LED 2번 OFF 상태 유지)

 
- 전제구동결과
 

 

728x90
반응형
LIST

댓글