Innholdsfortegnelse:

Arduino magnetometer: 5 trinn (med bilder)
Arduino magnetometer: 5 trinn (med bilder)

Video: Arduino magnetometer: 5 trinn (med bilder)

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

Hva bygger vi?

Mennesker kan ikke oppdage magnetfelt, men vi bruker enheter som er avhengige av magneter hele tiden. Motorer, kompasser, rotasjonssensorer og vindturbiner krever for eksempel alle magneter for drift. Denne opplæringen beskriver hvordan du bygger et Arduino -basert magnetometer som registrerer magnetfelt ved hjelp av tre Hall -effektsensorer. Magnetfeltvektoren på et sted vises på en liten skjerm ved hjelp av isometrisk projeksjon.

Hva er en Arduino?

En Arduino er en liten åpen kildekode brukervennlig mikrokontroller. Den har digitale inngangs- og utgangspinner. Den har også analoge inngangspinner, som er nyttige for å lese inngang fra sensorer. Ulike Arduino -modeller er tilgjengelige. Denne opplæringen beskriver hvordan du bruker enten Arduino Uno eller Arduino MKR1010. Imidlertid kan andre modeller også brukes.

Før du begynner denne opplæringen, last ned Arduino -utviklingsmiljøet samt eventuelle biblioteker som trengs for din modell. Utviklingsmiljøet er tilgjengelig på https://www.arduino.cc/en/main/software, og installasjonsinstruksjoner er tilgjengelig på

Hva er et magnetfelt?

Permanente magneter utøver krefter på andre permanente magneter. Strømførende ledninger utøver krefter på andre strømførende ledninger. Permanente magneter og strømførende ledninger utøver også krefter på hverandre. Denne kraften per enhet teststrøm er et magnetisk felt.

Hvis vi måler volumet til et objekt, får vi et enkelt skalaltall. Imidlertid er magnetisme beskrevet av et vektorfelt, en mer komplisert mengde. For det første varierer det med posisjon i hele rommet. For eksempel vil magnetfeltet en centimeter fra en permanent magnet sannsynligvis være større enn magnetfeltet ti centimeter unna.

Deretter er magnetfeltet ved hvert punkt i rommet representert av en vektor. Størrelsen på vektoren representerer styrken til magnetfeltet. Retningen er vinkelrett på både kraftens retning og teststrømmen.

Vi kan se magnetfeltet på et enkelt sted som en pil. Vi kan se magnetfeltet i hele rommet ved hjelp av en rekke pil på forskjellige steder, muligens av forskjellige størrelser og peker i forskjellige retninger. En fin visualisering er tilgjengelig på https://www.falstad.com/vector3dm/. Magnetometeret vi bygger viser magnetfeltet på plassering av sensorene som en pil på displayet.

Hva er en Hall -effektsensor, og hvordan fungerer den?

En Hall -effektsensor er en liten, billig enhet som måler styrken til magnetfeltet langs en bestemt retning. Den er laget av et stykke halvleder dopet med overskytende ladninger. Utgangen til noen Hall -effekt -sensorer er en analog spenning. Andre Hall -effekt sensorer har en integrert komparator og produserer en digital utgang. Andre Hall -effekt sensorer er integrert i større instrumenter som måler strømningshastighet, rotasjonshastighet eller andre mengder.

Fysikken bak Hall -effekten er oppsummert av Lorentz -kraftligningen. Denne ligningen beskriver kraften på en ladning i bevegelse på grunn av et eksternt elektrisk og magnetisk felt.

Bilde
Bilde

Figuren nedenfor illustrerer Hall -effekten. Anta at vi vil måle styrken til magnetfeltet i retning av den blå pilen. Som vist i venstre del av figuren, bruker vi en strøm gjennom et stykke halvleder vinkelrett på retningen til feltet som skal måles. Strøm er strømmen av ladninger, så en ladning i halvlederen beveger seg med en viss hastighet. Denne ladningen vil føle en kraft på grunn av det ytre feltet, som vist i midten av figuren. Ladninger vil bevege seg på grunn av kraften og samle seg på kantene på halvlederen. Ladninger bygger opp til kraften på grunn av de akkumulerte ladningene balanserer kraften på grunn av det eksterne magnetfeltet. Vi kan måle spenningen over halvlederen, som vist i høyre del av figuren. Spenningen som er målt er proporsjonal med styrken til magnetfeltet, og den er i retningen vinkelrett på strømmen og retningen til magnetfeltet.

Bilde
Bilde

Hva er isometrisk projeksjon?

På hvert punkt i rommet er magnetfeltet beskrevet av en tredimensjonal vektor. Imidlertid er skjermen vår todimensjonal. Vi kan projisere den tredimensjonale vektoren til et todimensjonalt plan slik at vi kan tegne den på skjermen. Det er flere måter å oppnå dette på, for eksempel isometrisk projeksjon, ortografisk projeksjon eller skrå projeksjon.

I isometrisk projeksjon er x-, y- og z -aksene 120 grader fra hverandre, og de ser like korte ut. Ytterligere informasjon om isometrisk projeksjon, samt formlene som trengs, finnes på Wikipedia's side om emnet.

Trinn 1: Samle rekvisita

Arduino og kabel

Arduino er hjernen til magnetometeret. Disse instruksjonene beskriver hvordan du bruker enten en Arduino Uno eller en Arduino MKR1010. I begge tilfeller er det nødvendig med en kabel for å koble den til datamaskinen.

Alternativ 1: Arduino Uno og 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

Alternativ 2: Arduino MKR1010 og 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 -skjerm

TFT står for Thin Film Transistor. Denne 1,44 -tommers skjermen inneholder 128 x 128 piksler. Den er liten, lys og fargerik. Den er festet til et utbruddskort. Toppnålene kommer imidlertid hver for seg, så du må lodde dem på. (Loddetinn og loddejern er behov for.)

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

    Bilde
    Bilde
  • Analoge halleffektsensorer

Tre Hall -effekt sensorer er påkrevd. Koblingen nedenfor er for Allegro-delenummer A1324LUA-T. For denne sensoren er pin 1 forsyningsspenningen, pin 2 er jordet og pin 3 er utgangen. Andre Hall -sensorer bør også fungere, men sørg for at de er analoge, ikke digitale. Hvis du bruker en annen sensor, må du sjekke pinout og justere ledningene om nødvendig. (Jeg brukte faktisk en annen sensor fra samme selskap til testformål. Den jeg brukte er imidlertid foreldet, og denne sensoren er dens erstatning.)

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

Små brødbrett og wire

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

Permanente magneter for testing

Kjøleskapsmagneter fungerer fint.

Trinn 2: Kabling

Kabling
Kabling

Lodd overskriftene på displayet.

Bilde
Bilde

Plasser sensorene i den ene enden av brødbrettet, og plasser displayet og Arduino i motsatt ende. Strøm i ledningene i Arduino og display genererer magnetfelt, som vi ikke vil at sensorene skal lese. I tillegg vil vi kanskje sette sensorene nær permanente magneter, noe som kan påvirke strømmen i ledningene til skjermen og sensoren negativt. Av disse grunnene ønsker vi sensorene langt fra skjermen og Arduino. Også av disse grunnene bør dette magnetometeret holdes borte fra svært sterke magnetfelt.

Plasser sensorene vinkelrett på hverandre, men så nær hverandre som mulig. Bøy sensorene forsiktig for å få dem vinkelrett. Hver pinne på hver sensor må være i en egen rad på brødbrettet, slik at den kan kobles til separat.

Bilde
Bilde

Kablingene er litt forskjellige mellom MKR1010 og Uno av to grunner. Først kommuniserer Arduino og skjerm via SPI. Ulike Arduino -modeller har forskjellige dedikerte pins for visse SPI -linjer. For det andre kan analoge innganger på Uno ta opp til 5 V mens analoge innganger på MKR1010 bare kan ta opp til 3,3 V. Den anbefalte forsyningsspenningen for Hall -effektsensorene er 5 V. Sensorutgangene er koblet til Arduino analoge innganger, og disse kan være like store som forsyningsspenningene. For Uno, bruk den anbefalte 5 V -forsyningen for sensorene. For MKR1010, bruk 3,3 V slik at den analoge inngangen til Arduino aldri ser en spenning større enn den kan håndtere.

Følg diagrammer og instruksjoner nedenfor for Arduino du bruker.

Kabling med Arduino Uno

Bilde
Bilde

Displayet har 11 pins. Koble dem til Arduino Uno som følger. (NC betyr ikke tilkoblet.)

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

Koble Vin av sensorene til 5V på Arduino. Koble bakken til sensoren til bakken på Arduino. Koble sensorens utgang til analoge innganger A1, A2 og A3 på Arduino.

Bilde
Bilde

Kabling med Arduino MKR1010

Bilde
Bilde

Displayet har 11 pins. Koble dem til Arduino som følger. (NC betyr ikke tilkoblet.)

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

Koble Vin av sensorene til Vcc på Arduino. Denne pinnen er på 3,3V, ikke 5V. Koble bakken til sensoren til bakken på Arduino. Koble sensorens utgang til analoge innganger A1, A2 og A3 på Arduino.

Bilde
Bilde

Trinn 3: Test skjermen

La oss få TFT -skjermen til å fungere. Heldigvis har Adafruit noen brukervennlige biblioteker og en utmerket opplæring for å følge dem. Disse instruksjonene følger nøye opplæringen, Åpne Arduino utviklingsmiljø. Gå til Verktøy → Administrer biblioteker. Installer bibliotekene Adafruit_GFX, Adafruit_ZeroDMA og Adafruit_ST7735. Start Android -utviklingsmiljøet på nytt.

Det grafiskeste eksemplet er inkludert i bibliotekene. Åpne den. Fil → Eksempler → Adafruit ST7735 og ST7789 bibliotek → grafisk test. For å velge 1,44 visningskommentarlinje 95 og kommentarlinje 98.

Original versjon:

94 // Bruk denne initialisereren hvis du bruker en 1,8 TFT -skjerm:

95 tft.initR (INITR_BLACKTAB); // Init ST7735S -brikke, svart fane 96 97 // ELLER bruk denne initialisereren (uncomment) hvis du bruker en 1,44 TFT: 98 //tft.initR(INITR_144GREENTAB); // Init ST7735R -brikke, grønn fane

Riktig versjon for 1,44 skjerm:

94 // Bruk denne initialisereren hvis du bruker en 1,8 TFT -skjerm:

95 //tft.initR(INIT_BLACKTAB); // Init ST7735S -brikke, svart fane 96 97 // ELLER bruk denne initialisereren (uncomment) hvis du bruker en 1,44 TFT: 98 tft.initR (INITR_144GREENTAB); // Init SST35R -brikke, grønn fane

Displayet kommuniserer ved hjelp av SPI, og forskjellige modeller Arduinos bruker forskjellige dedikerte pins for noen kommunikasjonslinjer. Det grafiske testet er konfigurert for å fungere med Uno -pinnene. Hvis du bruker MKR1010, legger du til følgende linjer mellom linjene 80 og 81.

Rettelser for 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; 81 float p = 3.1415926;

Lagre det modifiserte grafiske eksempelet. Koble Arduino til datamaskinen hvis du ikke har gjort det ennå. Gå til Verktøy → Brett og verktøy → Port for å kontrollere at datamaskinen kan finne Arduino. Gå til Skisse → Last opp. Hvis eksemplet fungerer, viser displayet linjer, rektangler, tekst og hele demoen. Adafruit -opplæringen gir flere detaljer hvis feilsøking er nødvendig.

Trinn 4: Magnetometer -koden

Last ned den vedlagte koden, og åpne den i Arduino utviklingsmiljø.

Dette programmet bruker seks funksjoner:

Setup () initialiserer displayet

Loop () inneholder programmets hovedløkke. Den svarte skjermen, tegner aksene, leser inngangene og tegner pilen som representerer magnetfeltvektoren. Den har en oppdateringshastighet på ett sekund som kan endres ved å endre linje 127

DrawAxes3d () tegner og merker x-, y- og z -aksene

DrawArrow3d () tar inn en x, y og z -inngang som strekker seg fra 0 til 1023. Fra disse verdiene beregner den endepunktene til pilen i rommet. Deretter bruker den isometricxx () og isometricyy () -funksjonene til å beregne sluttpunktene på skjermen. Til slutt tegner den pilen og skriver ut spenningene nederst på skjermen

Isometricxx () finner x -koordinaten til den isometriske projeksjonen. Den tar inn x, y og z koordinater for et punkt og returnerer den tilsvarende x pikselplasseringen på skjermen

Isometricyy () finner y -koordinaten til den isometriske projeksjonen. Den tar inn x, y og z koordinater for et punkt og returnerer den tilsvarende y pikselplasseringen på skjermen

Før vi kjører koden, må vi spesifisere hvilke pins som skal brukes til SPI -kommunikasjon med displayet, og vi må spesifisere kildespenningen for sensorene. Hvis du bruker MKR1010, kommenterer du linje 92-96 samt linje 110. Deretter kommenterer du linje 85-89 samt linje 108. Hvis du bruker Uno, kommenter du ut linjer 85-89 samt linje 108. Deretter fjerner du kommentarene til linje 92-96 og linje 110.

Last opp koden, Skisse → Last opp.

Du bør se x-, y- og z -aksene i rødt. En grønn pil med en blå sirkel for spissen representerer magnetfeltvektoren ved sensorene. Spenningsavlesninger vises nederst til venstre. Når du bringer en magnet nærmere sensorene, bør spenningsavlesningene endres, og størrelsen på pilen skal vokse.

Bilde
Bilde

Trinn 5: Fremtidig arbeid

Fremtidig arbeid
Fremtidig arbeid

Det neste trinnet vil være å kalibrere enheten. Sensordatabladet gir informasjon om hvordan du konverterer rå sensorspenningsverdier til magnetfeltstyrke. Kalibrering kan bekreftes ved å sammenligne med et mer nøyaktig magnetometer.

Permanente magneter samhandler med strømførende ledninger. Ledninger nær skjermen og i Arduino genererer magnetfelt som kan påvirke sensoravlesninger. I tillegg, hvis denne enheten brukes til å måle nær en sterk permanent magnet, vil magnetfeltet fra enheten som testes samhandle med, introdusere støy i og muligens skade Arduino og skjermen. Skjerming kan gjøre dette magnetometeret mer robust. Arduinoen tåler større magnetfelt hvis den er skjermet i en metallboks, og mindre støy vil bli introdusert hvis skjermede kabler kobler sensorene i stedet for bare ledninger.

Magnetfelt er en funksjon av posisjon, så det er annerledes på hvert punkt i rommet. Denne enheten bruker tre sensorer, en for å måle x-, y- og z -komponenten i magnetfeltet på et punkt. Sensorene er i nærheten av hverandre, men ikke på et enkelt punkt, og dette begrenser magnetometeroppløsningen. Det ville være kult å lagre magnetfeltavlesninger på forskjellige punkter og deretter vise dem som en rekke piler på de tilsvarende stedene. Imidlertid er det et prosjekt for en annen dag.

Referanser

Informasjon om Adafruit Arduino Graphics -biblioteker

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

Magnetfeltvisualisering

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

Informasjon om Hall effekt og Hall effekt sensorer

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

Informasjon om isometrisk projeksjon

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

Anbefalt: