Taula de continguts:

Detector d'inducció de pols basat en Arduino - Flip Coil: 5 passos (amb imatges)
Detector d'inducció de pols basat en Arduino - Flip Coil: 5 passos (amb imatges)

Vídeo: Detector d'inducció de pols basat en Arduino - Flip Coil: 5 passos (amb imatges)

Vídeo: Detector d'inducció de pols basat en Arduino - Flip Coil: 5 passos (amb imatges)
Vídeo: ESP32 Tutorial 5 - LED Fade, control brightness of an LED -ESP32 IoT Learnig kit 2024, Juliol
Anonim
Detector d'inducció de pols basat en Arduino - Flip Coil
Detector d'inducció de pols basat en Arduino - Flip Coil
Detector d'inducció de pols basat en Arduino - Flip Coil
Detector d'inducció de pols basat en Arduino - Flip Coil

La idea

Després d’haver construït alguns detectors de metalls amb resultats diferents, volia explorar les capacitats de l’Arduino en aquesta direcció.

Hi ha alguns bons exemples de com construir detectors de metalls amb l'Arduino, alguns aquí com a instruccions. Però quan els mireu, normalment requereixen components externs per al tractament del senyal analògic o la sensibilitat és bastant baixa.

Quan es pensa en detectors de metalls, el tema principal és com detectar els lleugers canvis de tensió en els senyals relacionats amb la bobina de cerca. Aquests canvis solen ser molt petits. L’enfocament més evident seria utilitzar les entrades analògiques de l’ATmega328. Però, mirant les especificacions, hi ha dos problemes bàsics: són (sovint) lents i la resolució (en la majoria dels casos) és baixa.

D’altra banda, l’Arduino funciona a 16 MHz i té força capacitats de sincronització i. e. una resolució de 0,0625µS si s’utilitza la velocitat del rellotge. Per tant, en lloc d’utilitzar l’entrada analògica per a la detecció, la forma més senzilla de detectar petits canvis dinàmics de voltatge és comparar el canvi de caiguda de tensió al llarg del temps a una tensió de referència fixa.

Amb aquest propòsit, l'ATmega328 té la característica ordenada d'un comparador intern entre D6 i D7. Aquest comparador és capaç de provocar una interrupció, cosa que permet un tractament d'esdeveniments precís. Deixant al costat de les rutines de temps perfectament codificades com millis () i micos () i entrant al temporitzador intern de l’ATmega328 amb una resolució molt superior, l’Arduino és una base excel·lent per a la detecció de metalls.

Així doncs, des d'una vista de codi font, un bon començament seria programar el comparador intern per a "canviar" la polaritat de les entrades i utilitzar un comptador intern amb la màxima velocitat possible per canviar el temps dels canvis.

El codi general a Arduido per aconseguir-ho és:

// Definició de totes les variables prèvies necessàries, etc. i configuració dels registres

rellotge de caràcters sense signe SelectBits = _BV (CS10); // no hi ha cap configuració prèvia, nul·la completa () {pinMode (6, INPUT); // + del comparador: configurant-los com a INPUT, // es configuren a pinMode d'alta impedància (7, INPUT); // - del comparador - establint-los com a INPUT, // es configuren a alta impedència cli (); // atura les interrupcions TCCR1A = 0; // estableix el registre TCCR1A complet a 0 TCCR1B = 0; // el mateix per a TCCR1B -> mode normalTCNT1 = 0; // inicialitzar el valor del comptador a 0; TCCR1B | = clockSelectBits; // estableix el precalificador i inicia el rellotge TIMSK1 = _BV (TOIE1); // estableix el bit de permís d'interrupció de desbordament de desbordament del temporitzador (); // permet interrupcions ACSR = (0 << ACD) | // Comparador analògic: habilitat (0 << ACBG) | // Comparació analògica Bandgap Selecciona: AIN0 s'aplica a l'entrada positiva (0 << ACO) | // Sortida del comparador analògic: desactivat (1 << ACI) | // Indicador d'interrupció del comparador analògic: esborra la interrupció pendent (1 << ACIE) | // Interrupció del comparador analògic: habilitada (0 << ACIC) | // Captura d'entrada del comparador analògic: desactivada (0 << ACIS1 | 0 << ACIS0 // interrupció en commutació de sortida // (0 << ACIS1 | 1 << ACIS0 // reservada // (1 << ACIS1 | 0 << ACIS0 // interrupció a la sortida de la vora // (1 << ACIS1 | 1 << ACIS0 // interrupció a la vora d’entrada ascendent;}

// aquesta rutina es diu cada vegada que el comparador crea una interrupció

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); timeStamp = TCNT1; SREG = oldSREG; }

// aquesta rutina es diu cada vegada que hi ha un desbordament al comptador intern

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// aquesta rutina s'utilitza per restablir el temporitzador a 0

void resetTimer (void) {oldSREG = SREG; cli (); // Desactiva les interrupcions TCNT1 = 0; // inicialitzar el valor del comptador a 0 SREG = oldSREG; // Restaurar registre d'estat TCCR1B | = clockSelectBits; // estableix el precalificador i inicia el temporitzador del rellotge1_overflow_count = 0; // restableix el comptador de desbordament}

Per descomptat, aquesta idea no és del tot nova. La part principal d’aquest codi es pot trobar en altres llocs. Una bona implementació d’aquest tipus d’aproximació per a un microcontrolador trobada a la pàgina d’inici del TPIMD - Tiny Pulse Induction Metal Detector.

www.miymd.com/index.php/projects/tpimd/ (malauradament aquesta pàgina ja no està en línia, actualment hi ha una còpia de seguretat del lloc a www.basic4mcu.com, buscant "TPIMD").

Pas 1: idea d'inducció de pols d'Arduino - Flip Coil

Idea d’inducció de pols Arduino - Flip Coil
Idea d’inducció de pols Arduino - Flip Coil
Idea d’inducció de pols Arduino - Flip Coil
Idea d’inducció de pols Arduino - Flip Coil

La idea és utilitzar l’Arduino com a detector d’inducció de pols, com en TPIMD, ja que la idea de temps de la corba de desintegració sembla funcionar força bé. El problema amb els detectors d’inducció de pols és que normalment necessiten tensió diferent per funcionar. Un voltatge per alimentar la bobina i un voltatge separat per fer front a la corba de desintegració. Aquestes dues fonts de tensió fan que els detectors d’inducció d’impulsos sempre siguin una mica complicats.

Observant la tensió de la bobina en un detector PI, la corba resultant es pot dividir en dues etapes diferents. La primera etapa és el propi impuls que alimenta la bobina i crea el camp magnètic (1). La segona etapa és la corba de desintegració de la tensió, començant per un pic de tensió, i després ajustant-se ràpidament a la tensió "sense potència" de la bobina (2). El problema és que la bobina canvia la seva polaritat després del pols. El pols és positiu (Var 1. a la imatge adjunta) la corba de desintegració és negativa. El pols és negatiu, la corba de desintegració serà positiva (Var 2. a la imatge adjunta)

Per resoldre aquest problema bàsic, la bobina ha de ser "capgirada" electrònicament després del pols. En aquest cas, el pols pot ser positiu i la corba de desintegració també pot ser positiva.

Per aconseguir-ho, la bobina ha d’estar aïllada de Vcc i GND després del pols. En aquest moment, només hi ha un corrent que flueix a través d’una resistència d’amortiment. Aquest sistema aïllat de bobina i resistència d'amortiment pot estar "orientat" a qualsevol voltatge de referència. Això, en teoria, crearà la corba positiva combinada (part inferior del dibuix)

Aquesta corba positiva es pot utilitzar a través del comparador per detectar el moment en què la tensió de desintegració "creua" una tensió de referència. En cas de tresors propers a la bobina, la corba de desintegració canvia i el punt de temps que creua la tensió de referència canvia. Aquest canvi no es pot detectar.

Després d'alguns experiments, el següent circuit va funcionar.

El circuit està format per un mòdul Arduino Nano. Aquest mòdul acciona dos transistors MOSFET que alimenten la bobina (a SV3) mitjançant D10. Quan finalitza el pols a D10, tots dos MOSFET aïllen la bobina de 12V i GND. L’energia estalviat a la bobina s’escola a través de R2 (220 ohms). Al mateix temps, R1 (560 ohms) connecta el costat positiu anterior de la bobina amb el GND. Això canvia la corba de desintegració negativa a R5 (330 Ohms) a una corba positiva. Els díodes protegeixen el pin d'entrada de l'Arduino.

R7 és un divisor de voltatge d’uns 0,04V. En aquest moment la corba de desintegració a D7 es fa més negativa que la 0,04 a D6 es produeix una interrupció i es guarda la durada després del final del pols.

En cas de metall proper a la bobina, la corba de desintegració dura més i el temps entre el final del pols i la interrupció s’allarga.

Pas 2: construcció del detector (tauler de pa)

Construir el detector (tauler de pa)
Construir el detector (tauler de pa)
Construir el detector (tauler de pa)
Construir el detector (tauler de pa)
Construir el detector (tauler de pa)
Construir el detector (tauler de pa)

Construir el detector és bastant fàcil. Això es pot fer ja sigui en una placa de connexió (enganxant-se al circuit original) o soldant les peces en un PCB.

El LED D13 de la placa Arduino Nano s’utilitza com a indicació del metall

Utilitzar una taula de treball és la manera més ràpida d’arribar al detector de treball. Es necessita bastant cablejat, encara que això es pugui fer des d'una petita taula. A les imatges es mostra en 3 passos, ja que l'Arduino i els MOSFET amaguen alguns dels cables. En provar, vaig desconnectar els díodes d'alguna manera sense adonar-me al principi. Això no va tenir cap efecte negatiu sobre el comportament del detector. A la versió PCB del circuit els vaig deixar completament fora.

No es mostren a les imatges les connexions a una pantalla OLED de 0,96. Aquesta pantalla està connectada:

Vcc - 5V (al pin d'Arduino, no la tensió d'alimentació !!!)

GND - GND

SCL - A5

SDA - A4

Aquesta pantalla OLED és necessària per calibrar el detector inicialment. Això es fa configurant el voltatge correcte al PIN6 de l’Arduino. Aquest voltatge hauria d’estar al voltant de 0,04V. La pantalla ajuda a configurar el voltatge adequat.

La versió de taulers de treball funciona força bé, tot i que probablement no és adequada per entrar en llibertat.

Pas 3: aneu al PCB

Va PCB
Va PCB
Va PCB
Va PCB
Va PCB
Va PCB
Va PCB
Va PCB

Pel que fa a la soldadura, no m’agraden els PCB d’alta tecnologia de doble cara, així que vaig modificar el circuit perquè encaixés en un PCB de cares.

Es van fer les següents modificacions:

1. es van deixar de banda els díodes.

2. les portes dels MOSFET van obtenir una resistència de 10 Ohm

3. la tensió d'alimentació del divisor de tensió a D6 ve donada per un senyal de nivell ALT a D8

4. s'ha canviat el pin del controlador per als MOSFET.

D'aquesta manera es podria crear un PCB d'una cara que es pugui soldar en PCB universals. Si utilitzeu aquest circuit, tindreu un detector PI en funcionament amb només 8-10 components externs (segons si s’utilitza la pantalla OLED i / o un altaveu).

Pas 4: Configuració i ús del detector

Configuració i ús del detector
Configuració i ús del detector
Configuració i ús del detector
Configuració i ús del detector
Configuració i ús del detector
Configuració i ús del detector

Si el detector es construeix correctament i el programa s’escriu a l’Arduino, la manera més senzilla (si no l’única) de configurar la unitat és fer servir una pantalla OLED. La pantalla està connectada a 5V, GND, A4, A5. La pantalla hauria de mostrar "calibració" després que la unitat s'hagi engegat. Al cap d'uns segons hauria de dir "calibració feta" i s'haurien de mostrar tres números a la pantalla.

El primer número és el "valor de referència" identificat durant el calibratge. El segon valor és l'últim valor mesurat i el tercer valor és un valor mitjà de les darreres 32 mesures.

Aquests tres valors haurien de ser més o menys iguals (en els meus casos de prova menors de 1000). El valor mitjà hauria de ser més o menys estable.

Per iniciar la configuració inicial, no hauria d’haver cap metall a prop de la bobina.

Ara s’ha de retallar el divisor de tensió (potenciòmetre de retallada) de manera que els dos valors inferiors s’hagin d’establir al màxim mentre es manté una lectura estable. Hi ha un entorn crític, on el valor mitjà comença a fer lectures estranyes. Torneu enrere la retalladora per obtenir de nou valors estables.

Pot passar que la pantalla es congeli. Simplement premeu el botó de reinici i torneu a començar.

Per a la meva configuració (bobina: 18 girs @ 20cm), el valor estable és d’uns 630-650. Un cop configurat, premeu el botó de reinici, la unitat es tornarà a calibrar i tots els valors d'arbre haurien de tornar a estar en el mateix rang. Si ara es porta el metall a la bobina, el LED de la placa Arduino (D13) s’hauria d’encendre. Un altaveu adjunt proporciona alguns sorolls de clic (hi ha marge de millora en la programació allà).

Per evitar altes expectatives:

El detector detecta algunes coses, però continua sent un detector molt senzill i limitat.

Per donar una impressió de les capacitats, es van fer algunes deteccions de referència amb altres detectors diferents. Vist els resultats, encara és impressionant per a un detector amb només vuit parts externes però que no coincideix amb els detectors professionals.

Mirant el circuit i el programa, hi ha molt marge de millora. Els valors de les resistències es van trobar per experiència, es va escollir aleatòriament el temps d’impuls de 250 ms, també els paràmetres de la bobina. Si teniu idees de millores, estaré encantat de parlar-ne.

Diverteix-te!

Pas 5: Actualització 1: utilitzant una pantalla LCD de 16 x 2

Actualització 1: utilitzant un LCD de 16 x 2
Actualització 1: utilitzant un LCD de 16 x 2
Actualització 1: utilitzant un LCD de 16 x 2
Actualització 1: utilitzant un LCD de 16 x 2
Actualització 1: utilitzant un LCD de 16 x 2
Actualització 1: utilitzant un LCD de 16 x 2

Millores

Durant les proves posteriors, em vaig adonar que la biblioteca de la pantalla O2 I2C feia servir un temps considerable. Així que vaig decidir utilitzar una pantalla de 16x2 amb un convertidor I2C.

Així que vaig adoptar el programa a la pantalla LCD afegint algunes funcions útils. La primera línia de la pantalla mostra ara la intensitat del senyal d’una possible indicació. La segona línia mostra ara dos valors. El puny indicava la desviació del senyal actual en comparació amb el valor de calibratge. Aquest valor hauria de ser "0". Si aquest valor és constantment negatiu o positiu, cal tornar a calibrar el detector prement el botó de reinici. Els valors positius indiquen el metall proper a la bobina.

El segon valor mostra el valor de retard real de la corba de desintegració. Aquest valor normalment no és tan interessant, però és necessari per a la configuració inicial del detector.

Ara el programa permet durades de pols múltiples en una seqüència (mitjans per experimentar / millorar el rendiment). No vaig aconseguir cap trencament. Per tant, per defecte s’estableix una durada d’un pols.

Configuració inicial del detector

En configurar el detector, el segon valor de la segona línia és rellevant (es pot ignorar la primera). Inicialment, el valor pot ser "inestable" (veure imatge). Gireu la resistència de retallada fins que el valor arribi a una lectura estable. A continuació, gireu-lo per augmentar el valor fins a un valor estable màxim. Premeu el botó de restabliment per tornar a calibrar i el detector estarà llest per al seu ús.

Vaig tenir la impressió que en establir el valor estable màxim, vaig perdre la sensibilitat per als metalls que no eren de ferro. Per tant, valdria la pena experimentar amb la configuració per tenir una bona sensibilitat per a coses que no són de ferro.

Bobines

Construeixo 3 bobines per a proves posteriors

1 -> 18 voltes a 200 mm

2 -> 25 voltes a 100 mm

3 -> 48 voltes a 100 mm

Curiosament, totes les bobines funcionaven força bé, amb gairebé el mateix rendiment (moneda de 20 quilates a 40-50 mm en aire). Pot ser una observació molt subjectiva.

Recomanat: