まず初めに今回はじめてモーターを動かした時に、動き方が多方向から叩いているように見えたことから、この動きをうまく活かせないかと考えた。
この作品はディズニーのキャラクターであるミッキーの手と、USJのキャラクターであるミニオンを組み合わせた作品である。
モーターにはミッキーの手の部分を取り付け、その手が当たる位置にミニオンを配置した。
前回学んだ光センサーと今回学んだモーターを組み合わせて動作するようにした。
電気を消した状態では見えない場所で叩いている様子を表現し、電気をつけて周囲から注目される状態では動作を止めることで、
表面上は何も起きていないように見える社会の闇を表現している。
本作品では、光センサーとモーターを組み合わせることで、周囲の明るさによって動作が変化する仕組みを工夫した。
暗い環境ではモーターが作動し、ミッキーの手がミニオンを叩く動きをし、明るい環境ではモーターを停止させることで、
何も起こっていないように見せるようにした。
また、モーターの回転角度や速度を調整することで、より自然な動きを再現できるよう工夫した。
const int DIR = 8;
const int STEP = 9;
int stepsPerRevolution = 200;
int threshold = 200;
void setup() {
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
Serial.begin(9600);
}
void loop() {
int val = analogRead(1);
Serial.println(val);
if (val > threshold) {
// 暗い → 回転(右)
rotateAngle(90, HIGH); // 右
delay(10);
rotateAngle(90, LOW); // 左
delay(10);
} else {
// 明るい → 停止
digitalWrite(STEP, LOW);
}
}
void rotateAngle(float angle, int direction) {
int steps = stepsPerRevolution * angle / 360;
digitalWrite(DIR, direction);
for (int i = 0; i < steps; i++) {
digitalWrite(STEP, HIGH);
delayMicroseconds(1000);
digitalWrite(STEP, LOW);
delayMicroseconds(1000);
}
}
DIRは回転方向、STEPはステップ信号を出すピンである。
また、Serial.begin(9600);によりセンサーの値を表示する。
analogRead(1)によって明るさを読み取る。
if (val > threshold)で明るさを判断し、暗い場合は回転、明るい場合は停止する。
rotateAngle(90, HIGH);とrotateAngle(90, LOW);により、
90度ずつ左右に回転する。
角度をステップ数に変換し、digitalWriteを繰り返すことでモーターを動かす。
明るさに応じてモーターの動きを制御するプログラムを使い現実で起きているイジメのような社会風刺を表せたらと思いこの作品を作り上げた。