Innehållsförteckning:
Video: Arduino -baserad pulsinduktionsdetektor - LC -fälla: 3 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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
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
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
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:
Arduino Car Reverse Parking Alert System - Steg för steg: 4 steg
Arduino Car Reverse Parking Alert System | Steg för steg: I det här projektet kommer jag att utforma en enkel Arduino Car Reverse Parking Sensor Circuit med Arduino UNO och HC-SR04 Ultrasonic Sensor. Detta Arduino -baserade bilomvändningsvarningssystem kan användas för autonom navigering, robotavstånd och andra
Steg för steg PC -byggnad: 9 steg
Steg för steg PC -byggnad: Tillbehör: Hårdvara: ModerkortCPU & CPU -kylarePSU (strömförsörjningsenhet) Lagring (HDD/SSD) RAMGPU (krävs inte) CaseTools: Skruvmejsel ESD -armband/mathermisk pasta med applikator
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
RC -spårad robot med Arduino - Steg för steg: 3 steg
RC -spårad robot med Arduino - Steg för steg: Hej killar, jag är tillbaka med ett annat häftigt robotchassi från BangGood. Hoppas att du har gått igenom våra tidigare projekt - Spinel Crux V1 - Gesture Controlled Robot, Spinel Crux L2 - Arduino Pick and Place Robot med Robotic Arms och The Badland Braw
DIY Arduino robotarm, steg för steg: 9 steg
DIY Arduino robotarm, steg för steg: Denna handledning lär dig hur du bygger en robotarm själv