000000 ランダム
 HOME | DIARY | PROFILE 【お気に入りブログ登録】 【ログイン】

CPUを作ろう ~計算機教材とマイコンと電子工作~

金属探知機の自作

金属探知機の自作,その1

科学の祭典的なイベントで,金属探知機を使って隠して置いた何かを小学生に探させて,
見つけたらプレゼントするとか面白いよね.
ということで,金属探知機の製作依頼.作ったことないけど,コイルでLが変われば発振周波数変わるようにすれば簡易的なのができるんじゃないっすか,作って見ますよ.という軽い感じで引き受けて結構大変な目にあってます.
おかげでアナログ的な回路の勉強にはなってますが.

ネットで調べたらいろいろなあるものの,いつものように取りあえずやってみないとイメージが掴めないので実験開始.

(1)簡単にコイルのM結合で周波数がどうなるか実験.
適当にコイルマキマキ↓
DSC03370.JPG

発振回路も適当に,用は正帰還かければ発振するのでトランジスタ1石で正帰還して発振させてみた...ら,MHzオーダー.周波数落とさないと聞こえないのででっかいCを入れてみたら発振しない.つまり,低周波で1石では手巻きのコイル程度では振幅条件を満たす帰還はかけられないってこと,そりゃそうだ.
このコイルに適当に金属を近づけると,周波数は数%変わる.感度は十分.あとはどう低周波に落とすか.

(2)真面目にビート.
ネットで調べたら同じ周波数に調整した2つの独立した発振器で一方w検知コイルにして周波数変化させ,ビートを取るのが真面目な製品の原理だそうで,それを実験.
といってもネットの回路図の部品がすぐに揃うわけではないので,適当にあった部品と適当な発振回路で同じように巻いたコイル2個を使って実験.

回路はこんな感じ,片方だけに金属を近づけてみます↓

DSC03384.JPG

Cの容量は当てにならないのでCカットアンドトライあんどLは開いたり閉じたり変形させて2つを周波数を合わせ込めないかとがんばったら,奇跡的に低周波のビートがとれた.

DSC03379.JPG

でもこれ,携帯できるように作るのは適当じゃできない.最悪,これをちゃんと作るとして,
もっと簡単にできないか次の作戦を考え中.

記念に動画→ 金属探知機の自作

----------------------------------------
金属探知機の自作,その2

マイコンで発振周波数をカウントして金属探知機を作っておられる方がいらっしゃったので,
この手でいこうと思って,マイコンがカウントできる(できればソフトウェアカウント)
くらいのまで発振周波数を落とすため,ひたすらコイル巻きました.
参考URL↓
http://homepage2.nifty.com/momo3/metald.htm

DSC03385.JPG

更に,1石でマイコンの入力に持っていけるように,振幅ができるだけ大きくなる
回路定数をカットアンドトライで探し,振幅3.2V程度で87kHz位になりました.
コイルの中に100円玉をおいたら周波数が92KHzに変化,約5%変わりました.
これなら,後はマイコンに任せて周波数の差分を取って可聴域の音を鳴らせば
簡単なアナログ回路とマイコンで簡易金属探知機ができそうです.

DSC03387.JPG


----------------------------------------
金属探知機の自作,その3, 完成!!

金属探知機がなんとかできました.こんな感じ↓

DSC03393.JPG

回路図↓

DSC03403.JPG

教科書によく載ってるコルピッツ発振回路にバイアスを適当に加えてコレクタから大振幅の出力を取り出し,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); // スピーカ出力の周期は外部発振器の周期変化で決定
}


----------------------------------------

先日の金属探知機は好評だったので,ハンダ付け教室とかのネタに,夕方から基板設計しました.
こんな感じで片面でできました↓ でも自分でエッチングするならベタで作らないと.

metaldetector-board.JPG

----------------------------------------
まとめ↓
簡易金属探知機の設計と製作

----------------------------------------

作るより買った方が早いです↓

コンパクトタイプの金属探知機です。コンパクト金属探知機

危険物の探知、紛失物の捜査に!高機能ハンディ金属探知機。感度調節機能付き ハンディ高感度金属探知機 EMD-28【送料無料!!】【ポイント10倍!!6/25(金)10:00~6/28(月)9:59】【smtb-k】【w4】
プロ用金属探知機


[KN-Z9(W)]金属探知機キット組立サポート付[KN-Z9(W)]金属探知機キット組立サポート付


Copyright (c) 1997-2018 Rakuten, Inc. All Rights Reserved.