Cuprins:

Magnetometru Arduino: 5 pași (cu imagini)
Magnetometru Arduino: 5 pași (cu imagini)

Video: Magnetometru Arduino: 5 pași (cu imagini)

Video: Magnetometru Arduino: 5 pași (cu imagini)
Video: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, Septembrie
Anonim
Magnetometru Arduino
Magnetometru Arduino

Ce construim?

Oamenii nu pot detecta câmpuri magnetice, dar folosim dispozitive care se bazează tot timpul pe magneți. De exemplu, motoarele, busolele, senzorii de rotație și turbinele eoliene necesită magneți pentru funcționare. Acest tutorial descrie cum se construiește un magnetometru pe bază de Arduino care detectează câmpul magnetic folosind trei senzori de efect Hall. Vectorul câmpului magnetic dintr-o locație este afișat pe un ecran mic folosind proiecția izometrică.

Ce este un Arduino?

Un Arduino este un mic microcontroler open-source ușor de utilizat. Are pini de intrare și ieșire digitale. De asemenea, are pini de intrare analogici, care sunt utili pentru citirea intrărilor de la senzori. Sunt disponibile diferite modele Arduino. Acest tutorial descrie cum să utilizați fie Arduino Uno, fie Arduino MKR1010. Cu toate acestea, pot fi utilizate și alte modele.

Înainte de a începe acest tutorial, descărcați mediul de dezvoltare Arduino, precum și orice biblioteci necesare pentru modelul dvs. particular. Mediul de dezvoltare este disponibil la https://www.arduino.cc/en/main/software, iar instrucțiunile de instalare sunt disponibile la

Ce este un câmp magnetic?

Magneții permanenți exercită forțe asupra altor magneți permanenți. Sârmele de transport curente exercită forțe asupra altor fire de transport curente. Magneții permanenți și firele de transport ale curentului exercită forțe și unul pe celălalt. Această forță pe unitate de curent de testare este un câmp magnetic.

Dacă măsurăm volumul unui obiect, obținem un singur număr scalar. Cu toate acestea, magnetismul este descris de un câmp vector, o cantitate mai complicată. În primul rând, variază în funcție de poziție în tot spațiul. De exemplu, câmpul magnetic la un centimetru de un magnet permanent este probabil să fie mai mare decât câmpul magnetic la zece centimetri distanță.

Apoi, câmpul magnetic din fiecare punct al spațiului este reprezentat de un vector. Mărimea vectorului reprezintă puterea câmpului magnetic. Direcția este perpendiculară atât pe direcția forței, cât și pe direcția curentului de încercare.

Putem imagina câmpul magnetic într-o singură locație ca o săgeată. Putem imagina câmpul magnetic pe tot spațiul printr-o serie de săgeți în diferite locații, posibil de diferite dimensiuni și îndreptate în direcții diferite. O vizualizare frumoasă este disponibilă la https://www.falstad.com/vector3dm/. Magnetometrul pe care îl construim afișează câmpul magnetic la locația senzorilor ca o săgeată pe afișaj.

Ce este un senzor de efect Hall și cum funcționează?

Un senzor de efect Hall este un dispozitiv mic, ieftin, care măsoară puterea câmpului magnetic de-a lungul unei anumite direcții. Este fabricat dintr-o bucată de semiconductor dopată cu sarcini în exces. Ieșirea unor senzori de efect Hall este o tensiune analogică. Alți senzori de efect Hall au un comparator integrat și produc o ieșire digitală. Alți senzori de efect Hall sunt integrați în instrumente mai mari care măsoară debitul, viteza de rotație sau alte cantități.

Fizica din spatele efectului Hall este rezumată prin ecuația forței Lorentz. Această ecuație descrie forța pe o sarcină în mișcare datorată unui câmp electric și magnetic extern.

Imagine
Imagine

Figura de mai jos ilustrează efectul Hall. Să presupunem că vrem să măsurăm puterea câmpului magnetic în direcția săgeții albastre. Așa cum se arată în partea stângă a figurii, aplicăm un curent printr-o bucată de semiconductor perpendiculară pe direcția câmpului de măsurat. Curentul este fluxul de sarcini, deci o sarcină din semiconductor se mișcă cu o anumită viteză. Această încărcare va simți o forță datorată câmpului extern, așa cum se arată în partea de mijloc a figurii. Sarcinile se vor mișca datorită forței și se vor acumula pe marginile semiconductorului. Încărcările se acumulează până când forța datorată încărcărilor acumulate echilibrează forța datorată câmpului magnetic extern. Putem măsura tensiunea pe semiconductor, așa cum se arată în partea dreaptă a figurii. Tensiunea măsurată este proporțională cu puterea câmpului magnetic și este în direcția perpendiculară pe curent și direcția câmpului magnetic.

Imagine
Imagine

Ce este proiecția izometrică?

În fiecare punct al spațiului, câmpul magnetic este descris de un vector tridimensional. Cu toate acestea, ecranul nostru de afișare este bidimensional. Putem proiecta vectorul tridimensional într-un plan bidimensional, astfel încât să-l putem desena pe ecran. Există mai multe modalități de a realiza acest lucru, cum ar fi proiecția izometrică, proiecția ortografică sau proiecția oblică.

În proiecția izometrică, axele x, y și z sunt la 120 de grade distanță și apar la fel de scurtate. Informații suplimentare despre proiecția izometrică, precum și formulele necesare, pot fi găsite pe pagina Wikipedia pe această temă.

Pasul 1: Strângeți consumabilele

Arduino și cablu

Arduino este creierul magnetometrului. Aceste instrucțiuni descriu modul de utilizare a unui Arduino Uno sau a unui Arduino MKR1010. În ambele cazuri, este necesar un cablu pentru a-l conecta la computer.

Opțiunea 1: Arduino Uno și cablu 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

Opțiunea 2: Arduino MKR1010 și cablu 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

Afișaj TFT

TFT înseamnă Thin Film Transistor. Acest afișaj de 1,44 conține 128 x 128 pixeli. Este mic, luminos și colorat. Este atașat la o placă de rupere. Cu toate acestea, știfturile antetului sunt separate, așa că trebuie să le lipiți. Necesar.)

www.digikey.com/product-detail/en/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Imagine
    Imagine
  • Senzori analogici de efect Hall

Sunt necesari trei senzori de efect Hall. Link-ul de mai jos este pentru numărul piesei Allegro A1324LUA-T. Pentru acest senzor, pinul 1 este tensiunea de alimentare, pinul 2 este împământat, iar pinul 3 este ieșirea. Și alți senzori Hall ar trebui să funcționeze, dar asigurați-vă că sunt analogi, nu digitali. Dacă utilizați un alt senzor, verificați pinout-ul și reglați cablajul, dacă este necesar. (De fapt, am folosit un senzor diferit de aceeași companie în scopuri de testare. Cu toate acestea, cel pe care l-am folosit este învechit, iar acest senzor este înlocuitorul acestuia.)

www.digikey.com/product-detail/en/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Breadboard și sârmă mici

www.digikey.com/product-detail/en/adafruit-industries-llc/239/1528-2143-ND/7244929

Magneți permanenți pentru testare

Magneții de frigider vor funcționa bine.

Pasul 2: Cablare

Cablare
Cablare

Lipiți anteturile de pe afișaj.

Imagine
Imagine

Așezați senzorii la un capăt al panoului și plasați afișajul și Arduino pe capătul opus. Curentul în firele din Arduino și afișajul generează câmpuri magnetice, pe care nu vrem să le citească senzorii. În plus, este posibil să dorim să punem senzorii lângă magneți permanenți, care ar putea avea un impact negativ asupra curentului din firele afișajului și ale senzorului. Din aceste motive, dorim senzorii departe de ecran și Arduino. De asemenea, din aceste motive, acest magnetometru trebuie ținut departe de câmpurile magnetice foarte puternice.

Așezați senzorii perpendiculari unul pe celălalt, dar cât mai aproape unul de celălalt. Îndoiți ușor senzorii pentru a le face perpendiculari. Fiecare pin al fiecărui senzor trebuie să se afle într-un rând separat al panoului pentru a putea fi conectat separat.

Imagine
Imagine

Cablajul este ușor diferit între MKR1010 și Uno din două motive. În primul rând, Arduino și afișajul comunică prin SPI. Diferite modele Arduino au pini dedicați diferiți pentru anumite linii SPI. În al doilea rând, intrările analogice ale Uno pot accepta până la 5 V, în timp ce intrările analogice ale MKR1010 pot accepta doar până la 3,3 V. Tensiunea de alimentare recomandată pentru senzorii cu efect Hall este de 5 V. Ieșirile senzorului sunt conectate la intrările analogice Arduino, iar acestea pot fi la fel de mari ca tensiunile de alimentare. Pentru Uno, utilizați sursa de 5 V recomandată pentru senzori. Pentru MKR1010, utilizați 3,3 V, astfel încât intrarea analogică a Arduino să nu vadă niciodată o tensiune mai mare decât poate suporta.

Urmați diagramele și instrucțiunile de mai jos pentru Arduino pe care îl utilizați.

Cablare cu Arduino Uno

Imagine
Imagine

Afișajul are 11 pini. Conectați-le la Arduino Uno după cum urmează. (NC înseamnă neconectat.)

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

Conectați Vinul senzorilor la 5V din Arduino. Conectați pământul senzorului la pământul Arduino. Conectați ieșirea senzorilor la intrările analogice A1, A2 și A3 ale Arduino.

Imagine
Imagine

Cablare cu Arduino MKR1010

Imagine
Imagine

Afișajul are 11 pini. Conectați-le la Arduino după cum urmează. (NC înseamnă neconectat.)

  • 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

Conectați Vinul senzorilor la Vcc al Arduino. Acest pin este la 3,3V, nu la 5V. Conectați pământul senzorului la pământul Arduino. Conectați ieșirea senzorilor la intrările analogice A1, A2 și A3 ale Arduino.

Imagine
Imagine

Pasul 3: Testați afișajul

Să punem în funcțiune afișajul TFT. Din fericire, Adafruit are câteva biblioteci ușor de utilizat și un tutorial excelent pentru a merge împreună cu ele. Aceste instrucțiuni urmează îndeaproape tutorialul, Deschideți mediul de dezvoltare Arduino. Accesați Instrumente → Gestionați bibliotecile. Instalați bibliotecile Adafruit_GFX, Adafruit_ZeroDMA și Adafruit_ST7735. Reporniți mediul de dezvoltare Android.

Exemplul graphicstest este inclus în biblioteci. Deschidel. Fișier → Exemple → Biblioteca Adafruit ST7735 și ST7789 → graphicstest. Pentru a selecta afișajul de 1.44 afișați linia 95 și decomentați linia 98.

Versiunea originala:

94 // Utilizați acest inițializator dacă utilizați un ecran TFT de 1,8 :

95 tft.initR (INITR_BLACKTAB); // Cip Init ST7735S, filă neagră 96 97 // SAU utilizați acest inițializator (necomentat) dacă utilizați un TFT de 1,44 : 98 //tft.initR(INITR_144GREENTAB); // Cip Init ST7735R, filă verde

Versiune corectă pentru afișajul de 1,44 :

94 // Utilizați acest inițializator dacă utilizați un ecran TFT de 1,8 :

95 //tft.initR(INIT_BLACKTAB); // Cip Init ST7735S, filă neagră 96 97 // SAU utilizați acest inițializator (necomentat) dacă utilizați un TFT de 1,44 : 98 tft.initR (INITR_144GREENTAB); // Cip Init SST35R, filă verde

Afișajul comunică utilizând SPI, iar diferite modele Arduino folosesc pini dedicați diferiți pentru unele linii de comunicație. Exemplul graphicstest este configurat pentru a funcționa cu pinii Uno. Dacă utilizați MKR1010, adăugați următoarele linii între liniile 80 și 81.

Corecții pentru 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 plutitor p = 3,1415926;

Salvați exemplul graphicstest modificat. Conectați Arduino la computer dacă nu ați făcut încă acest lucru. Accesați Instrumente → Placă și Instrumente → Port pentru a verifica dacă computerul poate găsi Arduino. Accesați Schiță → Încărcare. Dacă exemplul funcționează, afișajul va afișa linii, dreptunghiuri, text și demo-ul complet. Tutorialul Adafruit oferă mai multe detalii dacă este necesară depanarea.

Pasul 4: Codul magnetometrului

Descărcați codul atașat și deschideți-l în mediul de dezvoltare Arduino.

Acest program folosește șase funcții:

Setup () inițializează afișajul

Bucla () conține bucla principală a programului. Înnegrește ecranul, desenează axele, citește intrările și desenează săgeata reprezentând vectorul câmpului magnetic. Are o rată de reîmprospătare de o secundă care poate fi modificată modificând linia 127

DrawAxes3d () desenează și etichetează axele x, y și z

DrawArrow3d () preia o intrare x, y și z variind de la 0 la 1023. Din aceste valori, calculează punctele finale ale săgeții în spațiu. Apoi, folosește funcțiile isometricxx () și isometricyy () pentru a calcula punctele finale de pe ecran. În cele din urmă, desenează săgeata și imprimă tensiunile pe partea de jos a ecranului

Isometricxx () găsește coordonata x a proiecției izometrice. Prinde coordonatele x, y și z ale unui punct și returnează locația corespunzătoare x pixel pe ecran

Isometricyy () găsește coordonata y a proiecției izometrice. Prinde coordonatele x, y și z ale unui punct și returnează locația y pixel corespunzătoare pe ecran

Înainte de a rula codul, trebuie să specificăm ce pini să utilizăm pentru comunicarea SPI cu afișajul și trebuie să specificăm tensiunea sursei pentru senzori. Dacă utilizați MKR1010, comentați liniile 92-96, precum și linia 110. Apoi, decomentați liniile 85-89, precum și linia 108. Dacă utilizați Uno, comentați liniile 85-89, precum și linia 108 Apoi, descomentați liniile 92-96, precum și linia 110.

Încărcați codul, Schiță → Încărcați.

Ar trebui să vedeți axele x, y și z în roșu. O săgeată verde cu un cerc albastru pentru vârf reprezintă vectorul câmpului magnetic la senzori. Citirile de tensiune sunt afișate în stânga jos. Pe măsură ce apropiați un magnet de senzori, citirile tensiunii ar trebui să se schimbe, iar dimensiunea săgeții ar trebui să crească.

Imagine
Imagine

Pasul 5: Munca viitoare

Muncă viitoare
Muncă viitoare

Următorul pas ar fi calibrarea dispozitivului. Fișa tehnică a senzorului oferă informații despre cum să convertiți valorile brute ale tensiunii senzorului în intensitatea câmpului magnetic. Calibrarea poate fi verificată comparând cu un magnetometru mai precis.

Magneții permanenți interacționează cu firele de transport curente. Sârmele din apropierea afișajului și din Arduino generează câmpuri magnetice care ar putea afecta citirile senzorilor. În plus, dacă acest dispozitiv este utilizat pentru a măsura în apropierea unui magnet permanent puternic, câmpul magnetic de la dispozitivul supus testului va interacționa cu, va introduce zgomot și, eventual, va deteriora Arduino și afișajul. Protecția ar putea face acest magnetometru mai robust. Arduino poate rezista la câmpuri magnetice mai mari dacă este protejat într-o cutie metalică și va fi introdus mai puțin zgomot dacă cablurile ecranate conectează senzorii în loc de fire goale.

Câmpul magnetic este o funcție de poziție, deci este diferit în fiecare punct al spațiului. Acest dispozitiv utilizează trei senzori, unul pentru a măsura componenta x, y și z a câmpului magnetic într-un punct. Senzorii sunt aproape unul de altul, dar nu într-un singur punct, iar acest lucru limitează rezoluția magnetometrului. Ar fi bine să salvați citirile câmpului magnetic în diferite puncte, apoi să le afișați ca o serie de săgeți în locațiile corespunzătoare. Cu toate acestea, acesta este un proiect pentru o altă zi.

Referințe

Informații despre bibliotecile de grafică Adafruit Arduino

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

Vizualizare câmp magnetic

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

Informații despre senzorii de efect Hall și senzori de efect Hall

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

Informații despre proiecția izometrică

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

Recomandat: