다운로드 교육자료 문제해결 레퍼런스 구입방법

교육 자료 : 자바 언어 : 바닥 센서 사용하기

정지선 지키기
햄스터 로봇의 바닥 센서는 종이 위에 그려진 선이나 책상의 가장자리 등을 검출할 때 사용합니다. 바닥 센서는 근접 센서와 마찬가지로 적외선을 방출하는 IR-LED와 적외선을 감지하는 광 트랜지스터로 이루어져 있습니다. 다른 점은 IR-LED와 광 트랜지스터가 한 쌍으로 이루어져 왼쪽 바닥 센서와 오른쪽 바닥 센서, 각각 별도로 구성되어 있다는 것입니다. IR-LED가 방출하는 적외선이 바닥에 반사되어 들어오는 광량을 광 트랜지스터가 측정합니다. 바닥 센서가 밝은 색의 종이 또는 물체 위에 있으면 반사된 광량이 많아서 측정되는 값이 증가하고, 어두운 색 위에 있으면 반사된 광량이 적어서 측정되는 값이 감소합니다. 햄스터 로봇이 공중에 떠 있으면, 즉 바닥 센서 아래에 아무 것도 없으면 반사된 빛이 없어 0의 값을 가집니다. 바닥 센서가 출력하는 값의 범위는 0 ~ 255이지만 바닥에서 가장 밝은 색(흰색에 가까운 색 중에서 가장 밝은 색)을 100으로 자동 보정하기 때문에 코드 작성 시 사용하는 값의 범위는 0 ~ 100입니다.

A4 용지를 준비하고 검은색 테이프 또는 펜으로 정지선을 표시합시다. 미리 제작된 파일을 프린터로 인쇄해도 됩니다. 이때 바닥 센서가 정지선을 놓치지 않고 감지할 수 있도록 정지선의 폭은 1cm 이상으로 합시다.

정지선 지키기, 선 개수 세기, 바코드 읽기 실습판 내려 받기 PDF PPT

코드를 작성하기 전에 우선 바닥의 색상에 따라 바닥 센서의 값이 어떻게 달라지는지 관찰해 봅시다. 바닥 센서가 A4 용지의 하얀색 위에 있을 때와 검은색 위에 있을 때 센서 값이 어떻게 다른지 확인해 봅시다. 바닥 센서가 하얀색과 검은색의 경계 위에 있을 때, 즉 하얀색과 검은색이 바닥 센서에 반 쯤 걸쳐 있을 때 센서 값이 어떻게 되는지도 관찰해 봅시다.

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) {
            System.out.println(hamster.leftFloor() + ", " + hamster.rightFloor());
            Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
        }
    }
}

햄스터 로봇이 앞으로 이동하다가 정지선을 만나면 정지하게 해봅시다.

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

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

        Hamster hamster = new Hamster();

        while(hamster.leftFloor() > 20 && hamster.rightFloor() > 20) { // 정지선을 만날 때까지
            hamster.wheels(30); // 앞으로 이동한다.
            Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
        }
        hamster.stop(); // 정지한다.
    }
}

숫자 20을 변경하여 햄스터 로봇이 정지하는 지점을 조정해 봅시다.
일정 간격의 검은색 선 개수 세기
A4 용지를 준비하고 검은색 테이프 또는 펜으로 검은색 선을 여러 개 표시합시다. 미리 제작된 파일을 프린터로 인쇄해도 됩니다. 이때 바닥 센서가 검은색 선을 놓치지 않고 감지할 수 있도록 검은색 선의 폭은 1cm 이상으로 합시다. 검은색 선 간의 거리는 햄스터 로봇이 1초 동안 앞으로 이동하는 거리보다 멀어야 합니다.

햄스터 로봇이 공중에 떠 있으면 반사된 빛이 없어 바닥 센서의 값이 0이 되기 때문에 검은색 선 위에 있는 것과 같아집니다. 검은색 선의 개수를 세는 동안 햄스터 로봇을 손으로 들지 않도록 합니다.

정지선 지키기, 선 개수 세기, 바코드 읽기 실습판 내려 받기 PDF PPT

검은색 선을 감지하는 것은 앞에서 한 것과 같은 방법으로 하면 됩니다. 검은색 선을 지나가는 것은 여러 가지 방법이 있는데, 우선 쉽게 하기 위해 일정 시간 동안 앞으로 이동하는 방법으로 검은색 선을 지나가게 합시다.

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); // 앞으로 이동한다.

        int count = 0;
        while(true) {
            if(hamster.leftFloor() < 20 || hamster.rightFloor() < 20) { // 검은색 선 위에 있으면
                // 개수를 하나 증가시키고 화면에 출력한다.
                ++ count;
                System.out.println("count: " + count);

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

            Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
        }
    }
}

