News Download Tutorial FAQ Reference Buy

자바 언어 : 순서대로, 반복하여 명령하기

햄스터 룰렛
햄스터 로봇이 무작위 시간 동안 제자리에서 돌게 하여 룰렛 게임을 만들어 봅시다.

룰렛 게임판 내려 받기 PDF PPT

Random 클래스의 nextInt(bound) 메소드는 0부터 bound까지(bound는 포함되지 않음)의 무작위 수를 int형으로 반환합니다. 1초부터 10초까지의 무작위 시간 동안 제자리에서 돌게 해봅시다.

import java.util.Random;

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();
        Random random = new Random();

        hamster.wheels(-30, 30); // 제자리에서 왼쪽으로 돈다.
        Runner.wait(random.nextInt(9000) + 1000); // 1초부터 10초까지(10초는 제외)의 무작위 시간 동안 기다린다.
        hamster.stop(); // 정지한다.
    }
}

햄스터 로봇이 제자리에서 도는 속도를 10부터 100까지의 무작위 속도로 해봅시다.
순서대로 명령하기 (순차)
햄스터 로봇이 1초 동안 앞으로 이동한 후 1초 동안 뒤로 이동하게 해봅시다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        hamster.wheels(30); // 1초 동안 앞으로 이동한다.
        Runner.wait(1000);

        hamster.wheels(-30); // 1초 동안 뒤로 이동한다.
        Runner.wait(1000);

        hamster.stop(); // 정지한다.
    }
}

햄스터 로봇이 1초 동안 앞으로 이동한 후 1초 동안 제자리에서 왼쪽 또는 오른쪽으로 돌게 해봅시다.

아래 그림과 같이 A4 용지 위에 사각형과 원을 그립니다. 햄스터 로봇이 장애물(사각형)을 피해 오른쪽 원 안으로 들어가야 합니다. 왼쪽 바퀴와 오른쪽 바퀴의 속도 및 시간을 설정하고, 여러 명령을 순서대로 수행하여 목표 지점으로 이동할 수 있도록 해봅시다.

목표 지점으로 갔다가 출발 지점으로 다시 되돌아 오도록 해봅시다.
노래 연주하기
간단한 노래를 연주해 봅시다.

import org.roboid.hamster.Hamster;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        hamster.tempo(60); // 연주의 빠르기를 60 BPM(분당 박자 수)으로 한다. (초기 값: 60)
        hamster.note(Hamster.NOTE_C_4, 0.5); // 4옥타브 도 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_E_4, 0.5); // 4옥타브 미 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_G_4, 0.5); // 4옥타브 솔 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_C_4, 0.5); // 4옥타브 도 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_E_4, 0.5); // 4옥타브 미 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_G_4, 0.5); // 4옥타브 솔 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_A_4, 0.5); // 4옥타브 라 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_A_4, 0.5); // 4옥타브 라 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_A_4, 0.5); // 4옥타브 라 음을 0.5 박자 소리낸다.
        hamster.note(Hamster.NOTE_G_4, 1); // 4옥타브 솔 음을 1 박자 소리낸다.
    }
}

음악 시간에 배운 다른 노래도 연주해 봅시다.
사각형 모양으로 이동하기
햄스터 로봇이 사각형 모양으로 이동하게 해봅시다. 사각형 모양으로 이동하기 위해서는 90도로 회전해야 하는데, 실험을 통해 몇 초 동안 회전하면 90도가 되는지 알아보도록 합시다. 950이라는 숫자는 실험 환경에 따라 달라질 수 있습니다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        hamster.wheels(30); // 1초 동안 앞으로 이동한다.
        Runner.wait(1000);

        hamster.wheels(30, -30); // 0.95초 동안 오른쪽으로 회전한다.
        Runner.wait(950);

        hamster.wheels(30); // 1초 동안 앞으로 이동한다.
        Runner.wait(1000);

        hamster.wheels(30, -30); // 0.95초 동안 오른쪽으로 회전한다.
        Runner.wait(950);

        hamster.wheels(30); // 1초 동안 앞으로 이동한다.
        Runner.wait(1000);

        hamster.wheels(30, -30); // 0.95초 동안 오른쪽으로 회전한다.
        Runner.wait(950);

        hamster.wheels(30); // 1초 동안 앞으로 이동한다.
        Runner.wait(1000);

        hamster.wheels(30, -30); // 0.95초 동안 오른쪽으로 회전한다.
        Runner.wait(950);

        hamster.stop(); // 정지한다.
    }
}

