Arduino Nanoで高感度金属探知機を自作する – DIYガイド
必要な部品と材料
- Arduino Nano R3 × 1
- オペアンプ(コンパレータ+リファレンス内蔵) × 1
- IRF840 パワーMOSFET × 1
- LED(汎用) × 6
- 抵抗、コンデンサ、ダイオード類 × 1式
- サーチコイル(直径20cm、絶縁銅線0.3〜0.5mm²を25ターン巻き)
- リチウムイオン電池(直列2セル)
必要な工具
- はんだごて
使用するソフトウェア
- Arduino IDE
プロジェクトの概要
この金属探知機は、ロシアでよく知られるパルス誘導型金属探知機「PIRAT」をArduino Nanoで簡略化したものです。コインなら15cm、より大きな金属物体なら40cm以上の距離で検出可能で、構造の割には優れた性能を発揮します。
パルス誘導(PI)方式の仕組み
PI型金属探知機は、1つのコイルを送信と受信の両方に使用します。コイルに強力な短パルス電流を流すと、一瞬の磁場が発生します。パルスが終わると磁場の極性が反転して急激に崩壊し、鋭い電気的スパイク(反射パルス)が生じます。この反射パルスは約30マイクロ秒しか続きませんが、金属が磁場の範囲内に入ると、受信信号の振幅と位相に変化が現れます。この変化量から金属の大きさと距離を推定でき、鉄系・非鉄系の識別も可能です。
本装置の構成
- Arduino Nano マイコン
- パワーMOSFETトランジスタ
- オペアンプ
- 少数の抵抗・コンデンサ
- サーチコイル
- LEDとブザー(表示用)

以前のバージョンではスマートフォンを表示器として使い、頻繁なキャリブレーションが必要でしたが、今回はArduinoのリセットによる自己キャリブレーション機能を備えたスタンドアロン型です。直列接続した2つのリチウムイオン電池で駆動し、光と音の両方で検知を知らせます。金属に近づくほどLEDの点滅頻度と明るさが増します。
回路図

ソースコード
// PI metal detector for arduino version_18_min (C) alex --- 1967 2015
int ss0 = 0; int ss1 = 0; int ss2 = 0;
long c0 = 0; long c1 = 0; long c2 = 0;
byte i = 0;
int sss0 = 0; int sss1 = 0; int sss2 = 0;
int s0 = 0; int s1 = 0; int s2 = 0;
void setup() {
DDRB = 0xFF; // ポートB 全出力
DDRD = 0xFF; // ポートD 全出力
for (i = 0; i < 255; i++) { // キャリブレーション
PORTB = B11111111; // キーを開く(ON)
delayMicroseconds(200);
PORTB = 0; // キーを閉じる(OFF - サーチコイルの電流遮断)
delayMicroseconds(20);
s0 = analogRead(A0);
s1 = analogRead(A0);
s2 = analogRead(A0);
c0 = c0 + s0;
c1 = c1 + s1;
c2 = c2 + s2;
delay(3);
}
c0 = c0 / 255; c0 = c0 - 5;
c1 = c1 / 255; c1 = c1 - 5;
c2 = c2 / 255; c2 = c2 - 5;
}
void loop() {
PORTB = B11111111;
delayMicroseconds(200);
PORTB = 0;
delayMicroseconds(20);
s0 = analogRead(A0);
s1 = analogRead(A0);
s2 = analogRead(A0);
ss0 = s0 - c0;
if (ss0 < 0) { sss0 = 1; }
ss0 = ss0 / 16;
PORTD = ss0; // LED表示へ出力
delay(1);
ss1 = s1 - c1;
if (ss1 < 0) { sss1 = 1; }
ss1 = ss1 / 16;
PORTD = ss1;
delay(1);
ss2 = s2 - c2;
if (ss2 < 0) { sss2 = 1; }
ss2 = ss2 / 16;
PORTD = ss2;
delay(1);
if (sss0 + sss1 + sss2 > 2) {
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);
digitalWrite(1, HIGH);
digitalWrite(0, HIGH);
delay(1);
sss0 = 0; sss1 = 0; sss2 = 0;
}
}
製造プロセス
- DIY Arduinoワードクロック – 文字で時刻を表示する洗練されたリアルタイムクロック
- Arduino Nanoで20kHzオシロスコープを自作:Nokia 5110 LCD搭載・簡易DIYガイド
- DIY ADXL335地震検知器 - 低消費電力3軸加速度センサープロジェクト
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
- Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
- Arduino UNOで作るシンプル電卓 - シリアルモニターで四則演算
- Arduino Nanoとロータリーエンコーダーで作る高精度測定ホイール
- シンプルなArduinoストップウォッチ:ボタンで動作するクロノメーターの作り方
- DIY ArduinoラジオニクスEMR治療デバイスの構築
- Arduino NanoとSG90サーボで作るDIY 2軸モーションレーシングシミュレータ