
Arduinoボードは、実際に電子機器の秘密を明らかにするのに役立ちます。 Massimo BanziとDavid Quartillierによって作成されたArduinoシステムは、遠隔制御ロボット、GPSベースの実績システム、電子ゲームなどのインタラクティブなプロジェクトとオブジェクトを低コストで作成する方法を提供します。
この本は65のプロジェクトをレビューします。 猫の下での1つのプロジェクトの例。
第10章タッチスクリーン
この章では:
•抵抗膜方式のタッチスクリーンをArduinoボードに接続する方法を学ぶ。
•タッチスクリーンが返す可能性のある値の読み方を学ぶ。
•タッチによってトリガーされる単純なスイッチを設計します。
•調光機能を備えたスイッチを設計します。
タッチスクリーンは、スマートフォン、タブレットコンピューター、ハンドヘルドゲームデバイスなど、あらゆる側面から私たちを取り囲んでいます。 では、なぜタッチスクリーンを使用してユーザーと対話しないのでしょうか。
タッチスクリーン
タッチスクリーンは非常に高価な場合がありますが、Nintendo DSゲームコンソール用に開発されたSparkFun製の安価なモデル(部品番号LCD-08977およびBOB-09170)を使用します。
このタッチスクリーンの大きさは5 x 7 cmで、図に示されています。 10.1、ブレッドボードに取り付けられています。
タッチスクリーンは、右上隅の小さなプリント回路基板(図10.1の丸で囲んだ部分)にループで接続されていることに注意してください。 このアダプターは、タッチスクリーンをブレッドボードとArduinoに接続するために使用されます。 図 10.2は、アダプターの大きなイメージを示しています。
タッチスクリーン接続
タッチスクリーンアダプタは、表に示すようにArduinoボードに接続します。 10.1。 表10.1 タッチスクリーンアダプターをArduinoボードに接続する
プロジェクトNo. 34:タッチスクリーン上のタッチ領域の決定
抵抗膜方式タッチスクリーンは、ガラスパネルと柔軟なプラスチック膜で構成され、その間に抵抗コーティングの2つの層があります。 1つの抵抗コーティングはX軸として機能し、もう1つはY軸として機能します。抵抗コーティングの抵抗は、接触点によって異なります。つまり、各層の電圧を測定することにより、接触領域のX座標とY座標を決定できます。
このプロジェクトでは、Arduinoボードを使用して、各レイヤーの電圧を決定し、タッチポイントの整数座標に変換します。
装備品
以下は、このプロジェクトに必要な機器です。
•アダプター付きのタッチスクリーン。
•定格が10 kOhmの1つのトリマー抵抗器。
•画面サイズが16 x 2文字の1つのLCD。
•長さが異なる複数のワイヤ。
•ブレッドボード1つ。
•ArduinoボードとUSBケーブル
表に従ってタッチスクリーンを接続します。 10.1および液晶インジケータ、図に示すように 7.2。
スケッチ
次のスケッチを入力してダウンロードします。 スケッチの最も重要なセクションにはコメントが付いています:
プロジェクト34-タッチスクリーン上のタッチ領域の決定
#include <LiquidCrystal.h> LiquidCrystal lcd(4,5,6,7,8,9); int x,y = 0; void setup() { lcd.begin(16,2); lcd.clear(); } int readX() // X { int xr=0; pinMode(A0, INPUT); pinMode(A1, OUTPUT); pinMode(A2, INPUT); pinMode(A3, OUTPUT); digitalWrite(A1, LOW); // A1 digitalWrite(A3, HIGH); // A3 delay(5); xr=analogRead(0); // X return xr; } int readY() // Y { int yr=0; pinMode(A0, OUTPUT); // A0 pinMode(A1, INPUT); // A1 pinMode(A2, OUTPUT); // A2 pinMode(A3, INPUT); // A3 digitalWrite(14, LOW); // A0 digitalWrite(16, HIGH); // A2 delay(5); yr=analogRead(1); // Y return yr; } void loop() { lcd.setCursor(0,0); lcd.print(" x = "); x=readX(); lcd.print(x); y=readY(); lcd.setCursor(0,1); lcd.print(" y = "); lcd.print(y); delay (200); }
readX()およびreadY()(および)関数は、analogRead()を使用してタッチスクリーンの抵抗コーティングの電圧を読み取り、結果の値を返します。 Sketchは、これら2つの関数を常に呼び出して、タッチスクリーンのタッチ領域の座標をリアルタイムで決定し、LCDスクリーンに表示します(および)。 (各関数の遅延(5)遅延が必要であり、アナログ入力/出力に状態を変更する時間を与えます。)
スケッチテスト
スケッチテスト中に、タッチスクリーンに触れてLCDスクリーンの測定値の変化を観察し、タッチポイントの位置に応じてX値とY値がどのように変化するかを確認します。 また、画面に触れないときにLCD画面に表示される値にも注意してください(図10.3)。
これらの値を覚えておいてください-スケッチで画面に触れていないという事実を判断する場合に役立ちます。
タッチスクリーンキャリブレーション
図に示すように、隅にあるタッチスクリーンに触れます。 10.4、および受信した値を書き留めて、実際に調整します。 最も単純なケースでは、画面の角の座標で十分です。 これらの値を使用すると、タッチスクリーンを小さな領域に分割して、制御に使用できます。
タッチスクリーンを調整して小さな領域に分割することにより、readX()およびreadY()関数を使用して、画面上のさまざまな制御領域に触れた事実を判断し、if-then命令を使用して特定の操作を実行できます(プロジェクト35を参照)。
プロジェクト番号35:デュアルゾーンスイッチ
このプロジェクトでは、タッチスクリーンに基づいた簡単なスイッチを作成します。 まず、図に示すように、画面を水平に2つのゾーンに分割します。 10.5:左側が「オン」ゾーンで、右側が「オフ」ゾーンです。
タッチポイントの座標をゾーンの境界と比較すると、Arduinoボードはタッチが発生したゾーンを決定します。 ゾーンを決定したら、デジタル出力で高電圧レベルまたは低電圧レベルを設定できますが、このスケッチではポートモニターにゾーンの名前を表示するだけです。
スケッチ
次のスケッチを入力してダウンロードします。
//プロジェクト35-デュアルゾーンスイッチ
int x,y = 0; void setup() { Serial.begin(9600); pinMode(10, OUTPUT); } void switchOn() { digitalWrite(10, HIGH); Serial.print("Turned ON at X = "); Serial.print(x); Serial.print(" Y = "); Serial.println(y); delay(200); } void switchOff() { digitalWrite(10, LOW); Serial.print("Turned OFF at X = "); Serial.print(x); Serial.print(" Y = "); Serial.println(y); delay(200); } int readX() // X { int xr=0; pinMode(A0, INPUT); pinMode(A1, OUTPUT); pinMode(A2, INPUT); pinMode(A3, OUTPUT); digitalWrite(A1, LOW); // A1 digitalWrite(A3, HIGH); // A3 delay(5); xr=analogRead(0); return xr; } int readY() // Y { int yr=0; pinMode(A0, OUTPUT); pinMode(A1, INPUT); pinMode(A2, OUTPUT); pinMode(A3, INPUT); digitalWrite(A0, LOW); // A0 digitalWrite(A2, HIGH); // A2 delay(5); yr=analogRead(1); return yr; } void loop() { x=readX(); y=readY(); // ""? if (x<=900 && x>=500) { switchOn(); } // ""? if (x<500 && x>=100) { switchOff(); } }
動作原理
voidループ()関数内の2つのifステートメントは、タッチが発生したゾーンを決定します。 タッチポイントが左ゾーンにある場合、タッチは「有効化」コマンドとして解釈されます。 タッチポイントが正しいゾーンにある場合、タッチは「オフ」コマンドとして解釈されます。
ご注意
このプロジェクトのY座標は無視されます。これは、従来、タッチスクリーンが垂直の境界線によって2つの水平ゾーンに分割されているためです。 水平方向の境界も決定した場合、プロジェクト36でわかるように、Y座標を確認する必要があります。
»本の詳細については、出版社のウェブサイトをご覧ください
» コンテンツ
» 抜粋
ホーカー向けクーポン25%割引-Arduino