Sommario:

Rilevatore a induzione di impulsi basato su Arduino - LC-Trap: 3 passaggi
Rilevatore a induzione di impulsi basato su Arduino - LC-Trap: 3 passaggi

Video: Rilevatore a induzione di impulsi basato su Arduino - LC-Trap: 3 passaggi

Video: Rilevatore a induzione di impulsi basato su Arduino - LC-Trap: 3 passaggi
Video: Come usare un sensore di Flusso a impulsi YF-S401 - Video 559 2024, Dicembre
Anonim
Rilevatore a induzione di impulsi basato su Arduino - LC-Trap
Rilevatore a induzione di impulsi basato su Arduino - LC-Trap

Cercando ulteriori idee per un semplice metal detector Ardino Pulse Induction con una sola tensione di alimentazione mi sono imbattuto nella homepage di Teemo:

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

Ha creato un semplice rilevatore a induzione di impulsi utilizzando il principio LC-Trap. Circuiti simili sono stati pubblicati qui su Instructable da TechKiwiGadgets. Tranne che il circuito Teemo utilizza i comparatori interni di un microcontrollore PIC, quindi necessita di meno componenti esterni

Quindi sono stato sfidato a usare Arduino invece di un controller PIC per questo schema e guarda fino a che punto posso arrivare.

Passaggio 1: schema

Schema
Schema
Schema
Schema
Schema
Schema

Lo schema di Arduino è un po' più complicato in quanto Arduino non consente di instradare un segnale analogico interno all'ingresso del comparatore. Questo aggiunge due componenti per un semplice deviderr di tensione. Questo porta a un design con 12 componenti esterni (tralasciando l'altoparlante e l'LCD 16x2), rispetto ai 9 del design Flip Coil.

Il principio di funzionamento dello schema è spiegato molto bene sul sito web di Teemo. Fondamentalmente la bobina viene alimentata e poi spenta. Dopo lo spegnimento, la bobina e il condensatore in parallelo creeranno un'oscillazione smorzata. La frequenza e il decadimento dell'oscillazione sono influenzati dal metallo in prossimità della bobina. Per maggiori dettagli sul circuito vedi la pagina di Teemo o di TechKiwi qui su Instructables.

Come nel rilevatore Flip Coil Pulse Induction, utilizzo il comparatore interno e la possibilità di attivare un interrupt per acquisire il segnale dalla bobina.

In questo caso otterrò più interruzioni poiché la tensione oscilla attorno alla tensione di riferimento impostata sul comparatore. Alla fine dell'oscillazione, la tensione alla bobina si assesterà intorno ai 5V, ma non esattamente. Ho scelto un deviatore di tensione con 200 Ohm e 10k Ohm per ottenere una tensione di circa 4,9 volt

Per ridurre la complessità degli schemi ho usato D4 e D5 per fornire GND (per il resistore da 10k) e 5V (per il resistore da 220 Ohm). I pin sono impostati all'avvio del rilevatore.

In questa versione, ho aggiunto una connessione per altoparlanti utilizzando l'approccio multitono controllato dal volume come descritto in Come programmare un metal detector basato su Arduino. Ciò consente di differenziare le proprietà del bersaglio e di avere un'idea della potenza del segnale. L'altoparlante può essere collegato all'intestazione aggiuntiva a 5 pin. I restanti 3 pin dell'header verranno utilizzati per i pulsanti (da implementare).

Passaggio 2: programmazione

Programmazione
Programmazione
Programmazione
Programmazione
Programmazione
Programmazione

Ora che il circuito è stato progettato e il prototipo è stato costruito, è tempo di trovare un approccio appropriato per rilevare il metallo.

1. Conteggio degli impulsi

Il conteggio degli impulsi dell'oscillazione fino a quando non decade completamente è un'idea.

Se c'è del metallo vicino alla bobina, la quantità di oscillazione diminuisce. In questo caso la tensione di riferimento del comparatore dovrebbe essere impostata a un livello tale che l'ultimo impulso sia ancora appena misurato. Quindi, nel caso in cui venga rilevato qualcosa, questo impulso svanisce immediatamente. Questo era un po' problematico.

Ogni onda dell'oscillazione crea due interruzioni. Uno scendendo e uno risalendo. Per impostare la tensione di riferimento esattamente sulla cresta di un'onda di oscillazione, il tempo tra la discesa e la salita dovrebbe essere il più breve possibile (vedi figura). Sfortunatamente qui il sovraccarico dell'ambiente Arduino crea problemi.

Ogni trigger dell'interrupt richiede questo codice:

ISR(ANALOG_COMP_vect){

Toggle1=Toggle0 // salva l'ultimo valore Toggle0=TCNT1; // ottiene un nuovo valore }

Questo codice richiede del tempo (se ricordo bene, circa 78 cicli di istruzione sono circa 5 microsecondi a 16 MHz). Pertanto la distanza minima rilevabile tra due impulsi è esattamente il tempo impiegato da questo codice. Se il tempo tra due trigger si riduce (vedi immagine), non verrà rilevato, poiché il codice viene eseguito completamente prima di rilevare un secondo interrupt

Questo porta a una perdita di sensibilità. Allo stesso tempo, ho notato che lo smorzamento delle oscillazioni è molto sensibile a qualsiasi influenza esterna, rendendo così un po' difficile questo approccio in totale.

2. Misurazione della frequenza

Un altro modo per rilevare il metallo è misurare la frequenza dell'oscillazione. Questo ha un grande vantaggio rispetto alla misurazione dello smorzamento dell'oscillazione poiché la variazione di frequenza consente la discriminazione del metallo. Nel caso ci sia materiale ferroso vicino alla bobina, la frequenza rallenterà, nel caso ci sia metallo prezioso vicino alla bobina, la frequenza aumenterà.

Il modo più semplice per misurare la frequenza è misurare la quantità di impulsi dopo che le bobine iniziano a oscillare. Il periodo di tempo tra l'inizio e l'ultimo impulso diviso per la quantità totale di impulsi misurati è la frequenza. Sfortunatamente le ultime oscillazioni sono abbastanza asimmetriche. Poiché la presenza del metallo influenza anche il decadimento dell'oscillazione, le ultime oscillazioni sono ancora più asimmetriche, le letture sono difficili da interpretare. Nella foto questo è mostrato con l'incrocio da 1 a 1' e da 2 a 2'.

Un modo migliore è quindi utilizzare alcuni impulsi precedenti per misurare la frequenza. Durante i test, ho scoperto che alcuni impulsi sono più sensibili di altri. Da qualche parte a 2/3 delle oscillazioni è un buon punto per acquisire i dati.

Elaborazione dei dati

Il codice iniziale basato sul loop() che richiede una funzione pulse() per eseguire la temporizzazione della bobina. Anche se i risultati non erano male, ho avuto l'impulso di migliorare i tempi. Per fare ciò, ho creato un codice completamente basato sul timer, che porta al separato instuctable How to Program a Arduino Based Metal Detector. Questa istruzione spiega in dettaglio i tempi, l'output LCD di elaborazione dei dati ecc

1. Il display LCD

Il primo approccio è stato quello di misurare 10 impulsi e poi di mostrare i valori sul display LCD. Quando ho scoperto che il trasferimento dei dati I2C era troppo lento, sono passato al codice per aggiornare solo un carattere per impulso.

2. Approccio al valore minimo

Per migliorare ulteriormente la stabilità delle letture ho scritto una routine di output seriale per avere un'idea migliore dei dati misurati. Lì divenne evidente che, sebbene la maggior parte delle letture fosse in qualche modo stabile, alcune non lo erano! Alcune letture dello "stesso" impulso di oscillazione erano così distanti che avrebbe rovinato ogni approccio per analizzare uno spostamento di frequenza.

Per compensare questo, ho creato un "confine" all'interno del quale il valore era degno di fiducia. Cioè. quando i valori erano più di 35 cicli di timer1 lontano dal valore previsto, questi valori sono stati ignorati (spiegato in dettaglio nell'Instructable "Come programmare un metal detector basato su Arduino")

Questo approccio si è rivelato molto stabile.

3. La tensione

Il design originale di Teemo è alimentato sotto i 5 volt. Poiché la mia ipotesi era "più volt = più potenza = più sensibilità", all'inizio ho alimentato l'unità con 12V. Ciò ha provocato il riscaldamento del MOSFET. Questo riscaldamento ha poi provocato una deriva generale dei valori misurati, portando a frequenti riequilibri del rivelatore. Diminuendo la tensione a 5 V, la generazione di calore del MOSFET potrebbe essere ridotta al minimo a un livello in cui non si osservava quasi nessuna deriva delle letture. Ciò ha reso il circuito ancora più semplice, poiché il regolatore di tensione di bordo dell'Arduino non era più necessario.

Per un MOSFET ho scelto inizialmente l'IRL540. Questo MOSFET è compatibile con il livello logico, ma ha una tensione nominale massima di 100 V. Speravo in prestazioni migliori passando a un IRL640 con valori nominali di 200 V. Purtroppo i risultati sono stati gli stessi. Quindi o un IRL540 o un IRL640 faranno il lavoro.

Passaggio 3: risultati finali

Risultati finali
Risultati finali
Risultati finali
Risultati finali
Risultati finali
Risultati finali

Il vantaggio del rivelatore è che discrimina tra materiale prezioso e ferroso. Lo svantaggio è che la sensibilità con questo semplice schema non è così buona. Per confrontare le prestazioni ho utilizzato gli stessi riferimenti del rilevatore Flip-Coil. Probabilmente buono per qualche individuazione, ma molto probabilmente deludente per una vera ricerca.

Qui il design originale con il controller PIC potrebbe essere più sensibile poiché funziona a 32 MHz invece dei 16 MHz del controller per fornire una risoluzione più elevata per il rilevamento degli spostamenti di frequenza.

I risultati sono stati ottenuti utilizzando la bobina con 48 spire @ 100mm.

Come sempre, aperti per feedback

Consigliato: