Очень простой металлоискатель можно сделать на популярной микроконтроллерной платформе Arduino. Принципиальная схема его показана далее.
Схема импульсного металлодетектора на Ардуино


Принцип действия следующий: Ардуино генерирует (порт 8 на схеме) короткий импульс длиной равной полупериоду резонансной частоты катушки Тх. Транзистор 13003 усиливает этот импульс и передает в катушку Тх. При этом в катушке Тх возникают затухающие синусоидальные колебания, излучаемые катушкой в пространство. Этот сигнал отражается от мишени и принимается катушкой Rx.
Далее 2х каскадный усилитель на транзисторах КТ315Б усиливает сигнал и передает его на аналоговый порт Ардуино А0. Arduino выдает 10 импульсов в 8-й порт и после каждого импульса считывает сигнал с порта А0. Определяется среднее арифметическое всех считываний и сравнивается с некоторым базовым уровнем, который задается потенциометром R5 (регулировка чувствительности). Если среднее арифметическое превышает базовый уровень, Ардуино генерирует сигнал с частотой 1000 Гц (резонансная частота пищалки) и выдает его на порт А5.
Есть проблема в определении величины запаздывания считывания затухающего синусоидального колебания. Нужно считать пик синусоиды, а функция скетча analogRead (A0) выполняется примерно в течение 100 микросекунд (это довольно длительный период) и не известно, когда происходит собственно считывание величины (в начале, середине или конце функции analogRead (A0)). Поэтому в схему введен потенциометр R4, который задает величину задержки функции analogRead (A0). Вращая ручку этого потенциометра определяем задержку вышеуказанной функции для получения максимальной величины сигнала.
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(8, OUTPUT);
pinMode(A4, INPUT);
pinMode(A5, OUTPUT);
}
void loop() {
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
int val8 = 0;
int val9 = 0;
int val10 = 0;
int sumval = 0;
int impuls = 100; //длина импульса подобрать взависимости от частоты
int zaderjka = 0;
int basa = 0;
zaderjka = analogRead(A4);
pinMode(A0, OUTPUT);
digitalWrite(A0, LOW);
pinMode(A0, INPUT);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val1 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val2 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val3 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val4 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val5 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val6 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val7 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val8 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val9 = analogRead(A0);
digitalWrite(8,HIGH);
delayMicroseconds(impuls);
digitalWrite(8, LOW);
delayMicroseconds(zaderjka);
val10 = analogRead(A0);
sumval = val1 + val2 + val3 + val4 + val5 + val6 + val7 + val8 + val9 + val10;
sumval = sumval/5;
basa = analogRead(A1);
if (sumval > basa)
{tone(A5,1000);
delay(50);
noTone(A5);
}
else {delay(50);
}
}


Возможно замена транзисторного усилителя на операционный усилитель повысит чувствительность металлоискателя. Принципиальная схема и скетч прилагаются, подробнее смотрите на форуме. Автор схемы d-rilovo.






