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

DIY Arduino USBトラックパッド – 古いノートPCのタッチパッドを現代的なUSB入力デバイスに変換

部品と材料

アプリとオンラインサービス

プロジェクト概要

Raspberry Piで自作ノートPCを作ろうとする際、スタンドアロンのUSBトラックパッドが市販されていないという課題があります。このプロジェクトでは、壊れたノートPCからトラックパッドを取り出し、Arduino Micro (Pro Micro/Leonardoも可) を介してUSBマウス(HID)として動作させます。

なぜこれが動くのか

多くの古いノートPCのトラックパッドは、PS/2インターフェイス (データ線・クロック線) でホストと通信しています。ArduinoでPS/2プロトコルを読み取り、USB HIDマウスレポートに変換して送信します。※新しい機種ではトラックパッド自体がUSB接続の場合があり、その場合はピンアサインを調べて直接USB接続可能です。

配線

トラックパッド基板上の半田パッド (通常 T10=Data, T11=Clock, T20=VCC, 大きな銅箔=GND) を特定し、以下のように接続:

トラックパッド側Arduino Micro ピン
T10 (Data)Pin 10
T11 (Clock)Pin 9
T20 (VCC)5V
GND (銅箔)GND

重要: 半田付け後、パッドに一切力がかからないようホットグルーでしっかり固定してください。わずかな力でパッドが剥離し、トラックパッドが使えなくなります。

必要なライブラリ

  1. Mouse Library – Arduino標準搭載 (ATmega32U4ボード選択時)
  2. PS/2 Library – GitHub等から入手 し、Arduino IDEのライブラリフォルダに配置

スケッチ

ボードマネージャで「Arduino Micro」または「Arduino Leonardo」を選択して書き込んでください (Uno等ではHID動作しません)。

#include <Mouse.h>
#include <ps2.h>

#define PS2_DATA 10
#define PS2_CLK  9

byte mstat1, mstat2, mxy, mx, my, mz;
int msval[3];
int repeatCnt = 0;

PS2 moose(PS2_CLK, PS2_DATA);

void setup() {
  Mouse.begin();
  
  // PS/2マウス初期化シーケンス (リモートモード、分解能設定等)
  moose.write(0xff); moose.read(); moose.read(); moose.read(); // リセット
  moose.write(0xf0); moose.read(); delayMicroseconds(100);     // リモートモード
  moose.write(0xe8); moose.read(); moose.write(0x03); moose.read(); // 分解能設定
  moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
  moose.write(0xe8); moose.read(); moose.write(0x01); moose.read();
  moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
  moose.write(0xf3); moose.read(); moose.write(0x14); moose.read(); // サンプルレート設定
  
  Serial.begin(9600);
}

void ms_read() {
  moose.write(0xeb);        // データ要求
  moose.read();             // ACK
  mstat1 = moose.read();    // ステータス1
  mxy    = moose.read();    // X/Yオーバーフロー等
  mz     = moose.read();    // Z (スクロール)
  mstat2 = moose.read();    // ステータス2
  mx     = moose.read();    // X移動量
  my     = moose.read();    // Y移動量
  
  // 符号付き12bit値に展開
  msval[0] = (((mstat2 & 0x10) << 8) | ((mxy & 0x0F) << 8) | mx);
  msval[1] = (((mstat2 & 0x20) << 7) | ((mxy & 0xF0) << 4) | my);
  msval[2] = int(mz);
}

void loop() {
  ms_read();
  
  // 同じ方向の移動が3回継続したら移動実行 (ノイズ除去)
  if (msval[0] > 0 && msval[2] > 10) {
    repeatCnt++;
  } else {
    repeatCnt = 0;
  }
  
  if (repeatCnt > 2) {
    // 生値をマウス移動量にマッピング (環境に合わせて調整必要)
    msval[0] = map(msval[0], 580, 5164, -1023, 1023);
    msval[1] = map(msval[1], 1120, 5967, 1023, -1023);
    Mouse.move(msval[0] / 200, msval[1] / 200);
  }
}

完成とトラブルシューティング

書き込み後、Arduinoが再起動してUSB HIDマウスとして認識されます。OS問わず即座に動作します。

よくある問題と対処

カスタマイズの可能性

Arduinoを使う利点は、PS/2→USB変換アダプタでは不可能な以下のカスタマイズがコード修正だけで可能な点です:

市販のPS/2→USB変換アダプタもありますが、データ変換が不適切で使い物にならないケースが多いとの報告があります。自作なら完全制御可能です。

製造プロセス

  1. Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
  2. ジェスチャー制御 RGB テーブルランプ – インタラクティブなハンズフリー照明
  3. Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
  4. ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
  5. 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
  6. Arduinoベースのヌンチャク操作6自由度ロボットアームキット
  7. Arduino Nanoで音声制御ロボットを自作
  8. MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
  9. 音声で家電を操作:GoogleアシスタントとBluetoothでArduino家電制御
  10. PiBot:Arduino駆動の精密ピアノ演奏ロボット
  11. Wi-Servo:WebブラウザからWi-Fi経由でサーボモーターを制御