[Ev3] 2. Motor Control
서론
2022.03.15
2022.03.19 (15:00 ~ 19:28)
2022.03.15
2022.03.19 (15:00 ~ 19:28)
오늘은 내 생일이다. 내 생일에 나는 내 꿈을 이루기 위해 로봇을 코딩하여 로봇 엔지니어가 되기 위해 앞으로 나아간다.
예전에는 날짜 별로 글을 작성했다면, 앞으로는 배운 파트(Part) 별로 구분하여 작성할 계획이다.
본문에서는 Ev3의 Motor를 다루고 학습한 내용들을 기록하였다.
[유튜브 수업 영상]
학습한 내용
- Ev3 모터를 Python으로 제어하는 방법에 대해서 배웠다.
1) 포트 선언 방법Motor(Port.A) # Motor = 사용할 부품 선언, (Port.A) = 연결된 포트 선언
2) run함수Motor(Port.A).run(파워) # 파워 범위 : -1000 ~ 1000
3) 기다림 함수 (시간)
-
Wait(시간/1000) - 입력한 시간 만큼 기다림(ms)
e.x)
Motor(Port.A).run(300)
Wait(2000) # 2초 동안 Motor A를 동작 함.
-
Sleep(시간) - 입력한 시간 만큼 기다림 (second)
"from time import sleep" 을 작성하여 import 해야함
from time import sleep #선언 부분에서 선언해주어야 함.
Motor(Port.A).run(300)
sleep(2) # 2초 동안 Motor A를 동작 함.
4) 모터 정지 방식
Motor(Port.A).Stop(Stop.정지타입)
-
Stop.BRAKE : 전원 off 후 다시 연결 (=강제 정지)
-
Stop.COAST : 전원 off (=부드러운 정지)
-
Stop.HOLD : 정지한 위치를 유지 함. (모터가 정지 위치를 유지하기 위해 추가적으로 움직일 수 있음)
Motor를 정지 하기 위해선, 정지 명령을 수행할 수 있는 시간을 부여해야 한다. (run 함수와 같은 원리)
# Write your program here.
ev3.speaker.beep()
Motor(Port.A).run(500)
Motor(Port.C).run(500)
sleep(2) # run 함수를 수행 할 수 있는 시간 부여
Motor(Port.A).Stop(Stop.BREAKE)
Motor(Port.D).Stop(Stop.HOLD)
sleep(0.5) #정지 명령을 수행 할 수 있는 시간 부여
5) 시간으로 동작하기
Motor(Port.A).run_time(파워, 시간) #시간은 ms기준이 사용됨.
기본적으로 정지 방식은 BRAKE 을 사용하며, 동작 완료 후 다음 명령으로 넘어가는 특징을 가지고 있다.
e.x)
ev3.speaker.beep()
Motor(Port.A).run_time(500, 2000) # Motor A가 종료 되면
Motor(Port.C).run_time(500, 2000) # Motor C가 시작 됨.
같이 동작하게 하려면 어떻게 해야할까 ?
Motor(Port.A).run_time(파워, 시간, 정지 방식, 동작 완료)
동작 완료는 True/False 로 나뉜다.
False를 사용하면, 그 다음에 있는 코드와 같이 실행 되며,
True를 사용하면, True가 인자로 포함된 코드를 먼저 실행하고, 다음 코드를 실행하게 된다.
🙋 본 run_time 방식을 채택하여 프로그래밍하게 된다면, 포트 선언과 어느 정도 동작하게 할건지 명령 수행 시간을 한줄로 프로그래밍할 수 있어서 코드를 효율적으로 구성할 수 있다고 생각한다.
6) 각도로 동작하기
Motor(Port.A).run_target(파워, 각도, 정지 방식, 동작 완료)
Motor(Port.C).run_angle(500, 360)
run_target 과 run_angle의 차이는 무엇인가 ?
angle방식은 현 모터의 움직임을 파워와 각도로 제어하며,
target방식은 움직임을 각도(부등호)로 방향이 결정 된다고 한다. => 처음 모터의 각도를 기준으로 입력된 각도로 이동이 된다.
화리트 선생님의 설명
7) 모터 제어하기
-
각도로 제어하기
Motor(Port.A).track_target(각도)
설명 : 모터의 현재 위치에서 지정한 각도 만큼 회전함.
기본적으로 동작 완료는 False 형태임.
중요) sleep 함수를 사용해서 명령 수행 시간을 지정해 주어야 함.
-
강제 정지 탈출하기
Motor(Port.A).run_until_stalled(파워, 정지 타입, 출력(%))
인터럽트 현상이 발생하면 지정한 정지 타입에 따라서 프로그램을 정지하여 탈출한다.
이번 시간을 통해서
1) 포트 선언 방법
Motor(Port.A) # Motor = 사용할 부품 선언, (Port.A) = 연결된 포트 선언
2) run함수Motor(Port.A).run(파워) # 파워 범위 : -1000 ~ 1000
3) 기다림 함수 (시간)Wait(시간/1000) - 입력한 시간 만큼 기다림(ms)
e.x)
Motor(Port.A).run(300)
Wait(2000) # 2초 동안 Motor A를 동작 함.
Sleep(시간) - 입력한 시간 만큼 기다림 (second)
"from time import sleep" 을 작성하여 import 해야함
from time import sleep #선언 부분에서 선언해주어야 함.
Motor(Port.A).run(300)
sleep(2) # 2초 동안 Motor A를 동작 함.
4) 모터 정지 방식
Motor(Port.A).Stop(Stop.정지타입)
Stop.BRAKE : 전원 off 후 다시 연결 (=강제 정지)
Stop.COAST : 전원 off (=부드러운 정지)
Stop.HOLD : 정지한 위치를 유지 함. (모터가 정지 위치를 유지하기 위해 추가적으로 움직일 수 있음)
Motor를 정지 하기 위해선, 정지 명령을 수행할 수 있는 시간을 부여해야 한다. (run 함수와 같은 원리)
# Write your program here.
ev3.speaker.beep()
Motor(Port.A).run(500)
Motor(Port.C).run(500)
sleep(2) # run 함수를 수행 할 수 있는 시간 부여
Motor(Port.A).Stop(Stop.BREAKE)
Motor(Port.D).Stop(Stop.HOLD)
sleep(0.5) #정지 명령을 수행 할 수 있는 시간 부여
5) 시간으로 동작하기
Motor(Port.A).run_time(파워, 시간) #시간은 ms기준이 사용됨.
기본적으로 정지 방식은 BRAKE 을 사용하며, 동작 완료 후 다음 명령으로 넘어가는 특징을 가지고 있다.
e.x)
ev3.speaker.beep()
Motor(Port.A).run_time(500, 2000) # Motor A가 종료 되면
Motor(Port.C).run_time(500, 2000) # Motor C가 시작 됨.
같이 동작하게 하려면 어떻게 해야할까 ?
Motor(Port.A).run_time(파워, 시간, 정지 방식, 동작 완료)
동작 완료는 True/False 로 나뉜다.
False를 사용하면, 그 다음에 있는 코드와 같이 실행 되며,
True를 사용하면, True가 인자로 포함된 코드를 먼저 실행하고, 다음 코드를 실행하게 된다.
🙋 본 run_time 방식을 채택하여 프로그래밍하게 된다면, 포트 선언과 어느 정도 동작하게 할건지 명령 수행 시간을 한줄로 프로그래밍할 수 있어서 코드를 효율적으로 구성할 수 있다고 생각한다.
6) 각도로 동작하기
Motor(Port.A).run_target(파워, 각도, 정지 방식, 동작 완료)
Motor(Port.C).run_angle(500, 360)
run_target 과 run_angle의 차이는 무엇인가 ?
angle방식은 현 모터의 움직임을 파워와 각도로 제어하며,
target방식은 움직임을 각도(부등호)로 방향이 결정 된다고 한다. => 처음 모터의 각도를 기준으로 입력된 각도로 이동이 된다.
화리트 선생님의 설명
7) 모터 제어하기
각도로 제어하기
Motor(Port.A).track_target(각도)
설명 : 모터의 현재 위치에서 지정한 각도 만큼 회전함.
기본적으로 동작 완료는 False 형태임.
중요) sleep 함수를 사용해서 명령 수행 시간을 지정해 주어야 함.
강제 정지 탈출하기
Motor(Port.A).run_until_stalled(파워, 정지 타입, 출력(%))
인터럽트 현상이 발생하면 지정한 정지 타입에 따라서 프로그램을 정지하여 탈출한다.
이번 시간에는 Ev3의 모터를 동작 시키는 다양한 방법에 대해서 배웠다.
run 함수와 Stop(정지 방식) 함수는 기다림 함수를 사용해서 명령을 수행 할 수 있는 시간을 선언해야 하지만, run_time 함수는 따로 명령을 수행 할 시간을 선언할 필요가 없다는 것을 알게 되었다.
run함수를 필요로 하는 상황에서, run_time 함수를 사용해 프로그램을 개발하는 것이 코드의 길이를 줄이는 가장 효율적인 방법이라고 생각한다.
정지 방식(Stop 함수)에는 3가지 종류가 있다는 것을 알게 되었으며, 내가 개발하고 필요로 하는 상황에 알맞는 정지 방식을 택할 필요가 있다고 생각한다.
모터의 현 위치에서 각도만 조절할수 있는 함수를 배웠으며, 인터럽트 현상이 발생하였을 때(외부에서 예상치 못한 상황이 발생하였을 때) 강제 종료하는 함수를 배워 응용할 수 있었다.
이로써 Ev3 모터를 제어하는 방법에 대해서 모두 알아 보았다.
다음 시간에는 각 센서를 종류별로 다루는 방법에 대해서 배워 보도록 하겠다.
Author And Source
이 문제에 관하여([Ev3] 2. Motor Control), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kinesis19/Ev3-2.-Motor-Control저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)