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

ウィザーズウォーキングスタッフ

コンポーネントと消耗品

>
Arduino 101
× 1
$ 4ポロル電圧レギュレーター
× 1
3x AAバッテリーホルダー(スイッチ付き)
× 1
単三電池
どのタイプでも構いません。 3が必要です。
× 1
Mバレルジャックアダプター
$ 1.95これらにより、電源の接続と切断が簡単になります
× 1
Fバレルジャックアダプター
$ 1.95これらにより、電源の接続と切断が簡単になります
× 1
アドレス指定可能なLEDストリップ
この例は、NeoPixel互換のLED、60ピクセルストリップ用に作成されています。
× 1
スポーツテープ
あらゆる種類の布テープ。これは、電子機器をスタッフに固定し、しっかりと握るために使用されます。
× 1
ラバーバンド
テープを使用できるようになるまで、パーツを譜表に固定するのに役立ちます。
× 1
スタッフ。 (ほうき、スプリンクラーパイプ、天然杖など)
× 1

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

>
Arduino IDE

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

このプロジェクトでは、Arduino 101、バッテリー、LEDストリップを使用して、ジェスチャーで制御されるウィザードの杖を作成します。 3つのジェスチャーのいずれかでスタッフを動かすことで呼び出すことができる3つの異なるライトディスプレイの「呪文」を定義します。

<図>

技術:

このコードは、Arduino 101の慣性測定ユニットを使用してG力を読み取りますが、パターンマッチングエンジンは使用しません(PMEを使用する例については、Kitty YeungのPMEプロジェクトを確認してください)。代わりに、このコードはX、Y、Z方向の速いインパルスをカウントし、特定の組み合わせを短時間で実行すると呪文を召喚します。

呪文を唱える:

2回すばやく垂直にタップすると呪文が始まります。次に、スタッフを前後左右に大きく動かすか、3回タップして3つの呪文のいずれかを選択し、最後にタップすると呪文が唱えられます。

視覚的なフィードバック:

ジェスチャのどこにいるかを理解しやすくするために、サンプルコードにはLEDストリップからの視覚的なフィードバックが含まれています。最初にダブルタップを実行すると、ライトがすばやく白く点滅し、呪文が開始されたことを知らせます。ステップごとに視覚的なフィードバックが得られるので、どの呪文が選択されるかがわかります。

呪文の詠唱(詳細):

Arduino101を手前に向けてスタッフを支えます。まず、地面でスタッフを(そっと!)ダブルタップするか、空中で2回すばやく垂直パルスを実行します。白い点滅が表示されたら、スタッフを前後に大きく動かしてスペル1を選択するか、スタッフを左右に傾けてスペル2を選択するか、3回目に垂直に動かしてスペル3を選択します。スペルを選択すると、ライトが点灯します。緑(スペル1)、青(スペル2)、または赤(スペル3)に点灯します。ライトが点灯したら、最後の垂直タップでスペルを召喚します。ライトがきらめき、選択した色で点滅します。

ジェスチャーは時間に敏感です!ジェスチャーの各ステップの間に1秒しかありません。そうしないと、スペルがリセットされます。 つまり、混乱したり、間違った呪文を選択したりした場合は、1秒待ってからやり直すことができます。呪文を正確に召喚するのは少し難しいですが、スタッフと一緒に歩き回っているときに誤って呪文が呼び出されることはありません。

電子機器の構築:

これは基本的に、Arduino 101、バッテリー、およびNeoPixelLEDのストリップです。

電源を設定する方法はいくつかあります。最も速いのは、9Vバッテリーを使用し、Arduino 101からすぐにLEDを実行することですが、バッテリーの寿命は非常に短くなります。 LiPoバッテリーを使用して、より「プロ」のビルドのために電力/重量を最大化することもできますが、バッテリーを充電するための安全な方法が必要になります。私にとって、バッテリーの寿命とシンプルさのバランスは、単三電池3本と4ドルの電圧レギュレーターを使用することです。これは、シャドウシアターおよびカレイドスコープインフィニティミラーと同じ電子機器のセットアップです。

ステップ1

ライトの端から約1cmを切り取って、LEDストリップからエンドハーネスを集めます。ワイヤーの端をはがします。

<図> <図>

ステップ2

電圧レギュレータに付属している曲がったヘッダーピンを分解し、そのうちの2つを緑と黄色のワイヤの端にはんだ付けします。これにより、Arduino101のピンに簡単に接続できます。

<図>

ステップ3

次に、赤いワイヤーを電圧レギュレーターのVIN端子にはんだ付けし、図のように2つのストレートヘッダーをGNDピンとVOUTピンにはんだ付けします。

<図>

ステップ4

次に、バレルジャックアダプタを接続します。まず、バッテリーケースから出ているワイヤーの端をはがし、次にオスバレルジャックの端子に取り付け、ドライバーで締めます。赤は(+)端子に、黒は(-)端子に接続します。

<図>

次に、メスのバレルジャックアダプタをLEDストリップの最初から出ている緩いワイヤに接続します。 YELLOWは(-)端子に行き、REDは(+)に行きます。

<図>

ステップ5

次に、ハーネスをArduino 101に接続します。緑のワイヤーはピン6に接続し、黄色のワイヤーは#13の近くのGNDピンに接続します。電圧レギュレータの2つのヘッダーピンを使用すると、GNDはGNDに接続され、VOUTはArduino101の「VIN」ピンに接続されます。これを誤解しないでください。後ろ向きに差し込むと、においややけどの原因になります。私はこれを知っている。

<図> <図>

サンプルコードのアップロード:

ステップ1

バッテリーパックをオフにした状態で、USBケーブルを使用してArduino 101をコンピューターに接続し、ArduinoIDEを使用して添付のサンプルコードをアップロードします。

これまでにArduino101をプログラミングしたことがない場合は、ArduinoのWebサイトに優れた手順があります:https://www.arduino.cc/en/Guide/Arduino101

サンプルコードが正常に読み込まれると、USBを切断し、バッテリーパックの電源を入れ、Arduino 101のUSBポートを下に向け、ピンを手前に向けていくつかのスペルジェスチャを試すことでコードをテストできます。ボードを垂直に4回動かして、赤い呪文を呼び出してみてください。

コードディスカッション:

(サンプルコードをそのまま使用する場合は、スタッフの作成にスキップできます。)

サンプルコードは、Arduino 101の衝撃検出機能を使用して衝撃をカウントし、タイマーが実行されて、新しい衝撃がない状態で短時間後に衝撃カウントをゼロにリセットします。タイマーが切れる前に正しい組み合わせを打つと、「スペル」関数が呼び出されます。

地面をしっかりと叩くと、実際には最初の衝撃とスタッフの振動によるいくつかの「ノイズ」衝撃が記録されるため、ループの最初のコードは、衝撃の各バッチから支配的な衝撃を見つけて、単純に次のように分類しようとしています。垂直、左/右、または前面/背面。 「ジェスチャ」と呼ばれる変数を使用して、各支配的なインパルスを保持します。1=垂直インパルス、2 =前面/背面インパルス、3 =左/右インパルス。

次に、組み合わせを追跡するために、コードは「switch」ステートメントを使用し、ジェスチャが蓄積されるにつれてそのステートメントを移動します。これは「きみならどうする?」の本のようなもので、各ステップで「次の衝動が左/右の場合はステップ2に進み、タイマーの期限が切れている場合はゼロに戻ります」のようになります。

>

呪文:

ここで、各スペルの機能を簡単に変更できます。これらは現在、さまざまな色で「シアターチェイス」サンプルコードを実行しているだけです。ここでは、簡単に追加したり、色を変更したり、独自のライト関数を記述したりできます。 TheaterChase関数の最初の3つの変数は、赤、緑、および青の値です。最後の数値は速度です(数値が大きいほど速度が遅くなります)。

  //////////////////////////////////////////// ///// pells ////////////////////// void tapspell(){///赤い劇場照明theatreChase(strip.Color(127、20、0 )、20); TheaterChase(strip.Color(127、20、50)、55); strip.show(); } void leftspell(){theatreChase(strip.Color(0、0、100)、20); TheaterChase(strip.Color(0、30、120)、75); strip.show(); } void forwardspell(){theatreChase(strip.Color(0、127、0)、30); TheaterChase(strip.Color(0、127、90)、55); strip.show(); }  

スタッフの構築:

ここには創造性の余地がたくさんあります!基本的な技術構築に焦点を当てますが、ユニークなスタッフを作るのは楽しいです。 LEDの上にチュール、ティッシュペーパー、ペットボトルなどの光拡散板を使用すると、非常にクールな光のディスプレイを作成できます。

ステップ1:ハイキングスティック/スタッフを探す

ほうきの柄、スプリンクラーパイプを使用するか、天然の棒を見つけることができます。マイケルの工芸品店も素敵なものを販売しています。 (スティックセクションで-本当に。)私はスポーツテープでセクションを包んで、電子機器用のきれいな作業領域を作るのが好きですが、それはオプションです。

<図>

<図>

スタッフに輪ゴムを数本貼って、取り付けやすくします。

<図>

ステップ2:USBポートを下にした状態でArduino101をスタッフに配置します

輪ゴムを使用してArduino101を所定の位置に保持します。

<図>

ステップ3:両端を助けるために輪ゴムを使用して、LEDを包みます

<図>

<図>

ステップ4:スポーツテープを包んでArduino101とバッテリーパックを固定する

バッテリーパックのオン/オフスイッチへのアクセスは必ず残してください。バッテリーパックをジョッスル/タップに対して安全にする必要がありますが、最終的にはそれらのバッテリーを交換する必要があることを忘れないでください。

<図>

<図>

ステップ5:LEDライトを拡散して飾る

<図>

<図>

<図>

コード

  • ウィザードの杖のサンプルコード
ウィザードの杖のサンプルコード Arduino
x、y、z軸のインパルスをカウントします。特定のインパルスの組み合わせは、ネオピクセルストリップに「呪文」(ライトディスプレイ)を呼び出します。
 / * Copyright(c)2016 IntelCorporation。全著作権所有。ファイルの最後にあるライセンス通知を参照してください。* // * Arduino101「ウィザードの杖」。このコードは、AdafruitNeopixelライブラリを使用しています。ライブラリのインストール手順はこちら:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation最新のIntel CurieCoreがインストールされていることを確認してください。詳細については、https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h" #include  #define PIN 6 ////接続されているNeoPixelsのピンをご覧ください。 to?Adafruit_NeoPixel strip =Adafruit_NeoPixel(60、PIN、NEO_GRB + NEO_KHZ800); ///ストリップの長さは60ピクセルです。inttr=0; //スムージングのためにカラーターゲットとカラー電流を保持するいくつかの変数... int tg =0; int tb =0; int r =0; int g =0; int b =0; long int globaltimer =0; ///ジェスチャと時間の関係を追跡するタイマー...「タイマーが0.5秒を経過しておらず、2回タップした場合は、...」などの場合long intgesturetimer =0; long int ledtimer =0; intフェード=10; ///ライトが消える速さ。スムーズ化に使用inttap =0; //垂直インパルスのクーターintlr =0; //左/右インパルスのクーターintfb =0; //前方/後方インパルスのクーターintジェスチャー=0; // int state =0; ///スイッチの場合...これにより、series.void setup(){//セットアップコードをここに配置して、1回実行します。//Serial.begin(9600); globaltimer =millis(); //現在の時刻にタイムキーパーを開始しますgesturetimer =millis(); ledtimer =millis(); / * IMUを初期化します* / CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); / *衝撃検出を有効にする* / CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK、1500); // 1.5g =1500 mg CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK、50); //割り込みCurieIMU.interrupts(CURIE_IMU_SHOCK);を呼び出すために必要なスパイクのミリ秒strip.begin(); //ネオピクセルストリップを初期化しますstrip.show(); //すべてのピクセルを 'off'に初期化します} void loop(){//メインコードをここに配置して繰り返し実行します:////基本フィルター-IMUはリバウンドとカウンターアクションからの複数のショックを登録します。これは、各ジェスチャーの支配的な衝撃を捉えようとします。 if(millis()-globaltimer> 170){///これは、各ショックの主な動きの軸を見つけようとします。タップ、左右、および前後の動きの合計を比較し、最大のものを選択します。 if((tap>
 lr)&&(tap>
 fb)){Serial.println( "tap");ジェスチャー=1;タップ=0; lr =0; fb =0; ////移動が分類された後に値をリセットします。 } else if((lr> fb)&&(lr> tap)){Serial.println( "lr");ジェスチャー=2;タップ=0; lr =0; fb =0; } else if((fb> lr)||(fb> tap)){Serial.println( "fb");ジェスチャー=3;タップ=0; lr =0; fb =0; }} //////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////// if(millis()-globaltimer> 1000){///// timeoutreset globaltimer =millis() --170; tr =0; tg =0; tb =0;状態=0; // gesture =0; } if(millis()-gesturetimer> 1000){gesturetimer =millis()-350; tr =0; tg =0; tb =0;状態=0; // gesture =0; } ///////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////// switch(state){//これはジェスチャのケース0を追跡します:{///ジェスチャはまだ記録されていません...タップを聞きます。ある場合は、ケース1に進みます。if(millis()-gesturetimer> 350){if(gesture ==1){state =1;ジェスチャー=0;ジェスチャタイマー=ミリ秒(); } } 壊す; }ケース1:{///// 1タップが記録されました。 2回目のタップが発生した場合は、すばやくフラッシュを再生してから、手順2に進みます。if(millis()-gesturetimer> 350){if(gesture ==1){r =10; g =10; b =10; ///フィードバックフラッシュ状態=2;ジェスチャー=0;ジェスチャタイマー=ミリ秒(); } } 壊す; }ケース2:{///////スイッチポイント-2回のタップが記録されました。 3つの呪文は、次のジェスチャーに基づいてここで分岐します。タップの場合はケース3に進みます。L/ Rの場合はケース4に進みます。前面/背面の場合はケース5に進みます。if(millis()-gesturetimer> 350){if(gesture ==1) {状態=3;ジェスチャー=0;ジェスチャタイマー=ミリ秒(); } if(gesture ==2){state =4;ジェスチャー=0;ジェスチャタイマー=ミリ秒(); } if(gesture ==3){state =5;ジェスチャー=0;ジェスチャタイマー=ミリ秒(); } } 壊す; }ケース3:{//// 3回のタップが記録されました...タップ呪文を使用しているので、スタッフを赤くして、最後の「タップ」を聞いて呪文を開始します。 tr =20; tg =0; tb =0; globaltimer =millis()-250; if(millis()-gesturetimer> 350){if(gesture ==1){state =0; Serial.println( "tapspell!"); tapspell(); } } 壊す; }ケース4:{///// 2回のタップとLまたはRが記録されました...私たちは左の呪文にいます。スタッフを青に変え、最後の「タップ」を聞いて呪文を開始します。 tr =0; tg =0; tb =20; globaltimer =millis()-250; if(millis()-gesturetimer> 350){; if(gesture ==1){state =0; Serial.println( "leftspell!"); leftspell(); } } 壊す; }ケース5:{///// //// 2回のタップと、順方向または逆方向の記録...順方向の呪文を使用し、スタッフを緑色に変え、最後の「タップ」を聞いて呪文を開始します。 tr =0; tg =20; tb =0; globaltimer =millis()-250; if(millis()-gesturetimer> 350){if(gesture ==1){state =0; Serial.println( "forwardspell!"); forwardspell(); } } 壊す; } defaut:{ブレーク; }} //Serial.println(tr); if(millis()-ledtimer> fail){///この次のステップは(フェード値)ミリ秒ごとに定期的にのみ実行します。 「delay()」関数とは異なり、これにより、更新の合間にプログラム内で他のことが発生する可能性があります。 ///カラースムージング。実際の色はターゲットカラーに向かって移動します...ターゲットが現在より多い場合は上に移動し、少ない場合は下に移動します。 if(tr> r + 1){r ++; } if(tg> g + 1){g ++; } if(tb> b + 1){b ++; } if(tr にご連絡ください。 

製造プロセス

  1. AC電界の検知
  2. 電力計算
  3. 後処理段階をより安全にする7つの方法
  4. 食用色素:食品を魅力的にするために不可欠な成分
  5. IoTビジネスモデルを機能させる方法–または機能しないのですか?!
  6. 独自のGoogleVoiceHATを作成する
  7. Arduino + RaspberryPiロボットプラットフォームの作り方
  8. グラスファイバーの作り方
  9. 射出成形金型の作り方
  10. いつでも製造日になることができます!
  11. Solidworksでカッタウェイアニメーションを作成する方法