Лучшее время для металлопоиска – самая ранняя весна, когда снег уже сошел, почва разморозилась, но трава ещё не успела переплести всё корнями и усложнить выкапывание артефактов из прошлого. И вдвойне приятнее поднимать клады самодельным – сделанным своими руками прибором, а значит давайте изучим очередную схему МД.
Схема металлоискателя на Ардуино
Несмотря на предельную простоту (кроме платы Ардуино тут лишь однотранзисторный генератор), металлоискатель обладает относительно хорошей чувствительностью и отличной стабильностью во время работы.
Детали для сборки металлоискателя
- Ардуино Нано R3
- Транзистор обычный NPN
- Светодиод 3 штуки
- Зуммер (пищалка)
- Стабилитрон на 4,3 В
- Поисковая катушка
- Резисторы и конденсаторы
Металлоискатель реально обладает довольно хорошей чувствительностью и отличной стабильностью в работе, благодаря чему нет необходимости в какой-либо калибровке даже при длительной работе. Правда он без дискриминации металлов. Так же размеры и индуктивность детекторной катушки не критичны, а главное – схема обязательно заработает сразу после изготовления, если конечно не наделать косяков. Всё это делает устройство идеальным металлоискателем для начинающих (заодно и Ардуинизм прокачаете).
Обнаруживающая часть представляет собой простой генератор Колпитца (трёхточка, по-нашему) с резонансным контуром состоящим из C2, C3 и SEARCH_COIL. Этот генератор будет иметь частоту приблизительно 260 кГц.
Всё устройство состоит из нескольких компонентов: микроконтроллер ардуино нано, BC337 или аналогичный транзистор NPN, несколько резисторов и конденсаторов, стабилитрон и светодиоды.
Стабилитрон D1 используется для ограничения напряжения на выводе Arduino до безопасных 4,3 В. C5 и R4 обеспечивают связь выхода генератора с землей.
Здесь любая катушка с индуктивностью около 200-400 мкГн должна работать, надо лишь иметь достаточно низкое её сопротивление. Это даст частоту около 200-400 кГц, что находится в пределах диапазона с которым может работать Arduino.
На фото использовалась катушка диаметром 20 см, что содержит 25 витков, но детектор вполне корректно работал и с двумя концентрически расположенными катушками диаметром 12 и 23 см, каждая из которых имела по 25 витков и соединены последовательно.
Код Arduino подсчитывает каждые 100 миллисекунд сколько произошло импульсов и сохраняет это как базовый уровень. В основном цикле подсчитайте, сколько импульсов произошло за 100 миллисекунд, сохраните это как количество.
Если значение счетчика изменилось по сравнению с базовым, включается светодиод и активируется зуммер. То есть детектор непрерывно калибруется каждые 100 миллисекунд.
Код относительно прост благодаря библиотеке FreqCount. Преимущество этого типа кода заключается в том, что для работы устройства не требуется никаких регулировок или калибровки, а недостаток – для обнаружения металлического объекта необходимо движение объекта по отношению к катушка (как в популярном Волькштурме).
#include <FreqCount.h>
//the baseline frequency of the main search coil
unsigned long baseLine = 0;//Pins red, green and blue LEDs are attached to.
const int bluePin = A2;
const int greenPin = A4;
const int redPin = A5;
const int buzzerPin = 12;void setup() {
//set our LED pins as outputs
pinMode(redPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(bluePin,OUTPUT);
pinMode(buzzerPin,OUTPUT);
//Flash a sequence to test the LEDs and show we are starting up
digitalWrite(redPin,HIGH);
delay(200);
silence();
digitalWrite(greenPin,HIGH);
delay(200);
silence();
digitalWrite(bluePin,HIGH);
delay(200);
silence();//Read out baseline frequency count, 100ms intervals
FreqCount.begin(100);
while(!FreqCount.available())
{
delay(10);
}
baseLine = FreqCount.read();if(baseLine > 10000)
{
//Green, we started up OK
digitalWrite(greenPin,HIGH);
}
else
{
//Red, something went wrong, we didn’t get a sensible count
digitalWrite(redPin,HIGH);
}
delay(1000);silence();
}void loop() {
//no sample ready yet, exit.
if (!FreqCount.available()) {
return;
}
//Read how many pulses in 100 milliseconds
unsigned long count = FreqCount.read();long difference = baseLine – count;
difference = abs(difference);//Difference is large, turn on the RED led
if(difference > 5)
{
digitalWrite(greenPin,LOW);
digitalWrite(bluePin,LOW);
digitalWrite(redPin,HIGH);
digitalWrite(buzzerPin,HIGH);
}
else if(difference > 2) //medium difference, green
{
digitalWrite(greenPin,HIGH);
digitalWrite(bluePin,LOW);
digitalWrite(redPin,LOW);
digitalWrite(buzzerPin,HIGH);
}
else if(difference > 1) //small difference, blue.
{
digitalWrite(greenPin,LOW);
digitalWrite(bluePin,HIGH);
digitalWrite(redPin,LOW);
digitalWrite(buzzerPin,HIGH);
}
else
{
silence(); //no difference, turn off all LEDs
digitalWrite(buzzerPin,LOW);
}//Auto-adjust our baseline
if(count > baseLine)
{
baseLine +=1;
}
else if (count < baseLine)
{
baseLine -= 1;
}
}//Turn off all output pins
void silence()
{
digitalWrite(redPin,LOW);
digitalWrite(greenPin,LOW);
digitalWrite(bluePin,LOW);
}
Конструктив описывать подробно не будем – тут уже каждый сам что-нибудь придумает, приложив немного фантазии. Или просто поэкспериментирует на столе, перейдя на более сложные, но профессиональные конструкции самодельных металлоискателей.