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

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

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

Arduino Nano R3
× 1
Модуль Bluetooth HC-05
× 1
PNP-транзистор общего назначения
× 1
NPN-транзистор общего назначения
× 1
N-канал Power MOSFET
× 1
Операционный усилитель, операционный усилитель + компаратор + справочник
× 1
1N4148 - быстрое переключение общего назначения
× 2
Конденсатор 10 мкФ
× 1
Конденсатор 1 мкФ
× 1
Однооборотный потенциометр - 100 кОм
× 1
Однооборотный потенциометр-47k
× 1
12 резисторов с разными номиналами
× 1

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

Паяльник (общий)

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

Системы импульсной индукции (PI) используют одну катушку как передатчик, так и приемник. Эта технология посылает мощные короткие импульсы тока через катушку с проводом. Каждый импульс создает короткое магнитное поле. Когда импульс заканчивается, магнитное поле меняет полярность и очень внезапно схлопывается, что приводит к резкому электрическому всплеску. Этот всплеск длится несколько микросекунд и вызывает прохождение еще одного тока через катушку. Этот ток называется отраженным импульсом, он очень короткий и длится всего около 30 микросекунд. Затем отправляется еще один импульс, и процесс повторяется. Если кусок металла попадает в зону действия силовых линий магнитного поля, приемная катушка может обнаружить изменение как амплитуды, так и фазы принятого сигнала. Величина изменения амплитуды и изменения фазы является показателем размера и расстояния до металла, а также может использоваться для различения черных и цветных металлов.

Я нашел хороший образец ПИ-детектора на сайте N.E.C.O. проекты. Этот металлоискатель - симбиоз Arduino и Android. В Play Store вы можете загрузить бесплатную версию приложения Spirit PI, которая полностью функциональна, но вы также можете купить профессиональную версию, которая имеет несколько отличных опций. Связь между смартфоном и Arduino осуществляется с помощью модуля Bluetooth HC 05, но вы можете использовать любой адаптер Bluetooth, на котором необходимо установить скорость передачи данных 115200 бод. Схема представлена ​​на рисунке ниже. Я внес несколько незначительных изменений в исходную схему, чтобы улучшить характеристики устройства. Вы можете найти оригинальную схему на сайте N.E.C.O.-s:

https://neco-desarrollo.es/pirat-wireless-metal-detector

На место резистора на 150 Ом поставил тримерный потенциометр номиналом 47 кОм. Этот тример регулирует ток через катушку. При увеличении его значения увеличивается ток через катушку и повышается чувствительность прибора. Вторая модификация - подстроечный резистор 100кОм вместо оригинального резистора 62к. С помощью этого тримера мы установили напряжение около 4,5 В на вход A0 на Arduino, потому что я заметил, что для разных операционных усилителей и рабочих напряжений значение этого резистора должно быть другим.

В этом конкретном случае для питания устройства я использую 4 литий-ионных аккумулятора, подключенных последовательно, так что напряжение превышает 15 В. Поскольку Arduino принимает максимальное входное напряжение 12 В, я установил стабилизатор на 5 В (7805) на небольшой радиатор для питания Arduino напрямую на вывод + 5 В.

Катушка изготовлена ​​из изолированной медной проволоки диаметром 0,4 мм и содержит 25 обмоток в форме круга диаметром 19 см. При окончательной обработке необходимо следить за тем, чтобы поблизости не было металлических предметов. катушка (элементы склеивать клеем, а не саморезами)

Как видно на видео, небольшую металлическую монету можно обнаружить на расстоянии 10-15 сантиметров, а более крупный металлический объект 30-40 сантиметров и более. Это отличные результаты, учитывая, что изготовление и настройка устройства относительно просты.

Код

  • код
код Arduino
 #include  // # include  // int bluetoothTx =5; // int bluetoothRx =6; // терминал модуля bluetooth RX // SoftwareSerial bluetooth (bluetoothTx, bluetoothRx); # define pulsePine 2int timer =200; const int button1 =12; int buttonState1 =0; char data; // переменные EEPROM int addr_duty =0; int addr_freq =1; int stored_value; int duty_cycle; int duty_cycle_temp; int freq; int freq_temp; int duty_def_value =10; int freq_def_value =60; // Переменные баланса int value_count =0; int value_count_def =100; int balance_value =0; int balance_value_temp =0; // **** unsigned long startMillis; беззнаковый длинный currentMillis; длинный период =100000; // значение - это количество микросекунд // Измерение уровня сопротивления плавучести аккумулятораcia1 =101000; // Resistencia de 100K para medir la tencion (Voltios) / Resistance 100k for test Voltsfloat resistencia2 =10000; // Сопротивление 10 кОм для среднего напряжения (Voltios) / Сопротивление 10 кОм для тестового вольт-поплавка const arefVolt =4.8f; // вывод "4.9v" УСТАНОВИТЕ ТОЧНОЕ ЗНАЧЕНИЕ ЗДЕСЬ float voutv; float vinv; unsigned long startMillisVolts; беззнаковый длинный currentMillisVolts; long periodVolts =2000; // значение представляет собой количество микросекунд sensorValue; void setup () {// analogReference (INTERNAL); Serial.begin (115200); readFromStorage (addr_duty); duty_cycle =хранимое_значение; readFromStorage (addr_freq); freq =сохраненное_значение; если (duty_cycle ==0 || duty_cycle ==255) {writeToStorage (duty_def_value, addr_duty); readFromStorage (addr_duty); duty_cycle =хранимое_значение; } if (freq ==0 || freq ==255) {writeToStorage (freq_def_value, addr_freq); readFromStorage (addr_freq); freq =сохраненное_значение; } pinMode (pulsePine, ВЫХОД); } void loop () {currentMillis =micros (); currentMillisVolts =миллис (); если (Serial.available ()> 0) {данные =Serial.read (); setDutyAndFreq (данные); } if (currentMillis - startMillis> =период) {период =1000000 / частота; // Serial.println (период); digitalWrite (pulsePine, HIGH); duty_cycle_temp =duty_cycle * 10; delayMicroseconds (duty_cycle_temp); digitalWrite (pulsePine, LOW); // sensorValue =analogRead (A0); for (int i =0; i <3; i ++) {sensorValue =analogRead (A0);} delayMicroseconds (10); sensorValue =analogRead (A0); sensorValue =sensorValue / 5; sendData (); startMillis =currentMillis; } // Lectura voltios if (currentMillisVolts - startMillisVolts> =periodVolts) {lecturaVoltios (); // Serial.println ("Lectura voltios"); startMillisVolts =currentMillisVolts; }} void writeToStorage (int valor, int addr) {EEPROM.write (адрес, доблесть); } int readFromStorage (int addr) {хранимое_значение =EEPROM.read (адрес); вернуть сохраненное_значение; } void setDutyAndFreq (char valor) {// "n" valor para aumentar duty cycle // "m" valor para disminuir duty cycle // "j" valor para aumentar la frequencycia // "k" valor para des, inuir la frequency // "+" доблесть для улучшения баланса // "-" доблесть для уменьшения баланса if (valor =='n') {// Serial.println ("n Recived"); readFromStorage (addr_duty); duty_cycle =хранимое_значение; duty_cycle =duty_cycle + 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='m') {// Serial.println ("m получено"); readFromStorage (addr_duty); duty_cycle =хранимое_значение; duty_cycle =duty_cycle - 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='j') {// Serial.println ("j Recived"); readFromStorage (addr_freq); freq =сохраненное_значение; freq =freq + 10; writeToStorage (freq, addr_freq); } else if (valor =='k') {// Serial.println ("k Recived"); readFromStorage (addr_freq); freq =сохраненное_значение; freq =freq - 10; writeToStorage (freq, addr_freq); } else if (valor =='p') {// Serial.println ("m получено"); writeToStorage (0, addr_freq); writeToStorage (0, addr_duty); }} // Вольт-функцияvoid lecturaVoltios () {vinv =0.0f; voutv =0,0f; для (int я =0; я <100; я ++) {voutv =(analogRead (A7) * arefVolt) / 1023; // Lee el voltaje de entrada vinv + =voutv / (resistencia2 / (resistencia1 + resistencia2)); // Формула резистивного делителя для напряжения final if (vinv <0.9) {vinv =0.0f; }} vinv =vinv / 100;} void sendData () {/ * Serial.print ("<"); Serial.print (sensorValue); Serial.print ("/"); Serial.print (частота); Serial.print ("/"); Serial.print (duty_cycle); Serial.print ("/"); Serial.print (vinv); Serial.print (">"); Serial.println (); * / String data ="<"; data + =sensorValue; данные + ="/"; данные + =частота; данные + ="/"; data + =duty_cycle; данные + ="/"; данные + =vinv; данные + =">"; / * bluetooth.print ("<"); bluetooth.print (sensorValue); bluetooth.print ("/"); bluetooth.print (частота); bluetooth.print ("/"); bluetooth.print (duty_cycle); bluetooth.print ("/"); bluetooth.print (vinv); bluetooth.print (">"); * / Serial.println (данные); } 

Схема


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

  1. Вольтметр своими руками с использованием Arduino и смартфона
  2. Pixie:наручные часы NeoPixel на базе Arduino
  3. Детектор звуковой частоты
  4. Скейтборд виртуальной реальности «Сделай сам»
  5. Клеточные автоматы на основе Arduino и OLED
  6. Сделай сам Arduino РАДИОНИКА Лечение MMachine
  7. Самодельный двухмерный гоночный симулятор
  8. Ультразвуковой дальномер с Arduino
  9. Система безопасности на основе Arduino
  10. Детектор молний для Arduino