개요
온도가 높으면 빨간색으로, 온도가 낮으면 파란색으로, 보통이면 노란색으로 햄스터 로봇의 LED 불을 표시해 봅시다.
부품 연결
- 서미스터를 A5-1과 A5-2에 연결합니다.
서미스터는 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 1 킬로오옴(kΩ) 저항을 A5-3과 A5-4에 연결합니다.
저항은 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 서미스터를 종이컵에 닿게한 후 종이컵에 차가운 물과 뜨거운 물을 채우면서 햄스터 로봇의 양쪽 LED 색깔을 관찰합니다.
코드 작성
설명
- 포트 A의 모드를 아날로그 입력(ADC)으로 설정합니다.
- 보통 상태에서 입력 A의 값은 125 ~ 130 정도의 값을 가집니다. (255의 중간 정도)
- 온도가 올라가면 입력 A의 값이 커지고, 온도가 내려가면 입력 A의 값이 작아집니다.
- 실험을 하기 전에 우선 보통 상태일 때, 컵의 온도가 뜨거울 때, 컵의 온도가 차가울 때 각각에 대해 입력 A의 값을 관찰합니다.
- 뜨거울 때와 보통일 때를 구분하기 위한 경계 값은 관찰된 두 개의 값(뜨거울 때, 보통일 때)의 중간 값으로 합니다.
- 차가울 때와 보통일 때를 구분하기 위한 경계 값은 관찰된 두 개의 값(차가울 때, 보통일 때)의 중간 값으로 합니다.
스크래치
엔트리
프로세싱
import org.roboid.runtime.*;
import org.roboid.hamster.*;
import org.roboid.robot.*;
Hamster hamster;
void setup() {
hamster = Hamster.create(this);
// 포트 A를 아날로그 입력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_ANALOG_INPUT);
}
void draw() {
}
void run() {
int temperature;
while(true) {
temperature = hamster.inputA(); // 포트 A의 입력
println(temperature);
if(temperature > 135) { // 온도가 높으면
hamster.leds(Hamster.LED_RED); // 양쪽 LED를 빨간색으로 켠다.
} else if(temperature < 120) { // 온도가 낮으면
hamster.leds(Hamster.LED_BLUE); // 양쪽 LED를 파란색으로 켠다.
} else { // 온도가 중간이면
hamster.leds(Hamster.LED_YELLOW); // 양쪽 LED를 노란색으로 켠다.
}
delay(20); // 너무 빨리 반복하지 않도록 한다.
}
}
파이썬
from roboid import *
hamster = Hamster()
# 포트 A를 아날로그 입력으로 설정한다.
hamster.io_mode_a(Hamster.IO_MODE_ANALOG_INPUT)
while True:
temperature = hamster.input_a() # 포트 A의 입력
print(temperature) # python 3.x.x
#print temperature # python 2.7.x
if temperature > 135: # 온도가 높으면
hamster.leds(Hamster.LED_RED) # 양쪽 LED를 빨간색으로 켠다.
elif temperature < 120: # 온도가 낮으면
hamster.leds(Hamster.LED_BLUE) # 양쪽 LED를 파란색으로 켠다.
else: # 온도가 중간이면
hamster.leds(Hamster.LED_YELLOW) # 양쪽 LED를 노란색으로 켠다.
wait(20) # 너무 빨리 반복하지 않도록 한다.
자바스크립트
var hamster = Hamster.create();
// 포트 A를 아날로그 입력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_ANALOG_INPUT);
function execute() {
var temperature = hamster.inputA(); // 포트 A의 입력
console.log(temperature);
if(temperature > 135) { // 온도가 높으면
hamster.leds(Hamster.LED_RED); // 양쪽 LED를 빨간색으로 켠다.
} else if(temperature < 120) { // 온도가 낮으면
hamster.leds(Hamster.LED_BLUE); // 양쪽 LED를 파란색으로 켠다.
} else { // 온도가 중간이면
hamster.leds(Hamster.LED_YELLOW); // 양쪽 LED를 노란색으로 켠다.
}
}
C 언어
#include <stdio.h>
#include "roboid.h"
int main(int argc, char *argv[]) {
int temperature;
hamster_create();
// 포트 A를 아날로그 입력으로 설정한다.
hamster_io_mode_a("analog input");
while(1) {
temperature = hamster_input_a(); // 포트 A의 입력
printf("%d\n", temperature);
if(temperature > 135) { // 온도가 높으면
hamster_leds("red", "red"); // 양쪽 LED를 빨간색으로 켠다.
} else if(temperature < 120) { // 온도가 낮으면
hamster_leds("blue", "blue"); // 양쪽 LED를 파란색으로 켠다.
} else { // 온도가 중간이면
hamster_leds("yellow", "yellow"); // 양쪽 LED를 노란색으로 켠다.
}
wait(20); // 너무 빨리 반복하지 않도록 한다.
}
return 0;
}
자바 언어
import org.roboid.hamster.Hamster;
import org.roboid.runtime.Runner;
public class Controller {
public static void main(String[] args) {
Hamster hamster = new Hamster();
// 포트 A를 아날로그 입력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_ANALOG_INPUT);
int temperature;
while(true) {
temperature = hamster.inputA(); // 포트 A의 입력
System.out.println(temperature);
if(temperature > 135) { // 온도가 높으면
hamster.leds(Hamster.LED_RED, Hamster.LED_RED); // 양쪽 LED를 빨간색으로 켠다.
} else if(temperature < 120) { // 온도가 낮으면
hamster.leds(Hamster.LED_BLUE, Hamster.LED_BLUE); // 양쪽 LED를 파란색으로 켠다.
} else { // 온도가 중간이면
hamster.leds(Hamster.LED_YELLOW, Hamster.LED_YELLOW); // 양쪽 LED를 노란색으로 켠다.
}
Runner.wait(20); // 너무 빨리 반복하지 않도록 한다.
}
}
}
추가 활동
- 서미스터를 손으로 잡으면 햄스터 로봇이 앞으로 달려가고 손을 떼면 정지하도록 해봅시다.
- 포트 B에 빨간색 LED를 연결한 후 서미스터를 손으로 잡으면 빨간색 LED가 켜지고 손을 떼면 꺼지도록 해봅시다.
포트 B에 연결하는 방법
- 서미스터를 B5-1과 B5-2에 연결합니다.
서미스터는 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
- 1 킬로오옴(kΩ) 저항을 B5-3과 B5-4에 연결합니다.
저항은 방향성이 없기 때문에 방향을 맞추어 꽂을 필요는 없습니다.
목차
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(
akaii@kw.ac.kr)에게 연락하세요.