スマホアプリで操作する油圧クレーン:Arduino UNOとBluetoothで精密制御
必要な部品と用品
| Arduino UNO | ×1 |
| HC-05 Bluetoothモジュール | ×1 |
| ブレッドボード | ×1 |
| 300rpmギアードDCモーター | ×8 |
| 10mlシリンジ | ×8 |
| 水槽用チューブ/輸液チューブ | ×1式 |
| 厚紙 | ×1 |
| ナットとボルト | ×1式 |
| 6mm合板 | ×2 |
| ギアードモーター用車輪 | ×4 |
| 毛糸用縫い針 | ×2 |
| L298NデュアルHブリッジドライバー | ×1 |
必要な工具
- はんだごて
- 電動ドリル
- 精密ナイフ
- Mシール(エポキシパテ)
使用アプリ
- MIT App Inventor 2(APKファイル提供あり)
プロジェクト概要
ネット上には手動操作の油圧アームか、アプリ操作のロボットアームしかありません。このプロジェクトは両方を融合させたものです。

開始前に:Arduinoコーディングの基礎知識が必要です
HC-05とArduinoの接続

L298Nモータードライバーのピン配置
[ENA, IN1, IN2 = モーターA], [ENB, IN3, IN4 = モーターB]。ENA/ENBは速度制御用(今回は未使用、HIGH/LOWでON/OFFのみ)。

コードには詳細なコメントがあります。回路を組む前に全ての部品が適切にグラウンドされているか確認してください。
スケッチ(コード)
hydraulic.ino
// 第1・第2ドライバー:アーム制御(ベース、ショルダー、エルボー、グリッパー)
// 第3ドライバー:走行部制御
// 第1ドライバー [ベース(2,3) ショルダー(4,5)]
int m1IN1 = 2; int m1IN2 = 3; int m1IN3 = 4; int m1IN4 = 5;
int m1ENA = 6; int m1ENB = 7;
// 第2ドライバー [エルボー(8,9) グリッパー(10,11)]
int m2IN1 = 8; int m2IN2 = 9; int m2IN3 = 10; int m2IN4 = 11;
int m2ENA = 12; int m2ENB = 13;
// 第3ドライバー [走行部] アナログピン使用
int m3IN1 = 14; // A0
int m3IN2 = 15; // A1
int m3IN3 = 16; // A2
int m3IN4 = 17; // A3
int m3ENA = 18; // A4 (速度制御可: analogWrite)
int m3ENB = 19; // A5 (速度制御可: analogWrite)
void setup() {
pinMode(m1IN1, OUTPUT); pinMode(m1IN2, OUTPUT); pinMode(m1IN3, OUTPUT); pinMode(m1IN4, OUTPUT);
pinMode(m2IN1, OUTPUT); pinMode(m2IN2, OUTPUT); pinMode(m2IN3, OUTPUT); pinMode(m2IN4, OUTPUT);
pinMode(m1ENA, OUTPUT); pinMode(m1ENB, OUTPUT);
pinMode(m2ENA, OUTPUT); pinMode(m2ENB, OUTPUT);
pinMode(m3IN1, OUTPUT); pinMode(m3IN2, OUTPUT); pinMode(m3IN3, OUTPUT); pinMode(m3IN4, OUTPUT);
pinMode(m3ENA, OUTPUT); pinMode(m3ENB, OUTPUT);
Serial.begin(9600);
}
void loop() {
char ip = '0';
while (Serial.available() > 0) {
ip = Serial.read();
delay(10);
}
switch (ip) {
case '6': // ショルダーUP
digitalWrite(m1IN3, HIGH); digitalWrite(m1IN4, LOW);
digitalWrite(m1ENA, HIGH); digitalWrite(m1ENB, HIGH); break;
case '5': // ショルダーDOWN
digitalWrite(m1IN3, LOW); digitalWrite(m1IN4, HIGH);
digitalWrite(m1ENA, HIGH); digitalWrite(m1ENB, HIGH); break;
case '1': // エルボーUP
digitalWrite(m2IN3, HIGH); digitalWrite(m2IN4, LOW);
digitalWrite(m2ENA, HIGH); digitalWrite(m2ENB, HIGH); break;
case '2': // エルボーDOWN
digitalWrite(m2IN3, LOW); digitalWrite(m2IN4, HIGH);
digitalWrite(m2ENA, HIGH); digitalWrite(m2ENB, HIGH); break;
case '8': // グリップ閉
digitalWrite(m2IN1, HIGH); digitalWrite(m2IN2, LOW);
digitalWrite(m2ENA, HIGH); digitalWrite(m2ENB, HIGH); break;
case '7': // グリップ開
digitalWrite(m2IN1, LOW); digitalWrite(m2IN2, HIGH);
digitalWrite(m2ENA, HIGH); digitalWrite(m2ENB, HIGH); break;
case '3': // ベース時計回り
digitalWrite(m1IN1, HIGH); digitalWrite(m1IN2, LOW);
digitalWrite(m1ENA, HIGH); digitalWrite(m1ENB, HIGH); break;
case '4': // ベース反時計回り
digitalWrite(m1IN1, LOW); digitalWrite(m1IN2, HIGH);
digitalWrite(m1ENA, HIGH); digitalWrite(m1ENB, HIGH); break;
case '9': // 全停止
digitalWrite(m1IN1, LOW); digitalWrite(m1IN2, LOW); digitalWrite(m1IN3, LOW); digitalWrite(m1IN4, LOW);
digitalWrite(m1ENA, LOW); digitalWrite(m1ENB, LOW);
digitalWrite(m2IN1, LOW); digitalWrite(m2IN2, LOW); digitalWrite(m2IN3, LOW); digitalWrite(m2IN4, LOW);
digitalWrite(m2ENA, LOW); digitalWrite(m2ENB, LOW);
digitalWrite(m3IN1, LOW); digitalWrite(m3IN2, LOW); digitalWrite(m3IN3, LOW); digitalWrite(m3IN4, LOW);
digitalWrite(m3ENA, LOW); digitalWrite(m3ENB, LOW); break;
case 'A': // 前進
digitalWrite(m3IN1, HIGH); digitalWrite(m3IN2, LOW);
digitalWrite(m3IN3, HIGH); digitalWrite(m3IN4, LOW);
digitalWrite(m3ENA, HIGH); digitalWrite(m3ENB, HIGH); break;
case 'D': // 後進
digitalWrite(m3IN1, LOW); digitalWrite(m3IN2, HIGH);
digitalWrite(m3IN3, LOW); digitalWrite(m3IN4, HIGH);
digitalWrite(m3ENA, HIGH); digitalWrite(m3ENB, HIGH); break;
case 'B': // 右旋回
digitalWrite(m3IN1, LOW); digitalWrite(m3IN2, HIGH);
digitalWrite(m3IN3, HIGH); digitalWrite(m3IN4, LOW);
digitalWrite(m3ENA, HIGH); digitalWrite(m3ENB, HIGH); break;
case 'C': // 左旋回
digitalWrite(m3IN1, HIGH); digitalWrite(m3IN2, LOW);
digitalWrite(m3IN3, LOW); digitalWrite(m3IN4, HIGH);
digitalWrite(m3ENA, HIGH); digitalWrite(m3ENB, HIGH); break;
}
}
カスタムパーツと組み立てガイド
APKファイル: hydraulic_crane_J6NH7RouoB.apk
- Mシールでナットとモーターを固定
- シリンジのピストンにナットをMシールで固定
- シリンジとモーターを連結(モーター正転でピストン押し出し、逆転で引き込み)
- YouTube解説動画: https://www.youtube.com/watch?v=lhOF6cViZ4Q
製造プロセス
- クレーン技術:設計、材料、未来の革新
- パイプオルガン:空気駆動音楽の壮大な芸術
- 鋼管:種類、歴史、現代製造技術
- 集積回路(IC):現代エレクトロニクスを支える微小強力チップ
- 温度制御ファンサーキット:メディア家具冷却用DIYリレーシステム
- MOSMusicプロジェクトキット: MOSFET、Arduinoで音楽同期照明制御
- 高品質油圧パイプベンダー:耐久性・ISO 9001認証取得
- 油圧ポンプの基礎:原理、種類、用途と選定ポイント
- 3Dプリントが油圧部品の設計と性能をどう革新するか
- クレーンモダナイゼーションが主要コンポーネントを変革し、ピーク性能を引き出す仕組み
- 油圧クレーンの仕組みと効率性:包括的解説