ジェスチャー制御ロック
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
* APDS-9960センサーはArduinoNanoまたはMega2560では動作しません(私のテストでは)。
このプロジェクトは簡単に作成して使用できます。このプロジェクトでは、あらゆる種類のサーボまたはラッチ機構を自由に使用できます。これは、ジェスチャベースのロックの開始プラットフォームとなることを目的としています。建物に!
材料
ほとんどの部品をAmazon.comから入手し、APDS-9960センサーをSparkfunから入手しました。これまでのところ、ArduinoUnoまたはMicro3.3vしか使用できません。これは、他のボードが何らかの奇妙な理由で機能しないためです。
組み立て
図のようにLCDを取り付けます。 10kのポテンショメータがない場合は、コントラストからGNDに接続する1kの抵抗を使用してください。 Arduino Unoを使用する場合は、APDS-9960センサーをシフトする必要があるため、SCLとSDAを取り、それらを4.7k抵抗に接続し、4.7k抵抗を3.3vにして、それらを高くします。次に、それらをA4とA5に接続します(回路図を参照)。 Arduinoは、DC電源バレルが接続された9Vバッテリーで動作します。
エンクロージャー
シンプルな段ボール箱を使い、部品の行き先に合わせて穴を開けました。これをすべてperfboardにはんだ付けすることもできますが、私はそれをブレッドボードに残し、ジャンパー線をコンポーネントに接続しました。終わった後はこんな感じでした。
<図>
コード
- Arduinoコード
Arduinoコード C / C ++
/ *ハードウェア接続:重要:APDS-9960は3.3Vしか受け入れられません! ArduinoピンAPDS-9960ボード機能3.3VVCC電源GNDGNDグランドA4SDAI2CデータA5SCLI2Cクロック2INT割り込みリソース:Wire.hおよびSparkFun_APDS-9960.h * /#include#include #include #include #define PINSIZE 6 #define SERVOPIN 9 //パスワードの長さのジェスチャ数// Pins#define APDS9960_INT 2 //割り込みである必要がありますpinLiquidCrystallcd( 12,11,6,5,4,3);サーボサーボ; uint8_tproximity_data =0; int red_led =A1; int green_led =A2; int pageNum =0; // LCD "page" String secret [PINSIZE] ={"UP"、 "DOWN"、 "UP"、 "UP"、 "RIGHT"、 "LEFT"}; //パスワードはここにあります。 CAPSである必要があります。 「UP」、「DOWN」、「LEFT」、または「RIGHT」のいずれかになります。StringcurrentGesture =""; int numRight =0; SparkFun_APDS9960 apds =SparkFun_APDS9960(); // APDS-9960ライブラリを初期化しますintisr_flag =0; void setup(){//割り込みピンを入力として設定pinMode(APDS9960_INT、INPUT); lcd.begin(16,2); servo.attach(SERVOPIN); servo.write( 0); servo.detach(); //シリアルポートを初期化しますSerial.begin(9600); Serial.print( "パスワードは"); Serial.print(PINSIZE); Serial.println( "ジェスチャーが長い。"); Serial.println(); Serial.println(F( "----------------")); Serial.println(F( "APDS-9960 Lock")); Serial.println(F( "----------------")); //割り込みサービスルーチンを初期化しますattachInterrupt(0、interruptRoutine、FALLING); // APDS-9960を初期化します(I2Cと初期値を構成します)if(apds.init()){Serial.println(F( "APDS-9960初期化が完了しました")); } else {Serial.println(F( "APDS-9960の初期化中に問題が発生しました!")); } if(!apds.setProximityGain(PGAIN_1X)){Serial.println(F( "PGAINを設定しようとして問題が発生しました")); } if(apds.enableProximitySensor(false)){Serial.println(F( "近接センサーが実行中です")); } else {Serial.println(F( "センサーの初期化中に問題が発生しました!")); } // APDS-9960ジェスチャセンサーエンジンの実行を開始しますif(apds.enableGestureSensor(true)){Serial.println(F( "ジェスチャセンサーが実行中です")); } else {Serial.println(F( "ジェスチャセンサーの初期化中に問題が発生しました!")); }} void loop(){if(pageNum ==0){if(!apds.readProximity(proximity_data)){Serial.println( "近接値の読み取りエラー"); } else {Serial.println(proximity_data); if((proximity_data> =40)&&(pageNum ==0)){pageNum =1; delay(2000); }}} switch(pageNum){case 0:LCDClear(); lcd.print( "Locked- get"); lcd.setCursor(0,1); lcd.print( "3インチ離れています。"); flashRed(); LCDClear();壊す;ケース1:numRight =0; lcd.print( "コードを入力..."); lcd.setCursor(0,0); for(int x =0; x 0; x-){LCDClear(); lcd.print( "終了:"); lcd.setCursor(0,1); lcd.print(x); lcd.setCursor(1,1); lcd.print( "秒..."); delay(1000);} LCDClear(); lcd.print( "Closing");}
回路図
製造プロセス