INHOUDSOPGAWE:

Arduino magnetometer: 5 stappe (met foto's)
Arduino magnetometer: 5 stappe (met foto's)

Video: Arduino magnetometer: 5 stappe (met foto's)

Video: Arduino magnetometer: 5 stappe (met foto's)
Video: GY-271. Цифровой магнитометр и Ардуино. Делаем компас 2024, September
Anonim
Arduino magnetometer
Arduino magnetometer

Wat bou ons?

Mense kan nie magnetiese velde opspoor nie, maar ons gebruik toestelle wat altyd op magnete staatmaak. Motore, kompasse, rotasiesensors en windturbines benodig byvoorbeeld almal magnete om te werk. Hierdie tutoriaal beskryf hoe u 'n op Arduino gebaseerde magnetometer bou wat magnetiese veld met drie Hall -effek -sensors meet. Die magnetiese veldvektor op 'n plek word op 'n klein skerm vertoon met behulp van isometriese projeksie.

Wat is 'n Arduino?

'N Arduino is 'n klein, oop bron gebruikersvriendelike mikrobeheerder. Dit het digitale invoer- en uitvoerpenne. Dit het ook analoog invoerpenne, wat handig is om insette vanaf sensors te lees. Verskillende Arduino -modelle is beskikbaar. Hierdie handleiding beskryf hoe u die Arduino Uno of die Arduino MKR1010 kan gebruik. Ander modelle kan egter ook gebruik word.

Laai die Arduino -ontwikkelingsomgewing af, sowel as die biblioteke wat u vir u spesifieke model benodig, voordat u met hierdie tutoriaal begin. Die ontwikkelingsomgewing is beskikbaar op https://www.arduino.cc/en/main/software, en installasie -instruksies is beskikbaar by

Wat is 'n magnetiese veld?

Permanente magnete oefen kragte uit op ander permanente magnete. Stroomdrade oefen kragte uit op ander stroomdrade. Permanente magnete en stroomdrade oefen ook kragte op mekaar uit. Hierdie krag per eenheid toetsstroom is 'n magnetiese veld.

As ons die volume van 'n voorwerp meet, kry ons 'n enkele skalaargetal. Magnetisme word egter beskryf deur 'n vektorveld, 'n meer ingewikkelde hoeveelheid. Eerstens wissel dit met die posisie in die hele ruimte. Byvoorbeeld, die magnetiese veld een sentimeter van 'n permanente magneet is waarskynlik groter as die magnetiese veld tien sentimeter verder.

Vervolgens word die magnetiese veld op elke punt in die ruimte deur 'n vektor voorgestel. Die grootte van die vektor verteenwoordig die sterkte van die magnetiese veld. Die rigting is loodreg op beide die rigting van die krag en die rigting van die toetsstroom.

Ons kan die magnetiese veld op 'n enkele plek as 'n pyl voorstel. Ons kan die magnetiese veld in die ruimte voorstel deur 'n pyltjie op verskillende plekke, moontlik van verskillende groottes en in verskillende rigtings wys. 'N Pragtige visualisering is beskikbaar op https://www.falstad.com/vector3dm/. Die magnetometer wat ons bou, vertoon die magnetiese veld op die plek van die sensors as 'n pyl op die skerm.

Wat is 'n Hall -effek sensor, en hoe werk dit?

'N Hall -effek sensor is 'n klein, goedkoop toestel wat die sterkte van die magnetiese veld in 'n bepaalde rigting meet. Dit is gemaak van 'n stuk halfgeleier met oortollige ladings. Die uitset van sommige Hall -effek sensors is 'n analoog spanning. Ander Hall -effek sensors het 'n geïntegreerde vergelyker en lewer 'n digitale uitset. Ander Hall -effek sensors is geïntegreer in groter instrumente wat vloeitempo, rotasiesnelheid of ander hoeveelhede meet.

Die fisika agter die Hall -effek word saamgevat deur die Lorentz -kragvergelyking. Hierdie vergelyking beskryf die krag op 'n bewegende lading as gevolg van 'n eksterne elektriese en magnetiese veld.

Beeld
Beeld

Die onderstaande figuur illustreer die Hall -effek. Gestel ons wil die sterkte van die magnetiese veld in die rigting van die blou pyl meet. Soos in die linker gedeelte van die figuur getoon, pas ons 'n stroom toe deur 'n stuk halfgeleier loodreg op die rigting van die veld wat gemeet moet word. Stroom is die vloei van ladings, so 'n lading in die halfgeleier beweeg met 'n mate van snelheid. Hierdie lading sal 'n krag voel as gevolg van die eksterne veld, soos in die middelste deel van die figuur getoon. Lae sal beweeg as gevolg van die krag en ophoop aan die rande van die halfgeleier. Lade bou op totdat die krag as gevolg van die opgehoopte ladings die krag as gevolg van die eksterne magnetiese veld balanseer. Ons kan die spanning oor die halfgeleier meet, soos in die regterkant van die figuur getoon. Die gemete spanning is eweredig aan die sterkte van die magnetiese veld, en dit is in die rigting loodreg op die stroom en die rigting van die magnetiese veld.

Beeld
Beeld

Wat is isometriese projeksie?

Op elke punt in die ruimte word die magnetiese veld beskryf deur 'n driedimensionele vektor. Ons skerm is egter tweedimensioneel. Ons kan die driedimensionele vektor in 'n tweedimensionele vlak projekteer sodat ons dit op die skerm kan teken. Daar is verskillende maniere om dit te bewerkstellig, soos isometriese projeksie, ortografiese projeksie of skuins projeksie.

In isometriese projeksie is die x-, y- en z -as 120 grade uitmekaar en lyk hulle ewe kort. Bykomende inligting oor isometriese projeksie, sowel as die nodige formules, kan gevind word op Wikipedia se bladsy oor die onderwerp.

Stap 1: Versamel voorraad

Arduino en kabel

Die Arduino is die brein van die magnetometer. Hierdie instruksies beskryf hoe u 'n Arduino Uno of 'n Arduino MKR1010 moet gebruik. In beide gevalle is 'n kabel nodig om dit aan die rekenaar te koppel.

Opsie 1: Arduino Uno en USB AB -kabel

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

Opsie 2: Arduino MKR1010 en microUSB -kabel

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

TFT -skerm

TFT staan vir Thin Film Transistor. Hierdie 1,44 -skerm bevat 128 by 128 pixels. Dit is klein, helder en kleurvol. Dit word aan 'n uitbreekbord geheg. Die koppenne kom egter apart, sodat u dit moet soldeer. (Soldeer en 'n soldeerbout is benodig.)

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

    Beeld
    Beeld
  • Sensors vir analoge saaleffekte

Drie Hall -effek sensors is nodig. Die onderstaande skakel is vir Allegro-onderdeelnommer A1324LUA-T. Vir hierdie sensor is pen 1 die voedingsspanning, pen 2 is gemaal en pen 3 is die uitset. Ander Hall -sensors behoort ook te werk, maar maak seker dat hulle analoog is, nie digitaal nie. As u 'n ander sensor gebruik, kyk dan na die pinout en pas die bedrading aan indien nodig. (Ek het eintlik 'n ander sensor van dieselfde onderneming vir toetsdoeleindes gebruik. Die een wat ek gebruik het, is egter verouderd, en hierdie sensor is die vervanging daarvan.)

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

Klein broodbord en draad

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

Permanente magnete om te toets

Yskasmagnete werk goed.

Stap 2: Bedrading

Bedrading
Bedrading

Soldeer die kopstukke op die skerm.

Beeld
Beeld

Plaas die sensors aan die een kant van die broodbord en plaas die skerm en Arduino aan die teenoorgestelde kant. Stroom in die drade in die Arduino en skerm genereer magnetiese velde, wat ons nie wil hê dat die sensors moet lees nie. Boonop wil ons die sensors naby permanente magnete plaas, wat die stroom in die drade van die skerm en sensor nadelig kan beïnvloed. Om hierdie redes wil ons die sensors ver van die skerm en die Arduino hê. Om hierdie redes moet hierdie magnetometer ook weggehou word van baie sterk magnetiese velde.

Plaas die sensors loodreg op mekaar, maar so na as moontlik aan mekaar. Buig die sensors saggies om hulle loodreg te kry. Elke pen van elke sensor moet in 'n aparte ry van die broodbord wees, sodat dit afsonderlik verbind kan word.

Beeld
Beeld

Die bedrading is effens anders tussen die MKR1010 en die Uno om twee redes. Eerstens kommunikeer die Arduino en die skerm deur SPI. Verskillende Arduino -modelle het verskillende spelde vir sekere SPI -lyne. Tweedens, analoog insette van die Uno kan tot 5 V aanvaar, terwyl analoog insette van die MKR1010 slegs tot 3,3 V. kan aanbeveel. Die aanbevole voedingsspanning vir die Hall -effek sensors is 5 V. en dit kan so groot wees as die toevoerspannings. Vir die Uno, gebruik die aanbevole 5 V -toevoer vir die sensors. Gebruik 3,3 V vir die MKR1010, sodat die analoog ingang van die Arduino nooit 'n groter spanning sien as wat dit kan hanteer nie.

Volg die diagramme en instruksies hieronder vir die Arduino wat u gebruik.

Bedrading met die Arduino Uno

Beeld
Beeld

Die skerm het 11 penne. Koppel hulle soos volg aan die Arduino Uno. (NC beteken nie gekoppel nie.)

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

Koppel Vin van die sensors aan 5V van die Arduino. Koppel die sensor se grond aan die aarde van die Arduino. Koppel die uitset van die sensors aan analoog insette A1, A2 en A3 van die Arduino.

Beeld
Beeld

Bedrading met die Arduino MKR1010

Beeld
Beeld

Die skerm het 11 penne. Koppel hulle soos volg aan die Arduino. (NC beteken nie gekoppel nie.)

  • 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

Koppel Vin van die sensors aan Vcc van die Arduino. Hierdie pen is 3,3V, nie 5V nie. Koppel die sensor se grond aan die aarde van die Arduino. Koppel die uitset van die sensors aan analoog insette A1, A2 en A3 van die Arduino.

Beeld
Beeld

Stap 3: Toets die skerm

Laat die TFT -skerm werk. Gelukkig het Adafruit 'n paar gebruikersvriendelike biblioteke en 'n uitstekende handleiding om daarmee saam te gaan. Hierdie instruksies volg die tutoriaal, https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/overview, noukeurig na.

Maak die ontwikkelingsomgewing van Arduino oop. Gaan na Tools → Bestuur biblioteke. Installeer die Adafruit_GFX, Adafruit_ZeroDMA en Adafruit_ST7735 biblioteke. Herbegin die ontwikkelingsomgewing van Android.

Die grafiesste voorbeeld is by die biblioteke ingesluit. Maak dit oop. Lêer → Voorbeelde → Adafruit ST7735 en ST7789 -biblioteek → grafiese toets. Om die 1,44 vertoon kommentaar uit reël 95 en die kommentaar reël 98 te kies.

Oorspronklike weergawe:

94 // Gebruik hierdie inisialiseerder as u 'n 1.8 TFT -skerm gebruik:

95 tft.initR (INITR_BLACKTAB); // Init ST7735S -chip, swart oortjie 96 97 // OF gebruik hierdie inisialiseerder (uncomment) as u 'n 1,44 TFT: 98 //tft.initR(INITR_144GREENTAB) gebruik; // Init ST7735R -chip, groen oortjie

Korrekte weergawe vir 1,44 skerm:

94 // Gebruik hierdie inisialiseerder as u 'n 1.8 TFT -skerm gebruik:

95 //tft.initR(INIT_BLACKTAB); // Init ST7735S -chip, swart oortjie 96 97 // OF gebruik hierdie inisialiseerder (uncomment) as u 'n 1,44 TFT: 98 tft.initR (INITR_144GREENTAB) gebruik; // Init SST35R -chip, groen oortjie

Die skerm kommunikeer met behulp van SPI, en verskillende model Arduinos gebruik verskillende toegewyde penne vir sommige kommunikasielyne. Die grafiesste voorbeeld is opgestel om te werk met die Uno -penne. As u die MKR1010 gebruik, voeg die volgende lyne tussen reëls 80 en 81 by.

Regstellings vir die 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_SCLK, TFT_SCLK, TFT_SCRK, TFT_SCLK, TFT_SCLK) 81 float p = 3.1415926;

Stoor die gewysigde grafiese voorbeeld. Koppel die Arduino aan op die rekenaar as u dit nog nie gedoen het nie. Gaan na Tools → Board and Tools → Port om te verifieer dat die rekenaar die Arduino kan vind. Gaan na Skets → Laai op. As die voorbeeld werk, sal die skerm lyne, reghoeke, teks en die volledige demo wys. Die Adafruit -tutoriaal bied meer besonderhede as probleemoplossing nodig is.

Stap 4: Die magnetometer kode

Laai die aangehegte kode af en maak dit oop in die Arduino -ontwikkelingsomgewing.

Hierdie program gebruik ses funksies:

Setup () begin die skerm

Loop () bevat die hooflus van die program. Dit maak die skerm swart, teken die asse, lees die insette en teken die pyltjie wat die magnetiese veldvektor voorstel. Dit het 'n verversingssnelheid van een sekonde wat verander kan word deur reël 127 te verander

DrawAxes3d () teken en merk die x-, y- en z -as

DrawArrow3d () neem 'n x-, y- en z -invoer in wat wissel van 0 tot 1023. Uit hierdie waardes bereken dit die eindpunte van die pyl in die ruimte. Vervolgens gebruik dit die funksies isometricxx () en isometricyy () om die eindpunte op die skerm te bereken. Uiteindelik teken dit die pyltjie en druk die spanning onderaan die skerm af

Isometricxx () vind die x -koördinaat van die isometriese projeksie. Dit neem x, y en z koördinate van 'n punt in en gee die ooreenstemmende x pixel ligging op die skerm terug

Isometricyy () vind die y -koördinaat van die isometriese projeksie. Dit neem die x-, y- en z -koördinate van 'n punt in en gee die ooreenstemmende y -pixel -ligging op die skerm terug

Voordat ons die kode gebruik, moet ons spesifiseer watter penne ons moet gebruik vir SPI -kommunikasie met die skerm, en ons moet die bronspanning vir die sensors spesifiseer. As u die MKR1010 gebruik, lewer kommentaar op reëls 92-96 sowel as op reël 110. Maak dan kommentaar op reëls 85-89 sowel as reël 108. As u die Uno gebruik, lewer kommentaar op reëls 85-89 sowel as reël 108 Dan, los kommentaar reëls 92-96 sowel as lyn 110 op.

Laai die kode op, Skets → Laai op.

U moet die x-, y- en z -as in rooi sien. 'N Groen pyl met 'n blou sirkel vir die punt stel die magnetiese veldvektor by die sensors voor. Spanningslesings word links onder getoon. As u 'n magneet nader aan die sensors bring, moet die spanningslesings verander en die grootte van die pyl moet toeneem.

Beeld
Beeld

Stap 5: Toekomstige werk

Toekomstige werk
Toekomstige werk

Die volgende stap is om die toestel te kalibreer. Die sensorblad bevat inligting oor hoe om die spanning van die sensors in die magnetiese veldsterkte om te skakel. Kalibrasie kan geverifieer word deur te vergelyk met 'n meer akkurate magnetometer.

Permanente magnete wissel met stroomdrade. Drade naby die skerm en in die Arduino genereer magnetiese velde wat sensorlesings kan beïnvloed. As hierdie toestel ook gebruik word om naby 'n sterk permanente magneet te meet, sal die magnetiese veld van die toestel wat getoets word, interaksie hê, geraas veroorsaak en moontlik die Arduino en die skerm beskadig. Beskerming kan hierdie magnetometer robuuster maak. Die Arduino kan groter magnetiese velde weerstaan as dit in 'n metaalkas afgeskerm word, en minder geraas sal ontstaan as afgeskermde kabels die sensors in plaas van kaal drade verbind.

Magnetiese veld is 'n funksie van posisie, so dit is op elke punt in die ruimte anders. Hierdie toestel gebruik drie sensors, een om die x, die y en die z -komponent van die magnetiese veld op 'n punt te meet. Die sensors is naby mekaar, maar nie op 'n enkele punt nie, en dit beperk die magnetometerresolusie. Dit sou gaaf wees om magnetiese veldlesings op verskillende punte op te slaan en dit dan as 'n verskeidenheid pyle op die ooreenstemmende plekke te vertoon. Dit is egter 'n projek vir 'n ander dag.

Verwysings

Inligting oor Adafruit Arduino Graphics -biblioteke

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

Magnetiese veld visualisering

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

Inligting oor Hall effek en Hall effek sensors

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

Inligting oor isometriese projeksie

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

Aanbeveel: