Arduino металлоискатель с дискриминацией. Металлоискатель в виде перчатки на базе Arduino

Металлоискатель – это устройство, используемое для обнаружения присутствия металла в некоторой близости от этого металлоискателя, не касаясь самого металла. Такие устройства широко используют для поиска металлических предметов в земле, например, мин, кладов с драгоценными металлами, предметы старины и прочие вещи. Процесс бесконтактного обнаружения, используемый в металлоискателе, объясняется с помощью метода индуктивного зондирования. Основная концепция состоит в том, что наличие металла может изменять индуктивность индуктора (катушки). Таким образом, электронная начинка металлоискателя попросту определяет индуктивность катушки, которая зондирует исследуемую поверхность, и благодаря динамику или другому интерфейсному устройству оповещает пользователя о металлическом объекте поблизости.



Металлоискатели в официальных точках продаж стоят не так дешево, как хотелось бы. Но сегодня благодаря развитию радиолюбительской техники маталлоискатель можно сделать самостоятельно на основе Arduino.


По сути, с помощью Arduino можно создать простой индуктивный измеритель, то есть устройство, которое может использоваться для измерения неизвестной индуктивности катушки. В данном проекте используется обычный резонансный контур, в котором параллельно соединены конденсатор и катушка индуктивности. Естественная резонансная частота LC-контура изменяется в зависимости от присутствия металла поблизости от катушки. Для получения приемлемого для считывания сигнала с резонансного контура используется компаратор LM339. Поскольку колебания от LC-контура всегда будут в форме синусоидальной волны, то в этом проекте и используется детектор пересечения нуля на основе компаратора, чтобы преобразовать синусоидальную волну в прямоугольные частотные импульсы, чтобы плата Arduino могла измерять период этих импульсов, и на основе полученных данных о периоде оповещать о присутствии металла вблизи прибора. Благодаря встроенной в Arduino IDE функции pulseIn() можно измерять период времени импульса. Например, pulse = pulseIn (11, HIGH, 5000). В этом случае функция возвращает значение периода времени, в течение которого импульс оставался высоким на линии 11. Третий параметр является необязательным, он устанавливает время ожидания до появления импульса на указанной линии.


Схема металлоискателя на основе Arduino представлена ниже.




double pulse; void setup() { pinMode(11,INPUT); pinMode(13,OUTPUT); pinMode(8,OUTPUT); } void loop() { digitalWrite(13,HIGH); delayMicroseconds(5000); digitalWrite(13,LOW); delayMicroseconds(100); pulse = pulseIn(11,HIGH,5000); if(pulse > 920) { tone(8, 1); delay(3000); noTone(8); } }

Его особенность заключается в том, что устройство выполнено в виде перчатки, здесь находится и электронная часть, и поисковая катушку. Металлоискатель был создан для поиска дома потерявшихся мелких металлических вещей, к примеру, сережек, колец и прочего. Впрочем, на основе этой схемы можно сделать и классический металлоискатель для работ на улице. Для изготовления устройства понадобится минимум материалов, львиную долю задач решает микроконтроллер Arduino.

Мощность металлоискателя небольшая, но для бытовых целей ее вполне хватит.


Материалы и инструменты для изготовления:
- микроконтроллер Arduino UNO;
- провод 28 калибра (диаметр 0.32мм);
- один переключатель;
- пьезозуммер;
- два резистора на 10К;
- один резистор на 1.2К;
- два конденсатора 100n;
- два конденсатора 22n;
- один транзистор типа BC547;
- батарея на 9В;
- строительные перчатки.

Также будет необходима фанера, клей по дереву, паяльник с припоем, многожильный провод, макетная плата и другие мелочи.

Процесс изготовления металлоискателя:

Шаг первый. Изготовление катушки
Чтобы изготовить катушку, для нее нужно вырезать основу, корпус. Автор вырезает катушку из фанеры на станке, ее диаметр составляет 6 дюймов. В итоге получается два кольца, которые впоследствии склеиваются столярным клеем. После высыхания, катушку тщательно обрабатывают наждачной бумагой, чтобы она была гладкой. После того, как основа будет изготовлена, на нее можно наматывать провод. Всего нужно сделать 30 витков провода, оставив конец длиной не менее 5-ти дюймов для подключения. Наматывать провод нужно плотно, это обеспечит качественную работу катушки. Поверх провода катушку можно обмотать изолентой или скотчем для лучшей фиксации.





Шаг второй. Сборка схемы на макете
Чтобы убедиться в том, что катушка собрана верно и вся система правильно работает, ее сперва нужно собрать на макетной плате, а уже потом спаивать. Порядок подключения не принципиален, автор начал с транзистора, потом пошли резисторы и конденсаторы. После этого были подключены «мужские и женские» разъемы на палате Arduino.












После этого можно подключать катушку. Так как провод имеет лаковое покрытие, его нужно соскоблить на концах наждачной бумагой или острым ножом. Нужно добиться хорошего контакта. Подключается катушка с помощью «мужских и женских» разъемов. После сборки всех элементов в контроллер можно загружать прошивку и проверять, как все работает на деле.

Шаг третий. Установка прошивки и проверка системы
Далее нужно загрузить в контроллер прошивку. Также возможно понадобится произвести некоторые настройки в коде, чтобы металлоискатель работал правильно. Как только код будет загружен, можно приступать к тестированию. К системе нужно подключить источник питания 9В и выключить переключатель. Если металлоискатель работает, можно приступать к спайке всех элементов на плате.


Шаг четвертый. Спайка схемы
Собирается все на куске текстолита, контакты спаиваются между собой с помощью кусочков провода. При необходимости можно сделать для устройства специальную плату методом травления. Более подробно увидеть, как происходит сборка схемы, можно увидеть на фото.





Шаг пятый. Завершающий этап сборки
Чтобы закрепить плату автор использует кусок фанеры. По размеру он должен быть таким, чтобы на него поместился контроллер Arduino и печатная плата. Края нужно обработать наждачной бумагой, чтобы сделать их гладкими. Для того чтобы приклеить элементы к фанере, можно использовать двусторонний скотч. Также подойдет клей и любые другие способы крепления.

Переработанная версия всеми известного импульсного металлоискателя - "Пирата", но на Arduino. Имеет неплохую чувствительность даже на мелкие монеты. Стабилен в не зависимости от температуры и заряда батареи. Схема максимально упрощена.

Из недостатков можно отметить отсутствие возможности определять тип металла. Определять тип могут только металлоискатели с радио излучающим принципом детектирования (сложны в устройстве и требуют точной настройки). Импульсный металлоискатель в свою очередь работает на магнитном детектировании индукционных токов в металле. Индукция при поиске не различима для черный и цветных металлов.

К слову сказать, что есть еще третий тип металлоискателей - частотный. Малоэффективная и очень простая конструкция в основе которой генератор колебаний магнитного контура, который чувствителен к изменению величины индукции катушки. Мы ее рассматривать не будем из-за низкой чувствительности. Личный эксперименты по разработке такой конструкции в лучшем случае позволяли детектировать сковородку на 20 см глубины. На монет реагировал только в "упор". Практически бесполезная штука. По тому от нее сразу отказался.


Наша схема импульсного металлоискателя имеет в себе несколько основных компонентов. 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; } }