工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器

必要な部品と材料

プロジェクト概要

市販のCNCペンダントは高価(約100ユーロ)でボタンも少ないため、Arduino LeonardoのHID(キーボードエミュレーション)機能を活用し、23個のボタンそれぞれにシングル/ダブル/トリプルクリック、長押し(シングル/ダブル/トリプル)の最大6機能を割り当てた自作ペンダントを製作。ハンドホイールも装備し、Eding CNCソフトウェアをショートカットキーで完全制御します。

仕組み:LeonardoのHID機能とClickButtonライブラリ

Leonardo(32u4チップ)はUSB接続時にPCからキーボード/マウスとして認識されます。ClickButtonライブラリを使うと、1つのボタンで以下の6イベントを検出可能(デバウンス内蔵)。

これにより23ボタン×6機能=138機能を実装可能。実際には主要ボタンで3〜4機能を使い分けています。

コード例:X軸ボタン(ボタン13)の機能割り当て

if (button[13].clicks != 0) {
  switch (button[13].clicks) {
    case 1:   shortcut_HANDWHEEL_X(); break;      // ハンドホイール→X軸
    case 2:   shortcut_ZERO_X(); break;           // X原点セット
    case 3:   break;
    case -1:  // 長押し:ユーザーマクロ18(Xワークゼロ移動)
      press_ESC(); goto_MAIN_MENU(); user_MACRO_18(); break;
    case -2: case -3: break;
  }
}

ケース製作

マホガニー材をVectric Cut2Dで設計し、CNCで加工。表裏二面加工でボタン穴、ハンドホイール穴、配線溝を精密に切削。厚み21mmの材を表裏で削り、総厚36.5mmの堅牢な筐体に。複数回クリア塗装で仕上げ。

自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器 自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器

スイッチとラベル

LED内蔵モーメンタリスイッチを採用。透明キャップの下にレーザープリンター用透明ステッカーでラベル貼付(Eding CNCのアイコンを流用)。スイッチは内部プルアップ使用で配線簡素化:全スイッチの片側をGND、もう片側を各入力ピンへ。

ハンドホイール

標準的な60mm 100PPR 6端子エンコーダーを使用。CNCソフト側でパルス数設定可能。

電子回路

Leonardoの入力ピン(デジタル0〜13、A0〜A5)をフル活用。全ボタンに1kΩ抵抗でLED駆動(5V/2mA)。総消費電流約150mA(LED点灯時)。

自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器 自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器

プログラミング方法

ペンダントをCNC電源に接続したまま、USBでPCにつないでArduino IDEから書き込み。別PCで書き込む場合もペンダントはCNC電源に繋いだままUSBだけ差し替えればOK。

完全スケッチ(主要部)

ClickButtonライブラリとKeyboardライブラリを使用。各ボタンのイベントハンドラでKeyboard.press()/release()によりショートカットキー送信。

#include "ClickButton.h"
#include "Keyboard.h"

const int buttons = 20; // 実際は20ボタン+ダミー
ClickButton button[21] = { /* ピン割り当て配列 */ };

void setup() {
  for (int i=1; i<=buttons; i++) {
    button[i].debounceTime = 20;
    button[i].multiclickTime = 250;
    button[i].longClickTime = 1000;
  }
}

void loop() {
  for (int i=1; i<=buttons; i++) button[i].Update();
  // 各ボタンの clicks 値に応じた switch-case で Keyboard 操作
  // 例:press_RESET(), press_ESC(), shortcut_HANDWHEEL_X() 等
}

// キーボードショートカット関数群
void press_RESET() { Keyboard.begin(); Keyboard.press(KEY_F1); delay(100); Keyboard.releaseAll(); }
void press_ESC()   { Keyboard.begin(); Keyboard.press(KEY_ESC); delay(100); Keyboard.releaseAll(); }
void shortcut_HANDWHEEL_X() { Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('x'); delay(100); Keyboard.releaseAll(); }
// ... 以下、F1-F12、Alt+F1-F12、Ctrl+文字等のヘルパー関数多数

設計ファイル・ライブラリ

回路図

自作CNCペンダント:Arduino LeonardoをHID化し23ボタン×6機能の低コスト制御器

製造プロセス

  1. ボタン:古代の留め具から現代イノベーションへ
  2. Arduino MegaでPWM制御:プッシュボタン付きLEDフェード制御チュートリアル
  3. Bluetooth操作のArduinoスパイボットを自作する
  4. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  5. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  6. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  7. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  8. Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
  9. Arduinoプロジェクトのための最適化電源ソリューション
  10. CNCオペレータパネルのリセットボタン理解:機能と使用法
  11. Osai USAのOPENwiTP:効率的なCNC制御のためのワイヤレスティーチペンダント