Innehållsförteckning:

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

Video: Arduino magnetometer: 5 steg (med bilder)

Video: Arduino magnetometer: 5 steg (med bilder)
Video: Как смартфон определяет движение вверх и вниз (акселерометр) 2024, November
Anonim
Arduino magnetometer
Arduino magnetometer

Vad bygger vi?

Människor kan inte upptäcka magnetfält, men vi använder enheter som är beroende av magneter hela tiden. Motorer, kompasser, rotationssensorer och vindkraftverk kräver till exempel alla magneter för drift. Denna handledning beskriver hur man bygger en Arduino -baserad magnetometer som känner av magnetfält med hjälp av tre Hall -effektsensorer. Magnetfältvektorn på en plats visas på en liten skärm med isometrisk projektion.

Vad är en Arduino?

En Arduino är en liten öppen källkod användarvänlig mikrokontroller. Den har digitala in- och utgångsstiften. Den har också analoga ingångsstiften, som är användbara för att läsa ingång från sensorer. Olika Arduino -modeller finns tillgängliga. Denna handledning beskriver hur du använder antingen Arduino Uno eller Arduino MKR1010. Men andra modeller kan också användas.

Innan du börjar den här självstudien, ladda ner Arduino -utvecklingsmiljön samt alla bibliotek som behövs för just din modell. Utvecklingsmiljön finns på https://www.arduino.cc/en/main/software och installationsanvisningar finns på

Vad är ett magnetfält?

Permanenta magneter utövar krafter på andra permanentmagneter. Strömbärande trådar utövar krafter på andra strömbärande trådar. Permanenta magneter och strömförande trådar utövar också krafter på varandra. Denna kraft per enhet testström är ett magnetfält.

Om vi mäter volymen på ett objekt får vi ett enda skalärt tal. Magnetismen beskrivs dock av ett vektorfält, en mer komplicerad mängd. För det första varierar det med position i hela rummet. Till exempel är magnetfältet en centimeter från en permanentmagnet troligen större än magnetfältet tio centimeter bort.

Därefter representeras magnetfältet vid varje punkt i rymden av en vektor. Vektorns storlek representerar magnetfältets styrka. Riktningen är vinkelrät mot både kraftens riktning och testströmens riktning.

Vi kan föreställa magnetfältet på en enda plats som en pil. Vi kan föreställa magnetfältet i hela rymden genom en rad pil på olika platser, möjligen av olika storlekar och pekande i olika riktningar. En fin visualisering finns på https://www.falstad.com/vector3dm/. Magnetometern vi bygger visar magnetfältet på plats för sensorerna som en pil på displayen.

Vad är en Hall -effektsensor och hur fungerar den?

En Hall -effektsensor är en liten, billig enhet som mäter styrkan hos magnetfältet längs en viss riktning. Den är gjord av en bit halvledare dopad med överskott. Utsignalen från vissa Hall -effektsensorer är en analog spänning. Andra Hall -effektsensorer har en integrerad komparator och producerar en digital utgång. Andra Hall -effektsensorer är integrerade i större instrument som mäter flödeshastighet, rotationshastighet eller andra mängder.

Fysiken bakom Hall -effekten sammanfattas av Lorentz -kraftekvationen. Denna ekvation beskriver kraften på en rörlig laddning på grund av ett externt elektriskt och magnetiskt fält.

Bild
Bild

Figuren nedan illustrerar Hall -effekten. Antag att vi vill mäta styrkan hos magnetfältet i riktning mot den blå pilen. Som visas i den vänstra delen av figuren applicerar vi en ström genom en bit halvledare vinkelrätt mot fältets riktning som ska mätas. Ström är flödet av laddningar, så en laddning i halvledaren rör sig med viss hastighet. Denna laddning kommer att känna en kraft på grund av det yttre fältet, som visas i mitten av figuren. Avgifter kommer att röra sig på grund av kraften och ackumuleras på kanterna på halvledaren. Avgifter byggs upp tills kraften på grund av de ackumulerade laddningarna balanserar kraften på grund av det yttre magnetfältet. Vi kan mäta spänningen över halvledaren, som visas i figurens högra del. Den uppmätta spänningen är proportionell mot magnetfältets styrka, och den är i riktningen vinkelrätt mot strömmen och magnetfältets riktning.

Bild
Bild

Vad är isometrisk projektion?

Vid varje punkt i rymden beskrivs magnetfältet av en tredimensionell vektor. Vår skärm är dock tvådimensionell. Vi kan projicera den tredimensionella vektorn till ett tvådimensionellt plan så att vi kan rita den på skärmen. Det finns flera sätt att åstadkomma detta såsom isometrisk projektion, ortografisk projektion eller sned projektion.

I isometrisk projektion är x-, y- och z -axlarna 120 grader från varandra och de verkar lika förkortade. Ytterligare information om isometrisk projektion, liksom de formler som behövs, finns på Wikipedias sida om ämnet.

Steg 1: Samla förbrukningsmaterial

Arduino och kabel

Arduino är magnetometerns hjärnor. Dessa instruktioner beskriver hur du använder antingen en Arduino Uno eller en Arduino MKR1010. I båda fallen behövs en kabel för att ansluta den till datorn.

Alternativ 1: Arduino Uno och 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 och 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 för Thin Film Transistor. Denna 1,44 -skärm innehåller 128 x 128 pixlar. Den är liten, ljus och färgstark. Den fästs på en utbrottskort. Huvudstiften kommer dock separata, så du måste lödda dem. (Löd och ett lödkolv är behövs.)

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

    Bild
    Bild
  • Analoga halleffektsensorer

Tre Hall -effektsensorer krävs. Länken nedan är för Allegro artikelnummer A1324LUA-T. För denna sensor är stift 1 matningsspänningen, stift 2 är jordat och stift 3 är utgången. Andra Hall -sensorer borde också fungera, men se till att de är analoga, inte digitala. Om du använder en annan sensor, kontrollera stiften och justera kablarna om det behövs. (Jag använde faktiskt en annan sensor från samma företag för teständamål. Den jag använde är dock föråldrad och den här sensorn ersätter den.)

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

Litet brödbräda och tråd

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

Permanenta magneter för testning

Kylskåpsmagneter fungerar bra.

Steg 2: Kabeldragning

Kabeldragning
Kabeldragning

Löd rubrikerna på displayen.

Bild
Bild

Placera sensorerna i ena änden av brödbrädan och placera displayen och Arduino i motsatt ände. Ström i ledningarna i Arduino och display genererar magnetfält, som vi inte vill att sensorerna ska läsa. Dessutom kanske vi vill placera sensorerna nära permanenta magneter, vilket kan påverka strömmen i skärmarna och sensorn. Av dessa skäl vill vi ha sensorerna långt från displayen och Arduino. Även av dessa skäl bör denna magnetometer hållas borta från mycket starka magnetfält.

Placera sensorerna vinkelrätt mot varandra men så nära varandra som möjligt. Böj försiktigt sensorerna för att få dem vinkelräta. Varje stift på varje sensor måste vara i en separat rad på brödbrädan så att den kan anslutas separat.

Bild
Bild

Kablarna är något annorlunda mellan MKR1010 och Uno av två skäl. Först kommunicerar Arduino och display med SPI. Olika Arduino -modeller har olika dedikerade stift för vissa SPI -linjer. För det andra kan analoga ingångar på Uno acceptera upp till 5 V medan analoga ingångar på MKR1010 endast kan ta upp till 3,3 V. Den rekommenderade matningsspänningen för Hall -effektsensorerna är 5 V. Sensorutgångarna är anslutna till Arduino analoga ingångar, och dessa kan vara lika stora som matningsspänningarna. För Uno, använd den rekommenderade 5 V -matningen för sensorerna. För MKR1010, använd 3,3 V så att den analoga ingången på Arduino aldrig ser en spänning större än den klarar.

Följ diagrammen och instruktionerna nedan för den Arduino du använder.

Kabeldragning med Arduino Uno

Bild
Bild

Displayen har 11 stift. Anslut dem till Arduino Uno enligt följande. (NC betyder inte ansluten.)

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

Anslut sensorerna Vin till 5V på Arduino. Anslut sensorns jord till Arduino -marken. Anslut sensorns utgång till analoga ingångar A1, A2 och A3 på Arduino.

Bild
Bild

Kabeldragning med Arduino MKR1010

Bild
Bild

Displayen har 11 stift. Anslut dem till Arduino enligt följande. (NC betyder inte ansluten.)

  • 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

Anslut sensorerna Vin till Vcc på Arduino. Denna stift är på 3,3V, inte 5V. Anslut jordning av sensorn till jord på Arduino. Anslut sensorns utgång till analoga ingångar A1, A2 och A3 på Arduino.

Bild
Bild

Steg 3: Testa skärmen

Låt oss få TFT -skärmen att fungera. Lyckligtvis har Adafruit några användarvänliga bibliotek och en utmärkt handledning att följa med dem. Dessa instruktioner följer noga handledningen, Öppna Arduino -utvecklingsmiljön. Gå till Verktyg → Hantera bibliotek. Installera Adafruit_GFX, Adafruit_ZeroDMA och Adafruit_ST7735 bibliotek. Starta om utvecklingsmiljön för Android.

Det grafiska exemplet ingår i biblioteken. Öppna den. Arkiv → Exempel → Adafruit ST7735 och ST7789 bibliotek → grafiskt test. För att välja 1,44 visa kommentar ut rad 95 och okommentera rad 98.

Original version:

94 // Använd denna initialiserare om du använder en 1,8 TFT -skärm:

95 tft.initR (INITR_BLACKTAB); // Init ST7735S -chip, svart flik 96 97 // ELLER använd denna initialiserare (okommentera) om du använder ett 1,44 TFT: 98 //tft.initR(INITR_144GREENTAB); // Init ST7735R -chip, grön flik

Rätt version för 1,44 display:

94 // Använd denna initialiserare om du använder en 1,8 TFT -skärm:

95 //tft.initR(INIT_BLACKTAB); // Init ST7735S -chip, svart flik 96 97 // ELLER använd denna initialiserare (okommentera) om du använder ett 1,44 TFT: 98 tft.initR (INITR_144GREENTAB); // Init SST35R -chip, grön flik

Displayen kommunicerar med SPI, och olika modeller Arduinos använder olika dedikerade stift för vissa kommunikationslinjer. Det grafiska exemplet är konfigurerat för att fungera med Uno -stiften. Om du använder MKR1010, lägg till följande rader mellan raderna 80 och 81.

Korrigeringar för 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;

Spara det modifierade grafiska exemplet. Anslut Arduino till datorn om du inte har gjort det ännu. Gå till Verktyg → Kort och verktyg → Port för att kontrollera att datorn kan hitta Arduino. Gå till Sketch → Ladda upp. Om exemplet fungerar visar displayen linjer, rektanglar, text och den fullständiga demoen. Adafruit -handledningen ger mer information om felsökning behövs.

Steg 4: Magnetometerkoden

Ladda ner den bifogade koden och öppna den i Arduino -utvecklingsmiljön.

Detta program använder sex funktioner:

Setup () initierar displayen

Loop () innehåller programmets huvudslinga. Den svär ut skärmen, ritar axlarna, läser inmatningarna och ritar pilen som representerar magnetfältvektorn. Den har en uppdateringshastighet på en sekund som kan ändras genom att ändra rad 127

DrawAxes3d () ritar och märker axlarna x, y och z

DrawArrow3d () tar in en x-, y- och z -ingång som sträcker sig från 0 till 1023. Från dessa värden beräknar den slutpunkterna för pilen i rymden. Därefter använder den funktionerna isometricxx () och isometricyy () för att beräkna slutpunkterna på skärmen. Slutligen ritar den pilen och skriver ut spänningarna längst ner på skärmen

Isometricxx () hittar x -koordinaten för den isometriska projektionen. Den tar in x-, y- och z -koordinaterna för en punkt och returnerar motsvarande x -pixelplats på skärmen

Isometricyy () hittar y -koordinaten för den isometriska projektionen. Den tar in x, y och z -koordinaterna för en punkt och returnerar motsvarande y -pixelplats på skärmen

Innan vi kör koden måste vi ange vilka stift som ska användas för SPI -kommunikation med displayen, och vi måste ange källspänningen för sensorerna. Om du använder MKR1010, kommentera raderna 92-96 samt rad 110. Sedan kommentera raderna 85-89 samt rad 108. Om du använder Uno, kommentera raderna 85-89 samt rad 108. Sedan, kommentera raderna 92-96 samt linje 110.

Ladda upp koden, Skissa → Ladda upp.

Du bör se x-, y- och z -axlarna i rött. En grön pil med en blå cirkel för spetsen representerar magnetfältvektorn vid sensorerna. Spänningsmätningar visas längst ned till vänster. När du tar en magnet närmare sensorerna bör spänningsmätningarna förändras och pilens storlek ska växa.

Bild
Bild

Steg 5: Framtidsarbete

Framtida arbete
Framtida arbete

Nästa steg skulle vara att kalibrera enheten. Sensordatabladet ger information om hur man konverterar råa sensorspänningsvärden till magnetfältstyrka. Kalibrering kan verifieras genom att jämföra med en mer exakt magnetometer.

Permanenta magneter interagerar med strömtrådar. Ledningar nära displayen och i Arduino genererar magnetfält som kan påverka sensoravläsningar. Dessutom, om den här enheten används för att mäta nära en stark permanent magnet, kommer magnetfältet från enheten som testas att interagera med, introducera brus i och eventuellt skada Arduino och display. Skärmning kan göra denna magnetometer mer robust. Arduino tål större magnetfält om den är skärmad i en metalllåda, och mindre buller kommer att introduceras om skärmade kablar ansluter sensorerna istället för bara ledningar.

Magnetfält är en funktion av position, så det är olika vid varje punkt i rymden. Denna enhet använder tre sensorer, en för att mäta x-, y- och z -komponenten i magnetfältet vid en punkt. Sensorerna är nära varandra men inte vid en enda punkt, och detta begränsar magnetometerupplösningen. Det skulle vara häftigt att spara magnetfältavläsningar vid olika punkter och sedan visa dem som en rad pilar på motsvarande platser. Det är dock ett projekt för en annan dag.

Referenser

Information om Adafruit Arduino Graphics -bibliotek

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

Magnetfältvisualisering

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

Information om Hall -effekt- och Hall -effektsensorer

  • 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://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Rekommenderad: