Sommario:

Magnetometro Arduino: 5 passaggi (con immagini)
Magnetometro Arduino: 5 passaggi (con immagini)

Video: Magnetometro Arduino: 5 passaggi (con immagini)

Video: Magnetometro Arduino: 5 passaggi (con immagini)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Settembre
Anonim
Magnetometro Arduino
Magnetometro Arduino

Cosa stiamo costruendo?

Gli esseri umani non sono in grado di rilevare i campi magnetici, ma usiamo dispositivi che si affidano sempre ai magneti. Motori, bussole, sensori di rotazione e turbine eoliche, ad esempio, richiedono tutti magneti per funzionare. Questo tutorial descrive come costruire un magnetometro basato su Arduino che rileva il campo magnetico utilizzando tre sensori ad effetto Hall. Il vettore del campo magnetico in una posizione viene visualizzato su un piccolo schermo mediante proiezione isometrica.

Cos'è un Arduino?

Un Arduino è un piccolo microcontrollore facile da usare open source. Ha ingressi digitali e pin di uscita. Ha anche pin di input analogico, utili per leggere input dai sensori. Sono disponibili diversi modelli di Arduino. Questo tutorial descrive come utilizzare Arduino Uno o Arduino MKR1010. Tuttavia possono essere utilizzati anche altri modelli.

Prima di iniziare questo tutorial, scarica l'ambiente di sviluppo Arduino e tutte le librerie necessarie per il tuo modello particolare. L'ambiente di sviluppo è disponibile su https://www.arduino.cc/en/main/software e le istruzioni di installazione sono disponibili su

Cos'è un campo magnetico?

I magneti permanenti esercitano forze su altri magneti permanenti. I fili percorsi da corrente esercitano forze su altri fili percorsi da corrente. Anche i magneti permanenti e i fili percorsi da corrente esercitano forze l'uno sull'altro. Questa forza per corrente di prova unitaria è un campo magnetico.

Se misuriamo il volume di un oggetto, otteniamo un singolo numero scalare. Tuttavia, il magnetismo è descritto da un campo vettoriale, una quantità più complicata. Innanzitutto, varia con la posizione in tutto lo spazio. Ad esempio, è probabile che il campo magnetico a un centimetro da un magnete permanente sia più grande del campo magnetico a dieci centimetri di distanza.

Successivamente, il campo magnetico in ogni punto dello spazio è rappresentato da un vettore. La grandezza del vettore rappresenta la forza del campo magnetico. La direzione è perpendicolare sia alla direzione della forza che alla direzione della corrente di prova.

Possiamo immaginare il campo magnetico in una singola posizione come una freccia. Possiamo immaginare il campo magnetico nello spazio con una serie di frecce in posizioni diverse, possibilmente di dimensioni diverse e che puntano in direzioni diverse. Una bella visualizzazione è disponibile su https://www.falstad.com/vector3dm/. Il magnetometro che stiamo costruendo visualizza il campo magnetico nella posizione dei sensori come una freccia sul display.

Che cos'è un sensore ad effetto Hall e come funziona?

Un sensore ad effetto Hall è un dispositivo piccolo ed economico che misura la forza del campo magnetico lungo una particolare direzione. È costituito da un pezzo di semiconduttore drogato con cariche in eccesso. L'uscita di alcuni sensori ad effetto Hall è una tensione analogica. Altri sensori ad effetto Hall hanno un comparatore integrato e producono un'uscita digitale. Altri sensori ad effetto Hall sono integrati in strumenti più grandi che misurano la portata, la velocità di rotazione o altre grandezze.

La fisica dietro l'effetto Hall è riassunta dall'equazione della forza di Lorentz. Questa equazione descrive la forza su una carica in movimento dovuta a un campo elettrico e magnetico esterno.

Immagine
Immagine

La figura seguente illustra l'effetto Hall. Supponiamo di voler misurare l'intensità del campo magnetico nella direzione della freccia blu. Come mostrato nella parte sinistra della figura, applichiamo una corrente attraverso un pezzo di semiconduttore perpendicolare alla direzione del campo da misurare. La corrente è un flusso di cariche, quindi una carica nel semiconduttore si muove con una certa velocità. Questa carica sentirà una forza dovuta al campo esterno, come mostrato nella parte centrale della figura. Le cariche si muoveranno a causa della forza e si accumuleranno sui bordi del semiconduttore. Le cariche si accumulano finché la forza dovuta alle cariche accumulate non bilancia la forza dovuta al campo magnetico esterno. Possiamo misurare la tensione ai capi del semiconduttore, come mostrato nella parte destra della figura. La tensione misurata è proporzionale all'intensità del campo magnetico, ed è nella direzione perpendicolare alla corrente e alla direzione del campo magnetico.

Immagine
Immagine

Cos'è la proiezione isometrica?

In ogni punto dello spazio, il campo magnetico è descritto da un vettore tridimensionale. Tuttavia, il nostro schermo è bidimensionale. Possiamo proiettare il vettore tridimensionale in un piano bidimensionale in modo da poterlo disegnare sullo schermo. Esistono diversi modi per ottenere ciò, come la proiezione isometrica, la proiezione ortografica o la proiezione obliqua.

Nella proiezione isometrica, gli assi x, y e z sono distanziati di 120 gradi e appaiono ugualmente accorciati. Ulteriori informazioni sulla proiezione isometrica, nonché le formule necessarie, possono essere trovate sulla pagina di Wikipedia sull'argomento.

Passaggio 1: raccogliere i rifornimenti

Arduino e cavo

L'Arduino è il cervello del magnetometro. Queste istruzioni descrivono come utilizzare un Arduino Uno o un Arduino MKR1010. In entrambi i casi, è necessario un cavo per collegarlo al computer.

Opzione 1: Arduino Uno e cavo USB AB

www.digikey.com/product-detail/en/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/en/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Opzione 2: Arduino MKR1010 e cavo microUSB

www.digikey.com/product-detail/en/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/en/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

Display TFT

TFT sta per transistor a film sottile. Questo display da 1,44 contiene 128 x 128 pixel. È piccolo, luminoso e colorato. Viene fornito collegato a una scheda breakout. Tuttavia, i pin dell'intestazione sono separati, quindi è necessario saldarli. (La saldatura e un saldatore sono necessario.)

www.digikey.com/dettaglio-prodotto/it/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Immagine
    Immagine
  • Sensori ad effetto Hall analogici

Sono necessari tre sensori ad effetto Hall. Il collegamento sottostante è per il codice Allegro A1324LUA-T. Per questo sensore, il pin 1 è la tensione di alimentazione, il pin 2 è la massa e il pin 3 è l'uscita. Anche altri sensori Hall dovrebbero funzionare, ma assicurati che siano analogici, non digitali. Se si utilizza un sensore diverso, controllare la piedinatura e regolare il cablaggio se necessario. (In realtà ho usato un sensore diverso della stessa azienda a scopo di test. Tuttavia, quello che ho usato è obsoleto e questo sensore è il suo sostituto.)

www.digikey.com/dettaglio-prodotto/it/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Tagliere piccolo e filo metallico

www.digikey.com/dettaglio-prodotto/it/adafruit-industries-llc/239/1528-2143-ND/7244929

Magneti permanenti per test

I magneti da frigorifero funzioneranno bene.

Passaggio 2: cablaggio

Cablaggio
Cablaggio

Saldare le intestazioni sul display.

Immagine
Immagine

Posiziona i sensori a un'estremità della breadboard e posiziona il display e Arduino all'estremità opposta. La corrente nei fili dell'Arduino e del display genera campi magnetici, che non vogliamo che i sensori leggano. Inoltre, potremmo voler mettere i sensori vicino a magneti permanenti, che potrebbero avere un impatto negativo sulla corrente nei fili del display e del sensore. Per questi motivi vogliamo che i sensori siano lontani dal display e da Arduino. Anche per questi motivi questo magnetometro va tenuto lontano da campi magnetici molto forti.

Posizionare i sensori perpendicolari tra loro ma il più vicino possibile l'uno all'altro. Piegare delicatamente i sensori per renderli perpendicolari. Ciascun pin di ciascun sensore deve trovarsi in una riga separata della breadboard in modo che possa essere collegato separatamente.

Immagine
Immagine

