Arduino Nanoとジャイロセンサーで実現する精密ドリル深度表示システム
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| ジャイロセンサー GY-521 (MPU-6050) | 1 | I2C接続 |
| 7セグメントディスプレイ 8桁 (MAX7219搭載、SPI) | 1 | |
| タクトスイッチ | 1 | 深度記憶ボタン |
| 電源スイッチ | 1 | |
| 電源:単3/単4電池ボックスまたはモバイルバッテリー | 1式 | 単3×6本推奨 |
| 3Dプリントケース | 1 | STLファイル同梱 |
| ネオジム磁石 | 1 | 本体固定用 |
必要な工具
- 3Dプリンター(ケース製作用、Anycubic i3 Mega等)
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
ベンチドリルの深度調整は、本体側面のハンドル(約270°回転)と目盛りで行うのが一般的ですが、加齢や照明不足でミリ単位の読み取りが困難になります。本プロジェクトでは、ハンドル軸にジャイロセンサー(加速度計)を取り付け、回転角度からドリル深度を演算、大型7セグメントLEDに表示する装置を自作しました。
測定方式の検討
- 超音波距離計:反射板機構が必要で複雑
- ワイヤーエンコーダー:バネ返し・フォトインタラプタ等で自作は大変
- ロータリーエンコーダー:分解能不足、ギア増速が必要
- 加速度計(ジャイロセンサー):ハンドル軸(六角ナット SW17)に直接取付可能、ケーブルが絡まない、安価、小型 → 採用
コンセプト
- ドリル先端で表面に傷をつけ(ゼロ点)
- ボタンを押して現在位置を「ストップ位置(目標深度)」として記憶
- ドリル送りながら現在深度を表示、ストップ位置到達で「StOP」警告表示


センサー取り付けブラケット
ドリルのハンドル軸はSW17(17mm二面幅)の六角ナット。3Dプリントでセンサーホルダー兼六角ソケットを作成、軸にはめ込むだけで固定。

配線
GY-521 (MPU-6050) - I2C接続
- VCC → 5V
- GND → GND
- SCL → A5
- SDA → A4
- XDA, XCL, ADO, INT → 未接続
7セグメントモジュール (MAX7219) - SPI接続
- VCC → 3.3V
- GND → GND
- DIN → D12
- CS → D10
- CLK → D11
ボタン
- 入力ピン → D9 (INPUT_PULLUP)
電源
単3電池6本直列(9V)を電源スイッチ経由で全系に供給。
ケース設計
Autodesk Fusion 360で設計、Anycubic i3 Megaで造形。ネオジム磁石を埋め込み、ドリル本体(金属筐体)にワンタッチ脱着可能。邪魔な時は即座に取り外せます。
Arduinoスケッチのポイント
ライブラリ
LedControl.h:MAX7219制御(ライブラリマネージャからインストール)Wire.h:I2C通信(MPU-6050は専用ライブラリ不使用、レジスタ直接アクセス)
MPU-6050初期化の重要ポイント
// MPU-6050起動
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x6B); Wire.write(0x00); // スリープ解除
Wire.endTransmission(true);
// ★この待機が最重要!USB接続時は不要だが、外部電源起動時はこれがないとセンサーが応答しない
delay(1000);
// 加速度計レンジ設定 ±8g
Wire.beginTransmission(0x68);
Wire.write(0x1C); // ACCEL_CONFIG
Wire.write(0x10); // 00010000 = ±8g
Wire.endTransmission(true);
外部電源起動時、センサーがデータを返さない問題 に数日悩まされました。delay(1000) 追加で解決。この1行がプロジェクト最大の山場でした。
オフセット補正
セットアップ時に100回サンプリングし、静止時の誤差平均をオフセットとして保存。
角度算出と360°化
加速度センサーのX軸角度:
AccAngleX = atan(AccY / sqrt(AccX^2 + AccZ^2)) * RAD_TO_DEG;
// 平滑化(相補フィルタ的)
TotalAngleX = 0.5 * TotalAngleX + 0.5 * AccAngleX;
センサー出力は -90°〜+90° なので、Z軸・Y軸の符号から象限を判定し 0°〜360° に変換:
delta = 0;
if (AccZ < 0) delta = 180.0 - TotalAngleX * 2.0;
if (AccZ > 0 && AccY < 0) delta = 360.0;
DrillingMachineAngle = TotalAngleX + delta;
if (DrillingMachineAngle > 350) DrillingMachineAngle = 0; // 0°付近の揺らぎ対策
深度換算
実測:ハンドル最大回転角 316° = 最大深度 50mm
currentPos = 50.0 / 316.0 * DrillingMachineAngle; // mm
表示ロジック
- 左4桁:現在深度(小数点第1位、dtostrfで文字列化し桁ごと表示)
- 右4桁:ストップ位置未設定なら空白、設定済みなら残り深度、到達なら「StOP」(小文字tは
setRow(0,2,B00001111)で自作) - ボタン押下で現在位置をストップ位置に記憶、一瞬「8888」表示
組み立てとテスト






初回テスト時、センサー水平取り付け後、ホルダー回転機構で表示が「0.0」になるよう微調整。実使用では反応速度・精度ともに満足のいく結果。大型LEDで老眼鏡なしでも読み取り可能。
Paul Akers氏の「2 Second Lean」の言葉通り:「不便を感じたら、考えて作れ」。楽しい工作になりました!
参考リンク
- MPU-6050入門 (Medium)
- Arduino Playground - MPU-6050
- CircuitDigest - MPU6050インターフェース
- Rob Tillaart氏のGY-521ライブラリ
- Paul Akers著「2 Second Lean」
- ドイツ語版記事:techpluscode.de
コードとCADデータ
- スケッチ:
drilling-depth.ino(全文同梱) - 3Dモデル:
drilling-depth-3d-model_Yn2q0MSNa4.zip - 回路図:

製造プロセス
- センサーデータをRaspberry Piに統合:実践ガイド
- Raspberry Piでライントラッキングセンサー – シンプルなKY-033ドア/ライン検出器
- GY-91モジュールでRaspberry Pi上に堅牢な温度・センサーAPIを構築
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Raspberry Pi GPIOマスター:PIRモーションセンサーをB+/Model 2でインターフェース
- Acconeer A111パルスレーダーをRaspberry Piと統合:実践ガイド
- HC-SR501 PIRモーションセンサーをRaspberry Piで接続・調整・プログラミングする方法
- Python/MicroPythonセンサーロガー:センサーデータをGoogleスプレッドシートにシームレス保存
- Arduino Portenta H7にMAX6675でサーモカップル温度センサーを接続する
- アナログセンサー搭載・高精度圧力&気流測定デバイス
- K30 CO2センサで室内空気質をリアルタイム監視する