Найти в Дзене

Самый простой металлоискатель на Arduino!

Самый простой металлоискатель на Arduino! Это версия всеми известного импульсного металлоискателя - "Пирата" только основана на всеми известном Arduino микроконтроллере. Имеет хорошую чувствительность особенно на мелкие металлы. Стабилен в не зависимости от температуры и заряда батареи. Схема максимально проста: Пояснение схемы: Arduino генерирует импульсы, они усиливаются полевым транзистором (силовым ключом) который в свою очередь индуцирует импульсы магнитное поле в катушке. Магнитный импульс проходит до искомого металла и индуцирует в нем ток, а затем обратный сигнал магнитного поля. Этот обратный магнитный поток через небольшую задержку возвращается обратно в катушку металлодетектора и генерирует импульс. Сигнал проходит мимо пары диодов (диоды нужны что бы ограничить напряжение до 1 вольта) и уходит на вход операционного усилителя. Усиленный сигнал попадает в arduino в котором высчитывается "спадающий хвост" после отключения катушки силовым ключем. Т.е. как раз ответ от искомого
Фото взято с https://diytimes.ru/post/84
Фото взято с https://diytimes.ru/post/84

Самый простой металлоискатель на Arduino!

Это версия всеми известного импульсного металлоискателя - "Пирата" только основана на всеми известном Arduino микроконтроллере.

Имеет хорошую чувствительность особенно на мелкие металлы. Стабилен в не зависимости от температуры и заряда батареи. Схема максимально проста:

https://diytimes.ru/post/84
https://diytimes.ru/post/84

Пояснение схемы:

Arduino генерирует импульсы, они усиливаются полевым транзистором (силовым ключом) который в свою очередь индуцирует импульсы магнитное поле в катушке. Магнитный импульс проходит до искомого металла и индуцирует в нем ток, а затем обратный сигнал магнитного поля. Этот обратный магнитный поток через небольшую задержку возвращается обратно в катушку металлодетектора и генерирует импульс. Сигнал проходит мимо пары диодов (диоды нужны что бы ограничить напряжение до 1 вольта) и уходит на вход операционного усилителя. Усиленный сигнал попадает в arduino в котором высчитывается "спадающий хвост" после отключения катушки силовым ключем. Т.е. как раз ответ от искомого металлического предмета. В зависимости от времени спада мы можем судить о величине или удаленности объекта. Индикатор показывает эту величину в 8-и уровнях индикаторов.

О катушке:

Она должна быть диаметром 20 см с 20-ю витками провода 0,4 - 0,8 мм. Толщина провода так же влияет на индукцию всей катушки. Сильное отклонение от толщины провода приведет к ухудшению чувствительности прибора. Катушка вставлена в водопроводную ПВХ трубу и не имеет никаких дополнительных металлический соединений.

Код:

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; // port B - all out

DDRD = 0xFF; // port D - all out

for (i = 0; i <255; i++) // калибровка

{

PORTB = B11111111;

delayMicroseconds(200);

PORTB = 0;

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; // посылаем на индикатор (send to LEDs)

delay(1);

ss1 = s1 - c1;

if (ss1 < 0)

{

sss1 = 1;

}

ss1 = ss1 / 16;

PORTD = ss1; // посылаем на индикатор (send to LEDs)

delay(1);

ss2 = s2 - c2;

if (ss2 < 0)

{

sss2 = 1;

}

ss2 = ss2 / 16;

PORTD = ss2; // посылаем на индикатор (send to LEDs)

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;

}

}