Il cablaggio è leggermente diverso tra MKR1010 e Uno per due motivi. Innanzitutto, Arduino e il display comunicano tramite SPI. Diversi modelli Arduino hanno diversi pin dedicati per determinate linee SPI. In secondo luogo, gli ingressi analogici di Uno possono accettare fino a 5 V mentre gli ingressi analogici di MKR1010 possono accettare solo fino a 3,3 V. La tensione di alimentazione consigliata per i sensori ad effetto Hall è di 5 V. Le uscite del sensore sono collegate agli ingressi analogici Arduino, e questi possono essere grandi quanto le tensioni di alimentazione. Per Uno, utilizzare l'alimentazione a 5 V consigliata per i sensori. Per MKR1010, usa 3,3 V in modo che l'ingresso analogico dell'Arduino non veda mai una tensione maggiore di quella che può gestire.

Segui gli schemi e le istruzioni di seguito per l'Arduino che stai utilizzando.

Cablaggio con Arduino Uno

Immagine
Immagine

Il display ha 11 pin. Collegali ad Arduino Uno come segue. (NC significa non connesso.)

  • Vin →5V
  • 3.3 →NC
  • Gnd →GND
  • SCK →13
  • SO → NC
  • SI →11
  • TCS →10
  • RST →9
  • D/C →8
  • CCS → NC
  • Lite → NC

Collegare Vin dei sensori a 5V dell'Arduino. Collega la massa del sensore alla massa dell'Arduino. Collegare l'uscita dei sensori agli ingressi analogici A1, A2 e A3 dell'Arduino.

Immagine
Immagine

Cablaggio con Arduino MKR1010

Immagine
Immagine

Il display ha 11 pin. Collegali ad Arduino come segue. (NC significa non connesso.)

  • Vin →5V
  • 3.3 →NC
  • Gnd →GND
  • SCK → SCK 9
  • SO → NC
  • SI →MOSI 8
  • TCS →5
  • RST →4
  • D/C →3
  • CCS → NC
  • Lite → NC

Collegare Vin dei sensori a Vcc di Arduino. Questo pin è a 3,3 V, non a 5 V. Collega la massa del sensore alla massa dell'Arduino. Collegare l'uscita dei sensori agli ingressi analogici A1, A2 e A3 dell'Arduino.

Immagine
Immagine

Passaggio 3: prova il display

Facciamo funzionare il display TFT. Fortunatamente, Adafruit ha alcune librerie intuitive e un eccellente tutorial per accompagnarle. Queste istruzioni seguono da vicino il tutorial, Apri l'ambiente di sviluppo Arduino. Vai su Strumenti → Gestisci librerie. Installa le librerie Adafruit_GFX, Adafruit_ZeroDMA e Adafruit_ST7735. Riavvia l'ambiente di sviluppo Android.

L'esempio graphicstest è incluso nelle librerie. Aprilo. File → Esempi → Libreria Adafruit ST7735 e ST7789 → graphicstest. Per selezionare il display da 1,44 commenta la riga 95 e decommenta la riga 98.

Versione originale:

94 // Usa questo inizializzatore se usi uno schermo TFT da 1,8 :

95 tft.initR(INITR_BLACKTAB); //Init ST7735S chip, scheda nera 96 97 //OPPURE utilizzare questo inizializzatore (decommentare) se si utilizza un TFT da 1,44 : 98 //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, scheda verde

Versione corretta per display da 1,44 :

94 // Usa questo inizializzatore se usi uno schermo TFT da 1,8 :

95 //tft.initR(INIT_BLACKTAB); //Init chip ST7735S, scheda nera 96 97 //OPPURE usa questo inizializzatore (rimuovi il commento) se utilizzi un TFT da 1,44 : 98 tft.initR(INITR_144GREENTAB); //Init chip SST35R, scheda verde

Il display comunica tramite SPI e diversi modelli di Arduino utilizzano diversi pin dedicati per alcune linee di comunicazione. L'esempio graphicstest è impostato per funzionare con i pin Uno. Se stai usando il MKR1010, aggiungi le seguenti righe tra le righe 80 e 81.

Correzioni per MKR1010:

80

#define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 3 #define TFT_MOSI 8 #define TFT_SCLK 9 Adafruit_ST7735 tft=Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 81 float p=3.1415926;

Salva l'esempio del test grafico modificato. Collega Arduino al computer se non lo hai ancora fatto. Vai su Strumenti → Scheda e strumenti → Porta per verificare che il computer possa trovare Arduino. Vai a Schizzo → Carica. Se l'esempio funziona, il display mostrerà linee, rettangoli, testo e la demo completa. Il tutorial di Adafruit fornisce maggiori dettagli se è necessaria la risoluzione dei problemi.

Passaggio 4: il codice del magnetometro

Scarica il codice allegato e aprilo nell'ambiente di sviluppo Arduino.

Questo programma utilizza sei funzioni:

Setup() inizializza la visualizzazione

Loop() contiene il ciclo principale del programma. Annerisce lo schermo, disegna gli assi, legge gli ingressi e disegna la freccia che rappresenta il vettore del campo magnetico. Ha una frequenza di aggiornamento di un secondo che può essere modificata modificando la riga 127

DrawAxes3d() disegna ed etichetta gli assi x, y e z

DrawArrow3d() accetta un input x, y e z compreso tra 0 e 1023. Da questi valori, calcola i punti finali della freccia nello spazio. Successivamente, utilizza le funzioni isometricxx() e isometricyy() per calcolare i punti finali sullo schermo. Infine, disegna la freccia e stampa le tensioni nella parte inferiore dello schermo

Isometricxx() trova la coordinata x della proiezione isometrica. Prende le coordinate x, y e z di un punto e restituisce la posizione di x pixel corrispondente sullo schermo

Isometricyy() trova la coordinata y della proiezione isometrica. Prende le coordinate x, y e z di un punto e restituisce la posizione del pixel y corrispondente sullo schermo

Prima di eseguire il codice, dobbiamo specificare quali pin utilizzare per la comunicazione SPI con il display e dobbiamo specificare la tensione di origine per i sensori. Se stai usando MKR1010, commenta le righe 92-96 e 110. Quindi, decommenta le righe 85-89 e 108. Se stai usando Uno, commenta le righe 85-89 e la riga 108 Quindi, rimuovere il commento dalle righe 92-96 e dalla riga 110.

Carica il codice, Schizzo → Carica.

Dovresti vedere gli assi x, yez in rosso. Una freccia verde con un cerchio blu per la punta rappresenta il vettore del campo magnetico sui sensori. Le letture della tensione sono visualizzate in basso a sinistra. Avvicinando un magnete ai sensori, le letture della tensione dovrebbero cambiare e la dimensione della freccia dovrebbe aumentare.

Immagine
Immagine

Passaggio 5: lavoro futuro

Lavoro futuro
Lavoro futuro

Il prossimo passo sarebbe calibrare il dispositivo. La scheda tecnica del sensore fornisce informazioni su come convertire i valori di tensione del sensore grezzi in intensità del campo magnetico. La calibrazione può essere verificata confrontandola con un magnetometro più accurato.

I magneti permanenti interagiscono con i fili percorsi da corrente. I fili vicino al display e nell'Arduino generano campi magnetici che potrebbero influenzare le letture del sensore. Inoltre, se questo dispositivo viene utilizzato per misurare vicino a un forte magnete permanente, il campo magnetico del dispositivo in prova interagirà con, introdurrà rumore e potrebbe danneggiare Arduino e il display. La schermatura potrebbe rendere questo magnetometro più robusto. L'Arduino può resistere a campi magnetici più grandi se è schermato in una scatola di metallo e verrà introdotto meno rumore se i cavi schermati collegano i sensori invece di fili scoperti.

Il campo magnetico è una funzione della posizione, quindi è diverso in ogni punto dello spazio. Questo dispositivo utilizza tre sensori, uno per misurare la componente x, y e z del campo magnetico in un punto. I sensori sono vicini l'uno all'altro ma non in un unico punto, e questo limita la risoluzione del magnetometro. Sarebbe bello salvare le letture del campo magnetico in punti diversi e poi visualizzarle come una serie di frecce nelle posizioni corrispondenti. Tuttavia, questo è un progetto per un altro giorno.

Riferimenti

Informazioni sulle librerie grafiche Adafruit Arduino

https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/overview

Visualizzazione del campo magnetico

https://www.falstad.com/vector3dm/

Informazioni sui sensori ad effetto Hall e ad effetto Hall

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Informazioni sulla proiezione isometrica

  • https://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Consigliato: