• 검색 결과가 없습니다.

Software – Integrated Development Enviroment(IDE)

Integrated Development Enviroment(IDE)는 Arduino를 프로그래밍 할 수 있는 개발 프로 그램입니다. Arduino가 어떤 신호를 받았을 때 어떻게 움직여라, 혹은 일정 시간마다 신호 를 내보내라 등, Arduino를 조종하는 프로그램을 작성할 수 있습니다. 사용자는 Arduino가 수행하고자 하는 동작을 C언어 기반으로 작성하여 입력할 수 있습니다. 이 소프트웨어는 Arduino.cc에서 무료로 다운받을 수 있습니다.

그림. Arduino IDE

[Development example]

Hardware 와 Software를 이용하여 Arduino를 조종해 봅시다. 우리는 지금부터 Arduino를 사용하여 서보모터와 초음파센서를 제어할 것입니다. 아래는 제어하고자 하는 시스템의 전체 구성도 입니다.

- Arduino : Arduino는 Target system에 명령을 내리는 역할을 수행합니다.

- Breadboard : Breadboard는 각종 전선들을 쉽게 연결할 수 있는 보드입니다. 원래는 납땜 으로 전선을 연결해야 하지만, Breadboard는 그러한 작업없이 전선을 쉽게 연결하고 분리 할 수 있도록 도와줍니다.

- Target system : Target system은 제어하고자 하는 시스템입니다. 일반적으로 로봇의 경우 센서와 모터로 이루어져 있습니다. 이외에도, 모터를 이용하는 각종 제품, 엘리베이터, 믹 서기, 선풍기 등의 시스템이 있습니다.

그림. Arduino를 이용한 실험 구성

- Servo motor : 서보모터는 일정 각도 안에서 움직이는 모터입니다. Arduino를 이용하여 모터에 신호를 넣어주면 모터는 들어오는 신호에 맞는 각도로 움직입니다.

- Ultrasonic Sensor(초음파센서) : 초음파센서는 센서 앞쪽의 물체와의 거리를 측정할 수 있 습니다. Arduino는 초음파센서를 작동시켜 초음파를 발사한 뒤, 들어오는 신호를 받아서 거리를 읽어낼 수 있습니다.

그림. Target 시스템 구성

[제공되는 모듈 프로그래밍 및 간단한 함수 소개]

C언어라 함은 컴퓨터 언어로 사람과 컴퓨터가 소통을 하기 위한 언어라고 생각하면 됩니다.

0과 1만 존재하는 디지털 세계에 사는 컴퓨터의 언어는 사람이 이해할 수 없으며, 반대로 사 람의 말을 컴퓨터가 이해할 수는 없습니다. 이때 C언어라는 하나의 통합된 언어체계를 사용하 여 사람은 컴퓨터에게 명령을 할 수 있습니다. 사람이 C언어를 이용하여 프로그램을 작성하 면, 컴퓨터는 맨 위의 줄부터 차례대로 명령을 수행합니다. C언어는 ‘좌항 = 우항’의 형태로 구성되어 있는데, 사람이 받아들이기에는 ‘좌항과 우항이 같다’는 의미의지만, 컴퓨터에서는

‘우항의 값을 좌항으로 넣어라’라는 명령으로 해석됩니다. 다음과 같은 예를 살펴봅시다.

Ex)

int A, B, C;

B=3;

C=5;

A = B + C;

위의 코드를 실행하면 컴퓨터는 맨 처음 줄부터 명령을 수행하게 됩니다. 각 줄의 끝에는

‘;’ 기호를 보실 수 있는데요, 이 기호는 마침표와 같은 뜻으로, 명령의 끝이라는 뜻입니다.

int A, B, C; : 정수형 변수 A, B, C를 미리 선언합니다. 컴퓨터는 초기에 아무런 것도 알지 못 하기 때문에, 이러한 변수들이 존재한다는 것을 미리 알려줘야 합니다.

B = 3; : B라는 변수에 3이라는 숫자를 저장하라는 뜻입니다. 이후 B는 3을 의미합니다.

C = 5; : C라는 변수에 5라는 숫자를 저장하라는 뜻입니다. 이후 C는 5를 의미합니다.

A = B + C; : ‘B + C’를 수행한 후, 결과를 A에 저장하라는 의미입니다. 이 명령을 수행하 고 나면 A에는 8이 저장되게 됩니다.

자 이제 C언어를 사용하여 모터를 조종해 볼까요? 조종하고자 하는 시스템은 다음과 같 습니다.

그림. Target system 작동 모습

우리는 피카츄 형태의 인형의 꼬리에 서보모터를 달아서 동작하게 할 것입니다. 피카츄 인형의 앞에는 초음파센서가 부착되어 있습니다. 이 초음파센서는 앞쪽의 물체와의 거리를 측정합니다. 평소 피카츄의 꼬리는 쳐져 있지만, 앞쪽에 물체가 다가오게 되면 꼬리가 올라 가게 됩니다(마치 무언가 가까이 다가와서 깜짝 놀라는 것처럼 보이겠죠?). 따라서 Arduino 에는 다음과 같은 프로그램을 넣어주게 됩니다.

그림. Target system 작동 순서도

위와 같은 순서로 프로그램은 작동하게 되고, 초음파센서 앞의 물체와의 거리에 따라서 서보모터는 피카츄의 꼬리를 움직일 것입니다.

[사용된 프로그래밍의 실제]

위와 같은 순서도를 구현하기 위해서 실제 C언어로 프로그램은 어떻게 작성해야 할까요?

아래는 실제 Arduino에 들어간 프로그램입니다. 이 소스코트를 한번 살펴볼까요?

#include <Servo.h>

//서보모터를 구동하기 위한 헤더를 불러옴. 헤더는 사용자가 이용할 수 있도록 미리 작성된 함수입니다. 사용자는 필요에 따라서 각 종 헤더를 불러와서 이용할 수 있습니다.

Servo myservo;

//서보모터를 제어하기 위한 Servo라는 형태의 변수입니다.

const int EchoPin = 7;

//EchoPin 이라는 int 변수를 선언하고 7번 핀에 설정한다. 초음파센서를 연결한 Arduino 핀 을 의미합니다.

const int TrigPin = 8;

//TrigPin 이라는 int 변수를 선언하고 8번 핀에 설정한다. 초음파센서를 작동시키기 위한 핀 을 의미합니다. 자세한 내용은 초음파센서 원리를 참고하세요.

int val2;

//val2 라는 int 변수를 선언. 서보모터가 움직이는 각도 값을 저장합니다.

long duration, cm

//cm이라는 long 형 변수를 선언. 초음파센서로부터 읽어들인 값을 저장합니다.

void setup()

//작동을 위해 시스템 셋팅을 하는 코드입니다.

{

Serial.begin(9600);

//PC와 9600 bps/s 속도로 통신을 해라.

pinMode(EchoPin, INPUT);

//EchoPin으로 초음파센서 값을 받아라.

pinMode(TrigPin, OUTPUT);

//TrigPin에 초음파센서 발사 신호를 내보내라.

myservo.attach(9);

//서보모터는 9번 핀으로 조종한다.

}

void loop()

//실제 작동되는 코드입니다. 전원을 끄기 전까지 이 부분을 반복합니다.

{

digitalWrite(TrigPin, LOW);

// TrigPin에 신호를 정지 시켜라.

delayMicroseconds(2);

// 0.002초 대기하라.

digitalWrite(TrigPin, HIGH);

// TrigPin에 신호를 켜라.

delayMicroseconds(10);

// 0,01초 대기하라.

digitalWrite(TrigPin, LOW);

// TrigPin에 신호를 정지 시켜라.

delayMicroseconds(2); // 0.002초 대기하라.

duration = pulseIn(EchoPin, HIGH);

//dration이라는 변수에, EchoPin으로부터 들어오는 신호를 저장해라.

{

cm = microsecondsToCentimeters(duration);

// cm라는 변수는 duration 값을 microseconds 에서 centimeter로 변환 한 값을 저장 하라.

if (cm <4 ) // 만약 cm가 4보다 작다면 {

cm=4;

// cm는 4로 저장해라.

}

else if (cm >20)

// 만약 cm 가 20보다 크다면

{

cm=20;

// cm 는 20으로 저장해라.

}

val2 = map(cm, 4, 20, 0, 90);

// val2는 값에, cm 변수를 4~20으로 받아서 0~90의 범위로 맵핑해라.

myservo.write(val2);

// 서보모터를 val2 만큼 움직여라.

Serial.print(cm); // cm의 값을 시리얼 모니터에 출력한다.

Serial.print("cm");

// 시리얼 모니터에 cm 이라는 문자를 출력한다.

Serial.println();

// 시리얼 모니터에서 한 줄을 띄운다.

delay(50);

// 0.05초 대기하라.

} }

long microsecondsToCentimeters(long microseconds)

// long 타입의 변수로 microsecond의 값을 centimeter의 값으로 받는다.

{

return microseconds / 29 / 2;

// microseconds 값을 29로 나누고 2로 나눈다.

}

위 프로그램을 실행시키면, Arduino는 계속해서 void loop()안의 명령을 수행하게 됩니다.

동시에 사용자는 컴퓨터 통신으로 현재 초음파센서에 들어오는 값을 확인할 수가 있습니다.

평가는 학생 평가와 교사 자체 평가의 체크리스트를 이용하여 실시합니다.

내 꿈의 도우미 로봇!

(내 꿈 실현을 도와줄 로봇을 디자인으로 표현하기)

9~10 차시

중학교

[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

[학생용 학생용] 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용 학생용]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

<월드컵 트로피>

학습목표

가. 자신의 장점과 흥미 분야 발견을 통하여 자신의 진로를 탐색할 수 있다.

나. 자신의 꿈을 실현하는데 필요한 노력과 능력을 분석할 수 있다.

다. 꿈을 실현시키는데 도움을 줄 수 있는 로봇을 탐색해 볼 수 있다.

I. 상황제시

2050년 올해는 4년에 한 번씩 열리 는 월드컵축구 대회가 개최되는 해입 니다. 특히 올해는 바로 대한민국에서 대회가 열리게 되어 있어 더욱 설렙니 다. 저는 중학교 2학년에 재학 중이고 장래 희망은 축구선수입니다. 저도 월 드컵 무대에서 저의 기량을 마음껏 발 휘하는 것이 저의 꿈입니다. 하지만 저 는 학교에서 후보 선수입니다. 운동장 에서 마음껏 뛰어다니며 저의 기량을 펼치고 싶지만 저의 기량이 그렇게 되 지 못한 것 같습니다. 코치님과 감독님 께서 많이 가르쳐 주시지만 말씀하시 는 내용이 정확하게 어떤 것을 의미하는지 알 수 없었습니다. 코치 님께서는 저에게 가장 부족한 점이 킥이라고 말씀하셨습니다. 킥이 부정확해서 킥의 자세를 수정해야 한다고 말씀해 주셨습니다. 몇 번 설명을 듣고 그대로 해 보았지만 잘 되지 않았습니다. 며칠 후 옆 학교와 친선 경기를 하였습니다. 역시 저는 주전으로 뛰지 못했습니 다. 그런데 제 포지션의 주전을 뛰던 친구가 상대편 선수와 부딪히 며 부상을 입었습니다. 큰 부상은 아니었지만 이번 경기는 뛰기 어 려웠습니다. 감독님께서는 저에게 빨리 준비하고 들어가라고 하셨습 니다. 저에게도 기회가 찾아왔습니다. 그동안 열심히 연습한 것을

관련 문서