Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

DIY Arduino-gebaseerde pulsinductie metaaldetector

Componenten en benodigdheden

Arduino Nano R3
× 1
HC-05 Bluetooth-module
× 1
Transistor PNP voor algemeen gebruik
× 1
Transistor-NPN voor algemeen gebruik
× 1
Power MOSFET N-kanaal
× 1
Operationele versterker, opamp + comparator + referentie
× 1
1N4148 – Snel schakelen voor algemeen gebruik
× 2
Condensator 10 µF
× 1
Condensator 1 µF
× 1
Single Turn Potentiometer-100k ohm
× 1
Single Turn Potentiometer-47k
× 1
12 weerstanden met verschillende waarden
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Over dit project

Pulsinductiesystemen (PI) gebruiken een enkele spoel als zender en ontvanger. Deze technologie stuurt krachtige, korte stroomstoten (pulsen) door een draadspoel. Elke puls genereert een kort magnetisch veld. Wanneer de puls eindigt, keert het magnetische veld van polariteit en stort het zeer plotseling in, wat resulteert in een scherpe elektrische piek. Deze piek duurt enkele microseconden en zorgt ervoor dat er weer een stroom door de spoel loopt. Deze stroom wordt de gereflecteerde puls genoemd en is extreem kort en duurt slechts ongeveer 30 microseconden. Er wordt dan nog een puls verzonden en het proces herhaalt zich. Als een stuk metaal binnen het bereik van de magnetische veldlijnen komt, kan de ontvangstspoel een verandering in zowel amplitude als fase van het ontvangen signaal detecteren. De hoeveelheid amplitudeverandering en faseverandering is een indicatie voor de grootte en afstand van het metaal en kan ook worden gebruikt om onderscheid te maken tussen ferro- en non-ferrometalen.

Een mooi voorbeeld van een PI-detector vond ik op de site van de N.E.C.O. projecten. Deze metaaldetector is een symbiose van Arduino en Android. In de Play Store kun je de gratis versie van de applicatie "Spirit PI" downloaden, die volledig functioneel is, maar je kunt ook een pro-versie kopen die verschillende geweldige opties heeft. De communicatie tussen de smartphone en de arduino gebeurt met de bluetooth-module HC 05, maar je kunt elke bluetooth-adapter gebruiken waarop je de baudrate op 115200 moet zetten. Het schema is weergegeven in de onderstaande figuur. Ik heb verschillende kleine wijzigingen aangebracht in het oorspronkelijke schema om de functies van het apparaat te verbeteren. U kunt het originele schema vinden op de website van N.E.C.O.:

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

In plaats van een weerstand van 150 ohm heb ik een trimere potentiometer geplaatst met een waarde van 47 Kohms. Deze trimeer regelt de stroom door de spoel. Door de waarde te verhogen, neemt de stroom door de spoel toe en neemt de gevoeligheid van het apparaat toe. Tweede wijziging is trimmer pot 100kOhm in plaats van weerstand 62k in het origineel. Met deze trimer hebben we de spanning van ongeveer 4,5V ingesteld op A0-ingang op Arduino, omdat ik merkte dat voor andere operationele versterkers en bedrijfsspanningen de waarde van deze weerstand anders zou moeten zijn.

In dit specifieke geval gebruik ik voor het voeden van het apparaat een 4 lithium-ionbatterij die in een serie is aangesloten, zodat de spanning iets groter is dan 15v. Omdat Arduino een maximale ingangsspanning van 12V accepteert, heb ik een stabilisator voor 5V (7805) op het kleine koellichaam gemonteerd om de Arduino rechtstreeks van stroom te voorzien naar +5v-pin.

De spoel is gemaakt van geïsoleerd koperdraad met een diameter van 0,4 mm en bevat 25 windingen in de vorm van een cirkel met een diameter van 19 centimeter. Bij de uiteindelijke afwerking moet ervoor worden gezorgd dat er zich geen metalen voorwerpen in de buurt van de spoel (de elementen moeten worden gelijmd met lijm, en dat geen schroeven)

Zoals je op de video kunt zien, kan een kleine metalen munt worden gedetecteerd op een afstand van 10-15 centimeter, terwijl een groter metalen voorwerp van 30-40 centimeter en meer wordt gedetecteerd. Dit zijn uitstekende resultaten, rekening houdend met het feit dat het maken en instellen van het apparaat relatief eenvoudig is.

Code

  • code
codeArduino
#include //#include //int bluetoothTx =5;//int bluetoothRx =6;//blutoth module terminal RX//SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);# definieer pulsePine 2int timer =200;const int button1 =12;int buttonState1 =0;char data;//EEPROM variabelenint addr_duty =0;int addr_freq =1;int opgeslagen_waarde;int duty_cycle;int duty_cycle_temp;int freq;int freq_temp;int duty_def_value =10;int freq_def_value =60;//Balansvariabelenint value_count =0;int value_count_def =100;int balance_value =0;int balance_value_temp =0;//****unsigned long startMillis; niet-ondertekende lange stroomMillis; lange periode =100000; //de waarde is een aantal microseconden//Meting van het niveau van de batteryfloat resistencia1 =101000; // Weerstand van 100K para medir la tencion (Voltios)/Weerstand van 100k voor test voltsfloat resistencia2 =10000; // Weerstand van 10k para medir la tencion (Voltios)/Weerstand 10k voor test voltsfloat const arefVolt=4.8f; //pin "4.9v" STEL DE EXACTE WAARDE HIER INfloat voutv;float vinv;unsigned long startMillisVolts; niet-ondertekende lange stroomMillisVolts;lange periodeVolts =2000; // de waarde is een aantal microseconden in sensorValue; void setup () { //analogReference (INTERN); Serieel.begin(115200); readFromStorage(addr_duty); duty_cycle =opgeslagen_waarde; readFromStorage(addr_freq); freq =opgeslagen_waarde; if (duty_cycle ==0 || duty_cycle ==255) {writeToStorage(duty_def_value,addr_duty); readFromStorage(addr_duty); duty_cycle =opgeslagen_waarde; } if(freq ==0 || freq ==255) {writeToStorage(freq_def_value,addr_freq); readFromStorage(addr_freq); freq =opgeslagen_waarde; } pinMode (pulsePine, UITGANG); }void loop() { currentMillis =micros(); huidigeMillisVolts =millis(); if(Serial.available()>0) { data =Serial.read(); setDutyAndFreq (gegevens); } if (currentMillis - startMillis>=periode) { period =1000000 / freq; // Serial.println (periode); digitalWrite (pulsePine, HOOG); duty_cycle_temp =duty_cycle * 10; vertraging Microseconden (duty_cycle_temp); digitalWrite (pulsePine, LAAG); //sensorValue =analoog lezen (A0); for(int i =0;i <3; i++){ sensorValue =analogRead(A0);}delayMicroseconds(10);sensorValue =analogRead(A0);sensorValue =sensorValue/5; verstuur data(); startMillis =huidigeMillis; } // 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) { opgeslagen waarde =EEPROM.read (addr); opgeslagen_waarde teruggeven; } 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 //"+" waarde voor de balans //"-" waarde voor de balans if (waarde =='n') { // Serial.println ("n Recived"); readFromStorage(addr_duty); duty_cycle =opgeslagen_waarde; duty_cycle =duty_cycle + 1; writeToStorage(duty_cycle,addr_duty); } else if(valor =='m') { // Serial.println ("m Recived"); readFromStorage(addr_duty); duty_cycle =opgeslagen_waarde; duty_cycle =duty_cycle - 1; writeToStorage(duty_cycle,addr_duty); } else if(valor =='j') { // Serial.println ("j Recived"); readFromStorage(addr_freq); freq =opgeslagen_waarde; freq =freq + 10; writeToStorage(freq,addr_freq); } else if(valor =='k') { // Serial.println ("k Recived"); readFromStorage(addr_freq); freq =opgeslagen_waarde; freq =freq - 10; writeToStorage(freq,addr_freq); } else if(valor =='p') { // Serial.println ("m Recived"); writeToStorage(0,addr_freq); writeToStorage(0,addr_duty); } } //Volt functievoid lecturaVoltios(){ vinv=0.0f; voutv=0.0f; for (int i=0;i <100;i++){ voutv =(analogRead(A7) * arefVolt) / 1023; //Lee el voltaje de entrada vinv +=voutv / (resistencia2 / (resistencia1 + resistencia2)); //Fórmula del deler resistivo para el voltaje final if (vinv <0.9) {vinv=0.0f; } }vinv =vinv/100;}void sendData() { /* Serial.print("<"); Serial.print(sensorValue); Serieel.print("/"); Serial.print(freq); Serieel.print("/"); Serial.print( duty_cycle); Serieel.print("/"); Serial.print (vinv); Serieel.print(">"); Serial.println();*/ Tekenreeksgegevens ="<"; data +=sensorWaarde; gegevens +="/"; gegevens +=freq; gegevens +="/"; gegevens +=duty_cycle; gegevens +="/"; gegevens +=vinv; gegevens +=">"; /* bluetooth.print("<"); bluetooth.print (sensorwaarde); bluetooth.print("/"); bluetooth.print(freq); bluetooth.print("/"); bluetooth.print( duty_cycle); bluetooth.print("/"); bluetooth.print (vinv); bluetooth.print(">");*/Serial.println(data); }

Schema's


Productieproces

  1. DIY voltmeter met Arduino en smartphone
  2. Pixie:een op Arduino gebaseerd NeoPixel-polshorloge
  3. Audiofrequentiedetector
  4. DIY Virtual Reality Skateboard
  5. Arduino en OLED-gebaseerde mobiele automaten
  6. DIY Arduino RADIONICS-behandelingsmachine
  7. DIY 2D Motion Racing Simulator
  8. Ultrasone bereikdetector met Arduino
  9. Arduino-gebaseerd beveiligingssysteem
  10. Een bliksemdetector voor Arduino
  11. DIY-idee met RFID