何となぜ?
最近、Mikhail Sannikovの記事「 エンコーダーをコンピューターに接続する 」を読みました。 そして、先日彼らが私にArduinoボードを送ったので、このシンプルなデザインを繰り返すか、似たようなことをしたかったのです。
まず、エンコーダーとは何か、なぜエンコーダーが必要なのかについて少し説明します。 エンコーダーは、出力信号がグレイコードである角度からコードへのコンバーターです。 回転する巨大なワッシャーのように見えるエンコーダーに組み込まれた入力デバイスがあります。たとえば、3Dエディターでモデルを回転させることができます。
( ここから写真)
しかし、私はエンコーダーを持っていなかったので、店に行きたくなかったので、代わりに異なるゴミの入った箱の中にある古い150KΩの可変抵抗器を適応させることにしました。
そのため、次のことを行う必要がありました。
- Arduinoに可変抵抗器を接続します。
- アナログポートからバイトを読み取り、コンピューターに転送するコントローラーのプログラムを作成します。
- 可変抵抗シャフトの回転方向に応じて特定のキーを押すことをエミュレートするコンピューター用のプログラムを作成します。
ハード&ソフト
ArduinoのWebサイトのプログラミングガイドで、最初と2番目の問題を完全に解決するAnalog In、Out Serialの例が見つかりました。
抵抗は次のように接続されます。
ただし、コードを少し変更する必要がありました。Serial.printからすべての行を削除し、1つのSerial.write(outputValue)に置き換えます。
const int analogInPin = A0; // A0
int sensorValue = 0; // ,
void setup() {
Serial.begin(9600); // COM-
}
// A0 COM-
void loop() {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 255);
Serial.write(outputValue);
delay(10);
}
コンピューターの制御プログラムは、Visual Studio 2010 ExpressのC#で作成されました。
プログラムのメインウィンドウ:
設定ダイアログボックス:
注:「ボタン」ボタンのクリックはまだ処理されていません。
ここでは、「Misc」グループのパラメーターをさらに詳しく検討する価値があります。 最初はキーストロークをエミュレートするために必要であり、残りはチャタリングを排除するために必要です。
遅延 -キーを押してから離すまでのミリ秒単位の遅延。
バッファー -COMポートから順次読み取られる値の数。
ジッタ -最後のサンプルの値からの許容偏差を示します。
びびり抑制と可変抵抗シャフトの回転方向の決定は、次のように機能します。
- 特定のバイト数(Bufferパラメーター)がシリアルポートからバッファーに読み込まれます。
- バッファの最後のバイトが最初のバイトとジッタ値の合計よりも大きい場合、これはシャフトが右に回転することを意味します。
- バッファの最後のバイトが最初のバイトとジッタ値の差より小さい場合、これはシャフトが左に回転することを意味します。
この方法の欠点:
-シャフトの回転開始からプログラムの反応までの遅延。
-回転角度に関係なく、キーが1回押されます。 つまり、抵抗シャフトをすばやく回転させることができ(バッファーの最初のバイトは、たとえば10、最後のバイトは-30)、プログラムはワンクリックで動作します。
アルゴリズムコード:
int[] buffer = new int[(int)conf.buffer]; // Buffer
int bufferTop = (int)conf.buffer - 1;
for (int i = 0; i < conf.buffer; i++)
{
buffer[i] = sp.ReadByte();
}
if (buffer[bufferTop] > (buffer[0] + conf.jitter))
{
// “”
}
else if (buffer[bufferTop] < (buffer[0] - conf.jitter))
{
// “”
}
Visual Studioのプロジェクト、Arduinoのスケッチ、図は、こちらからダウンロードできます: http : //sourceforge.net/projects/keyemu/files/KeyEmu-0.1b-source.zip/download
アーカイブには、コンパイルされたプログラムを含むbinディレクトリが含まれています。 実行するには、インストール済みの.NET Framework 4が必要です。
今のところすべてです。 好奇心の強い人は、プログラムを完成させることができます。特定の時間にアクティブになるアプリケーションに応じて、1つではなく一連のキーストロークを実装するか、異なるキーを「押し」ます。