개요
온도가 높으면 빨간색으로, 온도가 낮으면 파란색으로, 보통이면 노란색으로 햄스터 로봇의 LED 불을 표시해 봅시다.
부품 연결
- 서미스터를 A5-1과 A5-2에 연결합니다.
서미스터는 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 1 킬로오옴(kΩ) 저항을 A5-3과 A5-4에 연결합니다.
저항은 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 서미스터를 종이컵에 닿게한 후 종이컵에 차가운 물과 뜨거운 물을 채우면서 햄스터 로봇의 양쪽 LED 색깔을 관찰합니다.
코드 작성
설명
- 포트 A의 모드를 아날로그 입력(ADC)으로 설정합니다.
- 보통 상태에서 입력 A의 값은 125 ~ 130 정도의 값을 가집니다. (255의 중간 정도)
- 온도가 올라가면 입력 A의 값이 커지고, 온도가 내려가면 입력 A의 값이 작아집니다.
- 실험을 하기 전에 우선 보통 상태일 때, 컵의 온도가 뜨거울 때, 컵의 온도가 차가울 때 각각에 대해 입력 A의 값을 관찰합니다.
- 뜨거울 때와 보통일 때를 구분하기 위한 경계 값은 관찰된 두 개의 값(뜨거울 때, 보통일 때)의 중간 값으로 합니다.
- 차가울 때와 보통일 때를 구분하기 위한 경계 값은 관찰된 두 개의 값(차가울 때, 보통일 때)의 중간 값으로 합니다.
스크래치
엔트리
파이썬
from roboid.hamster import *
robot = Hamster()
robot.write(Hamster.IO_MODE_A, Hamster.IO_MODE_ADC)
while True:
temperature = robot.read(Hamster.INPUT_A)
print temperature
if temperature > 135:
robot.write(Hamster.LEFT_LED, Hamster.LED_RED)
robot.write(Hamster.RIGHT_LED, Hamster.LED_RED)
elif temperature < 120:
robot.write(Hamster.LEFT_LED, Hamster.LED_BLUE)
robot.write(Hamster.RIGHT_LED, Hamster.LED_BLUE)
else:
robot.write(Hamster.LEFT_LED, Hamster.LED_YELLOW)
robot.write(Hamster.RIGHT_LED, Hamster.LED_YELLOW)
자바스크립트
var hamster = Hamster.create();
hamster.ioModeA(Hamster.IO_MODE_ANALOG_INPUT);
function execute() {
var temperature = hamster.inputA();
console.log(temperature);
if(temperature > 135) {
hamster.leds(Hamster.LED_RED, Hamster.LED_RED);
} else if(temperature < 120) {
hamster.leds(Hamster.LED_BLUE, Hamster.LED_BLUE);
} else {
hamster.leds(Hamster.LED_YELLOW, Hamster.LED_YELLOW);
}
}
C 언어
#include "hamster.h"
int main(int argc, char *argv[]) {
int temperature;
hamster_create();
hamster_write(HAMSTER_IO_MODE_A, HAMSTER_IO_MODE_ADC);
while(1) {
temperature = hamster_read(HAMSTER_INPUT_A);
printf("%d\n", temperature);
if(temperature > 135) {
hamster_write(HAMSTER_LEFT_LED, HAMSTER_LED_RED);
hamster_write(HAMSTER_RIGHT_LED, HAMSTER_LED_RED);
} else if(temperature < 120) {
hamster_write(HAMSTER_LEFT_LED, HAMSTER_LED_BLUE);
hamster_write(HAMSTER_RIGHT_LED, HAMSTER_LED_BLUE);
} else {
hamster_write(HAMSTER_LEFT_LED, HAMSTER_LED_YELLOW);
hamster_write(HAMSTER_RIGHT_LED, HAMSTER_LED_YELLOW);
}
}
return 0;
}
자바
import roboid.hamster.Hamster;
public class Test {
public static void main(String[] args) {
Hamster robot = new Hamster();
robot.write(Hamster.IO_MODE_A, Hamster.IO_MODE_ADC);
int temperature;
while(true) {
temperature = robot.read(Hamster.INPUT_A);
System.out.println(String.valueOf(temperature));
if(temperature > 135) {
robot.write(Hamster.LEFT_LED, Hamster.LED_RED);
robot.write(Hamster.RIGHT_LED, Hamster.LED_RED);
} else if(temperature < 120) {
robot.write(Hamster.LEFT_LED, Hamster.LED_BLUE);
robot.write(Hamster.RIGHT_LED, Hamster.LED_BLUE);
} else {
robot.write(Hamster.LEFT_LED, Hamster.LED_YELLOW);
robot.write(Hamster.RIGHT_LED, Hamster.LED_YELLOW);
}
}
}
}
추가 활동
- 서미스터를 손으로 잡으면 햄스터 로봇이 앞으로 달려가고 손을 떼면 정지하도록 해봅시다.
- 포트 B에 빨간색 LED를 연결한 후 서미스터를 손으로 잡으면 빨간색 LED가 켜지고 손을 떼면 꺼지도록 해봅시다.
포트 B에 연결하는 방법
- 서미스터를 B5-1과 B5-2에 연결합니다.
서미스터는 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 1 킬로오옴(kΩ) 저항을 B5-3과 B5-4에 연결합니다.
저항은 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
목차
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (
akaii@kw.ac.kr) if you have any problem.