FlickMote
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
はじめに
現在、赤外線リモコンを介して家電製品や電子機器を制御することが一般的になっています。ただし、同じ制御タスクをより簡単に実行できます。ハンドジェスチャリモコンの新しいシステムを目的とする主な動機は、ハンドヘルドリモコンを調べる必要をなくし、主に古いものの特定の機能のために特定のキーを検索することです。このプロジェクトは、リモートコントロールデバイスとして手のジェスチャーを介して家電製品を制御するための新しいシステムを提示します。このレポートでは、このプロジェクトをflickremoteと呼びます。超音波距離計を使用してユーザーのジェスチャーを判別し、IR信号を出力します。マイクロコントローラー開発者ボードArduino 101
ハードウェアコンポーネント
1. Arduino101またはuno
2.HC-SR04超音波モジュール
3.赤外線LED
4.赤外線LED(220R)に適した抵抗
5. RGB LED
6.ブレッドボードとワイヤー
仕組み:
このプロジェクトでは、超音波距離計を使用してユーザーのジェスチャーを判別し、指定されたコマンドでIR信号をテレビに出力します。距離またはインチは、都合に合わせてコードで編集できます
-高スワイプ(> 10インチ)=チャンネルアップ
-低スワイプ=チャンネルダウン
-ハイホールド(> 10インチ)=ボリュームアップ
-低ホールド=音量ダウン
-カバーセンサー(<3in)=オン/オフ
フリッツを使用した回路図:
構造:
1.適切な抵抗を介してIRLEDをピン3に接続し、次にカソードをGNDに接続します。
2.ピンが指定する5vとGNDに超音波センサーを接続します。トリガーピンをピン8に接続し、エコーピンを7に接続します。これらのピンはプログラムで構成できます
3. RGB LEDをGNDとピン11(赤)、10(緑)、9(青)に接続します。これらのピンも構成可能です。
コントロール
パワー
センサーを3インチ以内でスワイプすると、LEDが紫色に点滅します。これは、「オン/オフ」信号を送信する準備ができていることの確認です。誤ってテレビの電源を切るのを防ぐために、最初のスワイプから5秒以内に2回目のスワイプを待って、確認しました。この時点で、信号がテレビに送信され、オンまたはオフになります。
チャネル
センサーから10インチ以内(3インチ以内ではない)でスワイプすると、チャネルが下に変化します。 10〜20インチの間でスワイプすると、チャネルが変化します。
ボリューム
センサーから10インチ以内(3インチ以内ではない)に手をかざすと、音量が下がります。 10〜20インチの間に保持すると、音量が変化します。手を離すまで音量は(上または下に)変化し続けます
利点と改善:
ハンドヘルドリモコンを調べて、特定の機能のために特定のキーを検索する必要がなくなります
ブラインドや身体障害者のガジェット(TV)を制御するためのソリューション
同じ方法ですべての家電製品を制御する機能を追加することで、プロジェクトを改善できます
ありがとう
コード
- コード
コード C / C ++
/ *スワイプリモコンこのスケッチでは、超音波距離計を使用してユーザーのジェスチャーを判断し、指定されたコマンドに基づいてIR信号をソニーのテレビに出力します。-高スワイプ(> 10インチ)=チャンネル上-低スワイプ=チャンネル下-ハイホールド(> 10in)=ボリュームアップ-ローホールド=ボリュームダウン-カバーセンサー(<3in)=オン/オフVignesh Jaishankarによって作成このコードはIRremoteライブラリ(https://github.com/shirriff/Arduino-IRremote)を使用します* /#include//制御機能を定義します#defineCONTROL_CH 1 //チャネル変更#defineCONTROL_VOL 2 // Volume#define CONTROL_POW 3 // Power#define CONTROL_UP 1#define CONTROL_DOWN -1#define DIST_MAX 20 //インチ単位の最大距離、上記のものはすべて無視されます。#define DIST_DOWN 10 //アップ/ダウンコマンドのしきい値。高い場合、コマンドは「上」です。低い場合は、「ダウン」します。#define DIST_POW 3 //電源コマンドのしきい値、以下=電源オン/オフ// IR PINconst int irPin =3; //これはライブラリで定義されています。この変数は単なるリマインダーです。これを変更してもライブラリのピンは変更されません// 2ピンPingSensorconst int pingPin =8; const int echoPin =7; //確認LEDPinsconst int led =13; //アップ/ダウンデバッグ用の内部LEDconstint ledR =11; const int ledG =10; const int ledB =9; // timerunsigned longtimerのLED; // IR送信機objectIRsendirsend; //電源確認フラグ(2回のスワイプが必要)信号を送信するには)boolean powerConfirmed =false; void setup(){//シリアル通信を初期化し、ピンを設定しますSerial.begin(9600); pinMode(led、OUTPUT); pinMode(ledR、OUTPUT); pinMode(ledG、OUTPUT); pinMode(ledB、OUTPUT); pinMode(pingPin、OUTPUT); pinMode(echoPin、INPUT); timer =millis();} void loop(){// Serial.println(millis());長い持続時間、インチ; int値; //読み取り期間を確認します=doPing(); //アクションを確認するタイマー(現在は電源のみ)if(timer &&timer <(millis()-5000)&&(millis()> 5000)){Serial.println( "timer reset");タイマー=false; } digitalWrite(led、LOW); setColor(0、0、0); //オフ//時間を距離に変換インチ=microsecondsToInches(duration); //最大インチ未満の距離の場合は、次のように動作しますif(inches DIST_MAX){doIR(CONTROL_CH、value); //スワイプ} else {//ボリュームintd =500; //最初の遅延は単一ボリュームの変更の方が長くなります//手が削除されるまで繰り返しますwhile(inches DIST_DOWN){digitalWrite(led、高い); CONTROL_UPを返します。 } else {digitalWrite(led、LOW); CONTROL_DOWNを返します。 }} / **正しいIRコードを起動します* / voiddoIR(int control、int val){switch(control){case CONTROL_POW:// power Serial.println( "power on / off 0xa90"); for(int i =0; i <3; i ++){setColor(255、0、0); irsend.sendSony(0xa90、12); // Sony TVの電源コードdelay(40); } 壊す;ケースCONTROL_CH:setColor(0、255、0); // valに応じて 'channel up / down'を出力しますif(val ==CONTROL_UP){digitalWrite(led、HIGH); for(int i =0; i <3; i ++){irsend.sendSony(0x90、12); delay(40); } Serial.println( "channel up 0xD00A"); } else //ダウン{for(int i =0; i <3; i ++){irsend.sendSony(0x890、12); delay(40); } Serial.println( "channel down 0x3002"); } 壊す;ケースCONTROL_VOL:setColor(0、0、255); // valに応じて「ボリュームアップ/ダウン」を出力if(val ==CONTROL_UP){digitalWrite(led、HIGH); for(int i =0; i <3; i ++){irsend.sendSony(0x490、12); delay(40); } Serial.println( "volume up 0x490"); } else // down {for(int i =0; i <3; i ++){irsend.sendSony(0xC90、12); delay(40); } Serial.println( "volume down 0xC90"); } 壊す; }} void setColor(int red、int green、int blue){analogWrite(ledR、red); analogWrite(ledG、緑); analogWrite(ledB、blue);} long doPing(){digitalWrite(pingPin、LOW); delayMicroseconds(2); digitalWrite(pingPin、HIGH); delayMicroseconds(5); digitalWrite(pingPin、LOW); return pulseIn(echoPin、HIGH);} long microsecondsToInches(long microseconds){return microseconds / 74/2;} long microsecondsToCentimeters(long microseconds){return microseconds / 29/2;}
回路図
flickmote_9Gx3XNFHEp.fzz 製造プロセス