Innehållsförteckning:

Arduino -baserad pulsinduktionsdetektor - LC -fälla: 3 steg
Arduino -baserad pulsinduktionsdetektor - LC -fälla: 3 steg

Video: Arduino -baserad pulsinduktionsdetektor - LC -fälla: 3 steg

Video: Arduino -baserad pulsinduktionsdetektor - LC -fälla: 3 steg
Video: Урок 2 Блок Number Change – Детектор изменения числа, Вход «EN», Базовые элементы 2024, Juli
Anonim
Arduino -baserad pulsinduktionsdetektor - LC -Trap
Arduino -baserad pulsinduktionsdetektor - LC -Trap

När jag letade efter ytterligare idéer för en enkel Ardino Pulse Induction metalldetektor med bara en matningsspänning kom jag över Teemos hemsida:

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

Han skapade en enkel pulsinduktionsdetektor med LC-Trap-principen. Liknande kretsar publicerades här på Instructable by TechKiwiGadgets. Förutom att Teemo -kretsen använder de interna komparatorerna för en PIC -mikrokontroller, vilket kräver mindre externa komponenter

Så jag utmanades att använda Arduino istället för en PIC-Controller för den här schemat och se hur långt jag kan komma.

Steg 1: Schematisk

Schematisk
Schematisk
Schematisk
Schematisk
Schematisk
Schematisk

Arduino -schemat är lite mer komplicerat eftersom Arduino inte tillåter att dirigera en intern analog signal till ingången från komparatorn. Detta lägger till två komponenter för en enkel spänningsdelare. Detta leder till en design med 12 externa komponenter (utelämnar högtalaren och 16x2 LCD), jämfört med 9 i Flip Coil -designen.

Arbetsprincipen för schematiken förklaras mycket bra på Teemos webbplats. I grund och botten drivs spolen och stängs sedan av. Efter avstängning skapar spolen och kondensorn parallellt en dämpad svängning. Oscillationens frekvens och förfall påverkas av metall i närheten av spolen. För ytterligare information om kretsen se sidan Teemo eller TechKiwi här på Instructables.

Som i Flip Coil Pulse Induction -detektorn använder jag den interna komparatorn och möjligheten att utlösa ett avbrott för att få signalen från spolen.

I detta fall kommer jag att få flera avbrott eftersom spänningen oscillerar runt referensspänningen som är inställd på komparatorn. I slutet av svängningen kommer spänningen vid spolen att lösa sig runt 5V, men inte exakt. Jag valde en spänningsdelare med 200 Ohm och 10k Ohm för att få en spänning på cirka 4,9 volt

För att minska komplexiteten i scheman använde jag D4 och D5 för att tillhandahålla GND (för 10k motståndet) och 5V (för 220 Ohm motståndet). Stiften sätts vid start av detektorn.

I den här versionen lade jag till en högtalaranslutning med hjälp av den volymkontrollerade flertonskänslan enligt beskrivningen i Hur man programmerar en Arduino -baserad metalldetektor. Detta gör det möjligt att differentiera egenskaperna hos målet såväl som att få en känsla för signalstyrkan. Högtalaren kan anslutas till den extra 5 -stifts rubriken. De återstående 3 stiften i rubriken kommer att användas för tryckknappar (som ska implementeras).

Steg 2: Programmering

Programmering
Programmering
Programmering
Programmering
Programmering
Programmering

Nu när kretsen är designad och prototypen är byggd är det dags att hitta en lämplig metod för att upptäcka metall.

1. Räkna pulser

Att räkna oscillationens pulser tills den försvinner helt är en idé.

Om det finns metall nära spolen minskar oscillationen. I detta fall bör komparatorns referensspänning sättas till en nivå där den sista pulsen knappt fortfarande mäts. Så om något upptäcks försvinner denna puls omedelbart. Det här var lite problematiskt.

Varje svängningsvåg skapar två avbrott. En medan du går ner och en går upp igen. För att ställa in referensspänningen exakt till toppen av en oscillationsvåg, bör tiden mellan att gå ner och gå upp vara så kort som möjligt (se bild). Tyvärr här skapar omkostnaderna för Arduino -miljön problem.

Varje utlösare av avbrottet kräver denna kod:

ISR (ANALOG_COMP_vect) {

Toggle1 = Toggle0 // spara sista värdet Toggle0 = TCNT1; // få nytt värde}

Den här koden tar lite tid (om jag kommer ihåg rätt är cirka 78 instruktionscykler häxan cirka 5 mikrosekunder @ 16MHz). Därför är det minsta detekterbara avståndet mellan två pulser exakt den tid som denna kod tar. Om tiden mellan två utlösare blir kortare (se bild) går det oupptäckt, eftersom koden är fullständigt exekverad innan ett andra avbrott detekteras

Detta leder till en känslighetsförlust. Samtidigt märkte jag att dämpningen av svängningarna är mycket känslig för oavsett yttre påverkan, vilket gör detta tillvägagångssätt totalt sett lite svårt.

2. Mätning av frekvensen

Ett annat sätt att detektera metall är att mäta oscillationens frekvens. Detta har en stor fördel jämfört med att mäta oscillationens dämpning eftersom förändringen i frekvens möjliggör diskriminering av metallen. Om det finns järnmaterial nära spolen kommer frekvensen att sakta ner, om det finns ädelmetall nära spolen, kommer frekvensen att öka.

Det enklaste sättet att mäta frekvensen är att mäta mängden pulser efter att spolarna börjar svänga. Tiden mellan starten och den sista pulsen dividerat med den totala mängden uppmätta pulser är frekvensen. Tyvärr är de senaste svängningarna ganska osymmetriska. Eftersom närvaron av metall också påverkar svängningen av oscillationen är de sista svängningarna ännu mer osymmetriska, avläsningarna är svåra att tolka. På bilden är detta visa med korsningen 1 till 1’och 2 till 2’.

Ett bättre sätt är därför att använda några tidigare pulser för att mäta frekvensen. Under testet upptäckte jag intressant att vissa pulser är mer känsliga än andra. Någonstans vid 2/3 av svängningarna är en bra punkt att skaffa data.

Bearbetar uppgifterna

Den inledande koden baserad på slingan () som kräver en puls () -funktion för att göra tidpunkten för spolen. Även om resultaten inte var dåliga, var jag sugen på att förbättra timingen. För att göra det skapade jag en helt timerbaserad kod, vilket ledde till den separata instuktable How to Program a Arduino Based Metal Detector. Denna instruerbara förklarar tidpunkten, datakrossning LCD -utdata etc i detalj

1. LCD -skärmen

Det första tillvägagångssättet var att mäta 10 pulser och sedan visa värdena på LCD -skärmen. Eftersom jag fick reda på att I2C -dataöverföringen var alldeles för långsam, bytte jag till kod för att uppdatera bara ett tecken per puls.

2. Minimivärde

För att förbättra avläsningsstabiliteten ytterligare skrev jag en serieutmatningsrutin för att få en bättre känsla för de uppmätta data. Där blev det uppenbart att även om de flesta avläsningarna var något stabila, var vissa inte det! Vissa avläsningar av "samma" oscillationspuls var så långt ifrån varandra att det skulle förstöra varje tillvägagångssätt för att analysera en förändring i frekvens.

För att kompensera för detta skapade jag en "gräns" inom vilken värdet var pålitligt. I. e. när värdena var mer än 35 cykler av timer1 bort från det förväntade värdet ignorerades dessa värden (förklaras i detalj i instruktionsboken "Hur man programmerar en Arduino -baserad metalldetektor")

Detta tillvägagångssätt visade sig vara mycket stabilt.

3. Spänningen

Teemos originaldesign drivs under 5 volt. Eftersom mina antaganden var "mer volt = mer effekt = mer känslighet" drev jag enheten i början med 12V. Detta resulterade i uppvärmning av MOSFET. Denna uppvärmning resulterade sedan i en allmän drift av de uppmätta värdena, vilket ledde till frekvent ombalansering av detektorn. Genom att minska spänningen till 5V kan värmegenereringen för MOSFET minimeras till en nivå där nästan ingen drift av avläsningarna observerades. Detta gjorde kretsen ännu enklare, eftersom den inbyggda spänningsregulatorn på Arduino inte längre behövdes.

För en MOSFET valde jag initialt IRL540. Denna MOSFET är logisk nivåkompatibel, men har en maximal spänning över 100V. Jag hoppades på att bättre prestanda skulle ändras till en IRL640 med 200V -betyg. Tyvärr var resultaten desamma. Så antingen en IRL540 eller en IRL640 kommer att göra jobbet.

Steg 3: Slutresultat

Slutresultat
Slutresultat
Slutresultat
Slutresultat
Slutresultat
Slutresultat

Fördelen med detektorn är att den skiljer mellan värdefullt och järnhaltigt material. Nackdelen är att känsligheten med denna enkla schemat inte är så bra. För att jämföra prestanda använde jag samma referenser som för Flip-Coil-detektorn. Förmodligen bra för vissa pekar, men troligen en besvikelse för verklig sökning.

Här kan den ursprungliga designen med PIC -styrenheten vara mer känslig eftersom den körs på 32MHz istället för 16MHz för den ger en högre upplösning för att detektera skift i frekvens.

Resultaten uppnåddes genom att använda spolen med 48 varv @ 100 mm.

Som alltid, öppen för feedback

Rekommenderad: