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

Карманный металлический локатор

Компоненты и расходные материалы

SparkFun Arduino Pro Mini 328 - 5 В / 16 МГц
× 1

Необходимые инструменты и машины

3D-принтер (общий)

Об этом проекте

Введение:карманный металлический локатор - Arduino

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

Устройство оснащено четырьмя независимыми поисковыми катушками и цветными светодиодными индикаторами, позволяющими быстро охватить большую область поиска и при этом точно идентифицировать цель.

Это изящное маленькое устройство автоматически калибруется нажатием одной кнопки, заряжается через порт USB и использует цветные светодиоды, звук и вибрацию для индикации силы цели.

В учебное пособие включены все проекты, тестирование, код и 3D-файлы, необходимые для самостоятельной сборки. Надеюсь, вам понравится создавать и использовать это так же, как и мне !!

Шаг 1. Список материалов и принцип его работы

1. Как это Работает

В Pocket Metal Locator используются четыре независимых импульсных индукционных поисковых катушки с питанием от Arduino Pro Mini. Каждая поисковая катушка состоит из отдельных катушек TX и RX, где в катушку TX индуцируется импульс, который создает электромагнитное поле вокруг катушки RX. Изменяющееся поле индуцирует напряжение в катушке RX, которое обнаруживается и усиливается до того, как ширина импульса сигнала будет считана Arduino.

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

Алгоритм калибровки в коде берет среднее значение показаний за короткий период запуска и устанавливает серию пороговых значений для сравнения сигнала.

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

Когда ширина импульса, обнаруженная в катушке RX, падает ниже порогового значения, загораются светодиоды, включается зуммер и запускается двигатель тактильной обратной связи - в зависимости от заранее определенного размера целевого сигнала.

Схема для этого превратилась за последний год в очень стабильный и надежно работающий детектор. Конфигурация и ориентация катушки были специально разработаны для обеспечения максимальной стабильности и обнаружения глубины.

2. Список материалов

  • Литий-полимерная батарея 3,7 В, 350 мАч Размер:38 мм x 20 мм x 7,5 мм
  • Зарядное устройство для литий-полимерной батареи USB TP4056
  • Резистор 4,7 кОм для ограничения тока заряда LiPo аккумулятора до уровня ниже 300 мА.
  • Arduino Pro Mini
  • FTDI USB-последовательный модуль для программирования Mini Pro
  • Интегральная схема четырехдифференциального компаратора LM339
  • Доска Vero - 2 куска, вырезанные с отверстиями 20x9 и 34x9 (правильную ориентацию см. на фото)
  • Транзистор BC548 NPN x 4
  • Переключатель 2N7000 MOSFET x 5
  • Пьезо-зуммер
  • Вибрационный мотор для тактильной обратной связи
  • Светодиодный модуль WS2812 RGB, 4 шт.
  • Резистор 1 кОм, 4 шт.
  • Резистор 10 кОм, 4 шт.
  • Резистор 47 Ом, 4 шт.
  • Резистор 2,2 кОм, 4 шт.
  • Керамический конденсатор 150 пФ x 8
  • Полиэфирный конденсатор 0,18 мкФ, 4 шт.
  • Рулон эмалево-медной проволоки толщиной 0,3 мм (обычно рулоны имеют вес примерно 25 г).
  • Кнопочный переключатель на печатной плате
  • Пистолет для горячего клея
  • Сверло 10 мм
  • Ручная дрель
  • Пистолет для этикеток или липкая лента, подходящая для маркировки 16 отдельных проводов Соединительный провод
  • Доступ к 3D-принтеру

3. Работа компаратора

У меня был ряд вопросов о работе LM339, поэтому я подумал, что дам более четкое объяснение.

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

В этой схеме положительный вход компаратора подключен к линии Vcc, а к выходу компаратора приложен подтягивающий резистор к Vcc. В этой конфигурации на практике выходное напряжение компаратора остается высоким до тех пор, пока входное напряжение на отрицательном входе не превысит 3,5 В

Операция может быть объяснена из таблицы данных LM339, в которой указан «диапазон входного напряжения» от 0 В до Vsup-1,5 В

Когда оба IN– и IN + находятся в пределах синфазного диапазона, если IN– ниже IN + и напряжения смещения, выход имеет высокий импеданс и выходной транзистор не проводит

Когда IN– выше синфазного режима, а IN + находится в синфазном режиме, на выходе низкий уровень, и выходной транзистор потребляет ток. Ссылка на лист данных и объяснение ниже http://www.ti.com/lit/ds/symlink/lm2901.pdf

lm2901.pdf

Корпус, напечатанный на 3D-принтере, был сделан с использованием 5 отдельных отпечатков. Размеры и 3D-файлы можно найти здесь, на Thingiverse. Основное внимание в дизайне было уделено тому, чтобы устройство было легко держать в руке, а поисковые катушки находились как можно ближе к исследуемой области.

Аккуратно распечатайте корпус и удалите лишний пластик. Важно сделать этот шаг сейчас, чтобы электронные компоненты можно было выровнять в корпусе перед окончательным подключением и тестированием.

Шаг 3. Соберите и установите поисковые катушки

Возьмите печатные формирователи катушек и намотайте на каждый по 25 витков медной проволоки. Убедитесь, что у вас осталось 20 см дополнительного медного провода для подключения к основному блоку.

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

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

Используйте две направляющие для проволоки с отверстиями для каждой катушки на печатной основе, чтобы отслеживать каждую конкретную катушку.

Я разместил провода для внутренних катушек вверху, а внешние катушки - внизу блока проводов, чтобы я мог отслеживать каждую конкретную катушку, что упрощает подключение к основной плате.

Шаг 4. Постройте схему

Устройство имеет четыре основных схемы, которые можно построить независимо:плата драйвера, основная плата, светодиодный блок и аккумулятор. На этом этапе мы построим плату драйвера и основную плату.

1. Плата драйвера

Используйте нож для поделок, чтобы вырезать кусок доски Vero Board вдоль отверстий 22x11, в результате получится кусок доски Vero Board с отверстиями 20x9, ориентированными согласно прилагаемому рисунку. Лучше всего несколько раз продеть отверстия по обеим сторонам доски, а затем аккуратно отломить лишнюю доску. Убедитесь, что плата сидит в основании шкафа с достаточным зазором с обеих сторон.

Используя фотографии и сверло 10 мм вручную, осторожно сломайте кнопки, показанные на нижней части доски Vero Board. Соблюдайте электрическую схему и фото компонентов, чтобы собрать печатную плату, стараясь не допускать короткого замыкания дорожек.

Отложите эту доску для тестирования позже.

2. Основная плата

Используйте нож для поделок, чтобы вырезать кусок доски Vero Board вдоль отверстий 36x11, в результате получится кусок доски Vero Board с отверстиями 34x9, ориентированными согласно прилагаемому рисунку. Лучше всего несколько раз продеть отверстия по обеим сторонам доски, а затем аккуратно отломить лишнюю доску. Убедитесь, что плата сидит в основании шкафа с достаточным зазором с обеих сторон.

Используя фотографии и сверло диаметром 10 мм вручную, осторожно сломайте кнопки, показанные на нижней части доски Vero.

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

Отложите эту доску для тестирования позже.

Шаг 5. Добавьте светодиодные индикаторы

Я использовал светодиоды WS2182, которые имеют встроенную интегральную схему, которая позволяет им обращаться к Arduino с помощью трех отдельных проводов, однако можно создать широкий диапазон цветов и яркости, отправив команду на светодиод. Это делается с помощью специальной библиотеки, загружаемой в IDE Arduino, описанной в разделе тестирования.

1. Установка светодиодов в крышку корпуса катушки

Осторожно расположите четыре светодиода так, чтобы они были правильно сориентированы так, чтобы соединения VCC и GND были выровнены и находились в центре отверстий.

Закрепите светодиоды горячим клеем.

2. Подключение светодиодов

Осторожно зачистите и протяните три одножильных провода длиной 25 см поперек контактов светодиодов.

Припаяйте их на место и убедитесь, что центральный провод передачи данных подключен к контактам IN и OUT, как показано на фотографии.

3. Проверка согласования корпуса

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

Отложите это для тестирования позже.

Шаг 6:Сборка и тестирование устройства

1. Подготовка к сборке

Перед сборкой мы будем постепенно тестировать каждую плату, чтобы упростить поиск и устранение неисправностей.

Arduino Pro Mini требует последовательной USB-платы для программирования на вашем ПК. Это позволяет уменьшить размер платы, поскольку на ней нет последовательного интерфейса. Чтобы запрограммировать эти платы, вам нужно будет приобрести плату, как указано в списке деталей.

Перед загрузкой кода Arduino вам необходимо добавить библиотеку FastLED.h в качестве библиотеки для управления светодиодами WS2182. Для устранения неполадок в случае возникновения проблем предоставлен ряд осциллографических кривых.

Также есть снимок экрана последовательного вывода данных IDE с использованием функции Graph Plot, который показывает выходную ширину импульса для каждого из каналов, а также пороговое значение. Это полезно во время тестирования, так как вы можете увидеть, работает ли каждый канал с одинаковыми уровнями чувствительности.

Я приложил две копии кода. У одного есть тестовая последовательная потоковая передача данных для устранения неполадок.

ПРИМЕЧАНИЕ. Не подключайте блок LiPo аккумулятор до самого последнего шага, так как случайное замыкание во время сборки может привести к перегреву блока или даже возгоранию.

2. Проверьте главную плату

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

Это просто проверит, правильно ли физически подключен Arduino и что IDE и библиотеки загружены. Загрузите код через IDE, который должен загружаться без ошибок, и никакие компоненты не должны выходить дыма !!

3. Подключите плату драйвера.

Следуя принципиальной схеме, подключите плату драйвера к основной плате и физически разместите блок в корпусе, чтобы все элементы поместились внутри корпуса. Это метод проб и ошибок, требующий настойчивости.

Загрузите код через IDE, который должен загружаться без ошибок, и никакие компоненты не должны выходить дыма !!

4. Подключите катушки Следуйте принципиальной схеме, чтобы подключить катушки к основной плате и физически расположить блок в корпусе, чтобы все элементы подходили по размеру. Тщательно убедитесь, что катушки выровнены с входами платы драйвера и основной платы, как показано на принципиальной схеме.

Когда тестовый код загружен, последовательный порт будет отображать ширину импульса на приемной катушке где-то между 5000 - 7000 мкс. Это также можно просмотреть с помощью плоттера графиков IDE.

Это позволит вам устранить неполадки в каждом из каналов, а также увидеть эффект от перемещения монеты рядом с поисковой катушкой, что должно уменьшить ширину импульса по мере приближения цели к поисковой катушке.

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

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

5. Подключите светодиоды

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

Pocket_Metal_Locator_V11__TEST_CODE.zip Pocket_Metal_Locator_V11.zip

Шаг 7. Подключение аккумуляторной батареи

ПРИМЕЧАНИЕ.

1. Не подключайте блок LiPo батареи до самого последнего шага, так как случайное замыкание во время сборки может привести к перегреву блока или даже возгоранию.

2. При обращении с аккумулятором и зарядным устройством соблюдайте осторожность, чтобы не закоротить контакты аккумулятора.

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

4. Не подключайте последовательный кабель Arduino к устройству, когда кнопка питания нажата, иначе батарея может быть повреждена.

1. Измените предел тока зарядного устройства

В карманном металлическом локаторе используется LiPo аккумулятор, который можно заряжать с помощью зарядного устройства для телефона с разъемом Micro USB. Плата зарядного устройства TP4056 USB LiPo Batt сначала модифицирована резистором 4,7 кОм, чтобы ограничить ток заряда до менее 300 мА. Инструкцию о том, как это сделать, можно найти здесь.

TP4056.pdf

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

Перед подключением к основной плате проверьте правильность работы зарядного устройства, подключив зарядное устройство сотового телефона к порту Micro USB. При правильной работе должен загореться красный индикатор зарядки.

2. Установите кнопочный выключатель питания

Убедитесь, что кнопка установлена ​​в правильном положении, чтобы она выступала через центр крышки корпуса, затем припаяйте кнопку на место. Подключите провода между кнопочным переключателем и выходом зарядного устройства и линией VCC на Arduino в соответствии с принципиальной схемой.

При правильной установке нажатие переключателя активирует устройство.

Закрепите аккумулятор на месте с помощью горячего клея и убедитесь, что разъем Micro USB совмещен с отверстием в крышке корпуса, чтобы его можно было заряжать.

Шаг 8:Заключительное тестирование и эксплуатация

1. Физическая сборка

Последний шаг - аккуратно переставить провода, чтобы корпус правильно закрывался. Используйте горячий клей, чтобы прикрепить материнскую плату к крышке, а затем закройте крышку на место.

2. Управление устройством

Устройство работает путем калибровки после нажатия и удерживания кнопки питания. Все светодиоды будут мигать, когда устройство будет готово к использованию. Во время поиска удерживайте кнопку нажатой. Светодиоды меняют цвет с сине-зеленого на красный, фиолетовый в зависимости от силы целевого объекта. Тактильная обратная связь возникает, когда светодиоды становятся фиолетовыми.

Вы не готовы к использованию на практике !!

Код

  • Pocket_Metal_Locator_V11.ino
Pocket_Metal_Locator_V11.ino C / C ++
Этот крутой маленький карманный металлический локатор достаточно чувствителен, чтобы идентифицировать маленькие гвозди и кнопки в дереве, и достаточно компактен, чтобы поместиться в неудобных местах, что делает его удобным для переноски и использования для поиска металла.

Устройство оснащено четырьмя независимыми поисковыми катушками и цветными светодиодными индикаторами, позволяющими быстро охватить большую область поиска и при этом точно идентифицировать цель.

Это изящное маленькое устройство самокалибруется нажатием одной кнопки, заряжается через порт USB и использует цветные светодиоды, звук и вибрацию для индикации силы цели.

В руководство включены все проекты, тестирование, код и 3D-файлы, необходимые для самостоятельной сборки. Надеюсь, вам понравится создавать и использовать это так же, как и мне !!
 / * Pocket Metal Locator - Arduino Pro Mini, апрель 2018 г. TechKiwiGradgetsVersion 11 - Первый выпуск с инструкциями * /// Настройка библиотеки драйверов светодиодов WS2182 # include "FastLED.h" "// Сколько светодиодов в вашей полосе? #Define NUM_LEDS 4 // Примечание:первый светодиод - это адрес 0 # define DATA_PIN 11 // Примечание:D11 используется для управления цепочкой светодиодов // Определение массива светодиодов CRGB [NUM_LEDS]; / / Сглаживающие переменные для LPFconst float alpha =0.85; сглаженное значение с плавающей запятой1 =1000; сглаженное значение с плавающей запятой2 =1000; сглаженное значение с плавающей запятой3 =1000; сглаженное значение с плавающей запятой4 =1000; int sthreshold =100; // Минимальное чтение из функции pulseIn обеспечивает выборку выше noisefloat ledthreshold1 =0.93; // Процент ниже базовой линии до настройки светодиодов Purplefloat ledthreshold2 =0.96; // Процент ниже базовой линии до настройки светодиодов Redfloat ledthreshold3 =0.99; // Процент ниже базовой линии до настройки светодиодов Greenfloat ledthreshold4 =0.998; // Процент ниже базовой линии до включения светодиодов Синий // Калибровочные переменныеboolean sample =false; // если истина, то не вспоминать пороговые значения int calcounter =0; // Используется для подсчета количества взятых проб int scount =200; // Количество считываний до однократной калибровки только после включения int numsamples =20; // Количество отсчетов, взятых перед усреднением int t1 =100; // Продолжительность в микросекундах, в течение которой светодиоды загораются во время калибровки long calav1 =0; // Используется для вычисления среднего десяти отсчетов. Long calav2 =0; // Используется для вычисления среднего значения для десяти выборок. Calav3 =0; // Используется для вычисления среднего значения десяти выборок. Calav4 =0; // Используется для вычисления среднего десяти отсчетов int div1 =0; // Счетчик делителей для количества взятых отсчетов int div2 =0; int div3 =0; int div4 =0; // Четыре канала, обозначенных A, B, C, Dint divA =0; long tempA =0; long pcounterA =0; // Ширина нефильтрованного импульса канала 1int divB =0; long tempB =0; long pcounterB =0; // Ширина нефильтрованного импульса канала 2int divC =0; long tempC =0; long pcounterC =0; // Ширина нефильтрованного импульса канала 1int divD =0; long tempD =0; long pcounterD =0; // Ширина нефильтрованного импульса канала 1int pwindow =7500; // Максимальное значение тайм-аута для ширины импульса // **************************************** *********** int dly1 =4; // Период времени, в течение которого на выводе TXR остается высокий уровень (обычно 4 мкс) int dly2 =1; // Задержка после того, как вывод TXR перейдет в НИЗКОЕ значение перед чтением, чтобы начать чтение длительности импульса - обычно 1 мкс int dly3 =500; // Задержка в микросекундах после выборки ширины импульса перед началом следующего цикла // *********************************** **************** int threshdiff =15; // Добавьте к среднему значению, чтобы получить определенный порог, при котором будет гореть светодиод (V21 изменен с 25 на 20) long pulseav =0; // Сохраняет значение вывода для калибровки // Вибрация двигателя boolean haptic =false; // Флаг, используемый для включения вибромотора на время int vduration =1; // Количество программных циклов, включенных вибромотором int vcounter =vduration; // счетчик циклов v void setup () {// Двигатель вибрации / Тактильная обратная связь pinMode (12, OUTPUT); // Драйвер вибромотора от Arduino - D10 digitalWrite (12, LOW); // Выключаем мотор Serial.begin (115200); // Настройка последовательного интерфейса для вывода тестовых данных // Настройка драйвера светодиодов WS2182 LEDS.addLeds  (светодиоды, NUM_LEDS); // По умолчанию, если для этого используется RGB, однако это может зависеть от производителя светодиода LEDS.setBrightness (5); // Установите здесь яркость светодиодов // ограничьте мою мощность до 1 А при потребляемой мощности 5 В FastLED.setMaxPowerInVoltsAndMilliamps (5,100); FastLED.setDither (0); // Выключает функцию автоматического дизеринга для удаления мерцания // Назначение логических выводов Arduino Mini Pro // Имя логического вывода 2,3,4,5,6,7,8,9 Соответствует имени вывода D2-D9, напечатанному на плате // Логическое имя контакта 10,11,12,13,14,15,16,17 Соответствует имени контакта D10-D13, A0-A3, напечатанному на плате // Пьезозуммер pinMode (10, OUTPUT); // Драйвер пьезозуммера от Arduino - D10 // Передача pinMode (2, OUTPUT); // Импульсный выход из Arduino - D2 pinMode (4, OUTPUT); // Импульсный вывод от Arduino - D4 pinMode (6, OUTPUT); // Импульсный вывод от Arduino - D6 pinMode (8, OUTPUT); // Импульсный выход из Arduino - D8 // Канал A pinMode (3, INPUT); // Входной сигнал на Arduino с вывода 2 на LM339 - D3 // Канал B pinMode (5, INPUT); // Входной сигнал на Arduino с вывода 1 на LM339 - D5 // Канал C pinMode (7, INPUT); // Входной сигнал на Arduino с вывода 14 на LM339 - D7 // Канал D pinMode (9, INPUT); // Входной сигнал на Arduino с вывода 13 на LM339 - D9} void loop () {// Импульс и чтение катушки ------------------------- -------------------- // Канал 1 (острие жезла) digitalWrite (2, HIGH); // Установите вывод TX на highdelayMicroseconds (dly1); // Задержка перед установкой низкого уровня на выходе pindigitalWrite (2, LOW); // Установить вывод TX на lowdelayMicroseconds (dly2); // Задержка перед выборкой ширины импульса pcounterA =pulseIn (3, LOW, pwindow); digitalWrite (2, LOW); // Установите вывод TX на LOWdelayMicroseconds (dly3); // Задержка перед шириной импульса выборки // Применяем фильтр нижних частот для сигнала сглаживания канала 1 if (pcounterA> =sthreshold) {smoothedvalue1 =(alpha * smoothhedvalue1) + ((1 - alpha) * pcounterA); } pcounterA =Smoothedvalue1; // Канал 2digitalWrite (4, HIGH); // Установите вывод TX на highdelayMicroseconds (dly1); // Задержка перед установкой низкого уровня на выходе pindigitalWrite (4, LOW); // Установить вывод TX на lowdelayMicroseconds (dly2); // Задержка перед выборкой ширины импульса pcounterB =pulseIn (5, LOW, pwindow); digitalWrite (4, LOW); // Установите вывод TX на LOWdelayMicroseconds (dly3); // Задержка перед длительностью импульса выборки // Применяем фильтр нижних частот для сигнала сглаживания канала 2 if (pcounterB> =sthreshold) {smoothedvalue2 =(alpha * smoothhedvalue2) + ((1 - alpha) * pcounterB); } pcounterB =Smoothedvalue2; // Канал 3digitalWrite (6, HIGH); // Установите вывод TX на highdelayMicroseconds (dly1); // Задержка перед установкой низкого уровня на выходе pindigitalWrite (6, LOW); // Установить вывод TX на lowdelayMicroseconds (dly2); // Задержка перед выборкой ширины импульса pcounterC =pulseIn (7, LOW, pwindow); digitalWrite (6, LOW); // Установите вывод TX на LOW // delayMicroseconds (dly3); // Задержка перед длительностью импульса выборки // Применяем фильтр нижних частот для сигнала сглаживания канала 3 if (pcounterC> =sthreshold) {smoothedvalue3 =(alpha * smoothhedvalue3) + ((1 - alpha) * pcounterC); } pcounterC =Smoothedvalue3; // Канал 4 digitalWrite (8, HIGH); // Установите вывод TX на highdelayMicroseconds (dly1); // Задержка перед установкой низкого уровня на выходе pindigitalWrite (8, LOW); // Установить вывод TX на lowdelayMicroseconds (dly2); // Задержка перед выборкой ширины импульса pcounterD =pulseIn (9, LOW, pwindow); digitalWrite (8, LOW); // Установите вывод TX на LOWdelayMicroseconds (dly3); // Задержка перед длительностью импульса выборки // Применяем фильтр нижних частот для сигнала сглаживания канала 4 if (pcounterD> =sthreshold) {smoothedvalue4 =(alpha * Smoothedvalue4) + ((1 - alpha) * pcounterD); } pcounterD =smoothedvalue4; // Распечатайте значение, затем сбросьте счетчик / * Serial.print (pcounterA); Serial.print (""); Serial.print (calav1); Serial.print (""); Serial.print (pcounterB); Serial.print (""); Serial.print (calav2); Serial.print (""); Serial.print (pcounterC); Serial.print (""); Serial.print (calav3); Serial.print (""); Serial.print (pcounterD); Serial.print (""); Serial.println (calav4); * /// Вызов пороговых значений при включении питания // Подождите некоторое время, чтобы установить базовый уровень для каждой катушки if (sample ==false) {calcounter ++; } if (calcounter> (scount-numsamples)) {// Подождите 90, затем сложите образцы, чтобы подготовиться к вычислению среднего if (pcounterA> sthreshold) {calav1 =calav1 + pcounterA; div1 ++; } если (pcounterB> sthreshold) {calav2 =calav2 + pcounterB; div2 ++; } если (pcounterC> sthreshold) {calav3 =calav3 + pcounterC; div3 ++; } если (pcounterD> sthreshold) {calav4 =calav4 + pcounterD; div4 ++; }} if ((calcounter> scount) &&(sample ==false)) {// Устанавливаем пороговые значения calav1 =calav1 / div1; calav2 =calav2 / div2; calav3 =calav3 / div3; calav4 =calav4 / div4; // Мигает светодиод, показывая, что калибровка завершена // 0-3 Синие светодиоды [3] =CRGB ::Blue; FastLED.show (); задержка (t1); светодиоды [3] =CRGB ::Черный; светодиоды [2] =CRGB ::Синий; FastLED.show (); задержка (t1); светодиоды [2] =CRGB ::Черный; светодиоды [1] =CRGB ::Синий; FastLED.show (); задержка (t1); светодиоды [1] =CRGB ::Черный; светодиоды [0] =CRGB ::Синий; FastLED.show (); задержка (t1); светодиоды [0] =CRGB ::Черный; // 3-0 Зеленые светодиоды [3] =CRGB ::Green; FastLED.show (); задержка (t1); светодиоды [3] =CRGB ::Черный; светодиоды [2] =CRGB ::зеленый; FastLED.show (); задержка (t1); светодиоды [2] =CRGB ::Черный; светодиоды [1] =CRGB ::зеленый; FastLED.show (); задержка (t1); светодиоды [1] =CRGB ::Черный; светодиоды [0] =CRGB ::зеленый; FastLED.show (); задержка (t1); светодиоды [0] =CRGB ::Черный; FastLED.show (); // Звук зуммера // digitalWrite (10, HIGH); // Установите на выходном контакте высокий уровень, чтобы активировать светодиод // delay (t1 * 2); digitalWrite (10, НИЗКИЙ); // Установите на выходном контакте высокий уровень для активации светодиода // Сброс флага выборки sample =true; calcounter =0; } если (образец ==истина) {updateLEDs (); } // Тактильная обратная связь - если пороговое значение превышено, включить вибромотор для циклов "vduration" if (haptic ==true) {// Если флаг установлен, то включить двигатель digitalWrite (12, HIGH); // Установите на выходном контакте высокий уровень, чтобы активировать вибромотор if (vcounter> =1) {vcounter--; // уменьшение счетчика} else {digitalWrite (12, LOW); // Установите выходной контакт в LOW, чтобы отключить вибродвигатель haptic =false; // Сбрасываем флаг вибрации после количества циклов vcounter =vduration; // Сброс счетчика вибрации}}} // Subroutinesvoid updateLEDs () {// Отображение результатов // Фиолетовый - самый сильный целевой сигнал + (звуковой сигнал, пьезо и тактильная обратная связь) // Красный - высокий + (тактильная обратная связь) // Зеленый - умеренный + (Тактильная обратная связь) // Синий - самый слабый целевой сигнал // Выключить все светодиоды [0] =CRGB ::Black; leds [1] =CRGB ::Black; leds [2] =CRGB ::Black; leds [3] =CRGB ::Черный; digitalWrite (10, НИЗКИЙ); // Установите выходной контакт в LOW, чтобы отключить Piezo SpeakerdigitalWrite (12, LOW); // Установите выходной контакт на НИЗКИЙ, чтобы отключить вибрационный двигатель // *************** Канал 1 if (pcounterA <(calav1 * (ledthreshold1))) {// Отображение фиолетового цвета, если сильный целевые светодиоды [3] =CRGB ::Purple; digitalWrite (10, ВЫСОКИЙ); // Установите выходной контакт на высокий уровень, чтобы активировать пьезо-динамик haptic =true; } elseif (pcounterA <(calav1 * (ledthreshold2))) {// Отображение синего цвета для целевых светодиодов средней мощности [3] =CRGB ::Red; haptic =true; } elseif (pcounterA <(calav1 * (ledthreshold3))) {// Отображение синего цвета для целевых светодиодов средней мощности [3] =CRGB ::Green; haptic =true; } elseif (pcounterA <(calav1 * (ledthreshold4))) {// Добавляем дополнительную процентную точку к порогу из-за чувствительности светодиода канала 1 [3] =CRGB ::Blue; } // Отображение канала 2 if ((pcounterB  

Изготовленные на заказ детали и корпуса

Thingiverse
This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.This neat little device is self-calibrating with one button operation, rechargeable through a USB port and uses color LEDs, sound and vibration to indicate target strength.Included in the instructable is all of the designs, testing, code and 3D files required to build on your own. I hope you enjoy building and using this as much as I have!!CAD file on thingiverse.com

Схема

This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.

The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.

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

  1. Спасатель жизни
  2. 16 кузнечных приемов
  3. Резка металла
  4. Экономическая эффективность штамповки листового металла
  5. Что такое штамповка листового металла?
  6. Перфорированные металлические машины и приложения
  7. Что такое Литейный завод?
  8. Формование металлических рулонов:резка рулонов
  9. Обзор тонколистового металла
  10. Что такое выпрямление листового металла?