Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Импульсно-индукционный металлоискатель на 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 пин

Инструменты

Принцип работы (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).

Модификации автора:

  1. Ток катушки: вместо резистора 150 Ом — подстроечник 47 кОм. Увеличение сопротивления -> увеличение тока катушки -> выше чувствительность.
  2. Смещение АЦП: вместо резистора 62 кОм — подстроечник 100 кОм. Устанавливает ~4.5V на входе A0 Arduino (рабочая точка оп-амплификатора). Критично для разных ОУ и напряжений питания.
  3. Питание: 4x Li-Ion последовательно (>15V). Arduino Nano не выдерживает >12V на Vin, поэтому 7805 на пине +5V (с радиатором).

Катушка

Проволока 0.4 мм (с изоляцией), 25 витков, круг Ø19 см. Важно: никаких металлических предметов рядом (винты, клеящиеся элементы) — только клей/эпоксидка. Экранирование не требуется, но катушка должна быть жёстко зафиксирована.

Результаты

Скетч (основные моменты)

Код использует 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
}

Настройка и калибровка

  1. Соберите схему на макетке или плате. Проверьте питание: 12V на катушку/MOSFET, 5V на Arduino/ОУ.
  2. Подключите HC-05 (TX->RX Nano, RX->TX через делитель). Подайте питание.
  3. Установите приложение Spirit PI на Android. Сопряжите с HC-05 (пароль 1234 или 0000).
  4. В приложении подключитесь к модулю. Должен появиться график сигнала.
  5. Подстроечником 47к (ток катушки) добейтесь стабильных импульсов на графике.
  6. Подстроечником 100к (баланс/A0) установите нулевую линию посередине диапазона АЦП.
  7. Командами в приложении (или терминале) настройте частоту (freq) и duty cycle для лучшей чувствительности.
  8. Протестируйте на монете и крупном металле. При необходимости скорректируйте пороги в приложении.

Схема

Файл схемы: изображение в разделе Schematics (оригинал с модификациями). Ключевые узлы: драйвер катушки (MOSFET + биполярные транзисторы), усилитель/компаратор на ОУ, делитель напряжения на A0, делитель батареи на A7, HC-05 на Serial.

Важные замечания

Производственный процесс

  1. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  2. Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
  3. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  4. Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
  5. Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
  6. DIY Arduino Radionics EMR Treatment Device — радионическое устройство
  7. DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
  8. Создание ультразвукового дальномера на Arduino UNO и датчике SR04
  9. Система безопасности на Arduino: обнаружение движения и тревога
  10. Создание дешевого детектора молний на Arduino Uno