Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Detector de metal por indução de pulso baseado em DIY Arduino

Componentes e suprimentos

Arduino Nano R3
× 1
Módulo Bluetooth HC-05
× 1
Transistor de uso geral PNP
× 1
Transistor de uso geral NPN
× 1
Power MOSFET N-Channel
× 1
Amplificador operacional, Op Amp + Comparador + Referência
× 1
1N4148 - Troca rápida de uso geral
× 2
Capacitor 10 µF
× 1
Capacitor 1 µF
× 1
Potenciômetro de volta única - 100k ohms
× 1
Potenciômetro de volta única-47k
× 1
12 resistores com valores diferentes
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Sobre este projeto




Os sistemas de indução de pulso (PI) usam uma única bobina como transmissor e receptor. Essa tecnologia envia rajadas curtas e poderosas (pulsos) de corrente por meio de uma bobina de fio. Cada pulso gera um breve campo magnético. Quando o pulso termina, o campo magnético inverte a polaridade e entra em colapso repentinamente, resultando em um pico elétrico agudo. Esse pico dura alguns microssegundos e faz com que outra corrente passe pela bobina. Essa corrente é chamada de pulso refletido e é extremamente curta, durando apenas cerca de 30 microssegundos. Outro pulso é então enviado e o processo se repete. Se um pedaço de metal estiver dentro da faixa das linhas do campo magnético, a bobina de recepção pode detectar uma mudança na amplitude e na fase do sinal recebido. A quantidade de mudança de amplitude e mudança de fase é uma indicação do tamanho e distância do metal e também pode ser usada para discriminar entre metais ferrosos e não ferrosos.

Encontrei um bom exemplo de detector de PI no site do N.E.C.O. projetos. Este detector de metais é uma simbiose do Arduino e do Android. Na Play Store você pode baixar a versão gratuita do aplicativo "Spirit PI", que é totalmente funcional, mas você também pode comprar uma versão profissional que tem várias opções excelentes. A comunicação entre o smartphone e o arduino é feita com o módulo bluetooth HC 05, mas você pode usar qualquer adaptador bluetooth no qual tenha que mudar a taxa de transmissão para 115200. O esquema é dado na figura abaixo. Fiz várias pequenas modificações no esquema original para melhorar os recursos do dispositivo. Você pode encontrar o esquema original na web N.E.C.O.-s:

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

No lugar de um resistor de 150 ohms, coloquei um potenciômetro de trímero com um valor de 47 kohms. Este trímero regula a corrente através da bobina. Ao aumentar seu valor, a corrente através da bobina aumenta e a sensibilidade do dispositivo aumenta. A segunda modificação é trimmer pot 100kOhm em vez do resistor 62k no original. Com este trímero, definimos a tensão de cerca de 4,5 V para a entrada A0 no Arduino, pois percebi que, para amplificadores operacionais e tensões operacionais diferentes, o valor desse resistor deve ser diferente.

Neste caso particular, para alimentar o dispositivo, eu uso uma bateria de íon de lítio 4 conectada em série de forma que a tensão seja algo maior que 15v. Como o Arduino aceita um máximo de tensão de entrada de 12 V, coloquei um estabilizador para 5 V (7805) montado no pequeno dissipador de calor para alimentar o Arduino diretamente no pino de + 5 V.

A bobina é feita de fio de cobre isolado com diâmetro de 0,4 mm e contém 25 enrolamentos em forma de círculo com diâmetro de 19 centímetros. Na obra final, é necessário garantir que não haja objetos metálicos próximos ao bobina (os elementos devem ser colados com cola e sem parafusos)

Como você pode ver no vídeo, uma pequena moeda de metal pode ser detectada a uma distância de 10-15 centímetros, enquanto um objeto de metal maior de 30-40 centímetros e mais. São resultados excelentes, levando-se em consideração que a confecção e o ajuste do dispositivo são relativamente simples.

Código

  • código
código Arduino
 #include  // # include  // int bluetoothTx =5; // int bluetoothRx =6; // terminal do módulo blutoth RX // SoftwareSerial bluetooth (bluetoothTx, bluetoothRx); # definir pulsePine 2int timer =200; const int button1 =12; int buttonState1 =0; char data; // EEPROM variablesint 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; // Balancear variáveisint valor_contagem =0; int valor_contagem_def =100; int saldo_valor =0; int saldo_valor_temp =0; // **** sem sinal long startMillis; CurrentMillis longo sem sinal; período longo =100000; // o valor é um número de microssegundos // Medição do nível da bateria flutuante resistencia1 =101000; // Resistencia de 100K para medir la tencion (Voltios) / Resistência de 100k para teste voltsfloat resistencia2 =10000; // Resistencia de 10k para medir la tencion (Voltios) / Resistência 10k para voltsfloat de teste const arefVolt =4.8f; // pin "4.9v" DEFINIR VALOR EXATO AQUIfloat voutv; float vinv; unsigned long startMillisVolts; Unsigned long currentMillisVolts; long periodVolts =2000; // o valor é um número de microssegundos sensorValue; void setup () {// analogReference (INTERNAL); Serial.begin (115200); readFromStorage (addr_duty); duty_cycle =stored_value; readFromStorage (addr_freq); freq =valor_armazenado; if (duty_cycle ==0 || duty_cycle ==255) {writeToStorage (duty_def_value, addr_duty); readFromStorage (addr_duty); duty_cycle =stored_value; } if (freq ==0 || freq ==255) {writeToStorage (freq_def_value, addr_freq); readFromStorage (addr_freq); freq =valor_armazenado; } pinMode (pulsePine, OUTPUT); } void loop () {currentMillis =micros (); currentMillisVolts =millis (); if (Serial.available ()> 0) {data =Serial.read (); setDutyAndFreq (dados); } if (currentMillis - startMillis> =período) {período =1000000 / freq; // Serial.println (período); digitalWrite (pulsePine, HIGH); duty_cycle_temp =duty_cycle * 10; delayMicroseconds (duty_cycle_temp); digitalWrite (pulsePine, LOW); // sensorValue =analogRead (A0); para (int i =0; i <3; i ++) {sensorValue =analogRead (A0);} atrasoMicrosegundos (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 (addr, valor); } int readFromStorage (int addr) {stored_value =EEPROM.read (addr); return stored_value; } void setDutyAndFreq (char valor) {// "n" valor para aumentar duty cycle // "m" valor para disminuir duty cycle // "j" valor para aumentar la frequencia // "k" valor para des, inuir la frequencia // "+" valor para aumentar o equilíbrio // "-" valor para desminuir o equilíbrio if (valor =='n') {// Serial.println ("n Recebido"); readFromStorage (addr_duty); duty_cycle =stored_value; dever_ciclo =dever_ciclo + 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='m') {// Serial.println ("m Recebido"); readFromStorage (addr_duty); duty_cycle =stored_value; dever_ciclo =dever_ciclo - 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='j') {// Serial.println ("j Recebido"); readFromStorage (addr_freq); freq =valor_armazenado; freq =freq + 10; writeToStorage (freq, addr_freq); } else if (valor =='k') {// Serial.println ("k Recebido"); readFromStorage (addr_freq); freq =valor_armazenado; freq =freq - 10; writeToStorage (freq, addr_freq); } else if (valor =='p') {// Serial.println ("m Recebido"); writeToStorage (0, addr_freq); writeToStorage (0, addr_duty); }} // Volt functionvoid lecturaVoltios () {vinv =0.0f; voutv =0,0f; para (int i =0; i <100; i ++) {voutv =(analogRead (A7) * arefVolt) / 1023; // Lee el voltaje de entrada vinv + =voutv / (resistencia2 / (resistencia1 + resistencia2)); // Fórmula del divisor resistivo para el voltaje final if (vinv <0.9) {vinv =0.0f; }} vinv =vinv / 100;} void sendData () {/ * Serial.print ("<"); Serial.print (sensorValue); Serial.print ("/"); Serial.print (freq); Serial.print ("/"); Serial.print (duty_cycle); Serial.print ("/"); Serial.print (vinv); Serial.print (">"); Serial.println (); * / String data ="<"; dados + =sensorValue; dados + ="/"; dados + =freq; dados + ="/"; dados + =dever_ciclo; dados + ="/"; dados + =vinv; dados + =">"; / * bluetooth.print ("<"); bluetooth.print (sensorValue); bluetooth.print ("/"); bluetooth.print (freq); bluetooth.print ("/"); bluetooth.print (duty_cycle); bluetooth.print ("/"); bluetooth.print (vinv); bluetooth.print (">"); * / Serial.println (dados); } 

Esquemas


Processo de manufatura

  1. Faça você mesmo voltímetro usando Arduino e Smartphone
  2. Pixie:Um relógio de pulso NeoPixel baseado em Arduino
  3. Detector de frequência de áudio
  4. Faça você mesmo skate de realidade virtual
  5. Arduino e autômatos celulares baseados em OLED
  6. Faça você mesmo Arduino RADIONICS Tratamento MMachine
  7. Simulador de corrida de movimento 2D DIY
  8. Detector de alcance ultrassônico com Arduino
  9. Sistema de segurança baseado em Arduino
  10. Um detector de relâmpagos para Arduino