Inhoudsopgave:

Arduino-magnetometer: 5 stappen (met afbeeldingen)
Arduino-magnetometer: 5 stappen (met afbeeldingen)

Video: Arduino-magnetometer: 5 stappen (met afbeeldingen)

Video: Arduino-magnetometer: 5 stappen (met afbeeldingen)
Video: Geek Squad Unboxing: Sony Xperia Z2 2024, September
Anonim
Arduino Magnetometer
Arduino Magnetometer

Wat bouwen we?

Mensen kunnen geen magnetische velden detecteren, maar we gebruiken apparaten die altijd op magneten vertrouwen. Motoren, kompassen, rotatiesensoren en windturbines hebben bijvoorbeeld allemaal magneten nodig om te kunnen werken. Deze tutorial beschrijft hoe je een op Arduino gebaseerde magnetometer bouwt die magnetisch veld detecteert met behulp van drie Hall-effectsensoren. De magnetische veldvector op een locatie wordt weergegeven op een klein scherm met behulp van isometrische projectie.

Wat is een Arduino?

Een Arduino is een kleine open-source gebruiksvriendelijke microcontroller. Het heeft digitale invoer- en uitvoerpinnen. Het heeft ook analoge invoerpinnen, die handig zijn voor het lezen van invoer van sensoren. Er zijn verschillende Arduino-modellen beschikbaar. Deze tutorial beschrijft hoe je de Arduino Uno of de Arduino MKR1010 gebruikt. Er kunnen echter ook andere modellen worden gebruikt.

Voordat u aan deze zelfstudie begint, downloadt u de Arduino-ontwikkelomgeving en alle bibliotheken die nodig zijn voor uw specifieke model. De ontwikkelomgeving is beschikbaar op https://www.arduino.cc/en/main/software, en installatie-instructies zijn beschikbaar op

Wat is een magnetisch veld?

Permanente magneten oefenen krachten uit op andere permanente magneten. Stroomvoerende draden oefenen krachten uit op andere stroomvoerende draden. Permanente magneten en stroomvoerende draden oefenen ook krachten op elkaar uit. Deze kracht per eenheid teststroom is een magnetisch veld.

Als we het volume van een object meten, krijgen we een enkel scalair getal. Magnetisme wordt echter beschreven door een vectorveld, een meer gecompliceerde grootheid. Ten eerste varieert het met de positie in de hele ruimte. Zo is het magnetische veld op één centimeter van een permanente magneet waarschijnlijk groter dan het magnetische veld op tien centimeter afstand.

Vervolgens wordt het magnetische veld op elk punt in de ruimte weergegeven door een vector. De grootte van de vector vertegenwoordigt de sterkte van het magnetische veld. De richting staat loodrecht op zowel de richting van de kracht als de richting van de teststroom.

We kunnen ons het magnetische veld op een enkele locatie voorstellen als een pijl. We kunnen ons het magnetische veld in de ruimte voorstellen door een reeks pijlen op verschillende locaties, mogelijk van verschillende grootte en in verschillende richtingen. Een mooie visualisatie is beschikbaar op https://www.falstad.com/vector3dm/. De magnetometer die we bouwen geeft het magnetische veld ter plaatse van de sensoren als een pijl op het display weer.

Wat is een Hall-effectsensor en hoe werkt het?

Een Hall-effectsensor is een klein, goedkoop apparaatje dat de sterkte van het magnetische veld in een bepaalde richting meet. Het is gemaakt van een stuk halfgeleider dat is gedoteerd met overtollige ladingen. De output van sommige Hall-effectsensoren is een analoge spanning. Andere Hall-effectsensoren hebben een geïntegreerde comparator en produceren een digitale output. Andere Hall-effectsensoren zijn geïntegreerd in grotere instrumenten die de stroomsnelheid, rotatiesnelheid of andere grootheden meten.

De fysica achter het Hall-effect wordt samengevat door de Lorentz-krachtvergelijking. Deze vergelijking beschrijft de kracht op een bewegende lading als gevolg van een extern elektrisch en magnetisch veld.

Afbeelding
Afbeelding

Onderstaande figuur illustreert het Hall-effect. Stel dat we de sterkte van het magnetische veld in de richting van de blauwe pijl willen meten. Zoals in het linkerdeel van de figuur te zien is, laten we een stroom lopen door een stuk halfgeleider loodrecht op de richting van het te meten veld. Stroom is de stroom van ladingen, dus een lading in de halfgeleider beweegt met enige snelheid. Deze lading zal een kracht voelen als gevolg van het externe veld, zoals weergegeven in het middelste deel van de figuur. Ladingen zullen door de kracht bewegen en zich ophopen aan de randen van de halfgeleider. Ladingen stapelen zich op totdat de kracht als gevolg van de geaccumuleerde ladingen de kracht als gevolg van het externe magnetische veld in evenwicht houdt. We kunnen de spanning over de halfgeleider meten, zoals weergegeven in het rechterdeel van de figuur. De gemeten spanning is evenredig met de sterkte van het magnetische veld en staat in de richting loodrecht op de stroom en de richting van het magnetische veld.

Afbeelding
Afbeelding

Wat is isometrische projectie?

Op elk punt in de ruimte wordt het magnetische veld beschreven door een driedimensionale vector. Ons beeldscherm is echter tweedimensionaal. We kunnen de driedimensionale vector in een tweedimensionaal vlak projecteren, zodat we het op het scherm kunnen tekenen. Er zijn meerdere manieren om dit te bereiken, zoals isometrische projectie, orthografische projectie of schuine projectie.

Bij isometrische projectie liggen de x-, y- en z-assen 120 graden uit elkaar en lijken ze even verkort. Aanvullende informatie over isometrische projectie, evenals de benodigde formules, is te vinden op Wikipedia's pagina over het onderwerp.

Stap 1: Verzamel benodigdheden

Arduino en kabel

De Arduino is het brein van de magnetometer. Deze instructies beschrijven hoe u een Arduino Uno of een Arduino MKR1010 gebruikt. In beide gevallen is een kabel nodig om hem op de computer aan te sluiten.

Optie 1: Arduino Uno en USB AB-kabel

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

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

Optie 2: Arduino MKR1010 en microUSB-kabel

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

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

TFT-scherm

TFT staat voor Thin Film Transistor. Dit 1,44-inch scherm bevat 128 bij 128 pixels. Het is klein, helder en kleurrijk. Het wordt bevestigd aan een breakout-bord. De header-pinnen komen echter los, dus u moet ze erop solderen. (Soldeer en een soldeerbout zijn nodig zijn.)

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

    Afbeelding
    Afbeelding
  • Analoge Hall-effectsensoren

Er zijn drie Hall-effectsensoren vereist. De onderstaande link is voor Allegro onderdeelnummer A1324LUA-T. Voor deze sensor is pin 1 de voedingsspanning, pin 2 is aarde en pin 3 is de uitgang. Andere Hall-sensoren zouden ook moeten werken, maar zorg ervoor dat ze analoog zijn, niet digitaal. Als u een andere sensor gebruikt, controleer dan de pinout en pas indien nodig de bedrading aan. (Ik heb eigenlijk een andere sensor van hetzelfde bedrijf gebruikt voor testdoeleinden, maar degene die ik heb gebruikt is verouderd en deze sensor is de vervanging ervan.)

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

Kleine Breadboard en Draad

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

Permanente magneten voor testen

Koelkastmagneten werken prima.

Stap 2: Bedrading

Bedrading
Bedrading

Soldeer de headers op het display.

Afbeelding
Afbeelding

Plaats de sensoren aan het ene uiteinde van het breadboard en plaats het display en Arduino aan het andere uiteinde. Stroom in de draden in de Arduino en het display wekt magnetische velden op, die we niet willen dat de sensoren lezen. Bovendien willen we de sensoren misschien in de buurt van permanente magneten plaatsen, wat een nadelige invloed kan hebben op de stroom in de draden van het display en de sensor. Om deze redenen willen we de sensoren ver van het display en Arduino. Ook om deze redenen moet deze magnetometer uit de buurt van zeer sterke magnetische velden worden gehouden.

Plaats de sensoren loodrecht op elkaar, maar zo dicht mogelijk bij elkaar. Buig de sensoren voorzichtig om ze loodrecht te krijgen. Elke pin van elke sensor moet zich in een aparte rij van het breadboard bevinden, zodat deze afzonderlijk kan worden aangesloten.

Afbeelding
Afbeelding

De bedrading is om twee redenen iets anders tussen de MKR1010 en de Uno. Ten eerste communiceren de Arduino en het display via SPI. Verschillende Arduino-modellen hebben verschillende speciale pinnen voor bepaalde SPI-lijnen. Ten tweede kunnen analoge ingangen van de Uno tot 5 V accepteren, terwijl analoge ingangen van de MKR1010 slechts tot 3,3 V kunnen accepteren. De aanbevolen voedingsspanning voor de Hall-effectsensoren is 5 V. De sensoruitgangen zijn verbonden met Arduino analoge ingangen, en deze kunnen zo groot zijn als de voedingsspanningen. Gebruik voor de Uno de aanbevolen 5 V-voeding voor de sensoren. Gebruik voor de MKR1010 3,3 V zodat de analoge ingang van de Arduino nooit een grotere spanning ziet dan hij aankan.

Volg de onderstaande diagrammen en instructies voor de Arduino die u gebruikt.

Bedrading met de Arduino Uno

Afbeelding
Afbeelding

Het display heeft 11 pinnen. Sluit ze als volgt aan op de Arduino Uno. (NC betekent niet aangesloten.)

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

Sluit Vin van de sensoren aan op 5V van de Arduino. Sluit de aarde van de sensor aan op de aarde van de Arduino. Sluit de uitgang van de sensoren aan op de analoge ingangen A1, A2 en A3 van de Arduino.

Afbeelding
Afbeelding

Bedrading met de Arduino MKR1010

Afbeelding
Afbeelding

Het display heeft 11 pinnen. Verbind ze als volgt met de Arduino. (NC betekent niet aangesloten.)

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

Verbind Vin van de sensoren met Vcc van de Arduino. Deze pin is op 3.3V, niet op 5V. Sluit de aarde van de sensor aan op de aarde van de Arduino. Sluit de uitgang van de sensoren aan op de analoge ingangen A1, A2 en A3 van de Arduino.

Afbeelding
Afbeelding

Stap 3: Test het scherm uit

Laten we het TFT-scherm laten werken. Gelukkig heeft Adafruit een aantal gebruiksvriendelijke bibliotheken en een uitstekende tutorial die daarbij hoort. Deze instructies volgen nauwgezet de tutorial, Open de Arduino-ontwikkelomgeving. Ga naar Extra → Bibliotheken beheren. Installeer de bibliotheken Adafruit_GFX, Adafruit_ZeroDMA en Adafruit_ST7735. Start de Android-ontwikkelomgeving opnieuw.

Het grafische testvoorbeeld wordt meegeleverd met de bibliotheken. Open het. Bestand → Voorbeelden → Adafruit ST7735 en ST7789 Bibliotheek → graphicstest. Voor het selecteren van de 1,44 display commentaar uit lijn 95 en uncomment regel 98.

Originele versie:

94 // Gebruik deze initializer bij gebruik van een 1,8 TFT-scherm:

95 tft.initR(INITR_BLACKTAB); //Init ST7735S-chip, zwart lipje 96 97 //OF gebruik deze initializer (zonder commentaar) bij gebruik van een 1,44 TFT: 98 //tft.initR(INITR_144GREENTAB); // Init ST7735R-chip, groen lipje

Correcte versie voor 1,44 display:

94 // Gebruik deze initializer bij gebruik van een 1,8 TFT-scherm:

95 //tft.initR(INIT_BLACKTAB); //Init ST7735S-chip, zwart lipje 96 97 //OF gebruik deze initializer (zonder commentaar) bij gebruik van een 1,44 TFT: 98 tft.initR(INITR_144GREENTAB); //Init SST35R-chip, groen lipje

Het display communiceert via SPI en verschillende Arduino-modellen gebruiken verschillende speciale pinnen voor sommige communicatielijnen. Het grafische testvoorbeeld is ingesteld om met de Uno-pinnen te werken. Als u de MKR1010 gebruikt, voegt u de volgende regels toe tussen regel 80 en 81.

Correcties voor de 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 vlotter p=3.1415926;

Sla het gewijzigde grafische testvoorbeeld op. Sluit de Arduino aan op de computer als je dat nog niet hebt gedaan. Ga naar Tools → Board and Tools → Port om te controleren of de computer de Arduino kan vinden. Ga naar Schets → Uploaden. Als het voorbeeld werkt, toont het display lijnen, rechthoeken, tekst en de volledige demo. De Adafruit-tutorial biedt meer details als probleemoplossing nodig is.

Stap 4: De magnetometercode

Download de bijgevoegde code en open deze in de Arduino-ontwikkelomgeving.

Dit programma gebruikt zes functies:

Setup() initialiseert de weergave

Loop() bevat de hoofdlus van het programma. Het maakt het scherm zwart, tekent de assen, leest de invoer en tekent de pijl die de magnetische veldvector voorstelt. Het heeft een verversingssnelheid van één seconde die kan worden gewijzigd door regel 127 te wijzigen

DrawAxes3d() tekent en labelt de x-, y- en z-assen

DrawArrow3d() neemt een x, y en z invoer op van 0 tot 1023. Op basis van deze waarden berekent het de eindpunten van de pijl in de ruimte. Vervolgens gebruikt het de functies isometricxx() en isometricyy() om de eindpunten op het scherm te berekenen. Ten slotte tekent het de pijl en drukt het de spanningen af aan de onderkant van het scherm

Isometricxx() vindt de x-coördinaat van de isometrische projectie. Het neemt x-, y- en z-coördinaten van een punt in en retourneert de corresponderende x-pixellocatie op het scherm

Isometricyy() vindt de y-coördinaat van de isometrische projectie. Het neemt de x-, y- en z-coördinaten van een punt in en retourneert de corresponderende y-pixellocatie op het scherm

Voordat we de code uitvoeren, moeten we specificeren welke pinnen we moeten gebruiken voor SPI-communicatie met het display, en we moeten de bronspanning voor de sensoren specificeren. Als u de MKR1010 gebruikt, becommentarieert u regels 92-96 en regel 110. Verwijder vervolgens de opmerkingen van regels 85-89 en regel 108. Als u de Uno gebruikt, becommentarieert u regels 85-89 en regel 108 Verwijder vervolgens de opmerkingen van regels 92-96 en regel 110.

Upload de code, Sketch → Upload.

Je zou de x-, y- en z-assen in het rood moeten zien. Een groene pijl met een blauwe cirkel voor de punt vertegenwoordigt de magnetische veldvector bij de sensoren. De spanningsmetingen worden linksonder weergegeven. Naarmate u een magneet dichter bij de sensoren brengt, moeten de spanningswaarden veranderen en moet de grootte van de pijl toenemen.

Afbeelding
Afbeelding

Stap 5: Toekomstig werk

Toekomstwerk
Toekomstwerk

De volgende stap zou zijn om het apparaat te kalibreren. Het sensorgegevensblad geeft informatie over het converteren van onbewerkte sensorspanningswaarden naar magnetische veldsterkte. Kalibratie kan worden geverifieerd door te vergelijken met een nauwkeuriger magnetometer.

Permanente magneten werken samen met stroomvoerende draden. Draden in de buurt van het display en in de Arduino genereren magnetische velden die de sensormetingen kunnen beïnvloeden. Bovendien, als dit apparaat wordt gebruikt om te meten in de buurt van een sterke permanente magneet, zal het magnetische veld van het geteste apparaat interageren met, ruis introduceren in en mogelijk de Arduino en het display beschadigen. Afscherming zou deze magnetometer robuuster kunnen maken. De Arduino kan grotere magnetische velden weerstaan als deze is afgeschermd in een metalen doos, en er zal minder ruis worden geïntroduceerd als afgeschermde kabels de sensoren verbinden in plaats van blote draden.

Magnetisch veld is een functie van positie, dus het is op elk punt in de ruimte anders. Dit apparaat gebruikt drie sensoren, één om de x-, de y- en de z-component van het magnetische veld op een punt te meten. De sensoren bevinden zich dicht bij elkaar, maar niet op een enkel punt, en dit beperkt de resolutie van de magnetometer. Het zou cool zijn om magnetische veldmetingen op verschillende punten op te slaan en ze vervolgens weer te geven als een reeks pijlen op de overeenkomstige locaties. Dat is echter een project voor een andere dag.

Referenties

Informatie over Adafruit Arduino Graphics-bibliotheken

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

Magnetisch veld visualisatie

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

Informatie over Hall-effect- en Hall-effectsensoren

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

Informatie over isometrische projectie

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

Aanbevolen: