デザイン演習Ⅲ・Ⅳ第2回

第一回で学んだ内容と今回学んだモーターを組み合わせて面白いものを作る

作品名

社会風刺


この作品を作ろうと思った経緯

まず初めに今回はじめてモーターを動かした時に、動き方が多方向から叩いているように見えたことから、この動きをうまく活かせないかと考えた。

作品の説明

この作品はディズニーのキャラクターであるミッキーの手と、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);
  }
}

Arduinoコードの説明

① ピン設定と初期化

DIRは回転方向、STEPはステップ信号を出すピンである。
また、Serial.begin(9600);によりセンサーの値を表示する。

② センサー値の取得

analogRead(1)によって明るさを読み取る。

③ 条件分岐

if (val > threshold)で明るさを判断し、暗い場合は回転、明るい場合は停止する。

④ モーターの動き

rotateAngle(90, HIGH);rotateAngle(90, LOW);により、 90度ずつ左右に回転する。

⑤ 回転の仕組み

角度をステップ数に変換し、digitalWriteを繰り返すことでモーターを動かす。

まとめ

明るさに応じてモーターの動きを制御するプログラムを使い現実で起きているイジメのような社会風刺を表せたらと思いこの作品を作り上げた。