Inhoudsopgave:

Arduino-gebaseerde pulsinductiedetector - LC-Trap - Ajarnpa
Arduino-gebaseerde pulsinductiedetector - LC-Trap - Ajarnpa

Video: Arduino-gebaseerde pulsinductiedetector - LC-Trap - Ajarnpa

Video: Arduino-gebaseerde pulsinductiedetector - LC-Trap - Ajarnpa
Video: обнаружение неисправности электрооборудования с помощью arduino 2024, Juli-
Anonim
Op Arduino gebaseerde pulsinductiedetector - LC-Trap
Op Arduino gebaseerde pulsinductiedetector - LC-Trap

Terwijl ik op zoek was naar verdere ideeën voor een eenvoudige Ardino Pulse Induction metaaldetector met slechts één voedingsspanning, kwam ik de homepage van Teemo tegen:

www.digiwood.ee/8-electronic-projects/2-metal-detector-circuit

Hij creëerde een eenvoudige pulsinductiedetector volgens het LC-Trap-principe. Soortgelijke circuits zijn hier op Instructable gepost door TechKiwiGadgets. Behalve dat het Teemo-circuit de interne comparatoren van de PIC-microcontroller gebruikt, waardoor er minder externe componenten nodig zijn

Dus ik werd uitgedaagd om de Arduino te gebruiken in plaats van een PIC-controller voor dit schema en te kijken hoe ver ik kan komen.

Stap 1: Schematisch:

Schematisch
Schematisch
Schematisch
Schematisch
Schematisch
Schematisch

Het Arduino-schema is iets gecompliceerder omdat de Arduino niet toestaat om een intern analoog signaal naar de ingang van de comparator te routeren. Dit voegt twee componenten toe voor een eenvoudige spanningsdelerr. Dit leidt tot een ontwerp met 12 externe componenten (zonder de luidspreker en het 16x2 LCD-scherm), vergeleken met 9 van het Flip Coil-ontwerp.

Het werkingsprincipe van het schema wordt heel goed uitgelegd op de website van Teemo. In principe wordt de spoel gevoed en vervolgens uitgeschakeld. Na het uitschakelen zullen de spoel en de condensor parallel een gedempte trilling creëren. De frequentie en het verval van de oscillatie wordt beïnvloed door metaal in de buurt van de spoel. Zie de pagina van Teemo of TechKiwi hier op Instructables voor meer informatie over het circuit.

Net als bij de Flip Coil Pulse Induction detector gebruik ik de interne comparator en de mogelijkheid om een interrupt te triggeren om het signaal van de spoel te verkrijgen.

In dit geval krijg ik meerdere interrupts omdat de spanning oscilleert rond de referentiespanning die is ingesteld op de comparator. Aan het einde van de oscillatie zal de spanning op de spoel rond de 5V liggen, maar niet precies. Ik koos een spanningsdeler met 200 Ohm en 10k Ohm om een spanning van ongeveer 4,9 volt te krijgen

Om de complexiteit van de schema's te verminderen, heb ik D4 en D5 gebruikt om GND (voor de 10k-weerstand) en 5V (voor de 220 Ohm-weerstand) te leveren. De pinnen worden ingesteld bij het opstarten van de detector.

In deze versie heb ik een luidsprekeraansluiting toegevoegd met behulp van de volumegestuurde meertonige benadering zoals beschreven in Een op Arduino gebaseerde metaaldetector programmeren. Dit maakt het mogelijk om de eigenschappen van het doel te differentiëren en om een gevoel te krijgen voor de signaalsterkte. De luidspreker kan worden aangesloten op de extra 5-pins header. De overige 3 pinnen van de header worden gebruikt voor (te implementeren) drukknoppen.

Stap 2: Programmeren

Programmeren
Programmeren
Programmeren
Programmeren
Programmeren
Programmeren

Nu de schakeling is ontworpen en het prototype is gebouwd, is het tijd om een geschikte aanpak te vinden voor het detecteren van metaal.

1. Pulsen tellen

Het tellen van pulsen van de oscillatie totdat deze volledig wegsterft, is een idee.

Als er zich metaal in de buurt van de spoel bevindt, neemt de hoeveelheid oscillatie af. In dit geval moet de referentiespanning van de comparator zo worden ingesteld dat de laatste puls nauwelijks nog wordt gemeten. Dus als er iets wordt gedetecteerd, verdwijnt deze puls onmiddellijk. Dit was een beetje problematisch.

Elke golf van de oscillatie creëert twee interrupts. Een terwijl je naar beneden gaat en een die weer omhoog gaat. Om de referentiespanning precies op de top van een oscillatiegolf in te stellen, moet de tijd tussen dalen en stijgen zo kort mogelijk zijn (zie afbeelding). Helaas zorgt hier de overhead van de Arduino-omgeving voor problemen.

Elke trigger van de interrupt vraagt om deze code:

ISR(ANALOG_COMP_vect){

Toggle1=Toggle0 // laatste waarde opslaan Toggle0=TCNT1; // krijg nieuwe waarde}

Deze code kost wat tijd (als ik het me goed herinner, ongeveer 78 instructiecycli, wat ongeveer 5 microseconden @ 16MHz is). Daarom is de minimaal detecteerbare afstand tussen twee pulsen precies de tijd die deze code nodig heeft. Als de tijd tussen twee triggers korter wordt (zie afbeelding), wordt deze niet gedetecteerd, omdat de code volledig wordt uitgevoerd voordat een tweede interrupt wordt gedetecteerd

Dit leidt tot verlies van gevoeligheid. Tegelijkertijd merkte ik dat de demping van de trillingen erg gevoelig is voor welke externe invloeden dan ook, waardoor deze benadering in totaal een beetje moeilijk wordt.

2. De frequentie meten

Een andere manier om metaal te detecteren is het meten van de frequentie van de trilling. Dit heeft een groot voordeel ten opzichte van het meten van de demping van de oscillatie, aangezien de verandering in frequentie discriminatie van het metaal mogelijk maakt. Als er ijzerhoudend materiaal in de buurt van de spoel is, zal de frequentie vertragen, als er edelmetaal in de buurt van de spoel is, zal de frequentie toenemen.

De eenvoudigste manier om de frequentie te meten, is door het aantal pulsen te meten nadat de spoelen beginnen te oscilleren. De periode tussen de start en de laatste puls gedeeld door het totaal aantal gemeten pulsen is de frequentie. Helaas zijn de laatste paar trillingen nogal asymmetrisch. Omdat de aanwezigheid van metaal ook het verval van de oscillatie beïnvloedt, zijn de laatste oscillaties nog meer asymmetrisch, de aflezingen zijn moeilijk te interpreteren. Op de foto is dit te zien met de kruising 1 naar 1’ en 2 naar 2’.

Een betere manier is daarom om enkele eerdere pulsen te gebruiken om de frequentie te meten. Tijdens het testen ontdekte ik interessant genoeg dat sommige pulsen pulsen gevoeliger zijn dan andere. Ergens op 2/3 van de oscillaties is een goed punt om de gegevens te verkrijgen.

Het verwerken van de gegevens

De initiële code is gebaseerd op de lus() die een pulse()-functie oproept om de timing van de spoel te doen. Hoewel de resultaten niet slecht waren, had ik de drang om de timing te verbeteren. Om dit te doen, heb ik een volledig op timer gebaseerde code gemaakt, wat leidde tot de afzonderlijke instuctable Hoe een op Arduino gebaseerde metaaldetector te programmeren. Dit instructable legt de timing, data crunching LCD-output etc in detail uit

1. Het LCD-scherm

De eerste benadering was om 10 pulsen te meten en vervolgens de waarden op het LCD-scherm weer te geven. Toen ik ontdekte dat de I2C-gegevensoverdracht veel te traag was, veranderde ik naar code om slechts één teken per puls bij te werken.

2. Minimale waardebenadering

Om de stabiliteit van de metingen verder te verbeteren heb ik een seriële output routine geschreven om een beter gevoel voor de gemeten data te krijgen. Daar werd duidelijk dat hoewel de meeste metingen enigszins stabiel waren, sommige dat niet waren! Sommige metingen van de "dezelfde" oscillatiepuls lagen zo ver uit elkaar dat het elke benadering zou vernietigen om een verschuiving in frequentie te analyseren.

Om dit te compenseren, heb ik een "grens" gecreëerd waarbinnen waarde betrouwbaar was. ik. e. wanneer waarden meer dan 35 cycli van timer1 verwijderd waren van de verwachte waarde, werden deze waarden genegeerd (in detail uitgelegd in de Instructable "Hoe een op Arduino gebaseerde metaaldetector te programmeren")

Deze aanpak bleek zeer stabiel te zijn.

3. De spanning:

Het originele ontwerp van Teemo wordt gevoed onder de 5 volt. Omdat mijn aannames waren "meer volt = meer vermogen = meer gevoeligheid", voedde ik het apparaat in het begin met 12V. Dit resulteerde in opwarming van de MOSFET. Deze opwarming resulteerde vervolgens in een algemene drift van de gemeten waarden, wat leidde tot frequente herbalancering van de detector. Door de spanning te verlagen tot 5V kon de warmteontwikkeling van de MOSFET worden geminimaliseerd tot een niveau waarop bijna geen drifting van de meetwaarden werd waargenomen. Dit maakte de schakeling nog eenvoudiger, aangezien de boordspanningsregelaar van de Arduino niet meer nodig was.

Voor een MOSFET koos ik in eerste instantie de IRL540. Deze MOSFET is compatibel met logisch niveau, maar heeft een maximale spanning van 100V. Ik hoopte op betere prestaties door te veranderen naar een IRL640 met 200V-classificaties. Helaas waren de resultaten hetzelfde. Dus ofwel een IRL540 of een IRL640 zal het werk doen.

Stap 3: Eindresultaten

Eind resultaat
Eind resultaat
Eind resultaat
Eind resultaat
Eind resultaat
Eind resultaat

Het voordeel van de detector is dat hij onderscheid maakt tussen kostbaar en ijzerhoudend materiaal. Het nadeel is, dat de gevoeligheid bij dit simpele schema niet zo goed is. Om de prestaties te vergelijken heb ik dezelfde referenties gebruikt als voor de Flip-Coil detector. Waarschijnlijk goed voor wat lokaliseren, maar hoogstwaarschijnlijk teleurstellend voor echt zoeken.

Hier zou het oorspronkelijke ontwerp met de PIC-controller gevoeliger kunnen zijn omdat deze op 32MHz draait in plaats van de 16MHz van de therfor waardoor een hogere resolutie wordt geboden voor het detecteren van verschuivingen in frequentie.

Resultaten werden bereikt door de spoel met 48 windingen op 100 mm te gebruiken.

Zoals altijd, open voor feedback

Aanbevolen: