본문 바로가기
Electronics/Raspberry Pi

[Raspberry Pi] 버튼을 이용하여 DC모터의 방향 바꾸기

by 겨울 빛 2020. 12. 17.

사용하는 부분은 이 두 부분이다.

버튼은 2,3번을 사용했기에 핀번호 6, 16을 정의해주고 시작했음

 

 

import time

import CK_SPI_ADC as spi_adc

import CK_SPI_DEV as spi_dev

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)



#DC 모터 Enable 핀번호 = 17

DCMOT_EN = 17

GPIO.setup(DCMOT_EN, GPIO.OUT)

GPIO.output(DCMOT_EN, 1)



BUTTON_3 = 16

BUTTON_2 = 6

GPIO.setup(BUTTON_3, GPIO.IN)

GPIO.setup(BUTTON_2, GPIO.IN)



#DC모터 방향 시계방향 0, 반시계방향 1

DCMOT_DIR_SW_FWD = 0

DCMOT_DIR_SW_BWD = 1



#디바이스의 값을 초기화해준다

spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)



#map 함수 정의 (아날로그 값의 범위를 변화시켜주는 함수)

def ck_map(x, in_min, in_max, out_min, out_max) :

    out_val = (((x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min

    return out_val



while (1) :

    for i in range(30) :

#speed 는 acd에서 VR1(가변저항)의 값을 읽어온다

#map 함수를 이용하여 아날로그값 0~1023에서 0~100으로 범위를 바꿔준다. 

        speed = spi_adc.ck_adcRd(spi_adc.ADC_CH_VR1)

        speed = ck_map(speed, 0, 1023, 0, 100)



#버튼 3만 눌렸을때

        if ((GPIO.input(SWITCH_3) != DCMOT_DIR_SW_FWD) and (GPIO.input(SWITCH_2) != DCMOT_DIR_SW_BWD)) :

#반시계방향만 가변저항 값에 따라 작동한다.

            spi_dev.ck_pwmDCMot_fwd(1000, 0)

            spi_dev.ck_pwmDCMot_bwd(1000, speed)

#속도와 방향 프린트

            print i, ": SPEED : ", speed, " DIR : Backward"

            

#버튼 2만 눌렸을때

        elif ((GPIO.input(SWITCH_3) == DCMOT_DIR_SW_FWD) and (GPIO.input(SWITCH_2) != DCMOT_DIR_SW_BWD)) :

#시계방향만 가변저항 값에 따라 작동한다.

            spi_dev.ck_pwmDCMot_fwd(1000, speed)

            spi_dev.ck_pwmDCMot_bwd(1000, 0)

#속도와 방향 프린트

            print i, ": SPEED : ", speed, " DIR : Forward"



#둘다 아니라면            

        else:

#어느 방향으로도 움직이지 않는다.

            spi_dev.ck_pwmDCMot_fwd(1000, 0)

            spi_dev.ck_pwmDCMot_bwd(1000, 0)

#속도와 방향 프린트

            print i, ": SPEED : ", speed, " DIR : STOP"            



        time.sleep(0.5)

#key 에 입력을 받는다

    key = raw_input('Quit?? (y/n) : ')

#y값을 받았다면

    if (key == 'y') :

#루프를 빠져나온다.

        break;



# Off

spi_dev.ck_spiWr(spi_dev.SPI_CMD_CLEAR, 0)

작동영상

 

댓글