ホーム > カテゴリ > ロボット・電子工作・マイコン >

クレーンゲームを作る [Arduino]

Arduinoを使用して簡易的なクレーンゲームを作ってみました。

毎度、作りは粗いですが、仕組みはこんな感じで良いと思います。

今回のクレーンゲームは上下の移動のみですが、プーリー(滑車)の部分に車輪(タイヤ)をつけて上下左右に動けるようにするとゲームセンターにあるような本格的なゲームになります。

使用部品・材料

総額で約5,563円です。(Arduino本体の値段を除く)

部品/材料値段備考
サンハヤト SAD-101 ニューブレッドボード
(2個)
¥1000Amazon.com
モータードライバ(TA7291P)¥150秋月電子の通販コード(I-02001)
マイクロサーボ SG92R
(2個)
¥1000トルク:2.5kgf/cm
秋月電子の通販コード(M-08914)
タミヤ 楽しい工作シリーズ No.121 プーリーユニットセット (70121)¥524このプーリー(滑車)はモーターを使用。
Amazon.com
タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)¥468Amazon.com
タミヤ 楽しい工作シリーズ No.143 ユニバーサルアームセット (70143)¥798Amazon.com
タクトスイッチ
(5個)
¥50秋月電子の通販コード(P-03647)
ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(青) (10本入)
(3個)
¥660サーボのコード延長用に使用。(長いジャンパワイヤーを自作してもOK)
秋月電子の通販コード(C-08934)
結束バンド 170本入り白色 10cm(4inch)¥100小さくて細いもの。100円ショップ(ダイソー)
3M スコッチ はがせる両面テープ 強力 薄手 12mm×15m SRE-12¥483強力ではがせる両面テープです。
Amazon.com
電解コンデンサー 470μF16V105℃(ルビコンWXA)
(3個)
¥30電圧安定用。他のでも良い。
秋月電子の通販コード(P-08426)
カーボン抵抗器数円10kΩ(5個)を使用。
電池ボックス 単3×3本 リード線・フタ・スイッチ付¥90モーター用。
秋月電子の通販コード(P-02666)
コネクタ付コード(みの虫×ジャンパーワイヤ)¥110電池ボックス用。
秋月電子の通販コード(C-08916)
単3電池
3本
¥100モーター用。
100円ショップ
マスキングテープ任意ユニバーサルプレートをこのテープで机などに取り付けます。マスキングテープなので後から綺麗に剥がせます。

ホームセンター
ダンボール無料薄くて丈夫なダンボール。
私はAmazon.comで送られてくるダンボールの中にある中敷を使用しました。100円ショップの収納ボックス(紙)などでもOK。

※モータードライバの詳細は表内のリンク先をご覧ください。

モーターにはリード線がありませんので「耐熱電子ワイヤー」(P-06756)や片側をカットした「ジャンパーワイヤー」を半田付けして下さい。その2本を繋ぐ場合は2本のリード線をつなぐをご参考にして下さい。

写真

ダンボールのパーツサイズ

ダンボールの各パーツのサイズです。(目安)

部位サイズ(横x縦)
胴(1枚)9.5cm x 6.5cm

※「緻密な計算」で算出したサイズではありません。

サーボの初期設定

組み立てる前に各サーボの初期値をArduinoで設定しておきます。

部位角度
右(12pin)90度
左(13pin)90度

次のように2つのサーボの初期角度を1つ1つ設定していきます。

#include <Servo.h>
Servo myServo;
void setup() {
  // 右(12pin)のサーボの角度を90度にする
  myServo.attach(12); 
  myServo.write(90);    
}

この初期設定が終わってからサーボホーン(羽)を取り付けてください。

配線図

クレーンは5つのボタンで操作します。

各ボタンの動作

ピン番号動作
5ハンドを下げる
4ハンドを持ち上げる
3ハンドを広げる
2ハンドでつかむ
1ハンドの初期化

スケッチ(プログラム)

サーボの角度は各人の環境で調整して下さい。

#include <Servo.h>
Servo myServoL;
Servo myServoR;

void setup() {
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);

  myServoR.attach(12);
  myServoL.attach(13);

  // サーボの位置を初期化する
  myServoL.write(90);
  myServoR.write(90);
  delay(2000);
}
void loop() {

  // ハンドを下げる
  if (digitalRead(5) == HIGH) {
    digitalWrite(7, LOW);
    digitalWrite(8, HIGH);
    delay(100);
  }
  
  // ハンドを持ち上げる
  if (digitalRead(4) == HIGH) {
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
    delay(500);
  }

  digitalWrite(7, LOW);
  digitalWrite(8, LOW);

  // ハンドを広げる
  if (digitalRead(3) == HIGH) {
    myServoR.write(110);
    delay(500);
    myServoL.write(65);
    delay(500);
  }

  // ハンドでつかむ
  if (digitalRead(2) == HIGH) {
    myServoL.write(95);
    delay(500);
    myServoR.write(80);
    delay(500);
  }

  // ハンドの初期化
  if (digitalRead(1) == HIGH) {
    myServoL.write(90);
    delay(500);
    myServoR.write(90);
    delay(500);
  }
}





掲示板

ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。

関連記事



公開日:2017年12月21日
記事NO:02623