검은색 선의 개수를 세다가 네 번째 검은색 선을 만나면 정지하도록 해봅시다.
임의 간격 및 굵기의 검은색 선 개수 세기
검은색 선 간의 거리를 짧게 하면 햄스터 로봇이 1초 동안 앞으로 이동할 때 검은색 선을 하나 이상 지나갈 수 있습니다. 검은색 선을 굵게 하면 하나의 선을 여러 번 셀 수도 있습니다. 앞에서 작성한 코드를 아래의 실습판에서 실행하여 선의 개수를 잘 세는지 관찰해 봅시다.

정지선 지키기, 선 개수 세기, 바코드 읽기 실습판 내려 받기 PDF PPT

하얀색과 검은색의 경계를 감지해 봅시다. 하얀색에서 검은색으로 바뀔 때 개수를 세면 됩니다.

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); // 앞으로 이동한다.

        int count = 0;
        boolean white = false;
        while(true) {
            if(hamster.leftFloor() > 80 && hamster.rightFloor() > 80) {
                white = true; // 하얀색 종이 위에 있다.
            } else if(white && (hamster.leftFloor() < 20 || hamster.rightFloor() < 20)) { // 하얀색에서 검은색으로 바뀌면
                white = false;

                // 개수를 하나 증가시키고 화면에 출력한다.
                ++ count;
                System.out.println("count: " + count);
            }

            Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
        }
    }
}
바코드 읽기
검은색 선 위에 있는 동안 시간을 측정하여 선의 두께를 알아 봅시다. 굵은 선과 가는 선, 두 가지로 구분하여 바코드를 인식합시다.

정지선 지키기, 선 개수 세기, 바코드 읽기 실습판 내려 받기 PDF PPT

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

public class Controller {
    private static char encode(int tick) {
        if(tick > 40) { // 선이 굵다.
            return '-';
        } else { // 선이 가늘다.
            return '.';
        }
    }

    private static String analyze(String code) {
        if(code.equals(".--.")) {
            return "peanut";
        } else if(code.equals("-..-")) {
            return "cheese";
        }
        return null;
    }

    public static void main(String[] args) {

        Hamster hamster = new Hamster();

        hamster.wheels(30); // 앞으로 이동한다.

        int tick = 0;
        String code = "";
        String result;
        while(true) {
            if(hamster.leftFloor() > 80 && hamster.rightFloor() > 80) { // 하얀색 종이 위에 있으면
                if(tick > 0) {
                    code += encode(tick);

                    // 바코드 확인
                    System.out.println(code);
                    result = analyze(code);
                    if(result != null) {
                        System.out.println(result);
                        code = "";
                    }
                }
                tick = 0;
            } else if(hamster.leftFloor() < 20 || hamster.rightFloor() < 20) { // 검은색 선 위에 있으면
                ++ tick;
            }

            Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
        }
    }
}
목차
수업 자료 내려 받기
수업 준비
  1. 하드웨어 살펴보기
  2. 햄스터 · 햄스터S · USB 동글 PDF · PPT
  3. 소프트웨어 설치
  4. PDF · PPT
  5. 로봇과 컴퓨터 연결
  6. PDF · PPT
  7. 예제 파일 실행
  8. PDF · PPT
기초
  1. 새 프로젝트 만들기
  2. 클라우드 컴퓨터 환경에서 작업하기 (선택 사항)
  3. 말판 이동하기 #1 (순차, 횟수 반복)
  4. 이동하고 회전하기
  5. LED 켜고 소리 내기
  6. 순서대로, 반복하여 명령하기
  7. 근접 센서 사용하기
  8. 말판 이동하기 #2 (~인 동안 반복)
  9. 바닥 센서 사용하기
  10. 밝기 센서와 가속도 센서 사용하기
  11. 브레이튼버그의 로봇
심화
  1. 보드 게임 만들기
  2. 키보드 이벤트
  3. 그래픽 인터페이스
  4. 센서 한 개를 사용한 라인 트레이서
  5. 센서 두 개를 사용한 라인 트레이서
  6. 햄스터 친구 따라가기 (2인 1조)
  7. 벽 따라가기
  8. 로봇 청소기 흉내 내기
  9. 라인 트레이서 교차로 주행하기
  10. 미로 탈출
확장 키트
  1. 조립하기
  2. 핀/소켓 배치 살펴보기
  3. 디지털 입력 - 버튼을 누르면 삐 소리가 나요
  4. 디지털 출력 - 어두우면 LED 불이 켜져요
  5. 디지털 출력 - 반짝반짝 LED를 깜박여요
  6. 디지털 출력 - 기울이는 방향으로 LED가 켜져요
  7. 아날로그 입력 - 포텐셔미터를 돌리면 음 높이가 달라져요
  8. 아날로그 입력 - 뜨겁지 않게 해주세요
  9. 아날로그 입력 - 빛을 따라 움직여요
  10. PWM 출력 - LED 불이 부드럽게 밝아졌다 어두워져요
  11. PWM 출력 - LED 촛불이 바람에 흔들려요
  12. 아날로그 서보 출력 - 햄스터 로봇에게 꼬리가 생겼어요
고급
  1. 행위 기반의 로봇 제어
  2. 경로 탐색
  3. 자리 바꾸기
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.