코드를 작성한 후 실행해 보면 햄스터 로봇이 정확하게 사각형 모양으로 이동할 수도 있고, 약간 찌그러진 사각형 모양으로 이동할 수도 있습니다. 바닥의 재질에 따라서는 완전히 이상한 모양으로 이동할 수도 있습니다. 사람이 눈을 감고 사각형 모양으로 걸어가는 것과 같습니다. 센서를 사용하지 않기 때문입니다. 눈을 감고 사각형 모양으로 걸어가 보면 얼마나 어려운 일인지 알 수 있을 것입니다. 로봇에게 센서는 사람의 눈과 같습니다. 따라서 센서를 사용하지 않고 이동하는 것에는 한계가 있을 수밖에 없습니다. 햄스터 로봇이 센서를 사용하여 이동하는 방법은 앞으로 하나씩 배우게 될 것입니다.

직사각형, 삼각형, 다이아몬드 등 다양한 모양으로 이동하게 해봅시다.
횟수 반복하기
앞서 작성한 코드처럼 같은 내용을 반복하여 작성하는 것은 비효율적입니다. 반복문을 사용하여 간략하게 작성해 봅시다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        for(int i = 0; i < 4; ++i) { // 4번 반복한다.
            hamster.wheels(30); // 1초 동안 앞으로 이동한다.
            Runner.wait(1000);

            hamster.wheels(30, -30); // 0.95초 동안 오른쪽으로 회전한다.
            Runner.wait(950);
        }
        hamster.stop(); // 정지한다.
    }
}

반복문을 사용하여 직사각형, 삼각형, 다이아몬드 등 다양한 모양으로 이동하게 해봅시다.
서서히 출발하기
로봇이 이동할 때 서서히 속도를 높이거나 내리는 것은 중요합니다. 지금까지는 왼쪽 바퀴와 오른쪽 바퀴의 속도가 변하지 않았지만 속도를 서서히 높이기 위해서는 속도 값을 계속 다르게 주어야 합니다. 속도를 0에서 시작하여 50까지 1씩 증가시키도록 합시다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        for(int speed = 0; speed <= 50; ++speed) { // 속도를 1씩 증가시킨다.
            hamster.wheels(speed);
            Runner.wait(20); // 20 msec마다 속도를 증가시킨다.
        }

        Runner.wait(1000); // 1초 기다린다.
        hamster.stop(); // 정지한다.
    }
}

속도를 50에서 시작하여 0까지 1씩 감소시켜 정지하게 해봅시다. 속도가 0이 되면 더 이상 감소시키지 않아야 합니다.
계속 반복하기
햄스터 로봇이 1초 동안 앞으로 이동한 후 1초 동안 뒤로 이동하는 것을 계속 반복하게 해봅시다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        while(true) {
            hamster.wheels(30); // 1초 동안 앞으로 이동한다.
            Runner.wait(1000);

            hamster.wheels(-30); // 1초 동안 뒤로 이동한다.
            Runner.wait(1000);
        }
    }
}

사각형 모양으로 계속 반복하여 이동하게 해봅시다.

작성된 코드와 같이 무한 반복하는 경우에는 실행이 종료되지 않고 시리얼 포트를 계속 사용하고 있습니다. 이 상태에서 새로운 코드를 실행하면 시리얼 포트가 이미 사용 중이어서 해당 시리얼 포트를 통해 하드웨어 로봇과 연결할 수 없습니다. 이와 같이 무한 반복하여 실행하고 있는 경우에는 다음과 같이 화면 아래쪽의 Console 뷰에 있는 빨간색 사각형 버튼을 클릭하여 강제 종료한 후에 새로운 코드를 실행하여야 합니다.
LED 계속 깜박이기
자동차의 비상등처럼 햄스터 로봇의 양쪽 LED를 계속 깜박이게 해봅시다. 양쪽 LED를 0.2초 동안 노란색으로 켜고 0.2초 동안 끄는 것을 계속 반복하면 됩니다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        while(true) {
            hamster.leds(Hamster.LED_YELLOW); // 양쪽 LED를 노란색으로 켠다.
            Runner.wait(200); // 0.2초 기다린다.

            hamster.leds(0); // 양쪽 LED를 끈다.
            Runner.wait(200); // 0.2초 기다린다.
        }
    }
}

햄스터 로봇의 버저 소리를 일정 시간 간격으로 삐삐삐~ 계속 반복하여 내게 해봅시다.
예술가 로봇
아래 그림과 같이 무작위로 움직이는 것을 랜덤 워크(Random Walk)라고 합니다.

햄스터 로봇의 양쪽 바퀴 속도를 무작위로 설정하여 랜덤 워크를 만들어 봅시다.

import java.util.Random;

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();
        Random random = new Random();

        while(true) {
            // 양쪽 바퀴의 속도를 -50부터 50까지(50은 제외) 무작위로 설정한다.
            hamster.wheels(random.nextInt(100) - 50, random.nextInt(100) - 50);
            // 0.5초부터 1초까지(1초는 제외)의 무작위 시간 동안 기다린다.
            Runner.wait(random.nextInt(500) + 500);
        }
    }
}

햄스터 로봇에 다양한 색상의 펜을 테이프 등으로 부착하고 A4 용지 위에 올려 놓은 후, 작성한 코드를 실행하면 멋진 추상화 그림을 그리는 예술가 로봇이 됩니다.

양쪽 바퀴 속도의 범위 또는 기다리는 시간의 범위를 변경하면서 로봇이 그림을 그리는 형태가 어떻게 달라지는지 관찰해 봅시다.
사이렌 소리 내기
햄스터 로봇의 버저를 사용하여 사이렌 소리를 만들어 봅시다. 버저 소리의 음 높이를 500부터 700까지 10씩 증가시키는 것을 계속 반복하면 됩니다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        while(true) {
            for(int hz = 500; hz <= 700; hz += 10) { // 500부터 700까지 반복한다.
                hamster.buzzer(hz);
                Runner.wait(20);
            }
        }
    }
}

사이렌 소리와 함께 양쪽 LED도 빨간색으로 계속 깜박이게 해봅시다.
LED 깜박이다 멈추기
자동차가 좌회전할 때처럼 햄스터 로봇이 왼쪽으로 회전하는 동안 LED를 깜박이게 해봅시다.

import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;

public class Controller {
    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        hamster.wheels(10, 40); // 왼쪽으로 둥글게 회전한다.
        for(int i = 0; i < 5; ++i) { // 5번 반복하면 2초가 된다.
            hamster.leftLed(Hamster.LED_YELLOW); // 왼쪽 LED를 노란색으로 켠다.
            Runner.wait(200); // 0.2초 기다린다.

            hamster.leftLed(0); // 왼쪽 LED를 끈다.
            Runner.wait(200); // 0.2초 기다린다.
        }
        hamster.stop(); // 정지한다.
    }
}

햄스터 로봇이 2초 뒤로 이동하는 동안 버저 소리를 일정 시간 간격으로 삐삐삐~ 계속 반복하여 내게 해봅시다.
목차
Hardware
  1. Hamster robot
  2. USB dongle
Preparation for Class
  1. Software installation
  2. Robot to PC connection
  3. Run example files
Basic
  1. Create a new project
  2. Work in the cloud PC environment (optional)
  3. Move on a board #1 (sequence, repetition)
  4. Move and turn
  5. Turn on LEDs and make a sound
  6. Command in order repeatedly
  7. Use proximity sensors
  8. Move on a board #2 (repeat while)
  9. Use floor sensors
  10. Use light and acceleration sensors
  11. Braitenberg's robot
Advanced
  1. Create a board game
  2. Keyboard events
  3. Graphical interface
  4. Line following with one sensor
  5. Line following with two sensors
  6. Follow hamster friends (2 people 1 pair)
  7. Follow a wall
  8. Imitating a robot cleaner
  9. Line following at intersection
  10. Escape a maze
Extension Kit
  1. Assembling
  2. Pin/socket layout
  3. Digital input - Press button to beep
  4. Digital output - LED is on when it is dark
  5. Digital output - flashing twinkling LED
  6. Digital output - LED is on in tilting direction
  7. Analog input - Rotating the potentiometer changes the pitch.
  8. Analog input - please do not let it get hot
  9. Analog Input - Move along the light
  10. PWM output - LED light gently brighter and darker
  11. PWM output - LED candle shakes in the wind
  12. Analog servo output - hamster robot has tail
More Advanced
  1. Behavior based robot control
  2. Path navigation
  3. Swap
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (akaii@kw.ac.kr) if you have any problem.