ArduinoとAndroidベースのパスワードで保護されたドアロック
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
はじめに
このスマートロックは、安全でシンプル、そして簡単に家のロックを管理できます。このロックはキーを必要とせず、ロックはドアの内側に取り付けられており、Bluetoothを使用してドアの外側から制御できます。ロックはドアの内側にあるので、泥棒がドアを壊す方法はありません。ロックを開閉するにはAndroidアプリケーションが必要です。チュートリアルの後半で、Androidアプリを開発する方法の詳細を説明します。パスワードはAndroidアプリを使用してロックに送信され、パスワードがプリセットロックパスワードと一致すると、ロックが開かれ、ロックが開いているようにスマートフォンにフィードバックが送信されます。
ドアロック3Dデザイン <図> <図>
ロックのすべての部分は3Dプリントされています。 Thingiverseユーザーのriderczの素敵なデザインに感謝します。彼はこのサーボベースのドアロックをthingiverse.comで設計および公開しました。 Rack_Holder.stlを除くすべてのファイルは、彼のデザインから取得されています。以下またはThingiverse.comからファイルをダウンロードできます。
一部のファイルにはLTバージョンがあります。ライトバージョンは、通常バージョンと比較して必要なPLAが少なく、強度も低くなっています。 LTバージョンを印刷して正常に動作しました。すべてのパーツの印刷にはAnetA8を使用しました。印刷物の写真を添付します。
3Dプリントパーツの組み立て <図> <図> <図> <図>
写真のように、すべての印刷部品を1つずつ組み立てます。また、最初のステップで添付されているビデオの説明に従うこともできます。組み立て後、4本のネジを使用してすべての部品をしっかりと固定します。
Bluetooth制御パスワードで保護されたドアロック用のArduinoプログラム <図>
Bluetooth制御のスマートドアロックのコードは非常に単純です。パスワード付きのコマンドを送信するようにAndroidアプリケーションを設計しました。実際、私は2つのコマンドを設定しました。1つは「OPEN =」、もう1つは「CLOSE =」で、パスワードには任意の数字、後の数字、記号、またはそれらの組み合わせを自由に含めることができます。アプリでは、ドアを開くためのボタンとドアを閉じるためのボタンの2つのボタンを使用しました。パスワードボックスにパスワードが与えられ、アプリよりも開くボタンがクリックされると、「OPEN =」コマンドとパスワードが結合され、arduinoに送信されます。コマンドに「=」記号を追加します。この「=」を使用して、コマンドとパスワードを分離します。電話から文字列を受信した後、arduinoプログラムはコマンドとパスワードを受信文字列から分離し、2つの別々の変数に保存します。次に、最初にパスワードを確認し、パスワードが保存されたパスワードと一致する場合は、「OPEN」コマンドのドアを開き、「CLOSE」コマンドのドアを閉じます。 "="は、コマンドとパスワードを区別するのに役立ちます。完全なarduinoスケッチを以下に示します。
回路図 <図>
コンポーネント間の接続は非常に簡単です。まず、BluetoothモジュールHC-05をArduinoに接続します。回路図に注意してください。 ArduinoボードのTXピンはBluetoothモジュールのRXピンに接続され、ArduinoのRXピンはBluetoothモジュールのTXピンに接続されます。
ドアにロックを設定する <図> <図> <図>
前の手順で添付したスケッチを使用してArduinoボードをプログラムし、回路図に従ってすべての接続をテストしたことを願っています。すべての手順を完了したら、ドアの適切な場所にロックを配置する時期が来ています。まず、4本のネジでロックを配置します。次に、Bluetoothモジュールをロックの適切な場所に固定し、ホットグルーを追加してモジュールをロックでしっかりと調整します。その後、Arduinoボードをロックの下側に配置し、回路図に従ってすべてのワイヤを接続します。ロックを配置して接続した後、ロックの電源を入れる必要があります。回路に電力を供給するために、5V、1AのACアダプタを使用しました。
パスワードで保護されたドアロック用のAndroidアプリ開発 <図> <図> <図> <図> <図> <図> <図> <図>
MIT AppInventorを使用してBluetoothandroidアプリケーションを開発する方法を紹介します。コーディングやソフトウェアのインストールが不要なため、AppInventorを使用しています。必要なのはGoogleアカウントだけです。 http://ai2.appinventor.mit.edu/にアクセスすると、Googleアカウントを使用してログインするように求められます。
Gmailを使用してAppInventorにログインし、以下の手順に従います。
- i。利用規約に同意する画像1
- ii。 [後で調査を行う]をクリックしてから[続行]をクリックして、スプラッシュ画面の画像2、3を閉じます。
- iii。新しいプロジェクトを開始します(スペースなし!)画像4
- iv。プロジェクトに「BluetoothControlDoorLock」(スペースなし!)という名前を付けます。画像5
これで、アプリの「ユーザーインターフェイス」をレイアウトするDesignerが表示されます(画像6)。 Designerウィンドウは、アプリのルックアンドフィールをレイアウトし、アプリに必要な機能を指定する場所です。ボタン、画像、ラベル、テキストボックスなどのユーザーインターフェイスや、音声合成、Bluetooth、センサー、GPSなどの機能を選択します。
次に、図7に従って、ビューアーにリストピッカーを追加します。名前を「Bluetoothデバイスに接続」に変更します(画像8)。図10に示すように、1つのラベル、1つのパスワードテキストボックス、および2つのボタンを追加します。コンポーネントのテキストプロパティを、それぞれ「パスワードの入力」、「ドアを開く」、「ドアを閉じる」に変更します。最終的なユーザーインターフェイスは図11のようになります。次に、Bluetoothクライアントをビューアに追加します。これは非表示のコンポーネントであり、UIはありません。画像12を参照してください。
ブロックエディタに切り替えます
アプリに何をすべきかを伝える時が来ました! 「ブロック」をクリックして、ブロックエディタに移動します(画像13)。 [デザイナー]ボタンと[ブロック]ボタンをタブのように考えてください。これらを使用して、AppInventorの2つの領域間を行き来します。ブロックエディタは、アプリの動作をプログラムする場所です。数学、論理、テキストなどを処理する組み込みブロックがあります。その下には、アプリの各コンポーネントに対応するブロックがあります。特定のコンポーネントのブロックをブロックエディターに表示するには、まずデザイナーを使用してそのコンポーネントをアプリに追加する必要があります。
リストピッカーのブロックをデザインしましょう。リストピッカーは、クリックするとUI要素であり、対応する要素のリストが表示されます。ここでは、ペアリングされたBluetoothデバイスです。 ListPicker.BeforePickingとListPicker.AfterPickingの2つのブロックを追加する必要があります(画像14)。完全なブロックを図18と19に示します。
apkファイルを作成
デザインが完成しました。Androidフォン用のapkファイルを作成する必要があります。クリックしてメニューを作成し、[アプリ(.apkをコンピューターに保存)]を選択します。ちょっと待ってくれ。 apkファイルがデフォルトのダウンロードフォルダにダウンロードされます。インストールして使用します。
より多くの機能を備えた豊富なAndroidアプリ <図>
前のステップでは、AppInventorで基本的なBluetoothアプリを開発する方法を説明しました。しかし、そのアプリはそれほどユーザーフレンドリーではありません。ドアが開いているか閉じているか、Bluetoothがエラーのために接続できないかのいずれかのメッセージは表示されません。私はここに私たちのプロジェクトのためのより高度なアプリを添付しました。
このアプリを実行するときは、Bluetoothラジオが有効になっているかどうかを確認してください。有効になっていない場合は、Bluetooth有効化ダイアログが表示されます。 [はい]をクリックして、Bluetooth無線をオンにします。次に、デバイスのペアリングボタンを使用してデバイスをペアリングします。次に、[接続]ボタンをクリックします。いずれかのデバイスに正常に接続されると、アプリケーションは接続されたデバイスのMACアドレスと名前を表示します。パスワードボックスにパスワードを入力し、ドアを開くボタンをクリックします。正しいパスワードを入力すると、ドアが開き、アプリケーションにドアが開いているというメッセージが表示されます。次に、ドアを閉めたい場合は、パスワードをもう一度入力します。間違ったパスワードを入力すると、アプリは間違ったパスワードメッセージを表示します。
完全なAppInventorソースファイル(BTcontrol.aia)がここに添付されています。独自のアプリを作成したり変更したりしたくない場合は、BTcontrol.apkをダウンロードして、AndroidPoneにインストールしてください。
次のリンクを使用して、GooglePlayストアからダウンロードすることもできます。
https://play.google.com/store/apps/details?id=appinventor.ai_khairul_uapstu.BTcontrol&hl=en
ソースを変更するには、[プロジェクト]メニューをクリックし、図24に示す[コンピューターからプロジェクト(.aia)をインポートする]を選択して、コンピューターからBTcontrol.aiaファイルを参照します。インポート後、簡単に変更できます。
App Inventorを使用したAndroidアプリの開発について詳しく知りたい場合は、http://appinventor.mit.edu/explore/ai2/tutorials.htmlを参照してください。 http://meta-guide.com/videography/100-best-appinventor-videos/
を試すこともできます コード
- Arduinoスケッチ
Arduino Sketch Arduino
#includeServo myservo; //サーボオブジェクトを作成してservoStringを制御しますinputString =""; String command =""; String value =""; String password ="arduPi"; //これはドアを開閉するためのパスワードです//数字と記号を使用して好きなパスワードを設定できますbooleanstringComplete =false; void setup(){//シリアル接続を開始Serial.begin(9600); //ボーレートは9600で、Bluetoothと一致する必要があります//文字列reserve()関数を使用すると、文字列を操作するためのバッファをメモリに割り当てることができます。 inputString.reserve(50); //文字列操作のために保存するためにメモリに50バイトを予約しますcommand.reserve(50); value.reserve(50); boolean stringOK =false; myservo.attach(9); //ピン9のサーボをサーボオブジェクトに接続します} void loop(){// arduinoが\ nのような文字列終了文字を受信した場合stringCompleteはtrueに設定されますif(stringComplete){// Serial.println(inputString); delay(100); //文字列内の '='の位置を識別し、そのインデックスをpos変数に設定しますint pos =inputString.indexOf( '='); // pos変数の値>または=0は、受信した文字列に「=」が存在することを意味します。 if(pos> -1){// substring(start、stop)関数は文字列の特定の部分を開始から停止までカットします//ここでコマンドは '='まで受信した文字列の部分になります//受信した文字列をopen =にしますtest123 //コマンドは 'open'ですcommand =inputString.substring(0、pos); //値はafter =からnewlineコマンドになります//上記の例の値はtest123です//サブストリングの最初のパラメーターを 'pos +1'として取る '='を無視します// '='をaとして使用しますコマンドと値の間の区切り文字// '='なしで他の文字を使用できます//使用しています=menasコマンドまたはパスワードに '='を含めることはできません。含まない場合、エラー値=inputString.substring(pos + 1 、inputString.length()-1); //コマンドを\ nまで抽出します//Serial.println(command); //Serial.println(value); // password.compareTo(value)パスワードトリングと値文字列を比較します。一致した場合は0を返しますif(!password.compareTo(value)&&(command =="OPEN")){//パスワードが一致し、コマンドが 'OPENの場合'ドアよりもopenDoor();を開く必要があります。 // openDoor()関数を呼び出しますSerial.println( "OPEN"); //オープンフィードバックを電話delay(100);に送信しました} else if(!password.compareTo(value)&&(command =="CLOSE")){//パスワードが一致し、コマンドが 'CLOSE'の場合、ドアを閉じる必要がありますcloseDoor(); Serial.println( "CLOSE"); //「CLOSE」文字列を電話に送信しましたdelay(100); } else if(password.compareTo(value)){//パスワードが一致しない場合電話に間違ったフィードバックを送信Serial.println( "WRONG"); delay(100); }} //次の反復のために文字列をクリアしますinputString =""; stringComplete =false; }} void serialEvent(){while(Serial.available()){//新しいバイトを取得します:char inChar =(char)Serial.read(); //Serial.write(inChar); // inputStringに追加します:inputString + =inChar; //着信文字が改行またはキャリッジリターンの場合、フラグを設定します//メインループがそれについて何かを実行できるようにします:if(inChar =='\ n' || inChar =='\ r'){stringComplete =true; }}} void openDoor(){myservo.write(0); delay(100); } void closeDoor(){myservo.write(65); delay(100); }
カスタムパーツとエンクロージャー
シンギバース
https://www.thingiverse.com/thing:2350856CADファイルthingiverse.com 回路図
door-lock_android_source_PDi5PbxDwC.aia door-lock_android_app_K05l3Csr61.apk 製造プロセス