개요
LED 두 개를 사용하여 바람에 흔들리는 촛불을 표현해 봅시다.
부품 연결
- 220 오옴(Ω) 저항을 A4-5와 A4-6에 연결합니다.
- 빨간색 LED의 양극(+, 다리가 긴 쪽)을 A4-7에, 음극(-, 다리가 짧은 쪽)을 A4-8에 연결합니다.
- 또 다른 220 오옴(Ω) 저항을 B4-5와 B4-6에 연결합니다.
- 노란색 LED의 양극(+, 다리가 긴 쪽)을 B4-7에, 음극(-, 다리가 짧은 쪽)을 B4-8에 연결합니다.
코드 작성
설명
- 포트 A와 포트 B의 모드를 PWM 출력으로 설정합니다.
- 무작위 수(난수)를 얻어서 출력 A와 출력 B의 값을 설정합니다.
- 무작위 수(난수)를 얻어서 출력 값의 지속 시간을 설정합니다.
- 작성된 코드를 실행하고 A4 용지를 둥글게 말아서 햄스터 로봇을 감싸거나 종이컵으로 덮으면 멋진 촛불 조명이 됩니다.
스크래치
엔트리
프로세싱
import org.roboid.runtime.*;
import org.roboid.hamster.*;
import org.roboid.robot.*;
Hamster hamster;
void setup() {
hamster = Hamster.create(this);
// 포트 A와 포트 B를 PWM 출력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_PWM_OUTPUT);
hamster.ioModeB(Hamster.IO_MODE_PWM_OUTPUT);
}
void draw() {
}
void run() {
while(true) {
hamster.outputA(random(100, 255)); // 포트 A의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
hamster.outputB(random(100, 255)); // 포트 B의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
delay(int(random(0, 100))); // 0초부터 0.1초까지(0.1초는 제외)의 무작위 시간 동안 기다린다.
}
}
파이썬
import random
from roboid import *
hamster = Hamster()
# 포트 A와 포트 B를 PWM 출력으로 설정한다.
hamster.io_mode_a(Hamster.IO_MODE_PWM_OUTPUT)
hamster.io_mode_b(Hamster.IO_MODE_PWM_OUTPUT)
while True:
hamster.output_a(random.randint(100, 255)) # 포트 A의 출력을 100부터 255까지의 무작위 값으로 설정한다.
hamster.output_b(random.randint(100, 255)) # 포트 B의 출력을 100부터 255까지의 무작위 값으로 설정한다.
wait(random.randint(0, 100)) # 0초부터 0.1초까지의 무작위 시간 동안 기다린다.
자바스크립트
var hamster = Hamster.create();
// 포트 A와 포트 B를 PWM 출력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_PWM_OUTPUT);
hamster.ioModeB(Hamster.IO_MODE_PWM_OUTPUT);
function candle() {
hamster.outputA(Math.random() * 155 + 100); // 포트 A의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
hamster.outputB(Math.random() * 155 + 100); // 포트 B의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
setTimeout(candle, Math.random() * 100); // 0초부터 0.1초까지(0.1초는 제외)의 무작위 시간 후에 다시 호출한다.
}
candle();
C 언어
#include <stdlib.h>
#include <time.h>
#include "roboid.h"
int main(int argc, char *argv[]) {
hamster_create();
// 포트 A와 포트 B를 PWM 출력으로 설정한다.
hamster_io_mode_a("pwm output");
hamster_io_mode_b("pwm output");
srand(time(NULL)); // 무작위 수를 초기화한다.
while(1) {
hamster_output_a(rand() % 155 + 100); // 포트 A의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
hamster_output_b(rand() % 155 + 100); // 포트 B의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
wait(rand() % 100); // 0초부터 0.1초까지(0.1초는 제외)의 무작위 시간 동안 기다린다.
}
return 0;
}
자바 언어
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();
// 포트 A와 포트 B를 PWM 출력으로 설정한다.
hamster.ioModeA(Hamster.IO_MODE_PWM_OUTPUT);
hamster.ioModeB(Hamster.IO_MODE_PWM_OUTPUT);
while(true) {
hamster.outputA(random.nextInt(155) + 100); // 포트 A의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
hamster.outputB(random.nextInt(155) + 100); // 포트 B의 출력을 100부터 255까지(255는 제외)의 무작위 값으로 설정한다.
Runner.wait(random.nextInt(100)); // 0초부터 0.1초까지(0.1초는 제외)의 무작위 시간 동안 기다린다.
}
}
}
추가 활동
- 종이컵을 똑바로 세우고 햄스터 로봇을 컵 속에 넣습니다.
종이컵이 똑바로 세워져 있을 때는 촛불이 일정한 밝기로 계속 켜져 있고
컵을 기울이면 촛불이 흔들리도록 표현해 봅시다.
- 종이컵을 더 많이 기울이면 촛불이 더 많이 흔들리도록 해봅시다.
즉, LED의 밝기 변화가 더 커지도록 합시다.
목차
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(
akaii@kw.ac.kr)에게 연락하세요.