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

ポケットメタルロケーター

コンポーネントと消耗品

>
SparkFun Arduino Pro Mini 328-5V / 16MHz
× 1

必要なツールとマシン

>
3Dプリンター(汎用)

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

イントロ:ポケットメタルロケーター-Arduino

<図>

このかっこいい小さなポケットメタルロケーターは、木の小さな釘や鋲を識別するのに十分な感度があり、扱いにくいスペースに収まるほどコンパクトなので、持ち運びや金属の位置特定に便利です。

ユニットには4つの独立したサーチコイルとカラーLEDインジケーターがあり、ターゲットを正確に識別しながら、より広いサーチエリアをすばやく簡単にカバーできます。

このすっきりとした小さなデバイスは、ボタンを1回操作するだけで自動調整され、USBポートから充電でき、カラーLED、音、振動を使用してターゲットの強度を示します。

チュートリアルには、自分でビルドするために必要なすべての設計、テスト、コード、および3Dファイルが含まれています。これを私と同じように構築して使用して楽しんでいただければ幸いです!!

ステップ1:材料リストとその仕組み

<図>

1。方法 動作

Pocket Metal Locatorは、Arduino ProMiniを搭載した4つの独立したパルス誘導サーチコイルを使用しています。各サーチコイルは個別のTXコイルとRXコイルで構成されており、TXコイルにパルスが誘導されてRXコイルの周囲に電磁場が発生します。変化するフィールドはRXコイルに電圧を誘導し、Arduinoが信号のパルス幅を読み取る前に、この電圧を検出して増幅します。

Arduinoコードの平滑化アルゴリズムを使用して、有効なパルスからノイズを除去し、非常に安定させます。

コード内のキャリブレーションアルゴリズムは、起動の短い期間の読み取り値の平均を取り、信号を比較するための一連のしきい値を設定します。

金属物体が電磁界の範囲内に入ると、電磁界が破壊され、エネルギーの一部がRXコイルからターゲット物体に形成される「渦電流」に迂回されます。ターゲットオブジェクトのこの寄生効果により、RXコイルで検出されるパルス幅が減少します。基本的に、ターゲットオブジェクトへの電力損失を測定しています。

RXコイルで検出されたパルス幅がしきい値を下回ると、LEDが点灯し、ブザーが鳴り、ハプティックフィードバックモーターがトリガーされます。これは、ターゲット信号の所定のサイズに依存します。

このための回路は、過去1年間で、非常に安定した信頼性の高い性能の検出器に進化しました。コイルの構成と向きは、安定性と深度検出を最大化するように意図的に設計されています。

2。材料リスト

  • 3.7v 350mAh LiPoバッテリーサイズ:38mm x 20mm x 7.5mm
  • TP4056 USBLiPoバッテリー充電器データシート
  • LiPoバッテリーの充電電流を300mA未満に制限するための4.7K抵抗
  • Arduino Pro Mini
  • MiniProをプログラミングするためのFTDIUSB-シリアルモジュール
  • LM339クワッド差動コンパレータ集積回路
  • ベロボード-20x9の穴と34x9にカットされた2つのピース(正しい向きについては写真を参照)
  • BC548NPNトランジスタx4
  • 2N7000MOSFETスイッチx5
  • ピエゾブザー
  • 触覚フィードバック用のコイン振動モーター
  • WS2812 RGBLEDモジュールx4
  • 1k抵抗x4
  • 10k抵抗x4
  • 47オーム抵抗x4
  • 2.2K抵抗x4
  • 150pfセラミックコンデンサx8
  • 0.18uFポリエステルコンデンサx4
  • 0.3mmエナメル銅線のロール(通常、約25gのロールで提供されます)
  • PCBマウントプッシュボタンスイッチ
  • ホットグルーガン
  • 10mmドリルビット
  • ハンドヘルドドリル
  • 16本の別々のワイヤーにラベルを付けるのに適したラベルガンまたは粘着テープフックアップワイヤー
  • 3Dプリンターへのアクセス

3。コンパレータの操作

LM339の操作について質問が多かったので、もっとわかりやすく説明したいと思いました。

LM339は、電圧コンパレータとしてのみ動作し、正ピンと負ピンの間の差動電圧を比較し、入力差動極性に基づいてロジックローまたはハイインピーダンス(プルアップでロジックハイ)を出力します。

この回路では、コンパレータの正の入力がVccラインに接続され、Vccへのプルアップ抵抗がコンパレータ出力に適用されます。この構成では、実際には、負の入力の入力電圧が3.5vを超えるまで、コンパレータの出力電圧は高いままです。

動作は、0 V〜Vsup-1.5Vの「入力電圧範囲」の概要を示すLM339データシートから説明できます。

IN–とIN +の両方がコモンモード範囲内にある場合、IN–がIN +とオフセット電圧よりも低い場合、出力は高インピーダンスであり、出力トランジスタは導通していません

IN–がコモンモードより高く、IN +がコモンモード内にある場合、出力は低く、出力トランジスタは電流をシンクしています。データシートへのリンクと以下の説明http://www.ti.com/lit/ds/symlink/lm2901.pdf

lm2901.pdf

ステップ2:ケースを印刷する

<図>

3Dプリントされたケースは、5つの別々のプリントを使用して行われました。寸法と3DファイルはここThingiverseにあります。設計は、サーチコイルがサーチ対象の領域にできるだけ近くなるようにしながら、デバイスを持ちやすくすることに重点が置かれていました。

ケースを注意深く印刷し、余分なプラスチックを取り除きます。最終的な接続とテストの前に電子部品をケース内で位置合わせできるように、この手順を今すぐ実行することが重要です。

<図>

ステップ3:サーチコイルを構築してマウントする

<図>

印刷されたコイルフォーマーを取り、それぞれに銅線を25ターン巻きます。本体に接続するために、20cmの余分な銅線を残しておいてください。

フォーマーに印刷された穴を使用して、各フォーマーのコイルの一貫した風と向きを可能にします。これを行うときは、前者を逆さまにして、前者をベースユニットに徐々に接着します。

<図>

提供された写真アセンブリに従ってください。結果として、8つのコイルがコイルアセンブリに取り付けられ、すべてのワイヤが一貫して方向付けられ、上部エンクロージャのメインボードユニットに接続するのに十分な長さになります。

印刷されたベースの各コイルに穴が開いている2つのワイヤーガイドブロックを使用して、特定の各コイルを追跡します。

<図>

内側のコイルのワイヤーをワイヤーブロックの上部に配置し、外側のコイルを下部に配置して、メインボードへの接続を容易にする特定のコイルを追跡できるようにしました。

ステップ4:回路を構築する

<図>

ユニットには、独立して構築するための4つの主要な回路があります。ドライバボード、メインボード、LEDアセンブリ、および充電式電源です。このステップでは、ドライバーボードとメインボードを作成します。

1。ドライバーボード

<図>

クラフトナイフを使用して、22x11の穴に沿ってVero Boardを切り取ります。その結果、付属の写真のように20x9の穴が向いたVeroBoardができあがります。ボードの両側の穴を複数回スコアリングしてから、余分なボードをそっとはがします。ボードがエンクロージャーのベースにあり、両側に十分なクリアランスがあることを確認してください。

写真と10mmのドリルビットを手で使用して、ベロボードの下部に示されている鋲を慎重に壊します。コンポーネントの回路図と写真のレイアウトに従って、回路基板を組み立てます。トラックが短絡していないことを確認してください。

このボードは後でテストするために取っておきます。

2。メインボード

<図>

<図>

クラフトナイフを使用して、36x11の穴に沿ってVero Boardを切り取ります。その結果、付属の写真のように34x9の穴が向いたVeroBoardができあがります。ボードの両側の穴を複数回スコアリングしてから、余分なボードをそっとはがします。ボードがエンクロージャーのベースにあり、両側に十分なクリアランスがあることを確認してください。

写真と10mmのドリルビットを手で使用して、ベロボードの下部に表示されている鋲を慎重に壊します。

<図>

ArduinoとLM339ICおよびその他のコンポーネントの回路図と写真のレイアウトに従って、回路基板を組み立てます。トラックが短絡しないように注意してください。

このボードは後でテストするために取っておきます。

<図>

<図>

ステップ5:LEDインジケーターを追加する

<図>

私は3本の別々のワイヤーを使用してArduinoでアドレス指定できるICを内蔵したWS2182LEDを使用しましたが、LEDにコマンドを送信することで、さまざまな色と明るさの色を作成できます。これは、テストセクションで説明されているArduinoIDEにロードされた特別なライブラリを介して行われます。

1。コイルエンクロージャーの蓋へのLEDの取り付け

4つのLEDを慎重に配置して、VCC接続とGND接続が整列し、穴の中央に配置されるように正しく配置します。

ホットグルーを使用して、LEDを所定の位置に固定します。

2。 LEDの配線

LEDの接点全体に25cmの長さの単芯フックアップワイヤを3本慎重に剥がして配置します。

これらを所定の位置にはんだ付けし、中央のデータワイヤが写真のようにINおよびOUT接点に接続されていることを確認します。

<図>

3。ケースアラインメントチェック

ケースの蓋がコイルエンクロージャーと同じ高さになることを確認してから、ホットグルーを使用して、蓋の基端の所定の位置にワイヤーを保持します。

後でテストするためにこれを取っておきます。

ステップ6:ユニットの組み立てとテスト

<図>

1。組み立ての準備

組み立てる前に、問題のトラブルシューティングを容易にするために、各ボードを段階的にテストします。

Arduino Pro MiniをPCでプログラムするには、USBシリアルボードが必要です。これにより、シリアルインターフェイスがないため、ボードのサイズを小さくすることができます。これらのボードをプログラムするには、パーツリストに概説されているようにボードを入手するために投資する必要があります。

Arduinoコードをロードする前に、WS2182 LEDを駆動するライブラリとしてライブラリ「FastLED.h」を追加する必要があります。問題がある場合のトラブルシューティングのために、一連のオシロスコープトレースが提供されています。

<図>

グラフプロット機能を使用したIDEシリアルデータ出力のスクリーンショットもあります。これは、各チャネルのパルス幅出力としきい値を示しています。これは、各チャネルが同じレベルの感度で動作しているかどうかを確認できるため、テスト中に役立ちます。

<図>

コードのコピーを2つ含めました。 1つは、トラブルシューティングの目的でシリアルデータストリーミングをテストしています。

注: 組み立て中に誤ってこれを短絡すると、ユニットが過熱したり、発火したりする可能性があるため、最後のステップまでLiPoバッテリーユニットを接続しないでください。

2。メインボードをテストする

メインボードを何かに接続する前に、Arduinoシリアルケーブルを接続し、コードがロードされることを確認することをお勧めします。

これは、Arduinoが物理的に正しく配線されていること、およびIDEとライブラリがロードされていることをテストするだけです。 IDEを介してコードをロードします。これにより、エラーが発生せず、コンポーネントから煙が出なくなります!!

3。ドライバーボードを接続する

回路図に従ってドライバボードをメインボードに接続し、ユニットをケースに物理的に配置して、アイテムがエンクロージャ内に収まるようにします。これは試行錯誤のケースであり、永続性が必要です。

IDEを介してコードをロードします。これにより、エラーが発生せず、コンポーネントから煙が出なくなります!!

4。コイルを接続する 回路図に従ってコイルをメインボードに接続し、ユニットをケースに物理的に配置して、アイテムが適切に収まるようにします。回路図に従って、コイルがドライバーボードとメインボードの入力に位置合わせされていることを注意深く確認してください。

テストコードがロードされると、シリアルポートは受信コイルのパルス幅を5000〜7000uSのどこかに表示します。これは、IDEグラフプロッタを使用して表示することもできます。

これにより、各チャネルのトラブルシューティングが可能になり、サーチコイルの近くにコインを移動した場合の効果を確認できます。これにより、ターゲットがサーチコイルに近づくにつれてパルス幅が減少します。

オシロスコープを使用している場合は、回路のさまざまな段階で波形をチェックして、問題を診断することもできます。

すべてのチャネルが期待どおりに機能するようになったら、ケースエンクロージャーが正しく組み立てられて閉じるように、ワイヤーを配置します。

<図>

<図>

5。 LEDを接続する

コイルエンクロージャーLEDから3本のワイヤーを慎重に取り出し、メインボードに接続します。コードをロードし、LEDが正しく動作していることを確認します。接着剤を使用して、コイルエンクロージャの蓋を所定の位置に固定します。

Pocket_Metal_Locator_V11__TEST_CODE.zip Pocket_Metal_Locator_V11.zip

ステップ7:充電式バッテリーを接続する

<図>

注:

1。組み立て中に誤ってこれを短絡すると、ユニットが過熱したり、発火したりする可能性があるため、最後のステップまでLiPoバッテリーユニットを接続しないでください。

2。バッテリーと充電器を取り扱うときは、バッテリー接続をショートさせないように注意してください。

3。 LiPoバッテリーは他の充電式バッテリーとは異なり、過電流充電は危険な場合があるため、充電回路を正しく構成してください。

4。電源ボタンが押されているときは、Arduinoシリアルケーブルをユニットに接続しないでください。接続すると、バッテリーが損傷する可能性があります。

<図>

1。充電器の電流制限を変更する

Pocket Metal Locatorは、MicroUSB電話充電器を使用して充電できるLiPoバッテリーを使用します。 TP4056 USB LiPoバット充電器ボードは、最初に4.7K抵抗で変更され、充電電流を300mA未満に制限します。これを行う方法については、こちらをご覧ください。

TP4056.pdf

これには、既存の表面実装抵抗器を取り外して、写真に示すように抵抗器と交換する必要があります。所定の位置に配置したら、ホットグルーガンで抵抗器の計画外の動きを保護します。

メインボードに接続する前に、携帯電話の充電器をマイクロUSBポートに接続して、充電器が正しく機能していることをテストします。正常に動作しているときは、赤い充電ライトが点灯するはずです。

<図>

2。押しボタン式電源スイッチを取り付けます

押しボタンがエンクロージャーの蓋の中央から突き出るように正しい位置に取り付けられていることを確認してから、押しボタンを所定の位置にはんだ付けします。回路図に従って、プッシュボタンスイッチと充電器出力およびArduinoのVCCラインの間にワイヤーを取り付けます。

正しく取り付けられている場合、スイッチを押すとユニットがアクティブになります。

ホットグルーを使用してバッテリーを所定の位置に固定し、充電できるようにマイクロUSBソケットがケースの蓋の穴に合っていることを確認します。

ステップ8:最終テストと運用

1。物理的な組み立て

最後のステップは、ケースが正しく閉じるようにワイヤーを慎重に再配置することです。ホットグルーを使用してメインボードを蓋に固定してから、蓋を所定の位置に閉じます。

2。ユニットの操作

ユニットは、電源ボタンを押し続けた後に校正することで動作します。ユニットを使用する準備ができると、すべてのLEDが点滅します。検索中はプッシュボタンを押したままにします。 LEDは、ターゲットオブジェクトの強度に基づいて、青緑、赤、紫から変化します。 LEDが紫色に変わると、触覚フィードバックが発生します。

実用的なアプリケーションに使用する準備ができていません!!

コード

  • Pocket_Metal_Locator_V11.ino
Pocket_Metal_Locator_V11.ino C / C ++
このかっこいい小さなポケットメタルロケーターは、木の小さな釘や鋲を識別するのに十分な感度があり、扱いにくいスペースに収まるほどコンパクトなので、持ち運びや金属の位置特定に便利です。

ユニットには4つの独立したサーチコイルとカラーLEDインジケータがあり、ターゲットを正確に識別しながら、より広いサーチエリアをすばやく簡単にカバーできます。

このすっきりとした小さなデバイスは、ボタンを1回操作するだけで自動調整され、USBポートから充電でき、カラーLED、音、振動を使用してターゲットの強度を示します。

インストラクタブルには、自分でビルドするために必要なすべての設計、テスト、コード、および3Dファイルが含まれています。これを私と同じように構築して使用して楽しんでいただければ幸いです!!
 / * Pocket Metal Locator-Arduino Pro Mini 2018年4月TechKiwiGradgetsVersion11-最初のインストラクタブルリリース* /// WS2182 LEDドライバーライブラリセットアップ#include "FastLED.h "//ストリップ内のLEDの数は?#defineNUM_LEDS 4 //注:最初のLEDはアドレス0#define DATA_PIN 11 //注:LEDチェーンの制御に使用されるD11 // ledsCRGB leds [NUM_LEDS]の配列を定義します; / / LPFconstの平滑化変数floatalpha =0.85; float見なされた値1 =1000; floatsmoothedvalue2 =1000; floatsmoothedvalue3 =1000; floatsmoothedvalue4 =1000; int sthreshold =100; // pulseIn関数からの最小読み取り値は、noisefloat ledthreshold1 =0.93を超えるサンプリングを保証します。 // LEDを設定する前のベースラインを下回るパーセンテージPurplefloatledthreshold2 =0.96; // LEDを設定する前のベースラインを下回るパーセンテージRedfloatledthreshold3 =0.99; // LEDを設定する前のベースラインを下回るパーセンテージGreenfloatledthreshold4 =0.998; // LEDを設定する前のベースラインを下回るパーセンテージ青//キャリブレーション変数booleansample =false; // trueの場合、thresholdsint calcounter =0をリコールしないでください。 //サンプルが取得された回数をカウントするために使用されますintscount =200; //パワーアップ後に1回だけキャリブレーションする前の読み取り数intnumsamples =20; //平均化する前に取得されたサンプルの数themintt1 =100; // callibrationlong calav1 =0の間にLEDが点灯するマイクロ秒単位の期間。 // 10サンプルの平均を計算するために使用されますlongcalav2 =0; // 10サンプルの平均を計算するために使用されますlongcalav3 =0; // 10サンプルの平均を計算するために使用されますlongcalav4 =0; // 10個のサンプルの平均を計算するために使用intdiv1 =0; //取得されたサンプル数の除数カウンターintdiv2 =0; int div3 =0; int div4 =0; // A、B、C、DintdivAで示される4つのチャネル=0; long tempA =0; long pcounterA =0; //チャネル1のフィルタリングされていないパルス幅intdivB =0; long tempB =0; long pcounterB =0; //チャネル2のフィルタリングされていないパルス幅intdivC =0; long tempC =0; long pcounterC =0; //チャネル1のフィルタリングされていないパルス幅intdivD =0; long tempD =0; long pcounterD =0; //チャネル1のフィルタリングされていないパルス幅intpwindow =7500; //パルス幅の最大タイムアウト値// ***************************************** *********** int dly1 =4; // TXRピンがハイのままである期間(通常は4uS)int dly2 =1; // TXRピンがLOWになった後、読み取りを開始する前にパルス幅の読み取りを開始するまでの遅延-通常は1 uS int dly3 =500; //パルス幅をサンプリングしてから次のサイクルを開始するまでのマイクロ秒単位の遅延// ************************************ **************** int threshdiff =15; //平均に追加して、LEDが点灯する特定のしきい値になります(V21を25から20に変更)long pulseav =0; //キャリブレーション用の出力値を格納します// Vibration Motor boolean haptic =false; //一定期間振動モーターをオンにするために使用されるフラグintvduration =1; //振動モーターが有効にしたプログラムサイクルの数intvcounter =vduration; // vサイクルカウンターvoidsetup(){//振動モーター/触覚フィードバックpinMode(12、OUTPUT); // Arduinoの振動モータードライバー-D10digitalWrite(12、LOW); //モーターをオフにしますSerial.begin(115200); //テストデータ出力用のセットアップシリアルインターフェイス// WS2182LEDドライバーセットアップLEDS.addLeds (leds、NUM_LEDS); //この場合のRGBのデフォルトは、LEDメーカーによって異なる場合がありますLEDS.setBrightness(5); //ここでLEDの明るさを設定します//消費電力の5vで1Aに制限しますFastLED.setMaxPowerInVoltsAndMilliamps(5,100); FastLED.setDither(0); //自動ディザリング機能をオフにしてフリッカーを削除します// ArduinoMiniProの論理ピン割り当て//論理ピン名2,3,4,5,6,7,8,9ボードに印刷されたD2-D9ピン名と同じ//論理ピン名10,11,12,13,14,15,16,17は、ボードに印刷されたD10-D13、A0-A3ピン名に相当します//ピエゾブザーpinMode(10、OUTPUT); // Arduinoのピエゾブザードライバー-D10 //送信pinMode(2、OUTPUT); // Arduinoからのパルス出力-D2pinMode(4、OUTPUT); // Arduinoからのパルス出力-D4pinMode(6、OUTPUT); // Arduinoからのパルス出力-D6pinMode(8、OUTPUT); // Arduinoからのパルス出力-D8 //チャンネルApinMode(3、INPUT); // LM339のピン2からArduinoへの信号入力-D3 //チャネルBpinMode(5、INPUT); // LM339のピン1からArduinoへの信号入力-D5 //チャネルCpinMode(7、INPUT); // LM339のピン14からArduinoへの信号入力-D7 //チャネルDpinMode(9、INPUT); // LM339のピン13からArduinoへの信号入力-D9} void loop(){//コイルをパルスして読み取る------------------------- -------------------- //チャネル1(ワンドのポイント)digitalWrite(2、HIGH); // TXピンをhighdelayMicroseconds(dly1);に設定します//出力をローに設定する前の遅延pindigitalWrite(2、LOW); // TXピンをlowdelayMicroseconds(dly2);に設定します//パルス幅をサンプリングする前の遅延pcounterA =pulseIn(3、LOW、pwindow); digitalWrite(2、LOW); // TXピンをLOWdelayMicroseconds(dly3);に設定します//パルス幅をサンプリングする前の遅延//ローパスフィルターを適用して、チャネル1をスムーズにする信号を送信if(pcounterA> =sthreshold){smoothedvalue1 =(alpha * Smoothedvalue1)+((1-alpha)* pcounterA); } pcounterA =Smoothedvalue1; //チャネル2digitalWrite(4、HIGH); // TXピンをhighdelayMicroseconds(dly1);に設定します//出力をローに設定する前の遅延pindigitalWrite(4、LOW); // TXピンをlowdelayMicroseconds(dly2);に設定します//パルス幅をサンプリングする前の遅延pcounterB =pulseIn(5、LOW、pwindow); digitalWrite(4、LOW); // TXピンをLOWdelayMicroseconds(dly3);に設定します//パルス幅をサンプリングする前の遅延//ローパスフィルターを適用して、チャネル2をスムーズにする信号を送信if(pcounterB> =sthreshold){smoothedvalue2 =(alpha * Smoothedvalue2)+((1-alpha)* pcounterB); } pcounterB =Smoothedvalue2; //チャネル3digitalWrite(6、HIGH); // TXピンをhighdelayMicroseconds(dly1);に設定します//出力をローに設定する前の遅延pindigitalWrite(6、LOW); // TXピンをlowdelayMicroseconds(dly2);に設定します//パルス幅をサンプリングする前の遅延pcounterC =pulseIn(7、LOW、pwindow); digitalWrite(6、LOW); // TXピンをLOWに設定します// delayMicroseconds(dly3); //パルス幅をサンプリングする前の遅延//ローパスフィルターを適用してチャネル3を平滑化するように信号を送るif(pcounterC> =sthreshold){smoothedvalue3 =(alpha * Smoothedvalue3)+((1-alpha)* pcounterC); } pcounterC =spooledvalue3; //チャネル4digitalWrite(8、HIGH); // TXピンをhighdelayMicroseconds(dly1);に設定します//出力をローに設定する前の遅延pindigitalWrite(8、LOW); // TXピンをlowdelayMicroseconds(dly2);に設定します//パルス幅をサンプリングする前の遅延pcounterD =pulseIn(9、LOW、pwindow); digitalWrite(8、LOW); // TXピンをLOWdelayMicroseconds(dly3);に設定します//パルス幅をサンプリングする前の遅延//ローパスフィルターを適用して、チャンネル4をスムーズにする信号を送信if(pcounterD> =sthreshold){smoothedvalue4 =(alpha * Smoothedvalue4)+((1-alpha)* pcounterD); } pcounterD =Smoothedvalue4; //値を出力してから、カウンターをリセットします/ * Serial.print(pcounterA); Serial.print( ""); Serial.print(calav1); Serial.print( ""); Serial.print(pcounterB); Serial.print( ""); Serial.print(calav2); Serial.print( ""); Serial.print(pcounterC); Serial.print( ""); Serial.print(calav3); Serial.print( ""); Serial.print(pcounterD); Serial.print( ""); Serial.println(calav4); * ///電源投入時のしきい値の呼び出し//一定時間待機して、各コイルのベースラインを設定しますif(sample ==false){calcounter ++; } if(calcounter>(scount-numsamples)){// 90を待ってから、サンプルを合計して平均を計算する準備をしますif(pcounterA> sthreshold){calav1 =calav1 + pcounterA; div1 ++; } if(pcounterB> sthreshold){calav2 =calav2 + pcounterB; div2 ++; } if(pcounterC> sthreshold){calav3 =calav3 + pcounterC; div3 ++; } if(pcounterD> sthreshold){calav4 =calav4 + pcounterD; div4 ++; }} if((calcounter> scount)&&(sample ==false)){//しきい値を設定calav1 =calav1 / div1; calav2 =calav2 / div2; calav3 =calav3 / div3; calav4 =calav4 / div4; // LEDを点滅させてキャリブレーションが完了したことを示します// 0-3青いleds [3] =CRGB ::Blue; FastLED.show(); delay(t1); leds [3] =CRGB ::Black; leds [2] =CRGB ::Blue; FastLED.show(); delay(t1); leds [2] =CRGB ::Black; leds [1] =CRGB ::Blue; FastLED.show(); delay(t1); leds [1] =CRGB ::Black; leds [0] =CRGB ::Blue; FastLED.show(); delay(t1); leds [0] =CRGB ::Black; // 3-0緑のleds [3] =CRGB ::Green; FastLED.show(); delay(t1); leds [3] =CRGB ::Black; leds [2] =CRGB ::Green; FastLED.show(); delay(t1); leds [2] =CRGB ::Black; leds [1] =CRGB ::Green; FastLED.show(); delay(t1); leds [1] =CRGB ::Black; leds [0] =CRGB ::Green; FastLED.show(); delay(t1); leds [0] =CRGB ::Black; FastLED.show(); //サウンドブザー// digitalWrite(10、HIGH); //出力ピンをHighに設定して、LEDをアクティブにします// delay(t1 * 2); digitalWrite(10、LOW); //出力ピンをHighに設定して、LEDをアクティブにします//サンプルフラグをリセットしますsample =true; calcounter =0; } if(sample ==true){updateLEDs(); } //触覚フィードバック-しきい値を超えた場合は、「vduration」サイクルの振動モーターをオンにしますif(haptic ==true){//フラグが設定されている場合は、モーターをオンにしますdigitalWrite(12、HIGH); //出力ピンをHighに設定して、振動モーターをアクティブにしますif(vcounter> =1){vcounter--; //カウンタをデクリメントします} else {digitalWrite(12、LOW); //出力ピンをLOWに設定して、振動モーターを非アクティブにしますhaptic =false; //サイクル数後にバイブレーションフラグをリセットしますvcounter =vduration; //振動カウンターをリセット}}} // Subroutinesvoid updateLEDs(){//結果を表示//紫-最強のターゲット信号+(ビープピエゾと触覚フィードバック)//赤-高+(触覚フィードバック)//緑-中程度+ (触覚フィードバック)//青-最も弱いターゲット信号//すべてのLEDをオフにするleds [0] =CRGB ::Black; leds [1] =CRGB ::Black; leds [2] =CRGB ::Black; leds [3] =CRGB ::Black; digitalWrite(10、LOW); //出力ピンをLOWに設定して、Piezo SpeakerdigitalWrite(12、LOW);を非アクティブにします。 //出力ピンをLOWに設定して、振動モーターを非アクティブにします// ***************チャネル1if(pcounterA <(calav1 *(ledthreshold1))){//強い場合は紫色を表示ターゲットleds [3] =CRGB ::Purple; digitalWrite(10、HIGH); //出力ピンをHighに設定して、ピエゾスピーカーをアクティブにしますhaptic =true; } elseif(pcounterA <(calav1 *(ledthreshold2))){//中程度の強度のターゲットの場合は青を表示leds [3] =CRGB ::Red;触覚=真; } elseif(pcounterA <(calav1 *(ledthreshold3))){//中程度の強度のターゲットの場合は青を表示leds [3] =CRGB ::Green;触覚=真; } elseif(pcounterA <(calav1 *(ledthreshold4))){//チャネル1の感度により、しきい値にパーセンテージポイントを追加leds [3] =CRGB ::Blue; } //チャネル2の表示if((pcounterB  

Custom parts and enclosures

Thingiverse
This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.This neat little device is self-calibrating with one button operation, rechargeable through a USB port and uses color LEDs, sound and vibration to indicate target strength.Included in the instructable is all of the designs, testing, code and 3D files required to build on your own. I hope you enjoy building and using this as much as I have!!CAD file on thingiverse.com

回路図

This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.

The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.

製造プロセス

  1. セラミックフィルター
  2. ライフセーバー
  3. 16鍛冶技術
  4. 金属せん断
  5. 板金パンチングの費用対効果
  6. 板金パンチングとは?
  7. パンチングメタルマシンとアプリケーション
  8. 鋳造所とは何ですか?
  9. 金属コイルの成形:コイルスリット
  10. 薄板金の概要
  11. 板金矯正とは?