Indholdsfortegnelse:

Arduino magnetometer: 5 trin (med billeder)
Arduino magnetometer: 5 trin (med billeder)

Video: Arduino magnetometer: 5 trin (med billeder)

Video: Arduino magnetometer: 5 trin (med billeder)
Video: Amazing arduino project 2024, November
Anonim
Arduino magnetometer
Arduino magnetometer

Hvad bygger vi?

Mennesker kan ikke opdage magnetfelter, men vi bruger enheder, der hele tiden er afhængige af magneter. Motorer, kompasser, rotationssensorer og vindmøller kræver for eksempel alle magneter til drift. Denne vejledning beskriver, hvordan man bygger et Arduino -baseret magnetometer, der registrerer magnetfelt ved hjælp af tre Hall -effekt sensorer. Magnetfeltvektoren på et sted vises på en lille skærm ved hjælp af isometrisk projektion.

Hvad er en Arduino?

En Arduino er en lille open-source brugervenlig mikrokontroller. Det har digitale input og output pins. Det har også analoge indgangsstifter, som er nyttige til læsning af input fra sensorer. Der findes forskellige Arduino -modeller. Denne vejledning beskriver, hvordan du bruger enten Arduino Uno eller Arduino MKR1010. Men andre modeller kan også bruges.

Inden du begynder denne vejledning, skal du downloade Arduino -udviklingsmiljøet samt eventuelle biblioteker, der er nødvendige for din særlige model. Udviklingsmiljøet er tilgængeligt på https://www.arduino.cc/en/main/software, og installationsvejledning er tilgængelig på

Hvad er et magnetfelt?

Permanente magneter udøver kræfter på andre permanente magneter. Strømførende tråde udøver kræfter på andre strømførende tråde. Permanente magneter og strømførende tråde udøver også kræfter på hinanden. Denne kraft pr. Enhed teststrøm er et magnetisk felt.

Hvis vi måler volumenet på et objekt, får vi et enkelt skalaltal. Magnetisme er imidlertid beskrevet af et vektorfelt, en mere kompliceret mængde. For det første varierer det med position i hele rummet. For eksempel vil magnetfeltet en centimeter fra en permanent magnet sandsynligvis være større end magnetfeltet ti centimeter væk.

Magnetfeltet ved hvert punkt i rummet er derefter repræsenteret af en vektor. Størrelsen af vektoren repræsenterer magnetfeltets styrke. Retningen er vinkelret på både kraftens retning og teststrømmens retning.

Vi kan forestille os magnetfeltet på et enkelt sted som en pil. Vi kan forestille os magnetfeltet i hele rummet ved hjælp af en række pil på forskellige steder, muligvis af forskellige størrelser og peger i forskellige retninger. En flot visualisering er tilgængelig på https://www.falstad.com/vector3dm/. Magnetometeret, vi bygger, viser magnetfeltet på sensorernes placering som en pil på displayet.

Hvad er en Hall -effektføler, og hvordan fungerer den?

En Hall -effektsensor er en lille, billig enhed, der måler magnetfeltets styrke i en bestemt retning. Det er lavet af et stykke halvleder, der er dopet med overskydende ladninger. Udgangen fra nogle Hall -effekt sensorer er en analog spænding. Andre Hall -effekt sensorer har en integreret komparator og producerer en digital udgang. Andre Hall -effekt sensorer er integreret i større instrumenter, der måler strømningshastighed, rotationshastighed eller andre mængder.

Fysikken bag Hall -effekten er opsummeret af Lorentz -kraftligningen. Denne ligning beskriver kraften på en ladning i bevægelse på grund af et eksternt elektrisk og magnetisk felt.

Billede
Billede

Figuren herunder illustrerer Hall -effekten. Antag, at vi vil måle magnetfeltets styrke i retning af den blå pil. Som vist i figurens venstre del anvender vi en strøm gennem et stykke halvleder vinkelret på retningen af det felt, der skal måles. Strøm er ladningsstrøm, så en ladning i halvlederen bevæger sig med en vis hastighed. Denne ladning vil føle en kraft på grund af det ydre felt, som vist i midten af figuren. Afgifter vil bevæge sig på grund af kraften og akkumulere på kanterne af halvlederen. Ladninger opbygges, indtil kraften på grund af de akkumulerede ladninger balancerer kraften på grund af det eksterne magnetfelt. Vi kan måle spændingen over halvlederen, som vist i højre del af figuren. Den målte spænding er proportional med magnetfeltets styrke, og den er i retningen vinkelret på strømmen og magnetfeltets retning.

Billede
Billede

Hvad er isometrisk projektion?

På hvert punkt i rummet beskrives magnetfeltet af en tredimensionel vektor. Vores skærm er imidlertid todimensionel. Vi kan projicere den tredimensionelle vektor i et todimensionalt plan, så vi kan tegne det på skærmen. Der er flere måder at opnå dette på, f.eks. Isometrisk projektion, ortografisk projektion eller skrå projektion.

I isometrisk projektion er x-, y- og z -akserne 120 grader fra hinanden, og de ser lige forkortede ud. Yderligere oplysninger om isometrisk projektion samt de nødvendige formler findes på Wikipedia's side om emnet.

Trin 1: Saml forbrugsvarer

Arduino og kabel

Arduino er magnetometerets hjerner. Disse instruktioner beskriver, hvordan du bruger enten en Arduino Uno eller en Arduino MKR1010. I begge tilfælde er et kabel nødvendigt for at slutte det til computeren.

Mulighed 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

Mulighed 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 -skærm

TFT står for Thin Film Transistor. Denne 1,44 -skærm indeholder 128 x 128 pixels. Den er lille, lys og farverig. Den er fastgjort til et breakout -bord. Hovedstifterne er imidlertid adskilte, så du skal lodde dem på. (Lodde og et loddejern er havde brug for.)

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

    Billede
    Billede
  • Analoge hall -effekt sensorer

Tre Hall -effekt sensorer er påkrævet. Nedenstående link er til Allegro-varenummer A1324LUA-T. For denne sensor er pin 1 forsyningsspændingen, pin 2 er jordet, og pin 3 er output. Andre Hall -sensorer burde også fungere, men sørg for at de er analoge, ikke digitale. Hvis du bruger en anden sensor, skal du kontrollere pinout og justere ledningerne, hvis det er nødvendigt. (Jeg brugte faktisk en anden sensor fra det samme firma til testformål. Den, jeg brugte, er imidlertid forældet, og denne sensor er dens erstatning.)

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

Lille brødbræt og tråd

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

Permanente magneter til test

Køleskabsmagneter fungerer fint.

Trin 2: Ledningsføring

Ledninger
Ledninger

Lodde overskrifterne på displayet.

Billede
Billede

Placer sensorerne i den ene ende af brødbrættet, og placer displayet og Arduino i den modsatte ende. Strøm i ledningerne i Arduino og display genererer magnetfelter, som vi ikke ønsker, at sensorerne skal læse. Derudover vil vi måske placere sensorerne nær permanente magneter, hvilket kan påvirke strømmen i displayets og sensorens ledninger negativt. Af disse grunde vil vi have sensorerne langt fra displayet og Arduino. Også af disse grunde bør dette magnetometer holdes væk fra meget stærke magnetfelter.

Placer sensorerne vinkelret på hinanden, men så tæt på hinanden som muligt. Bøj forsigtigt sensorerne for at få dem vinkelret. Hver nål på hver sensor skal være i en separat række af brødbrættet, så den kan tilsluttes separat.

Billede
Billede

Ledningerne er lidt forskellige mellem MKR1010 og Uno af to grunde. Først kommunikerer Arduino og display med SPI. Forskellige Arduino -modeller har forskellige dedikerede stifter til visse SPI -linjer. For det andet kan analoge indgange på Uno acceptere op til 5 V, mens analoge indgange på MKR1010 kun kan acceptere op til 3,3 V. Den anbefalede forsyningsspænding for Hall -effektfølere er 5 V. Sensorudgangene er forbundet til Arduino analoge indgange, og disse kan være lige så store som forsyningsspændingerne. Til Uno skal du bruge den anbefalede 5 V -forsyning til sensorerne. Til MKR1010 skal du bruge 3,3 V, så den analoge indgang på Arduino aldrig ser en større spænding, end den kan klare.

Følg diagrammerne og instruktionerne herunder for den Arduino, du bruger.

Kabelføring med Arduino Uno

Billede
Billede

Displayet har 11 pins. Tilslut dem til Arduino Uno som følger. (NC betyder ikke tilsluttet.)

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

Tilslut Vin af sensorerne til 5V på Arduino. Tilslut jordens sensor til jord af Arduino. Tilslut sensorens output til analoge indgange A1, A2 og A3 i Arduino.

Billede
Billede

Kabelføring med Arduino MKR1010

Billede
Billede

Displayet har 11 pins. Tilslut dem til Arduino som følger. (NC betyder ikke tilsluttet.)

  • 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

Tilslut Vin af sensorerne til Vcc i Arduino. Denne pin er på 3,3V, ikke 5V. Tilslut jordens sensor til jord af Arduino. Tilslut sensorens output til analoge indgange A1, A2 og A3 i Arduino.

Billede
Billede

Trin 3: Test skærmen

Lad os få TFT -skærmen til at fungere. Heldigvis har Adafruit nogle brugervenlige biblioteker og en glimrende vejledning til at følge med dem. Disse instruktioner følger vejledningen nøje, Åbn Arduino -udviklingsmiljøet. Gå til Værktøjer → Administrer biblioteker. Installer bibliotekerne Adafruit_GFX, Adafruit_ZeroDMA og Adafruit_ST7735. Genstart Android -udviklingsmiljøet.

Det grafisksteste eksempel er inkluderet i bibliotekerne. Åben det. Fil → Eksempler → Adafruit ST7735 og ST7789 Library → grafisk test. For at vælge 1,44 visning af kommentarlinje 95 og ikke -kommentarlinje 98.

Original version:

94 // Brug denne initializer, hvis du bruger en 1,8 TFT -skærm:

95 tft.initR (INITR_BLACKTAB); // Init ST7735S -chip, sort fane 96 97 // ELLER brug denne initializer (ikke -kommentar), hvis du bruger en 1,44 TFT: 98 //tft.initR(INITR_144GREENTAB); // Init ST7735R -chip, grøn fane

Korrekt version til 1,44 display:

94 // Brug denne initializer, hvis du bruger en 1,8 TFT -skærm:

95 //tft.initR(INIT_BLACKTAB); // Init ST7735S -chip, sort fane 96 97 // ELLER brug denne initializer (ikke -kommentar), hvis du bruger en 1,44 TFT: 98 tft.initR (INITR_144GREENTAB); // Init SST35R -chip, grøn fane

Displayet kommunikerer ved hjælp af SPI, og forskellige modeller Arduinos bruger forskellige dedikerede pins til nogle kommunikationslinjer. Det grafisksteste eksempel er konfigureret til at fungere med Uno -benene. Hvis du bruger MKR1010, skal du tilføje følgende linjer mellem linje 80 og 81.

Rettelser til 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;

Gem det ændrede grafiske eksempel. Slut Arduino til computeren, hvis du endnu ikke har gjort det. Gå til Værktøjer → Board and Tools → Port for at kontrollere, at computeren kan finde Arduino. Gå til Skitse → Upload. Hvis eksemplet fungerer, viser displayet linjer, rektangler, tekst og den komplette demo. Adafruit -vejledningen giver flere detaljer, hvis der er behov for fejlfinding.

Trin 4: Magnetometer -koden

Download den vedhæftede kode, og åbn den i Arduino -udviklingsmiljøet.

Dette program bruger seks funktioner:

Setup () initialiserer displayet

Loop () indeholder programmets hovedsløjfe. Det sorte skærmen, tegner akserne, læser input og tegner pilen, der repræsenterer magnetfeltvektoren. Den har en opdateringshastighed på et sekund, som kan ændres ved at ændre linje 127

DrawAxes3d () tegner og mærker akserne x, y og z

DrawArrow3d () indtager et x, y og z input fra 0 til 1023. Fra disse værdier beregner det slutpunkterne for pilen i rummet. Dernæst bruger den isometricxx () og isometricyy () -funktionerne til at beregne slutpunkterne på skærmen. Endelig tegner den pilen og udskriver spændingerne i bunden af skærmen

Isometricxx () finder x -koordinaten for den isometriske projektion. Det optager x, y og z koordinater for et punkt og returnerer den tilsvarende x pixel placering på skærmen

Isometricyy () finder y -koordinaten for den isometriske projektion. Det optager x, y og z -koordinater for et punkt og returnerer den tilsvarende y -pixelplacering på skærmen

Inden koden køres, skal vi angive, hvilke ben der skal bruges til SPI -kommunikation med displayet, og vi skal angive kildespændingen til sensorerne. Hvis du bruger MKR1010, skal du kommentere linje 92-96 samt linje 110. Derefter skal du kommentere linjer 85-89 samt linje 108. Hvis du bruger Uno, kommenterer du linjer 85-89 samt linje 108. Derefter fjerner du kommentarerne til linje 92-96 samt linje 110.

Upload koden, Skitse → Upload.

Du skal se x-, y- og z -akserne i rødt. En grøn pil med en blå cirkel til spidsen repræsenterer magnetfeltvektoren ved sensorerne. Spændingsmålinger vises nederst til venstre. Når du bringer en magnet tættere på sensorerne, bør spændingsaflæsningerne ændre sig, og pilens størrelse skal vokse.

Billede
Billede

Trin 5: Fremtidigt arbejde

Fremtidigt arbejde
Fremtidigt arbejde

Det næste trin ville være at kalibrere enheden. Sensordatabladet indeholder oplysninger om, hvordan man konverterer rå sensorspændingsværdier til magnetfeltstyrke. Kalibrering kan verificeres ved at sammenligne med et mere præcist magnetometer.

Permanente magneter interagerer med strømførende ledninger. Ledninger nær skærmen og i Arduino genererer magnetfelter, som kan påvirke sensoraflæsninger. Hvis denne enhed derudover bruges til at måle nær en stærk permanent magnet, vil magnetfeltet fra den testede enhed interagere med, indføre støj i og muligvis beskadige Arduino og display. Afskærmning kan gøre dette magnetometer mere robust. Arduino kan modstå større magnetfelter, hvis den er afskærmet i en metalboks, og der vil blive indført mindre støj, hvis afskærmede kabler forbinder sensorerne i stedet for bare ledninger.

Magnetfelt er en funktion af position, så det er forskelligt på ethvert punkt i rummet. Denne enhed bruger tre sensorer, en til at måle x, y og z -komponenten i magnetfeltet på et punkt. Sensorerne er tæt på hinanden, men ikke på et enkelt punkt, og dette begrænser magnetometeropløsningen. Det ville være fedt at gemme aflæsning af magnetfelt på forskellige punkter og derefter vise dem som en række pile på de tilsvarende steder. Det er dog et projekt for en anden dag.

Referencer

Information 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/

Information 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

Information om isometrisk projektion

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

Anbefalede: