工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

PuzzleBox

コンポーネントと消耗品

>
Arduino MKRIoTバンドル
× 1

アプリとオンラインサービス

>
Blynk

このプロジェクトについて

注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。

貴重品を詮索好きな目から遠ざけるのは、大きな金庫などに入れない限り難しい場合があります...しかし、誰がそのための余地を持っていますか?

代わりに、MKR IoTバンドルのコンポーネントといくつかの段ボールを使用して、独自のパズルボックスを作成してください。私たちはあなたの持ち物の安全を保証することはできませんが、少なくともそれは潜在的な泥棒にとって楽しい抑止力になるでしょう。

もちろん、キャンディーをそこに隠しておくことをお勧めします...実際の貴重品ではありません。

一言で言えば

サーボモーターで閉じたままの箱を開けるには、正しい組み合わせになるまでポテンショメーターを回す必要があります。組み合わせは、オンラインアプリBlynkを介して設定できます。 LEDは推測に役立ち、色のフィードバックを提供します。近ければ近いほど、色は暖かくなります。

正しい組み合わせが推測されると、サーボがボックスを開く間、ブザーが曲の再生を開始します。

パズルボックスを作成するには、次のコンポーネントが必要です。

  • ブザー
  • RGB LED
  • 3つのポテンショメータ
  • LCD画面
  • サーボモーター

学習目標

  • Blynkインターネットプラットフォームの紹介
  • LCD画面の配線と使用
  • ブザーでスターウォーズのテーマを再生する

もっと知りたいですか?

このチュートリアルは、MKR1000とIoTに慣れるための一連の実験の一部です。すべての実験は、MKRIoTバンドルに含まれるコンポーネントを使用して構築できます。

  • I Love You Pillow
  • パズルボックス
  • パブロフの猫
  • オタク
  • 植物コミュニケーター

ブリンクの紹介

Blynkは、モノのインターネットで人気のモバイルアプリであり、インターネットに接続されたArduinoをいつでもどこからでも簡単に制御できます。

Kickstarterで設立され、すばらしいドキュメントとシンプルさの両方のおかげで、すぐにこの分野で最も使用されるアプリの1つになりました。

Blynk入門

新しいプロジェクトの作成は本当に簡単です。これらのいくつかの簡単な手順に従うか、Blynkが始めた公式をご覧ください。

新しいプロジェクトを正常に作成したら、認証トークンもメールで受け取る必要があります。 これは、ハードウェアをスマートフォンに接続するために必要な一意の識別子です。作成するすべての新しいプロジェクトには、独自の認証トークンがあります。

Arduinoをアプリに接続するには、Blynkライブラリをインストールする必要があります。 Arduino Webエディターを使用している場合は、スケッチにライブラリを含めるとライブラリが自動的にダウンロードされます。それ以外の場合は、ライブラリマネージャーからダウンロードできます。

これで準備が整いました。 このスケッチをアップロード スライダーで遊んで結果を確認してください:

  #include  #include  const char * ssid =SECRET_SSID; //ネットワークSSID(名前)const char * password =SECRET_PSWD; //ネットワークパスワードcharauth [] =SECRET_TOKEN; // Blynk APIトークン//組み合わせ値を格納する変数//最初の組み合わせを(1 1 1)int SliderValueOne =1に設定します。 int SliderValueTwo =1; int SliderValueThree =1; //値を取得するBlynk関数BLYNK_WRITE(V1){SliderValueOne =param.asInt(); //ピンV1からの入力値を変数に割り当てます} BLYNK_WRITE(V2){SliderValueTwo =param.asInt(); //ピンV1からの入力値を変数に割り当てます} BLYNK_WRITE(V3){SliderValueThree =param.asInt(); //ピンV1からの入力値を変数に割り当てます} void setup(){Serial.begin(9600); Blynk.begin(auth、ssid、password); // Blynk機能を開始してWiFiに接続します} void loop(){//組み合わせを一時的に保存するためのバリアンブルint Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); //オンラインアプリから新しい組み合わせ値をポーリングします//組み合わせ値が変更されているかどうかを確認し、コンソールに出力しますif(Temp_Slider_One_value!=SliderValueOne || Temp_Slider_Two_value!=SliderValueTwo || Temp_Slider_Three_value!=SliderValueThree){Serial.print( "New組み合わせ: "); Serial.print(SliderValueOne); Serial.print( ""); Serial.print(SliderValueTwo); Serial.print( ""); Serial.println(SliderValueThree); }}  

LCD画面の使用

画面を接続する時間です!

LCD画面は使いやすいですが、多くの配線が必要なため、忍耐力を証明する準備をしてください。

5V電源と220オームの抵抗を使用していることに注意してください。

アナログピン3の出力値を0から255に変更して輝度を調整できます。0が最大値です。

  analogWrite(A3、0);  

これで、サンプルスケッチをアップロードして、すべてが正常に機能しているかどうかを確認できます。

  //ライブラリコードを含める:#include  //必要なLCDインターフェイスピンを//接続されているarduinoピン番号に関連付けてライブラリを初期化するconstint rs =12、en =11、d4 =2、d5 =3、d6 =4、d7 =5; LiquidCrystal lcd(rs、en、d4、d5、d6、d7); void setup(){analogWrite(A3、0); //明るさを最大値に設定します// LCDの列と行の数を設定します:lcd.begin(16、2); //メッセージをLCDに出力します。 lcd.print( "hello、world!"); } void loop(){//カーソルを列0の1行目に設定します//(注:カウントは0から始まるため、1行目は2行目です):lcd.setCursor(0、1); //リセットからの秒数を出力します:lcd.print(millis()/ 1000); }  

ポテンショメータを追加する

ポテンショメータの値を読み取るには、 analogRead()のみが必要です。 正しいピンに。それらをアナログピン0、1、2に接続しています。

ポテンショメータの値は0〜1023の範囲であるため、組み合わせを推測できないことに注意してください。これらの値を0から9にマップするには、 map()を使用します 関数、

  int PotOne =map(analogRead(A0)、0、1023、0、9);  

このサンプルコードを使用して、ポテンショメータの値をLCD画面に印刷できます。

  #include  // LCD画面のピンconstint rs =12、en =11、d4 =2、d5 =3、d6 =4、d7 =5; LiquidCrystal lcd(rs、en、d4、d5、d6、d7); void setup(){analogWrite(A3、0); // LCD画面の明るさを最大値に設定しますSerial.begin(9600); lcd.begin(16、2); // 16列2行でLCD画面を開始} void loop(){int PotOne =map(analogRead(A0)、0、1023、0、9); int PotTwo =map(analogRead(A1)、0、1023、0、9); int PotThree =map(analogRead(A2)、0、1023、0、9); lcd.setCursor(0、0); lcd.print(PotOne); lcd.setCursor(2、0); lcd.print(PotTwo); lcd.setCursor(4、0); lcd.print(PotThree); }  

RGBLEDを追加する

RGB LEDをフィードバックとして使用して、組み合わせを推測できるようにします。適切な値に近づくほど、青、水色、黄色、赤に及ぶLEDの色が暖かくなります。

このスケッチ例を使用して、RGBの動作を確認できます!

  // RGBLEDピンintredPin =6; int greenPin =8; int bluePin =7; void setup(){pinMode(redPin、OUTPUT); pinMode(greenPin、OUTPUT); pinMode(bluePin、OUTPUT); Serial.begin(9600); } void loop(){setColor(0、0、255); //青のdelay(1000); setColor(0、255、255); //アクアディレイ(1000); setColor(255、255、0); //黄色のdelay(1000); setColor(255、0、0); //赤のdelay(1000); } // RGB値をLEDピンに送信voidsetColor(int red、int green、int blue){analogWrite(redPin、red); analogWrite(greenPin、green); analogWrite(bluePin、blue); }  

Blynkに接続します

これで、準備が整いました。ボードをBlynkに接続し、ポテンショメータをLCD画面に接続し、組み合わせが正しい場合はLEDを緑色に点滅させます。

  • 関数 giveColorFeedback()を使用することに注意してください 各ポテンショメータの絶対値が特定のしきい値よりも正しい組み合わせに近い場合に、LEDの色を設定します。
  void giveColorFeedback(int PotOne、int PotTwo、int PotThree){...}  
  • これらの変数を使用して、アプリから送信された値、つまり組み合わせを保存します。
  int SliderValueOne =1; int SliderValueTwo =1; int SliderValueThree =1;  

初期値は1に設定されていることに注意してください。これは、アプリのスライダーの値を変更した場合にのみ変更されます。 ボードをリセットすると、組み合わせはデフォルト値に戻ります。

  • ブール変数 bool start =true; 組み合わせがすでに推測されていることを検出するために使用されるため、ループごとにボックスを再度開くことはありません。

このスケッチ例をアップロードして、実際の動作を確認してください:

  #include  #include  #include  #include  // RGBLEDピンintredPin =6; int greenPin =8; int bluePin =7; const char * ssid =SECRET_SSID; //ネットワークSSID(名前)const char * password =SECRET_PSWD; //ネットワークパスワードcharauth [] =SECRET_TOKEN; // BlynkAPIトークン// LCD画面ピンconstint rs =12、en =11、d4 =2、d5 =3、d6 =4、d7 =5; bool start =true; //組み合わせ値を格納する変数//最初の組み合わせを(1 1 1)に設定しますint SliderValueOne =1; int SliderValueTwo =1; int SliderValueThree =1; //値を取得するBlynk関数BLYNK_WRITE(V1){SliderValueOne =param.asInt(); //ピンV1からの入力値を変数に割り当てます} BLYNK_WRITE(V2){SliderValueTwo =param.asInt(); //ピンV1からの入力値を変数に割り当てます} BLYNK_WRITE(V3){SliderValueThree =param.asInt(); //ピンV1からの入力値を変数に割り当てます} LiquidCrystal lcd(rs、en、d4、d5、d6、d7); void setup(){pinMode(redPin、OUTPUT); pinMode(greenPin、OUTPUT); pinMode(bluePin、OUTPUT); analogWrite(A3、0); // LCD画面の明るさを最大値に設定しますSerial.begin(9600); lcd.begin(16、2); // 16列2行のLCD画面を開始しますBlynk.begin(auth、ssid、password); // Blynk機能を開始します} void loop(){//組み合わせを一時的に格納するためのバリアンブルint Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); //オンラインアプリから新しい組み合わせ値をポーリングします//組み合わせ値が変更されているかどうかを確認し、コンソールに出力しますif(Temp_Slider_One_value!=SliderValueOne || Temp_Slider_Two_value!=SliderValueTwo || Temp_Slider_Three_value!=SliderValueThree){Serial.print( "New組み合わせ: "); Serial.print(SliderValueOne); Serial.print( ""); Serial.print(SliderValueTwo); Serial.print( ""); Serial.println(SliderValueThree); } int PotOne =map(analogRead(A0)、0、1023、0、9); int PotTwo =map(analogRead(A1)、0、1023、0、9); int PotThree =map(analogRead(A2)、0、1023、0、9); lcd.setCursor(0、0); lcd.print(PotOne); lcd.setCursor(2、0); lcd.print(PotTwo); lcd.setCursor(4、0); lcd.print(PotThree); if(start){giveColorFeedback(PotOne、PotTwo、PotThree); if(PotOne ==SliderValueOne &&PotTwo ==SliderValueTwo &&PotThree ==SliderValueThree){blinkGreenLed(); start =false; }} if(!start){if(PotOne ==0 &&PotTwo ==0 &&PotThree ==0){start =true; }}} //ポテンショメータが組み合わせ値にどれだけ近いかに基づいてフィードバックを提供する//近くにあるほど、LEDの色は暖かくなりますvoid giveColorFeedback(int PotOne、int PotTwo、int PotThree){if(abs(PotOne --SliderValueOne)<=1 &&abs(PotTwo --SliderValueTwo)<=1 &&abs(PotThree --SliderValueThree)<=1){//赤setColor(255、0、0); } else if(abs(PotOne-SliderValueOne)<=3 &&abs(PotTwo-SliderValueTwo)<=3 &&abs(PotThree-SliderValueThree)<=3){//黄色のsetColor(255、255、0); } else if(abs(PotOne-SliderValueOne)<=4 &&abs(PotTwo-SliderValueTwo)<=4 &&abs(PotThree-SliderValueThree)<=4){// aqua setColor(0、255、255); } else {//青setColor(0、0、255); }} void flashGreenLed(){for(int a =0; a <2; a ++){for(int b =0; b <=255; b + =5){setColor(0、b、0); delay(5); } for(int b =255; b> =0; b- =5){setColor(0、b、0); delay(5); }} for(int b =0; b <=255; b + =5){setColor(0、b、0); delay(5); }} // RGB値をLEDピンに送信voidsetColor(int red、int green、int blue){analogWrite(redPin、red); analogWrite(greenPin、green); analogWrite(bluePin、blue); }  

ブザーを追加する

箱を開けたらブザーでメロディーを鳴らします。より正確には、スターウォーズのテーマソングを再生します!

ブザーの接続は簡単です:

このサンプルコードをアップロードして聞いてください:

  const int c =261; const int d =294; const int e =329; const int f =349; const int g =391; const int gS =415; const int a =440; const int aS =455; const int b =466; const int cH =523; const int cSH =554; const int dH =587; const int dSH =622; const int eH =659; const int fH =698; const int fSH =740; const int gH =784; const int gSH =830; const int aH =880; intカウンター=0; #define buzzerPin 1 void setup(){pinMode(buzzerPin、OUTPUT); Serial.begin(9600); } void loop(){play_jingle(); delay(3000); } void play_jingle(){beep(a、500);ビープ音(a、500);ビープ音(a、500);ビープ音(f、350);ビープ音(cH、150);ビープ音(a、500);ビープ音(f、350);ビープ音(cH、150);ビープ音(a、650); delay(500);ビープ音(eH、500);ビープ音(eH、500);ビープ音(eH、500);ビープ音(fH、350);ビープ音(cH、150);ビープ音(gS、500);ビープ音(f、350);ビープ音(cH、150);ビープ音(a、650); delay(500); } void beep(int note、int duration){// buzzerPinでトーンを再生するtone(buzzerPin、note、duration); // buzzerPinのトーンを停止しますnoTone(buzzerPin); delay(50); //カウンタカウンタをインクリメントします++; }  

サーボモーターを追加する

サーボモーターは私たちの箱のロックです。箱が開くように、組み合わせが正しいときに90度回転する必要があります。

サーボの接続には3本のワイヤーしか必要ありません。

90度回転させるために、次の関数を使用します。

  #include  int pos =0; //サーボ位置を格納する変数Servomyservo; //サーボボイドを制御するサーボオブジェクトを作成しますsetup(){myservo.attach(9); //ピン9のサーボをサーボオブジェクトに接続しますmyservo.write(pos); //サーボを位置0に設定します} void loop(){open_the_box(); delay(2000); close_the_box(); delay(2000); } void open_the_box(){for(pos =0; pos <=90; pos + =1){// 0度から90度になりますmyservo.write(pos); //サーボに変数 'pos' delay(15);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します}} void close_the_box(){for(pos =90; pos> =0; pos- =1){// 90度から0度になりますmyservo.write(pos); //サーボに変数 'pos' delay(15);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します}}  

サーボを元に戻してボックスを閉じるには、すべてのポテンショメータを0にするだけです。

パズルボックスを作成する

ボックスのないボックスにはならないので、以下のケースファイルをダウンロードして、独自のケースファイルを作成するためのガイドとして使用してください。

2mmの段ボールを使用したことに注意してください。

コード

完全なスケッチ

カスタムパーツとエンクロージャー

2mm段ボール box_E5j7tnFdNC.dxf

回路図


製造プロセス

  1. 回路部品
  2. 集積回路
  3. Node-REDを使用してBlynkへのSensorTag
  4. Arduino Digital Dice
  5. マルチ温度センサー
  6. Arduinoゲームコントローラー
  7. MotionSense
  8. MOSMusic
  9. マイクロエレクトロニクスとは?
  10. ボール盤の部品
  11. 内燃機関のコンポーネント