親子で作る!自動で歩く昆虫ロボット

プロジェクト定義

本プロジェクトは、秋葉原にロボット専門店を持つ“ツクモ” と、半導体メーカーの“ルネサスエレクトロニクス”の2社で発足し、 親子向けを中心に、ロボットや電子部品を使ったワークショップやイベントを通して、ものづくり日本の人材育成に貢献するために活動します。


テーマ

「手動→自動」

プロジェクト名のロボット覚醒とは、ロボットを目覚めさせ自律させること。

動かすために人間の手が必要になるロボットを、コンピューターとなる電子部品を組み込んで自動的に動かす。

意図しない動きをするおもちゃから、子供が新しい発見や発想をしたり、改造によって可能性を広げる過程から、 自分のものへのこだわりを深めるなど、ものづくりに必要な気質を養うことが目標です。


実施イベント

親子で作る!自動で歩く昆虫ロボット

リモコンで操作するクワガタ/カブト型のロボット(タミヤ製)を覚醒し、自動で障害物を避けながら進むロボットにします。 ワークショップで基本的な改造方法のレクチャーとキットを提供し、その後自由にカスタマイズを行った参加者同士の ロボットで競技大会を実施します。 シーズン1から電子回路部分を進化し、本シーズン2では新作ボード「GR-ADZUKI」を利用します。

Image
ロボット覚醒プロジェクト第一弾 (シーズン2)のスケジュール

ロボット覚醒用プログラム

以下のプログラムは、ロボット覚醒用のプログラムです。目にあたる距離センサーの値に応じて、足を動かすシンプルなものになっています。

マイコンボードGR-ADZUKIへのプログラム書き込みについては特設サイト「Webコンパイラでスケッチ」を参照してください。


/*
  ロボット覚醒プロジェクト:
  物を避けて進むプログラム
  This program is public domain.
*/
#include <Arduino.h>

#define LED1 22
#define LED2 23
#define LED3 24
#define LED4 12
#define LED5 13

#define FORWARD   0
#define BACKWARD  1
#define RIGHT_MOTOR 200
#define LEFT_MOTOR  250
#define RIGHT_TH  1500
#define LEFT_TH   1500

void motor1_init(){
	analogWrite(5, 0);
	analogWrite(10, 0);
}

void motor2_init(){
	analogWrite(6, 0);
	analogWrite(11, 0);
}


void motor1_rotate(uint8_t dir, uint8_t data){
	switch (dir) {
	case FORWARD:
		analogWrite(5, data);
		analogWrite(10, 0);
		break;
	case BACKWARD:
		analogWrite(5, 0);
		analogWrite(10, data);
		break;
	default:
		break;
	}
}

void motor2_rotate(uint8_t dir, uint8_t data){
	switch (dir) {
	case FORWARD:
		analogWrite(6, data);
		analogWrite(11, 0);
		break;
	case BACKWARD:
		analogWrite(6, 0);
		analogWrite(11, data);
		break;
	default:
		break;
	}
}


void setup(){
	Serial.begin(9600);
	pinMode(LED1, OUTPUT);
	pinMode(LED2, OUTPUT);
	pinMode(LED3, OUTPUT);
	pinMode(LED4, OUTPUT);
	pinMode(LED5, OUTPUT);
	digitalWrite(LED1, HIGH);
	digitalWrite(LED2, HIGH);
	digitalWrite(LED3, HIGH);
	digitalWrite(LED4, HIGH);
	digitalWrite(LED5, HIGH);
	motor1_init();
	motor2_init();
}

void loop(){
	int right_eye, left_eye;
	
	digitalWrite(LED1, HIGH);
	digitalWrite(LED2, HIGH);
	digitalWrite(LED3, HIGH);
	digitalWrite(LED4, HIGH);
	digitalWrite(LED5, HIGH);
	
	left_eye = 0;
	right_eye = 0;
	for(int i = 0; i < 5; i++){
		left_eye  += analogRead(0);
		right_eye += analogRead(1);
	}
	Serial.println(right_eye);
	Serial.println(left_eye);
	
	if(analogRead(2) < 500){ // 強制的に停止
		digitalWrite(LED5, LOW);
		motor1_init();
		motor2_init();
	} else if((left_eye > LEFT_TH) && (right_eye > RIGHT_TH)){ // 両目に見えた
		digitalWrite(LED1, LOW);
		digitalWrite(LED2, LOW);
		motor2_rotate(FORWARD, LEFT_MOTOR);
		motor1_rotate(BACKWARD, RIGHT_MOTOR);
		
	} else if(left_eye > LEFT_TH) { // 左目に見えた
		digitalWrite(LED2, LOW);
		motor2_rotate(FORWARD, LEFT_MOTOR);
		motor1_rotate(FORWARD, 0);
		
	} else if(right_eye > RIGHT_TH) { // 右目に見えた
		digitalWrite(LED1, LOW);
		motor2_rotate(FORWARD, 0);
		motor1_rotate(FORWARD, RIGHT_MOTOR);
		
	} else { // 何もない
		motor2_rotate(FORWARD, LEFT_MOTOR);
		motor1_rotate(FORWARD, RIGHT_MOTOR);
	}
	
	delay(100);
}

Scratchでプログラム遊び!

ロボット覚醒に使われるGR-ADZUKIでは子供向けビジュアルプログラミング「Scratch」で遊ぶことができます。WindowsとMacで利用可能です。
GR-ADZUKI用には、Scratchの派生品「S4A」を使用します。やり方は特設サイト「Scratch(S4A)で遊ぶ!」を参照してください。

Image
GR-ADZUKI Scratch S4Aドラゴン