• 검색 결과가 없습니다.

06 06 06

N/A
N/A
Protected

Academic year: 2021

Share "06 06 06"

Copied!
53
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

로봇 제어 명령어

6-1 모터 연결하기

6-2 모터 속도 제어하기 6-3 모터 방향 제어하기

6-4 라이브러리 함수 제작하기 6-5 라이브러리 함수 활용하기 6-6 로봇 기본 동작 제어 실습

6-7 장애물 회피 자율 주행 구현하기 6-8 키패드 함수 구현하기

6-9 키패드 로봇 조종기

06

(2)

로봇 제어 명령어

06 - 1 모터 연결하기

1. 모터 연결 선 확인하기

06

2핀 케이블 왼쪽 모터 2핀 케이블

오른쪽 모터

(3)

로봇 제어 명령어

06 - 1 모터 연결하기

2. 모터 핀 위치 확인하기

06

모터2 (오른쪽 모터) 모터1 (왼쪽 모터)

(4)

로봇 제어 명령어

06 - 1 모터 연결하기

3. 왼쪽모터 케이블을 MOTOR1 단자에 연결하기

06

(5)

로봇 제어 명령어

06 - 1 모터 연결하기

4. 빨간색 케이블 선이 보드 안쪽으로 가도록 연결

06

(6)

로봇 제어 명령어

06 - 1 모터 연결하기

5. 오른쪽 모터 케이블을 MOTOR2에 연결

06

오른쪽 모터

왼쪽 모터

(7)

로봇 제어 명령어

06 - 1 모터 연결하기

6. 빨간색 선이 보드 안쪽으로 오도록 연결

06

(8)

로봇 제어 명령어

06 - 1 모터 연결하기

7. 최종 연결 결과

06

(9)

로봇 제어 명령어

06 - 1 모터 연결하기

8. 로봇 실습 주의사항

06

바퀴가 위로 올라오도록 본체를 그림과 같이 세워 놓습니다.

바퀴가 움직이면 로봇이

책상에서 떨어질 수

있습니다.

(10)

로봇 제어 명령어

06 - 1 모터 연결하기

8. 로봇 실습 주의사항

06

(11)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

(12)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

디지털 04번 디지털 05번 디지털 06번

디지털 07번 모터 드라이브

회로

왼쪽 모터

오른쪽 모터

(13)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

디지털 04번 디지털 05번 디지털 06번

디지털 07번 모터 드라이브

회로

왼쪽 모터

오른쪽 모터 왼쪽 모터

오른쪽 모터

(14)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

디지털 04번 디지털 05번 디지털 06번

디지털 07번 모터 드라이브

회로

왼쪽 모터

오른쪽 모터 왼쪽 모터

오른쪽 모터

모터의 회전 속도를

PWM으로 제어

(15)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

디지털 04번 디지털 05번 디지털 06번

디지털 07번 모터 드라이브

회로

왼쪽 모터

오른쪽 모터 왼쪽 모터

오른쪽 모터

모터의 회전 방향을

결정

(16)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

1. 모터 제어를 위한 아두이노 핀 설명

06

(17)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

2. 왼쪽 모터 속도 제어 하기

06

디지털 04번 디지털 05번

왼쪽 모터

왼쪽 모터

모터의 속도 제어 (PWM 방식)

PWM 방식이기 때문에 디지털 핀에 연결되어

있지만 AnalogWrite 명령어를 사용해야 함

(18)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

2. 왼쪽 모터 속도 제어 하기

06

void setup() {

}

void loop() {

AnalogWrite(5, 200) delay(2000)

AnalogWrite(5, 0) delay(2000)

}

PWM 방식이기 때문에 디지털 핀에 연결되어

있지만 AnalogWrite 명령어를 사용해야 함

(19)

로봇 제어 명령어

06 - 2 모터 속도 제어하기

3. 왼쪽 모터 속도 변화 시키기

06

void setup() {

}

void loop() {

for (int i = 0; i < 255; i++) {

AnalogWrite(5, i) delay(50)

} }

AnalogWrite 명령어에는

0 ~ 255 값을 입력할 수 있음

(20)

로봇 제어 명령어

06 - 3 모터 방향 제어하기

1. 왼쪽 모터 회전 방향 제어하기

06

디지털 04번 디지털 05번

왼쪽 모터

왼쪽 모터

디지털 04번 핀의 값이 HIGH : 0V ~ 5V 전압 생성 LOW : -5V ~ 0V 전압 생성

전진

후진

(21)

로봇 제어 명령어

06 - 3 모터 방향 제어하기

1. 왼쪽 모터 회전 방향 제어하기

06

void setup() {

}

void loop() {

//정방향 회전

DigitalWrite(4, HIGH) AnalogWrite(5, 200) delay(2000)

AnalogWrite(5, 0) delay(1000)

//역방향 회전

DigitalWrite(4, LOW) AnalogWrite(5, 200) delay(2000)

AnalogWrite(5, 0)

(22)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

1. 왼쪽 모터 제어용 함수

06

void RobotWrite(int left) {

left_power = abs(left)

AnalogWrite(5, left_power) if (left >= 0)

DigitalWrite(4, HIGH) else

DigitalWrite(4, LOW) }

(23)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

2. 기존 예제에 함수 통합

06

void RobotWrite(int left) {

left_power = abs(left)

AnalogWrite(5, left_power) if (left >= 0)

DigitalWrite(4, HIGH) else

DigitalWrite(4, LOW) }

//위쪽에 함수 코드 추가 void setup()

{ }

void loop() {

//정방향 회전 RobotWrite(200) delay(2000) RobotWrite(0) delay(1000) //역방향 회전

RobotWrite(-200) delay(2000)

RobotWrite(0)

(24)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

3. 양쪽 모터를 모두 사용하는 함수

06

void RobotWrite(int left, int rght) {

left_power = abs(left) right_power = abs(right) AnalogWrite(5, left_power) AnalogWrite(6, right_power) if (left >= 0)

DigitalWrite(4, HIGH) else

DigitalWrite(4, LOW) if (right >= 0)

DigitalWrite(7, HIGH) else

DigitalWrite(7, LOW) }

(25)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

4. 양쪽 모터를 모두 사용하는 함수 활용 예제

06

void RobotWrite(int left, int right) {

...

}

void setup() {

}

void loop() {

RobotWrite(200, 200) delay(1000)

RobotWrite(-200, -200) delay(500)

RobotWrite(-200, 200) delay(1000)

1초간 전진

1초간 후진

1초간 회전

(26)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

5. 함수를 완벽한 C언어 문법을 적용하여 별도의 파일로 작성

06

#include<Arduino.h>

void RobotWrite(int left, int right) {

int left_power = abs(left);

int right_power = abs(right);

analogWrite(5, left_power);

analogWrite(6, right_power);

if (left >= 0)

digitalWrite(4, HIGH);

else

digitalWrite(4, LOW);

if (right >= 0)

digitalWrite(7, HIGH);

else

digitalWrite(7, LOW);

(27)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

6. 별도의 파일로 작성된 코드를 RobotWrite.h 파일로 저장

06

◾ 기본적으로 C:\사용자\로그인 이름\문서\Arduino\Libraries 폴더가 표시된다.

◾ 기본 폴더 경로를 수정하지 말고 현재 표시된 경로에서 작업을 해야 한다.

◾ 파일을 저장하는 창이 표시되면, 폴더에서 RobotWrite 라는 이름으로 폴더를 새로 생성한다.

◾ 새로 생성된 폴더로 이동한 후에, RobotWrite.h 이름으로 현재의 라이브러리 함수를 파일로 저장한다.

(28)

로봇 제어 명령어

06 - 4 라이브러리 함수 제작하기

7. RobotWrite 폴더 생성 후, RobotWrite.h 파일로 저장

06

파일 형식이 *h 로 되어 있는 지 확인한다.

(29)

로봇 제어 명령어

06 - 5 라이브러리 함수 활용하기

1. 기존 예제에서 코드 상단에 아래의 명령어 추가

06

#include<RobotWrite.h>

(30)

로봇 제어 명령어

06 - 5 라이브러리 함수 활용하기

2. 로봇의 동작을 제어하는 예제

06

#include<RobotWrite.h>

void setup() {

}

void loop() {

RobotWrite(200, 200) delay(1000)

RobotWrite(-200, -200) delay(500)

RobotWrite(-200, 200) delay(1000)

기존 예제에서

함수 정의 부분을 제거하고 라이브러리를 사용하도록

#include 추가

(31)

로봇 제어 명령어

06 - 5 라이브러리 함수 활용하기

3. SPL 편집기에 내장된 로봇 내장 함수

06

(32)

로봇 제어 명령어

06 - 5 라이브러리 함수 활용하기

4. SPL 편집기에 내장된 로봇 내장 함수 활용 예제

06

void setup() {

}

void loop() {

DriveWrite(200, 200) delay(1000)

DriveWrite(-200, -200) delay(500)

DriveWrite(-200, 200) delay(1000)

}

(33)

로봇 제어 명령어

06 - 6 로봇 기본 동작 제어 실습

1. 기본 속도 제어 명령 만으로 간단한 실습 가능

06

종이컵

로봇 출발 위치 로봇 도착 위치

(34)

로봇 제어 명령어

06 - 6 로봇 기본 동작 제어 실습

1. 기본 속도 제어 명령 만으로 간단한 실습 가능

06

난이도가 낮은 미션 난이도가 보통인 미션

(35)

로봇 제어 명령어

06 - 7 장애물 회피 자율주행 구현하기

1. PSD 거리 센서를 아날로그 0번 핀에 연결

06

PSD 거리센서 아날로그 0번 핀

(36)

로봇 제어 명령어

06 - 7 장애물 회피 자율주행 구현하기

2. 장애물을 만나면 다음 동작 구동

06

센서 읽기

If 장애물을 만나면 1초간 후진 1초간 회전

0.1초간 전진

반복

(37)

로봇 제어 명령어

06 - 7 장애물 회피 자율주행 구현하기

3. 장애물을 만나면 회피한 후, 자율주행하는 코드

06

void loop() {

a = AnalogRead(0) if (a > 300)

{

DriveWrite(-200, -200) Delay(1000)

DriveWrite(0, 200) Delay(1000)

} else

DriveWrite(200, 200) Delay(100)

}

(38)

로봇 제어 명령어

06 - 7 장애물 회피 자율주행 구현하기

4. 프로젝트 실습

06

로봇이 전진할 때 헤드라이트를 켜시오 (컬러 LED바 활용) 로봇이 후진할 때 비상등을 켜시오 (컬러 LED바 활용)

로봇이 회전할 때 LED 셀이 한쪽 방향으로 이동하도록 하시오

로봇이 후진할 때 간단한 멜로디가 나오도록 하시오

(39)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

1. 키패드 센서 연결하기

06

키패드 센서 모듈을 아날로그 0번에

연결합니다.

(40)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

1. 키패드 센서 연결하기

06

(41)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

2. 키패드 센서 값 확인하기

06

void setup() {

}

void loop() {

a0 = AnalogRead(0) PrintLine(a0)

delay(100)

}

(42)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

3. 키패드 센서 값 기록하기

06

(43)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

4. 키패드 버튼을 누르면 번호가 출력되는 기능 구현

06

(44)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

4. 키패드 버튼을 누르면 번호가 출력되는 기능 구현

06

void loop() {

pin = 0

a = AnalogRead(pin) if (608 < a && a < 628)

PrintLine(1) else if (797 < a && a < 816)

PrintLine(2) else if (a> 895 && a<915)

PrintLine(3) else if (a> 666 && a<686)

PrintLine(4) else if (a> 724 && a<744)

PrintLine(5) Delay(100)

}

(45)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

5. 번호를 리턴하는 함수로 제작하기

06

void loop() {

a = KeyPad(0) PrintLine(a) delay(100) }

int KeyPad(int pin) {

res = -1

a = AnalogRead(pin) if (608 < a && a < 628)

res = 1

else if (797 < a && a < 816) res = 2

else if (a> 895 && a<915) res = 3

else if (a> 666 && a<686) res = 4

else if (a> 724 && a<744) res = 5

return res }

(46)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

6. 키패드 함수를 라이브러리로 추가하기

06

#include<Arduino.h>

int KeyPad(int pin) {

int res = -1;

int a = analogRead(pin);

if (608 < a && a < 628) res = 1;

else if (797 < a && a < 816) res = 2;

else if (a> 895 && a<915) res = 3;

else if (a> 666 && a<686) res = 4;

else if (a> 724 && a<744) res = 5;

return res;

(47)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

7. 별도의 파일로 작성된 코드를 KeyPad.h 파일로 저장

06

◾ 기본적으로 C:\사용자\로그인 이름\문서\Arduino\Libraries 폴더가 표시된다.

◾ 기본 폴더 경로를 수정하지 말고 현재 표시된 경로에서 작업을 해야 한다.

◾ 파일을 저장하는 창이 표시되면, 폴더에서 KeyPad 라는 이름으로 폴더를 새로 생성한다.

◾ 새로 생성된 폴더로 이동한 후에, KeyPad.h 이름으로 현재의 라이브러리 함수를 파일로 저장한다.

(48)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

7. 별도의 파일로 작성된 코드를 KeyPad.h 파일로 저장

06

(49)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

8. 키패드 라이브러리 함수 사용하기

06

#include<KeyPad.h>

void setup() {

}

void loop() {

a = KeyPad(0)

PrintLine(a)

delay(100)

}

(50)

로봇 제어 명령어

06 - 8 키패드 함수 구현하기

9. 키패드 함수로 오르간 연주장치 만들기

06

#include<KeyPad.h>

void setup() {

}

void loop() {

a = KeyPad(0) if (a == 1)

tone(3, 262, 200) else if (a == 2)

tone(3, 294, 200) else if (a == 3)

tone(3, 330, 200) else if (a == 4)

tone(3, 349, 200) else if (a == 5)

tone(3, 392, 200)

(51)

로봇 제어 명령어

06 - 9 키패드 로봇 조종기

1. 키패드 버튼으로 로봇 조종하기

06

(52)

로봇 제어 명령어

06 - 9 키패드 로봇 조종기

2. 키패드 버튼 별 동작 정의하기

06

(53)

로봇 제어 명령어

06 - 9 키패드 로봇 조종기

3. 로봇 조종기능 완성하기

06

#include<KeyPad.h>

void loop() {

a = KeyPad(0) if (a == 1)

DriveWrite( 0 , 200) else if (a == 2)

DriveWrite( 200 , 200) else if (a == 3)

DriveWrite( 0 , 0) else if (a == 4)

DriveWrite( -200 , -200) else if (a == 5)

DriveWrite( 0 , 200) delay(100)

}

참조

관련 문서

1-(06/23) Introduction: Micro- and nano-optics based on diffraction effect for next generation technologies 2-(06/30) Guided-mode resonance (GMR) effect for filtering devices

한국탄소산업진흥원 직무설명자료 (06... 한국탄소산업진흥원

귀하는 개인정보 수집‧이용에 동의하지 않으실 수 있습니다... 활동 후 활동보고서를

귀하는 개인정보 수집‧이용에 동의하지 않으실 수 있습니다... 활동 후 활동보고서를

소비자는 가장 선호하는 상표를 구매하지만 그 상표를 취급하는 점포들 중 가격과 서비스 면에서 보다 유리한 곳을 선택한다..

맥동: 콘크리트 펌프의 실 린터 펌핑작동에 의한 힘이 배관에 전달되어 압송 진행 방향으로 배관이 움직이려 하는 힘.. 압송

Open Knowledge

개인의료비 : 개인에게 직접 주어지는 서비스 내지 재화에 대한 지출 의미 의료기관 이용, 약국 이용에 대한 지출. 경상의료비