개발자의 생활

2023년 1학기 13주차 과제 본문

과제/라즈베리파이 피코

2023년 1학기 13주차 과제

Developer성현 2023. 6. 3. 13:09

13_1

서보모터가 0º ~ 180º로 반복적으로 회전하고 회전방향마다 LED가 점등되는 코드입니다.

from machine import Pin, PWM
from time import sleep

servoPin = PWM(Pin(15))
servoPin.freq(50)

led1 = Pin(16, Pin.OUT)
led2 = Pin(17, Pin.OUT)

def servo(degrees):
    minDuty = 500000
    maxDuty = 2500000
    newDuty=minDuty+(maxDuty-minDuty)*(degrees/180)         # new duty is between min and max duty in proportion to its value
    servoPin.duty_ns(int(newDuty))                          # servo PWM value is set

while True:
  for degree in range(0,180,1):                             # start increasing loop
    servo(degree)
    sleep(0.01)
    led1.value(1)
    led2.value(0)
    print("increasing -- "+str(degree))
  
  for degree in range(180, 0, -1):                          # start decreasing loop
    servo(degree)
    sleep(0.01)
    led1.value(0)
    led2.value(1)
    print("decreasing -- "+str(degree))

 

13_2

가변저항으로 서보모터의 회전각도를 조정하는 코드입니다.

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

adc = ADC(Pin(28))      
    
servoPin = PWM(Pin(15)) 
servoPin.freq(50)       

led1 = Pin(16, Pin.OUT)
led2 = Pin(17, Pin.OUT)

def servo(degrees):
    minDuty = 500000
    maxDuty = 2500000
    newDuty=minDuty+(maxDuty-minDuty)*(degrees/180)        # new duty is between min and max duty in proportion to its value
    servoPin.duty_ns(int(newDuty))                        # servo PWM value is set
    
while True:
  value=adc.read_u16()
  degrees=value*180/65535 
  servo(degrees)
  sleep(0.001)

13_3

회전수를 입력하여 스텝모터를 회전시키는 코드입니다.

from machine import Pin
from time import sleep

IN1 = Pin(16,Pin.OUT)
IN2 = Pin(17,Pin.OUT)
IN3 = Pin(18,Pin.OUT)
IN4 = Pin(19,Pin.OUT)

pins = [IN1, IN2, IN3, IN4]

sequence = [[1,0,0,0],
            [0,1,0,0],
            [0,0,1,0],
            [0,0,0,1]]

num = int(input("회선수를 넣어주세요!"))

for j in range(512*num) :
    for step in sequence:
        for i in range(len(pins)):
            pins[i].value(step[i])
            sleep(0.001)
            
print("회전수 {}을 다 회전했습니다.".format(num))

 

13_4

스텝모터가 한쪽방향으로 회전하다가 버튼이 눌리는동안은 반대로 회전하는 코드입니다.

from machine import Pin
from time import sleep

motor_GP = [16,17,18,19] 
seq_pointer=[0,1,2,3,4,5,6,7] 
stepper_obj = [] 
button = Pin(15, Pin.OUT, Pin.PULL_DOWN)

arrSeq = [[0,0,0,1],
          [0,0,1,1],
          [0,0,1,0],
          [0,1,1,0],
          [0,1,0,0],
          [1,1,0,0],
          [1,0,0,0],
          [1,0,0,1]]

for gp in motor_GP:
    stepper_obj.append(Pin(gp, Pin.OUT))

def stepper_move(direction): 
    global seq_pointer                                           #seq_pointer[1:]+seq_pointer[:1] => [1,2,3,4,5,6,7,0]     
    seq_pointer=seq_pointer[direction:]+seq_pointer[:direction]  #seq_pointer[-1:]+seq_pointer[:-1] => [7,0,1,2,3,4,5,6]
    for a in range(4):                    
        stepper_obj[a].value(arrSeq[seq_pointer[0]][a])
    sleep(0.001)

while True:

    if button.value() == 1:
        stepper_move(1)                                          # 반복을 통해 seq_pointer 가 이동 [7]->[0]->[1] 등으로
        
    if button.value() == 0:
        stepper_move(-1)

 

'과제 > 라즈베리파이 피코' 카테고리의 다른 글

2023년 1학기 11주차 실습과제  (4) 2023.05.28
2023년 1학기 10주차 실습 과제  (0) 2023.05.21
2023년 1학기 9주차 실습  (0) 2023.05.07