Tartalomjegyzék:

Arduino alapú impulzusindukciós érzékelő - flip tekercs: 5 lépés (képekkel)
Arduino alapú impulzusindukciós érzékelő - flip tekercs: 5 lépés (képekkel)

Videó: Arduino alapú impulzusindukciós érzékelő - flip tekercs: 5 lépés (képekkel)

Videó: Arduino alapú impulzusindukciós érzékelő - flip tekercs: 5 lépés (képekkel)
Videó: Arduino alapú ürhajós videójáték. 2024, Július
Anonim
Arduino alapú impulzusindukciós érzékelő - flip tekercs
Arduino alapú impulzusindukciós érzékelő - flip tekercs
Arduino alapú impulzusindukciós érzékelő - flip tekercs
Arduino alapú impulzusindukciós érzékelő - flip tekercs

Az ötlet

Miután korábban fémdetektorokat építettem, eltérő eredményekkel, fel akartam fedezni az Arduino képességeit ebben az irányban.

Van néhány jó példa arra, hogyan lehet fémdetektorokat építeni az Arduino segítségével, néhány itt oktatható. De amikor ránézünk, általában vagy elég sok külső komponenst igényelnek az analóg jel kezeléséhez, vagy az érzékenység meglehetősen alacsony.

Amikor a fémdetektorokra gondolunk, a fő téma az, hogyan lehet érzékelni a feszültség enyhe változását a keresőtekercshez kapcsolódó jelekben. Ezek a változások általában nagyon kicsik. A legnyilvánvalóbb megközelítés az ATmega328 analóg bemeneteinek használata. De a specifikációkat tekintve két alapvető probléma van: (gyakran) lassúak, és a felbontás (a legtöbb esetben) alacsony.

Másrészt az Arduino 16MHz -en működik, és elég sok időzítési képességgel rendelkezik. e. 0,0625µS felbontás, ha órajelet használ. Tehát ahelyett, hogy az analóg bemenetet használná az érzékeléshez, a feszültség kismértékű dinamikus változásainak legegyszerűbb módja az, ha összehasonlítjuk a feszültségcsökkenés időbeli változását rögzített referenciafeszültség mellett.

Ebből a célból az ATmega328 rendelkezik a D6 és D7 közötti belső összehasonlító funkcióval. Ez az összehasonlító képes megszakítást kiváltani, lehetővé téve az események pontos kezelését. Ha elhagyja a szépen kódolt időzítési rutinokat, mint a millis () és a micos (), és belép az ATmega328 belső időzítőjébe, sokkal nagyobb felbontással, az Arduino nagyszerű alap a fémdetektoros megközelítésekhez.

Tehát egy forráskód nézetből jó kezdet az lenne, ha a belső összehasonlítót a bemenetek polaritásának „megváltoztatására” programoznánk, és a változások időzítésének megváltoztatásához a lehető legnagyobb sebességű belső számlálót használnánk.

Az Arduido általános kódja ennek eléréséhez:

// Az összes szükséges előváltozó meghatározása stb. És a regiszterek beállítása

unsigned char clockSelectBits = _BV (CS10); // nincs előskála, teljes xtal void setup () {pinMode (6, INPUT); // + az összehasonlítóból - ha bemenetre állítjuk őket, akkor // nagy impedanciájú pinMode (7, INPUT) értékre állítjuk; // - az összehasonlítóból - ha bemenetre állítjuk őket, akkor // nagy impedanciájúra állítjuk őket cli (); // stop megszakítja TCCR1A = 0; // állítsa a teljes TCCR1A regisztert 0 -ra TCCR1B = 0; // ugyanaz a TCCR1B esetében -> normál módTCNT1 = 0; // inicializálja a számláló értékét 0 -ra; TCCR1B | = clockSelectBits; // beállítja az előskálázót és elindítja az órát TIMSK1 = _BV (TOIE1); // beállítja az időzítő túlcsordulás megszakítás engedélyezési bitjét sei (); // megszakítások engedélyezése ACSR = (0 << ACD) | // Analóg összehasonlító: Engedélyezve (0 << ACBG) | // Analóg összehasonlító sávválasztás: Az AIN0 -t alkalmazza a pozitív bemenetre (0 << ACO) | // Analóg összehasonlító kimenet: Ki (1 << ACI) | // Analóg összehasonlító megszakítás jelző: Függőben lévő megszakítás törlése (1 << ACIE) | // Analóg összehasonlító megszakítás: engedélyezve (0 << ACIC) | // Analóg komparátor bemeneti rögzítés: Letiltva (0 << ACIS1 | 0 << ACIS0 // megszakítás kimeneti kapcsolón // (0 << ACIS1 | 1 << ACIS0 // fenntartva // (1 << ACIS1 | 0 << ACIS0 // megszakítás a lemenő kimeneti élnél // (1 << ACIS1 | 1 << ACIS0 // megszakítás a növekvő bemeneti élnél;}

// ezt a rutint minden alkalommal meghívják, amikor az összehasonlító megszakítást hoz létre

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); időbélyeg = TCNT1; SREG = régi SREG; }

// ezt a rutint minden alkalommal meghívják, amikor túlcsordulás történik a belső számlálóban

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// ez a rutin az időzítő 0 -ra való visszaállítására szolgál

void resetTimer (void) {oldSREG = SREG; cli (); // Megszakítások letiltása TCNT1 = 0; // számláló érték inicializálása 0 -ra SREG = oldSREG; // Állapotregiszter visszaállítása TCCR1B | = clockSelectBits; // beállítja az előskálázót és elindítja az órát timer1_overflow_count = 0; // visszaállítja a túlcsordulás számlálót}

Természetesen ez az ötlet nem teljesen új. Ennek a kódnak a fő része máshol található. A TPIMD - Tiny Pulse Induction Metal Detector honlapon talált mikrokontroller megfelelő megközelítése.

www.miymd.com/index.php/projects/tpimd/ (sajnos ez az oldal már nem online, jelenleg a www.basic4mcu.com webhelyen található biztonsági mentés található, a "TPIMD" keresése).

1. lépés: Arduino Pulse Induction Idea - Flip Coil

Arduino Pulse Indukciós Ötlet - Flip Coil
Arduino Pulse Indukciós Ötlet - Flip Coil
Arduino Pulse Indukciós Ötlet - Flip Coil
Arduino Pulse Indukciós Ötlet - Flip Coil

Az ötlet az, hogy az Arduino -t pulzusindukciós detektorként használják, mint a TPIMD -ben, mivel úgy tűnik, hogy a bomlási görbe időzítési elképzelése elég jól működik. Az impulzusindukciós érzékelőkkel az a probléma, hogy általában más feszültségre van szükségük a működéshez. Egy feszültség a tekercs táplálására és egy külön feszültség a bomlási görbe kezelésére. Ez a két feszültségforrás mindig kissé bonyolítja az impulzusindukciós érzékelőket.

Ha a tekercs feszültségét nézzük egy PI detektorban, a kapott görbe két különböző szakaszban osztható. Az első szakasz maga az impulzus, amely táplálja a tekercset és felépíti a mágneses mezőt (1). A második szakasz a feszültségcsökkenési görbe, kezdve egy feszültségcsúccsal, majd gyorsan beállítva a tekercs "nincs áram" feszültségéhez (2). A probléma az, hogy a tekercs megváltoztatja polaritását az impulzus után. Pozitív az impulzus (1. ábra a mellékelt képen), a bomlási görbe negatív. Ha az impulzus negatív, akkor a bomlási görbe pozitív lesz (2. változat a mellékelt képen)

Ennek az alapvető problémának a megoldásához a tekercset elektronikusan „meg kell fordítani” az impulzus után. Ebben az esetben az impulzus lehet pozitív, és a bomlási görbe is pozitív.

Ennek eléréséhez a tekercset az impulzus után el kell különíteni a Vcc és a GND -től. Ebben a pillanatban csak egy áram folyik a csillapító ellenálláson. Ez a tekercs és csillapító ellenállás elszigetelt rendszere bármilyen referenciafeszültségre „orientálható”. Ez elméletileg létrehozza a kombinált pozitív görbét (a rajz alja)

Ezt a pozitív görbét az összehasonlító segítségével fel lehet használni annak az időpontnak a kimutatására, amikor a bomlási feszültség „keresztezi” a referenciafeszültséget. A tekercs közelében lévő kincsek esetén a bomlási görbe megváltozik, és a referenciafeszültség átlépésének időpontja megváltozik. Ez a változás észlelhető.

Némi kísérletezés után az alábbi áramkör működőképesnek bizonyult.

Az áramkör egy Arduino Nano modulból áll. Ez a modul két MOSFET tranzisztorral hajtja a tekercset (SV3 -on) a D10 -en keresztül. Amikor a D10 impulzus véget ér, mindkét MOSFET elkülöníti a tekercset a 12V és a GND feszültségtől. A tekercsben megtakarított energia az R2 -n (220 Ohm) keresztül távozik. Ugyanakkor az R1 (560 Ohm) összeköti a tekercs korábbi pozitív oldalát a GND -vel. Ez megváltoztatja a negatív bomlási görbét R5 -nél (330 Ohm) pozitív görbére. A diódák védik az Arduino bemeneti csapját.

R7 körülbelül 0,04 V feszültségosztó. Jelenleg a D7 -es bomlási görbe negatívabb lesz, mint a 0,04 a D6 -nál, a megszakítás triggert indít, és az impulzus befejezése utáni időtartam mentésre kerül.

A tekercs közelében lévő fém esetén a bomlási görbe tovább tart, és az impulzus vége és a megszakítás közötti idő hosszabb.

2. lépés: Az érzékelő (kenyértábla) felépítése

Érzékelő építése (Breadboard)
Érzékelő építése (Breadboard)
Érzékelő építése (Breadboard)
Érzékelő építése (Breadboard)
Érzékelő építése (Breadboard)
Érzékelő építése (Breadboard)

Az érzékelő felépítése nagyon egyszerű. Ezt elvégezheti kenyérsütő táblán (ragaszkodva az eredeti áramkörhöz) vagy forrasztva az alkatrészeket egy NYÁK -ra.

Az Arduino Nano táblán lévő D13 LED a fém jelzésére szolgál

A kenyérsütőlap feloldása a leggyorsabb módja a működő érzékelőnek. Elég sok huzalozás szükséges, de ezt meg lehet csinálni egy kis kenyértáblával. A képeken ez 3 lépésben látható, mivel az Arduino és a MOSFET -ek elrejtik a vezetékek egy részét. A tesztelés során valahogy levettem a diódákat anélkül, hogy először észrevettem volna. Ez nem volt negatív hatással az érzékelő viselkedésére. Az áramkör NYÁK -változatában teljesen kihagytam őket.

A képeken nem láthatók a 0.96 OLED kijelzőhöz való csatlakozások. Ez a kijelző csatlakoztatva van:

Vcc - 5V (az Arduino csapnál, nem a tápfeszültség !!!)

GND - GND

SCL - A5

SDA - A4

Ez az OLED kijelző szükséges az érzékelő kezdeti kalibrálásához. Ez úgy történik, hogy a megfelelő feszültséget állítja be az Arduino PIN6 -jára. Ennek a feszültségnek körülbelül 0,04 V -nak kell lennie. A kijelző segít a megfelelő feszültség beállításában.

A kenyértábla verzió elég jól működik, bár valószínűleg nem alkalmas a vadon élők számára.

3. lépés: NYÁK készítése

Megy PCB
Megy PCB
Megy PCB
Megy PCB
Megy PCB
Megy PCB
Megy PCB
Megy PCB

Ami a forrasztást illeti, nem igazán szeretem a kétoldalas high-tech PCB-t, ezért úgy módosítottam az áramkört, hogy illeszkedjen egy egyoldalú NYÁK-ra.

A következő módosításokat hajtották végre:

1. a diódák kimaradtak.

2. a MOSFET -ek kapui 10 ohmos ellenállást kaptak

3. a D6-os feszültségosztó tápfeszültségét a D8-as magas jel jelzi

4. a MOSFET -ek illesztőprogramjának tűje megváltozott.

Ily módon egyoldalas PCB hozható létre, amely forrasztható univerzális NYÁK -okra. Ezzel az áramkörrel működő PI érzékelővel rendelkezik, amely csak 8-10 külső komponenst tartalmaz (attól függően, hogy OLED kijelzőt és/vagy hangszórót használ).

4. lépés: Az érzékelő beállítása és használata

Az érzékelő beállítása és használata
Az érzékelő beállítása és használata
Az érzékelő beállítása és használata
Az érzékelő beállítása és használata
Az érzékelő beállítása és használata
Az érzékelő beállítása és használata

Ha az érzékelő megfelelően van felépítve, és a programot az Arduino -ba írják, akkor a legegyszerűbb (ha nem az egyetlen) módja az egység beállításának az OLED kijelző használata. A kijelző 5V, GND, A4, A5 tápegységhez van csatlakoztatva. Az egység bekapcsolása után a kijelzőn a „kalibrálás” feliratot kell megjeleníteni. Néhány másodperc múlva a „Kalibrálás kész” feliratot kell megjelenítenie, és három számot kell megjelenítenie a kijelzőn.

Az első szám a kalibrálás során azonosított „referenciaérték”. A második érték az utolsó mért érték, a harmadik pedig az utolsó 32 mérés átlagértéke.

Ennek a három értéknek nagyjából azonosnak kell lennie (az én teszteseteimben 1000 alatt). A középső értéknek többé -kevésbé stabilnak kell lennie.

A kezdeti beállítás megkezdéséhez ne legyen fém a tekercs közelében.

Most a feszültségosztót (trim potenciométert) le kell vágni úgy, hogy az alsó két értéket maximumra kell állítani, miközben továbbra is stabil leolvasást kell biztosítani. Van egy kritikus beállítás, ahol a középérték furcsa értékeket kezd adni. Fordítsa vissza a nyírót, hogy ismét stabil értékeket kapjon.

Előfordulhat, hogy a kijelző lefagy. Csak nyomja meg a reset gombot, és kezdje elölről.

Az én beállításomnál (tekercs: 18 fordulat @ 20 cm) a stabil érték 630-650 körül van. Miután beállította, nyomja meg a reset gombot, a készülék újrakalibrál, és minden faértéknek ismét ugyanabban a tartományban kell lennie. Ha fémet tekercselnek, akkor az Arduino-Board (D13) LED-jének világítania kell. A mellékelt hangszóró kattanó hangokat ad (van némi fejlesztési lehetőség a programozásban).

A nagy elvárások elkerülése érdekében:

Az érzékelő érzékel bizonyos dolgokat, de nagyon egyszerű és korlátozott érzékelő marad.

Annak érdekében, hogy benyomást keltsen a képességekről, néhány referencia -észlelést végzett más érzékelőkkel. Ha az eredményeket nézzük, még mindig lenyűgöző egy olyan érzékelő számára, amely csak 8 külső alkatrésszel rendelkezik, de nem egyezik a professzionális érzékelőkkel.

Ha az áramkört és a programot nézzük, sok a fejlődési lehetőség. Az ellenállások értékeit tapasztalat alapján találtuk meg, a 250 ms -os impulzusidőt véletlenszerűen választottuk, a tekercs paramétereit is. Ha van ötlete a fejlesztésekre, szívesen megvitatom őket.

Érezd jól magad!

5. lépés: Frissítés1: 16x2 -es LCD kijelző használata

Frissítés 1: 16x2 LCD kijelző használata
Frissítés 1: 16x2 LCD kijelző használata
Frissítés 1: 16x2 LCD kijelző használata
Frissítés 1: 16x2 LCD kijelző használata
Frissítés 1: 16x2 LCD kijelző használata
Frissítés 1: 16x2 LCD kijelző használata

Fejlesztések

A további vizsgálatok során rájöttem, hogy az I2C OLED kijelző könyvtára jelentős időt vesz igénybe. Ezért úgy döntöttem, hogy inkább 16x2 -es kijelzőt használok, I2C átalakítóval.

Így átvettem a programot az LCD -kijelzőre, és néhány hasznos funkciót adtam hozzá. A kijelző első sora most egy lehetséges jelzés jelerősségét mutatja. A második sor most két értéket mutat. Az ökl az aktuális jel eltérését jelezte a kalibrálási értékhez képest. Ennek az értéknek "0" -nak kell lennie. Ha ez az érték folyamatosan negatív vagy pozitív, akkor az érzékelőt újra kell kalibrálni a reset gomb megnyomásával. A pozitív értékek a tekercs közelében lévő fémet jelzik.

A második érték a bomlási görbe tényleges késleltetési értékét mutatja. Ez az érték általában nem olyan érdekes, de szükséges az érzékelő kezdeti beállításához.

A program mostantól több impulzus időtartamát teszi lehetővé egymás után (a kísérletezés / a teljesítmény javítása). Semmilyen áttörést nem értem el. Az alapértelmezett érték tehát egy impulzus időtartam.

Az érzékelő kezdeti beállítása

Az érzékelő beállításakor a második sor második értéke releváns (az első figyelmen kívül hagyható). Kezdetben az érték "instabil" lehet (lásd a képet). Forgassa a trim ellenállást, amíg az érték el nem éri a stabil értéket. Ezután forgassa el, hogy növelje az értéket a maximális stabil értékre. Nyomja meg a reset gombot az újrakalibráláshoz, és az érzékelő használatra kész.

Az a benyomásom, hogy a maximális stabil érték beállításával elvesztettem az érzékenységet a nem vasfémek iránt. Érdemes tehát kísérletezni a beállításokkal, hogy jó érzékenységűek legyenek a nem vasos cuccokra.

Tekercsek

Építek 3 tekercset a további vizsgálatokhoz

1 -> 18 fordulat 200 mm -nél

2 -> 25 fordulat 100 mm -nél

3 -> 48 fordulat @ 100 mm

Érdekes módon minden tekercs nagyon jól működött, szinte azonos teljesítményű (20 centi érme 40-50 mm-es levegőben). Ez meglehetősen szubjektív megfigyelés lehet.

Ajánlott: