金属探知機の自作
金属探知機の自作,その1
科学の祭典的なイベントで,金属探知機を使って隠して置いた何かを小学生に探させて, 見つけたらプレゼントするとか面白いよね.ということで,金属探知機の製作依頼.作ったことないけど,コイルでLが変われば 発振周波数変わるようにすれば簡易的なのができるんじゃないっすか,作って見ますよ. という軽い感じで引き受けて結構大変な目にあってます. おかげでアナログ的な回路の勉強にはなってますが.
ネットで調べたらいろいろなあるものの,いつものように取りあえずやってみないと イメージが掴めないので実験開始.
(1)簡単にコイルのM結合で周波数がどうなるか実験.
適当にコイルマキマキ↓
発振回路も適当に,用は正帰還かければ発振するのでトランジスタ1石で正帰還して 発振させてみた...ら,MHzオーダー.周波数落とさないと聞こえないのででっかいCを 入れてみたら発振しない.つまり,低周波で1石では手巻きのコイル程度では振幅条件を 満たす帰還はかけられないってこと,そりゃそうだ.
このコイルに適当に金属を近づけると,周波数は数%変わる.感度は十分.
あとはどう低周波に落とすか.
(2)真面目にビート.
ネットで調べたら同じ周波数に調整した2つの独立した発振器で一方w検知コイルにして 周波数変化させ,ビートを取るのが真面目な製品の原理だそうで,それを実験. といってもネットの回路図の部品がすぐに揃うわけではないので,適当にあった部品と 適当な発振回路で同じように巻いたコイル2個を使って実験.
回路はこんな感じ,片方だけに金属を近づけてみます↓
Cの容量は当てにならないのでCカットアンドトライあんどLは開いたり閉じたり変形させて 2つを周波数を合わせ込めないかとがんばったら,奇跡的に低周波のビートがとれた.
でもこれ,携帯できるように作るのは適当じゃできない.最悪,これをちゃんと作るとして, もっと簡単にできないか次の作戦を考え中.
記念に動画→ 金属探知機の自作
金属探知機の自作,その2
マイコンで発振周波数をカウントして金属探知機を作っておられる方がいらっしゃったので, この手でいこうと思って,マイコンがカウントできる(できればソフトウェアカウント) くらいのまで発振周波数を落とすため,ひたすらコイル巻きました.参考URL↓
http://homepage2.nifty.com/momo3/metald.htm
更に,1石でマイコンの入力に持っていけるように,振幅ができるだけ大きくなる 回路定数をカットアンドトライで探し,振幅3.2V程度で87kHz位になりました. コイルの中に100円玉をおいたら周波数が92KHzに変化,約5%変わりました. これなら,後はマイコンに任せて周波数の差分を取って可聴域の音を鳴らせば 簡単なアナログ回路とマイコンで簡易金属探知機ができそうです.
金属探知機の自作,その3, 完成!!
金属探知機がなんとかできました.こんな感じ↓回路図↓
教科書によく載ってるコルピッツ発振回路にバイアスを適当に加えてコレクタから大振幅の 出力を取り出し,PICマイコンで処理しています.
マイコン側では, 16ビットのタイマ1を外部クロックでカウントし, (PIC12F675のGP5を外部クロックに使っています) 8ビットのタイマ0で適当なタイミングでタイマ1の値を取り出し, 金属がないときにセットした値と比較して,差分から出力信号の周期を決め, 圧電スピーカのON-OFFにより出力します.
動画はこちら→ Handmade Metal Detector
プログラム
プログラムリストはこちらから→ MetalDetector.cをダウンロード#include < pic.h> // カッコの後のブランク削除 #include < stdlib.h> // カッコの後のブランク削除 #include "delay.h" __CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO); __IDLOC(0101); ioport(); unsigned char tH=0; // タイマー1読み取り用変数上位8ビット unsigned char tL=0; // タイマー1読み取り用変数下位8ビット unsigned int tosc=0; // 発振器の読み unsigned int toff=0; // 発信器のオフセット記憶用 unsigned int tout=0; // スピーカ出力の発振周期 main() { unsigned char t; OSCCAL=_READ_OSCCAL_DATA(); ANSEL=0x00; // ADコンバータ使用しない CMCON=0x07; // コンパレータ使用しない GPIO0=0; // GP0ピンの出力データを0にする TRIS0=0; // GP0ピンは出力ピン TRIS1=1; // GP1ピンは入力ピン, 外部クロックオフセット設定用 TRIS5=1; // GP5ピンは入力ピン, 外部クロック用 T1CKPS0=0; // タイマ1のプリスケーラは1:1 T1CKPS1=0; TMR1CS=1; // タイマ1を外部クロックにする T1SYNC=1; // 外部クロックは,内部クロックと同期しないで取り込み TMR1H=0; // タイマ1の値を0にする TMR1L=0; TMR1ON=1; // タイマ1を動作開始する PSA=0; // タイマ0でプリスケーラを1:128で使う PS0=0; PS1=1; PS2=1; T0CS=0; // タイマ0に命令クロックを入力する TMR0=0; // タイマ0を0にする T0IF=0; // T0IFを0にする T0IE=1; // タイマ0オーバーフロー割り込みを使う GIE=1; while(1){ GPIO0=0; DelayUs(tout); GPIO0=1; DelayUs(tout); } } interrupt isr() { T0IF=0; // T0IFを0にする TMR1ON=0; // Timer1を停止 tH=TMR1H; // Timer1の値を読み取り tL=TMR1L; TMR1H=0; // Timer1をリセット TMR1L=0; TMR1ON=1; // Timer1を停止再開 tosc=tH*256+tL; // 上位と下位を別々に読み出したのでまとめる if (GPIO1==0) toff=tosc; // オフセット設定入力があればオフセットを設定 tout=3000/(abs(tosc-toff)+1); // スピーカ出力の周期は外部発振器の周期変化で決定 }
基板設計<\h3>
先日の金属探知機は好評だったので,ハンダ付け教室とかのネタに,夕方から基板設計しました.
こんな感じで片面でできました↓ でも自分でエッチングするならベタで作らないと.
まとめ
pdfでまとめました。簡易金属探知機の設計と製作
作るよりは買った方が早いです↓
コンパクトタイプの金属探知機です。コンパクト金属探知機
危険物の探知、紛失物の捜査に!高機能ハンディ金属探知機。感度調節機能付き ハンディ高感度金属探知機 EMD-28【送料無料!!】【ポイント10倍!!6/25(金)10:00~6/28(月)9:59】【smtb-k】【w4】
プロ用金属探知機
[KN-Z9(W)]金属探知機キット組立サポート付[KN-Z9(W)]金属探知機キット組立サポート付
ESP32 Wifi Bluetooth開発ボード |
Arduino Nano Every |
Raspberry Pi pico |
FPGA XILINX Artix-7 |