Импульсно-индукционный металлоискатель на Arduino Nano — сборка и настройка
Компоненты и материалы
| Компонент | Количество | |
|---|---|---|
| Arduino Nano R3 | 1 | |
| Bluetooth-модуль HC-05 | 1 | Связь с Android-приложением Spirit PI |
| Транзистор PNP (общего назначения, напр. 2N3906) | 1 | |
| Транзистор NPN (общего назначения, напр. 2N3904) | 1 | |
| Мощный MOSFET N-канал (напр. IRF540N) | 1 | Ключ катушки |
| Операционный усилитель / компаратор (напр. LM393 или TL072) | 1 | Усиление сигнала от катушки |
| Диод 1N4148 (быстрый коммутационный) | 2 | |
| Конденсатор 10 мкФ | 1 | |
| Конденсатор 1 мкФ | 1 | |
| Подстроечный резистор 100 кОм (однооборотный) | 1 | Баланс / порог срабатывания |
| Подстроечный резистор 47 кОм | 1 | Регулировка тока катушки (вместо 150 Ом) |
| Набор резисторов (12 значений) | 1 | По схеме |
| Катушка: мiedzянная проволока 0.4 мм, 25 витков, Ø 19 см | 1 | Изготовить самостоятельно |
| Батарея: 4x Li-Ion (18650) последовательно (~16V) | 1 | Питание катушки и стабилизатора 5V |
| Стабилизатор 7805 (5V, на радиаторе) для Arduino | 1 | Arduino Vin макс 12V, поэтому 7805 на +5V пин |
Инструменты
- Паяльник, припой, флюс, третья рука
- Мультиметр (настройка рабочей точки)
- Компьютер с Arduino IDE и Android-телефоном
Принцип работы (Pulse Induction — PI)
PI-металлоискатели используют одну катушку как передающую и принимающую. Мощные короткие импульсы тока создают магнитное поле. При прекращении импульса поле схватывается, индуцируя отражённый импульс (reflected pulse) длительностью ~30 мкс. Металл в зоне поля изменяет амплитуду и фазу этого отражённого импульса. Измеряя изменение, можно детектировать металл, оценивать размер/глубину и различать ферритичные/неферритичные металлы.
Основа и модификации
База: проект PIRAT Wireless Metal Detector от N.E.C.O. (сайт). Управление и отображение — через Android-приложение Spirit PI (Play Store, бесплатная/Pro версии). Связь — Bluetooth HC-05 (baud 115200).
Модификации автора:
- Ток катушки: вместо резистора 150 Ом — подстроечник 47 кОм. Увеличение сопротивления -> увеличение тока катушки -> выше чувствительность.
- Смещение АЦП: вместо резистора 62 кОм — подстроечник 100 кОм. Устанавливает ~4.5V на входе A0 Arduino (рабочая точка оп-амплификатора). Критично для разных ОУ и напряжений питания.
- Питание: 4x Li-Ion последовательно (>15V). Arduino Nano не выдерживает >12V на Vin, поэтому 7805 на пине +5V (с радиатором).
Катушка
Проволока 0.4 мм (с изоляцией), 25 витков, круг Ø19 см. Важно: никаких металлических предметов рядом (винты, клеящиеся элементы) — только клей/эпоксидка. Экранирование не требуется, но катушка должна быть жёстко зафиксирована.
Результаты
- Монета: детектируется на 10–15 см.
- Крупный металл: 30–40 см и более.
- Сборка и настройка — относительно простые.
Скетч (основные моменты)
Код использует EEPROM для сохранения настроек (duty cycle, частота, баланс). Управление по Bluetooth: команды 'n'/'m' (duty), 'j'/'k' (freq), '+'/'-' (balance), 'p' (сброс).
#include
#define pulsePin 2
int timer = 200;
const int button1 = 12;
// EEPROM адреса
int addr_duty = 0, addr_freq = 1;
int duty_cycle, freq;
int duty_def = 10, freq_def = 60;
// Баланс
int value_count = 0, value_count_def = 100;
int balance_value = 0;
// Таймеры
unsigned long startMillis, currentMillis;
long period = 100000; // мкс
// Измерение батареи (делитель 100к/10к на A7)
float r1 = 101000, r2 = 10000;
float arefVolt = 4.8;
float vinv = 0;
unsigned long startMillisVolts, currentMillisVolts;
long periodVolts = 2000; // мс
void setup() {
Serial.begin(115200); // Bluetooth baud rate
// Чтение настроек из EEPROM
duty_cycle = EEPROM.read(addr_duty);
freq = EEPROM.read(addr_freq);
if (duty_cycle == 0 || duty_cycle == 255) { duty_cycle = duty_def; EEPROM.write(addr_duty, duty_cycle); }
if (freq == 0 || freq == 255) { freq = freq_def; EEPROM.write(addr_freq, freq); }
pinMode(pulsePin, OUTPUT);
}
void loop() {
currentMillis = micros();
currentMillisVolts = millis();
// Bluetooth команды
if (Serial.available() > 0) {
char data = Serial.read();
setDutyAndFreq(data);
}
// Генерация импульсов
if (currentMillis - startMillis >= period) {
period = 1000000 / freq;
digitalWrite(pulsePin, HIGH);
delayMicroseconds(duty_cycle * 10);
digitalWrite(pulsePin, LOW);
// Чтение АЦП (усреднение)
for (int i = 0; i < 3; i++) analogRead(A0);
delayMicroseconds(10);
int sensorValue = analogRead(A0) / 5;
sendData();
startMillis = currentMillis;
}
// Измерение напряжения батареи каждые 2 сек
if (currentMillisVolts - startMillisVolts >= periodVolts) {
readVoltage();
startMillisVolts = currentMillisVolts;
}
}
void setDutyAndFreq(char cmd) {
// n/m - duty +/-, j/k - freq +/-, +/- - balance, p - reset
// ... реализация чтения/записи EEPROM и изменения переменных
}
void readVoltage() {
vinv = 0;
for (int i = 0; i < 100; i++) {
float vout = (analogRead(A7) * arefVolt) / 1023.0;
vinv += vout / (r2 / (r1 + r2));
}
vinv /= 100;
if (vinv < 0.9) vinv = 0;
}
void sendData() {
// Формат:
String data = "<";
data += sensorValue; data += "/";
data += freq; data += "/";
data += duty_cycle; data += "/";
data += vinv; data += ">";
Serial.println(data); // На Bluetooth
// bluetooth.println(data); // если используется SoftwareSerial
}
Настройка и калибровка
- Соберите схему на макетке или плате. Проверьте питание: 12V на катушку/MOSFET, 5V на Arduino/ОУ.
- Подключите HC-05 (TX->RX Nano, RX->TX через делитель). Подайте питание.
- Установите приложение Spirit PI на Android. Сопряжите с HC-05 (пароль 1234 или 0000).
- В приложении подключитесь к модулю. Должен появиться график сигнала.
- Подстроечником 47к (ток катушки) добейтесь стабильных импульсов на графике.
- Подстроечником 100к (баланс/A0) установите нулевую линию посередине диапазона АЦП.
- Командами в приложении (или терминале) настройте частоту (freq) и duty cycle для лучшей чувствительности.
- Протестируйте на монете и крупном металле. При необходимости скорректируйте пороги в приложении.
Схема
Файл схемы: изображение в разделе Schematics (оригинал с модификациями). Ключевые узлы: драйвер катушки (MOSFET + биполярные транзисторы), усилитель/компаратор на ОУ, делитель напряжения на A0, делитель батареи на A7, HC-05 на Serial.
Важные замечания
- Работа с высокими токами катушки — MOSFET должен быть на радиаторе, провода толстые.
- 7805 на 16V входе рассеивает много тепла — нужен хороший радиатор или импульсный стабилизатор.
- Bluetooth HC-05 должен быть настроен на 115200 baud (AT+UART=115200,0,0).
- Приложение Spirit PI закрытое, но бесплатная версия полностью функциональна.
- Проект открыт для модификаций: можно добавить GPS-логгирование, SD-карту, другой дисплей.
Производственный процесс
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
- DIY Arduino Radionics EMR Treatment Device — радионическое устройство
- DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
- Создание ультразвукового дальномера на Arduino UNO и датчике SR04
- Система безопасности на Arduino: обнаружение движения и тревога
- Создание дешевого детектора молний на Arduino Uno