Obsah:

Pulzní indukční detektor na bázi Arduina - překlápěcí cívka: 5 kroků (s obrázky)
Pulzní indukční detektor na bázi Arduina - překlápěcí cívka: 5 kroků (s obrázky)

Video: Pulzní indukční detektor na bázi Arduina - překlápěcí cívka: 5 kroků (s obrázky)

Video: Pulzní indukční detektor na bázi Arduina - překlápěcí cívka: 5 kroků (s obrázky)
Video: Detektor kovu 2024, Červenec
Anonim
Pulzní indukční detektor na bázi Arduina - překlápěcí cívka
Pulzní indukční detektor na bázi Arduina - překlápěcí cívka
Pulzní indukční detektor na bázi Arduina - překlápěcí cívka
Pulzní indukční detektor na bázi Arduina - překlápěcí cívka

Idea

Když jsem v minulosti postavil několik detektorů kovů s různými výsledky, chtěl jsem prozkoumat možnosti Arduina v tomto směru.

Existuje několik dobrých příkladů, jak postavit detektory kovů pomocí Arduina, některé zde jako pokyny. Ale když se na ně podíváme, obvykle vyžadují buď docela nějaké externí komponenty pro zpracování analogového signálu, nebo je citlivost poměrně nízká.

Při přemýšlení o detektorech kovů je hlavním tématem, jak vnímat nepatrné změny napětí v signálech souvisejících s vyhledávací cívkou. Tyto změny jsou obvykle velmi malé. Nejzjevnějším přístupem by bylo použití analogových vstupů ATmega328. Ale při pohledu na specifikace existují dva základní problémy: jsou (často) zpomalené a rozlišení je (ve většině případů) nízké.

Na druhou stranu, Arduino běží na 16 MHz a má docela dost možností časování i. E. rozlišení 0,0625 µS při použití hodinové rychlosti. Takže namísto použití analogového vstupu ke snímání je nejjednodušším způsobem snímání malých dynamických změn napětí porovnat změnu poklesu napětí v čase při pevném referenčním napětí.

Za tímto účelem má ATmega328 úhlednou funkci interního komparátoru mezi D6 a D7. Tento komparátor je schopen spustit přerušení, což umožňuje přesné zpracování událostí. Ponecháme -li vedle úhledně kódovaných časovacích rutin jako millis () a micos () a přejdeme do interního časovače ATmega328 s mnohem vyšším rozlišením, je Arduino skvělým základem pro přístupy k detekci kovů.

Z pohledu zdrojového kódu by tedy dobrým začátkem bylo naprogramovat interní komparátor na „změnu“polarity vstupů a použít interní čítač s nejvyšší možnou rychlostí pro změnu načasování změn.

Obecný kód v Arduido k dosažení tohoto je:

// Definování všech požadovaných před proměnných atd. A nastavení registrů

unsigned char clockSelectBits = _BV (CS10); // bez přednastavení, úplné nastavení xtal void () {pinMode (6, INPUT); // + komparátoru - jejich nastavením jako VSTUP jsou // nastaveny na pinMode s vysokou impedancí (7, VSTUP); // - komparátoru - jejich nastavením jako VSTUP jsou // nastaveny na vysokou impedanci cli (); // zastavení přerušení TCCR1A = 0; // nastavení celého registru TCCR1A na 0 TCCR1B = 0; // totéž pro TCCR1B -> normální režimTCNT1 = 0; // inicializace hodnoty čítače na 0; TCCR1B | = clockSelectBits; // nastaví prescaler a spustí hodiny TIMSK1 = _BV (TOIE1); // nastaví povolení přerušení přetečení časovače bit sei (); // povolit přerušení ACSR = (0 << ACD) | // Analogový komparátor: Povoleno (0 << ACBG) | // Výběr pásma analogového komparátoru: AIN0 je použit na kladný vstup (0 << ACO) | // Výstup analogového komparátoru: Vypnuto (1 << ACI) | // Příznak přerušení analogového komparátoru: Jasné čekající přerušení (1 << ACIE) | // Přerušení analogového komparátoru: Povoleno (0 << ACIC) | // Zachycení vstupu analogového komparátoru: Zakázáno (0 << ACIS1 | 0 << ACIS0 // přerušení při přepínání výstupu // (0 << ACIS1 | 1 << ACIS0 // vyhrazeno // (1 << ACIS1 | 0 << ACIS0 // přerušení na sestupné výstupní hraně // (1 << ACIS1 | 1 << ACIS0 // přerušení na stoupající vstupní hraně;}

// tato rutina se nazývá pokaždé, když komparátor vytvoří přerušení

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); časové razítko = TCNT1; SREG = starý SREG; }

// tato rutina se nazývá pokaždé, když dojde k přetečení interního čítače

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// tato rutina se používá k resetování časovače na 0

void resetTimer (void) {oldSREG = SREG; cli (); // Zakázat přerušení TCNT1 = 0; // inicializace hodnoty čítače na 0 SREG = oldSREG; // Obnovení stavového registru TCCR1B | = clockSelectBits; // nastaví prescaler a spustí hodiny timer1_overflow_count = 0; // resetuje čítač přetečení}

Tato myšlenka samozřejmě není zcela nová. Hlavní část tohoto kódu najdete jinde. Dobrá implementace, jako přístup k mikrokontroléru, nalezený na domovské stránce TPIMD - Tiny Pulse Induction Metal Detector.

www.miymd.com/index.php/projects/tpimd/ (bohužel tato stránka již není online, aktuálně existuje záloha webu na www.basic4mcu.com, vyhledejte „TPIMD“).

Krok 1: Idea indukce pulsu Arduino - Flip Coil

Idea indukce pulsu Arduino - Flip Coil
Idea indukce pulsu Arduino - Flip Coil
Idea indukce pulsu Arduino - Flip Coil
Idea indukce pulsu Arduino - Flip Coil

Cílem je použít Arduino jako detektor pulzní indukce, jako v TPIMD, protože se zdá, že myšlenka načasování křivky rozpadu funguje docela dobře. Problém pulzních indukčních detektorů spočívá v tom, že normálně ke své práci potřebují jiné napětí. Jedno napětí pro napájení cívky a samostatné napětí pro řešení křivky rozpadu. Díky těmto dvěma zdrojům napětí jsou pulzní indukční detektory vždy trochu komplikované.

Při pohledu na napětí cívky v PI detektoru lze výslednou křivku rozdělit na dva různé stupně. První fází je samotný impuls, který napájí cívku a vytváří magnetické pole (1). Druhý stupeň je křivka poklesu napětí, počínaje špičkou napětí, poté se rychle upravuje na napětí „bez napájení“cívky (2). Problém je v tom, že cívka mění svoji polaritu po impulsu. Je puls kladný (Var 1. na přiloženém obrázku) je křivka rozpadu záporná. Je -li puls negativní, bude křivka rozpadu kladná (Var 2. na přiloženém obrázku)

K vyřešení tohoto základního problému je třeba cívku elektronicky po impulsu „převrátit“. V tomto případě může být puls kladný a křivka rozpadu může být také kladná.

Aby toho bylo dosaženo, musí být cívka po impulsu izolována od Vcc a GND. V tomto okamžiku protékajícím odporem protéká pouze proud. Tento izolovaný systém cívky a tlumicího odporu může být „orientován“na jakékoli referenční napětí. To teoreticky vytvoří kombinovanou kladnou křivku (spodní část výkresu)

Tuto kladnou křivku lze poté použít prostřednictvím komparátoru k detekci časového bodu, kdy napětí rozpadu „překračuje“referenční napětí. V případě pokladů v blízkosti cívky se změní křivka rozpadu a změní se časový bod překračující referenční napětí. Tuto změnu lze než detekovat.

Po několika experimentech se ukázalo, že následující obvod funguje.

Obvod se skládá z modulu Arduino Nano. Tento modul pohání dva tranzistory MOSFET napájející cívku (na SV3) přes D10. Když puls na D10 skončí, oba MOSFETy izolují cívku od 12V a GND. Ušetřená energie v cívce krvácí skrz R2 (220 ohmů). Současně R1 (560 ohmů) spojuje dřívější kladnou stranu cívky s GND. Tím se změní negativní křivka rozpadu na R5 (330 Ohmů) na kladnou křivku. Diody chrání vstupní pin Arduina.

R7 je oddělovač napětí při asi 0,04V. V okamžiku, kdy je křivka rozpadu na D7 zápornější než 0,04 na D6, je spuštěno přerušení a doba po skončení pulzu je uložena.

V případě kovu blízko cívky trvá křivka rozpadu déle a doba mezi koncem pulsu a přerušením se prodlužuje.

Krok 2: Sestavení detektoru (Breadboard)

Sestavení detektoru (Breadboard)
Sestavení detektoru (Breadboard)
Sestavení detektoru (Breadboard)
Sestavení detektoru (Breadboard)
Sestavení detektoru (Breadboard)
Sestavení detektoru (Breadboard)

Sestavení detektoru je celkem snadné. To lze provést buď na prkénku (přilepení k původnímu obvodu), nebo pájením dílů na desku plošných spojů.

LED D13 na desce Arduino Nano se používá jako indikace pro kov

Unsing a breadboard is the faster way to the working detector. Je zapotřebí docela dost kabeláže, přesto to lze provést na malém prkénku. Na obrázcích je to znázorněno ve 3 krocích, protože Arduino a MOSFET skrývají některé dráty. Při testování jsem nějak odpojil diody, aniž bych si toho zpočátku všiml. To nemělo žádný negativní vliv na chování detektoru. V PCB verzi obvodu jsem je úplně vynechal.

Na obrázcích není zobrazeno připojení k 0,96 OLED displeji. Tento displej je připojen:

Vcc - 5V (na pinu Arduino, ne napájecí napětí !!!)

GND - GND

SCL - A5

SDA - A4

Tento OLED displej je potřebný pro počáteční kalibraci detektoru. To se provádí nastavením správného napětí na PIN6 Arduina. Toto napětí by se mělo pohybovat kolem 0,04V. Displej pomáhá nastavit správné napětí.

Verze na prkénku funguje docela dobře, i když pravděpodobně není vhodná pro vycházení do přírody.

Krok 3: Přechod na PCB

Jde PCB
Jde PCB
Jde PCB
Jde PCB
Jde PCB
Jde PCB
Jde PCB
Jde PCB

Pokud jde o pájení, nemám rád oboustranné high-tech PCB, takže jsem upravil obvod tak, aby se vešel na jednostranný PCB.

Byly provedeny následující úpravy:

1. diody byly vynechány.

2. brány MOSFETů získaly odpor 10 Ohm

3. napájecí napětí pro dělič napětí na D6 je dáno signálem VYSOKÉ úrovně na D8

4. PIN ovladače pro MOSFETy byl změněn.

Tímto způsobem lze vytvořit jednostrannou desku plošných spojů, kterou lze pájet na univerzální desky plošných spojů. Pomocí tohoto obvodu budete mít funkční PI detektor s pouze 8-10 externími komponentami (podle toho, zda je použit OLED displej a/nebo reproduktor).

Krok 4: Nastavení a používání detektoru

Nastavení a používání detektoru
Nastavení a používání detektoru
Nastavení a používání detektoru
Nastavení a používání detektoru
Nastavení a používání detektoru
Nastavení a používání detektoru

Pokud je detektor správně sestaven a program je zapsán do Arduina, nejjednodušší (ne -li jediný) způsob nastavení jednotky je použít OLED displej. Displej je připojen k 5V, GND, A4, A5. Po zapnutí jednotky by se na displeji mělo zobrazit „kalibrace“. Po několika sekundách by se mělo zobrazit „kalibrace dokončena“a na displeji by se měla zobrazit tři čísla.

První číslo je „referenční hodnota“identifikovaná během kalibrace. Druhá hodnota je poslední naměřená hodnota a třetí hodnota je průměrná hodnota z posledních 32 měření.

Tyto tři hodnoty by měly být víceméně stejné (v mých testovacích případech pod 1000). Střední hodnota by měla být víceméně stabilní.

Chcete -li zahájit počáteční nastavení, v blízkosti cívky by neměl být žádný kov.

Nyní by měl být dělič napětí (potenciometr trimu) oříznut tak, aby spodní dvě hodnoty byly nastaveny na maximum a přitom poskytovaly stabilní hodnoty. Existuje kritické nastavení, kde střední hodnota začíná dávat podivné hodnoty. Otočte trimrem zpět, abyste znovu získali stabilní hodnoty.

Může se stát, že displej zamrzne. Stačí stisknout tlačítko reset a začít znovu.

Pro mé nastavení (cívka: 18 otáček @ 20 cm) je stabilní hodnota kolem 630-650. Po nastavení stiskněte tlačítko reset, jednotka se znovu zkalibruje a všechny stromové hodnoty by měly být opět ve stejném rozsahu. Pokud je nyní kov přiveden na cívku, LED dioda na desce Arduino (D13) by se měla rozsvítit. Připojený reproduktor vydává cvakavé zvuky (existuje zde prostor pro zlepšení programování).

Abyste předešli vysokým očekáváním:

Detektor detekuje nějaké věci, ale zůstává velmi jednoduchým a omezeným detektorem.

Abychom získali představu o schopnostech, provedli jsme některé referenční detekce pomocí různých jiných detektorů. Když se podíváme na výsledky, je to stále docela působivé na detektor s pouze 8 externími částmi, ale neodpovídajícími profesionálním detektorům.

Při pohledu na okruh a program je velký prostor pro zlepšení. Hodnoty rezistorů byly zjištěny zkušeností, doba pulsu 250 ms byla zvolena náhodně, parametry cívky také. Pokud máte nápady na vylepšení, rád je prodiskutuji.

Bavte se!

Krok 5: Aktualizace 1: Použití 16x2 LCD

Update1: Použití 16x2 LCD
Update1: Použití 16x2 LCD
Update1: Použití 16x2 LCD
Update1: Použití 16x2 LCD
Update1: Použití 16x2 LCD
Update1: Použití 16x2 LCD

Vylepšení

Během dalšího testování jsem si uvědomil, že knihovna pro I2C OLED displej spotřebovává značný čas. Rozhodl jsem se proto místo toho použít displej 16x2 s převodníkem I2C.

Převzal jsem tedy program na LCD displej a přidal několik užitečných funkcí. První řádek displeje nyní ukazuje sílu signálu případné indikace. Druhý řádek nyní zobrazuje dvě hodnoty. Pěst ukazovala aktuální odchylku signálu ve srovnání s kalibrační hodnotou. Tato hodnota by měla být "0". Pokud je tato hodnota trvale záporná nebo kladná, detektor by měl být znovu zkalibrován stisknutím resetovacího tlačítka. Kladné hodnoty označují kov blízko cívky.

Druhá hodnota ukazuje skutečnou hodnotu zpoždění křivky rozpadu. Tato hodnota obvykle není tak zajímavá, ale je potřebná k počátečnímu nastavení detektoru.

Program nyní umožňuje vícenásobné trvání pulzů v sekvenci (prostředky experimentování / zlepšování výkonu). Žádného průlomu jsem nedosáhl. Výchozí hodnota je tedy nastavena na dobu trvání jednoho impulsu.

Počáteční nastavení detektoru

Při nastavování detektoru je relevantní druhá hodnota druhého řádku (první lze ignorovat). Zpočátku může být hodnota „nestabilní“(viz obrázek). Otáčejte trimrovacím odporem, dokud se hodnota nedostane na stabilní hodnotu. Poté otočením zvýšíte hodnotu na maximální stabilní hodnotu. Stisknutím tlačítka reset proveďte novou kalibraci a detektor je připraven k použití.

Získal jsem dojem, že nastavením maximální stabilní hodnoty jsem ztratil citlivost na neželezné kovy. Možná by stálo za to experimentovat s nastavením, abyste měli dobrou citlivost na neželezné věci.

Cívky

Stavím 3 cívky pro další testování

1 -> 18 otáček při 200 mm

2 -> 25 otáček @ 100 mm

3 -> 48 otáček při 100 mm

Je zajímavé, že všechny cívky fungovaly docela dobře, s téměř stejným výkonem (20ct coin na 40-50mm ve vzduchu). To může být docela subjektivní pozorování.

Doporučuje: