親子で作る!自動で歩く昆虫ロボット
プロジェクト定義
本プロジェクトは、秋葉原にロボット専門店を持つ“ツクモ” と、半導体メーカーの“ルネサスエレクトロニクス”の2社で発足し、 親子向けを中心に、ロボットや電子部品を使ったワークショップやイベントを通して、ものづくり日本の人材育成に貢献するために活動します。
テーマ
「手動→自動」
プロジェクト名のロボット覚醒とは、ロボットを目覚めさせ自律させること。
動かすために人間の手が必要になるロボットを、コンピューターとなる電子部品を組み込んで自動的に動かす。
意図しない動きをするおもちゃから、子供が新しい発見や発想をしたり、改造によって可能性を広げる過程から、 自分のものへのこだわりを深めるなど、ものづくりに必要な気質を養うことが目標です。
実施イベント
親子で作る!自動で歩く昆虫ロボット
リモコンで操作するクワガタ/カブト型のロボット(タミヤ製)を覚醒し、自動で障害物を避けながら進むロボットにします。 ワークショップで基本的な改造方法のレクチャーとキットを提供し、その後自由にカスタマイズを行った参加者同士の ロボットで競技大会を実施します。 シーズン1から電子回路部分を進化し、本シーズン2では新作ボード「GR-ADZUKI」を利用します。
ドキュメント
ロボット覚醒説明書 (2016-robot-kakusei-rev12) (PDF)イベントへのご参加
以下の各Webサイトからご応募ください。
ロボット覚醒用プログラム
以下のプログラムは、ロボット覚醒用のプログラムです。目にあたる距離センサーの値に応じて、足を動かすシンプルなものになっています。
マイコンボード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)で遊ぶ!」を参照してください。