Konfigurera, läsa data & kalibrera HMC5883L digital kompass med Python
Som i andra Bloggar innehåller här också information som kan hittas någon annanstans på webben. Jag strukturerade bara den så att den lätt att använda för början robot hobbyister.
Det är ganska enkelt att ansluta kompassen. Vid montering av sensorn till bot, vara medveten om den x-y-z markören på sensorn och försäkra att x-> pekar mot framsidan av bot.
Kompassen använder I2C-protokollet. Anslut givaren till (I2C-) GPIO stiften på Pi som följer:
- Ansluta VCC till stift 1 (3.3.V)
- Ansluta SDA till pin-3 (SDA = System Data)
- Ansluta SCL-pin-5 (SCL = systemklocka)
- Anslut GND till stift 7 (GND)
Först av alla Raspberry Pi behöver konfigureras för med I2C-protokollet. Detta är inaktiverat som standard på hallon. Du hittar en utmärkt tutorial på: https://learn.adafruit.com/adafruits-raspberry-pi...
När du testar den I2C anslutning som förklarade i slutet av den Adafruit lärdomen, 0x1e adressen kommer sannolikt att visas för den HMC5883L sensorn. Om du får en annan adress måste du ändra variabeln adress i skripten.
För att kalibrera kompassen måste bot vändas flera gånger. Detta kan göras för hand. Jag använde en roterande mellanmål display för att göra vrida bot, samtidigt som det övergripande, lätt.
Nästa steg läsa och visa data från sensorn. För detta använde jag ett mycket enkelt skript som kan hittas här:
https://bitbucket.org/RoboBasics/Raspberry-Robo-ca...
Hur du använder sensorn registrerar för binär läsning och skrivande kan hittas i databladet sensor och i skriptet. Jag tänker inte gå in på de detaljerna här. Skriptet initierar sensorn enligt följande:
- 8 prover på 15 Hz,
- LSb få 1,5 (standard),
- Gauss 1090 (standard),
- kontinuerlig provtagning,
- skalning 0.92
Om du inte vill att dyka in i sensor egenskaper, bara lämna värdena som i skriptet. De är ganska allmänna och kommer att räcka för nästan alla situationer.
Nu skriptet läser x, y och z register, beräknar arcus tangens för x och y och omvandlar resultatet till grader. Köra bara skriptet och du får en första lagringen t.ex. 46.53891942 (46° 53' 89.2") börjar rotera bot tills du får nära till 0 grader. Sedan rotera den genom fyra 90° positioner, läsa sensordata vid varje steg. Du kan förmodligen se att värdena avviker inte och helt rätt.
Så låt oss räkna ut vad som händer. För detta kan du använda den nästa enkelt skriften:
https://bitbucket.org/RoboBasics/Raspberry-Robo-ca...
Skriptet samlar 500 läsningar och skriver värdena till en CSV-fil som enkelt kan importeras till Excel och ritas i ett diagram som spridda. Kör skriptet ( sudo python HMC5883L_calibrate_step_2.py ) och börja rotera bot tillbaka och framåt genom 360 ° när skriptet körs. Resultatet bör vara något som på bilden.
Nu är offset (bara en liten en i mitt fall) visualiseras. Att få ett mer specifikt värde för x och y offset, kan du använda tredje skriptet, som kan hittas här:
https://bitbucket.org/RoboBasics/Raspberry-Robo-ca...
Detta skript igen tar 500 läsning, håller lägsta och högsta värdena för x och y och beräknar förskjutningarna. Kör skriptet på samma sätt som tidigare manus, ständigt roterande bot. Du borde få något sånt här:
- Minx:-212
- miny:-246
- Maxx: 262
- Jesper: 239
- x-förskjutning: 25
- y-förskjutning: -4
Dessa avvikelser kan nu enkelt tillämpas på skriptet, som görs i det här exemplet:
https://bitbucket.org/RoboBasics/Raspberry-Robo-ca...
(För att göra en ny plottning, skriptet kan kombineras med steg 2 har de värden som lagrats i en CSV-fil.)
Det sista steget att få en ganska korrekt fungerande kompass, är att lägga deklinationen. Du hittar din specifika deklination via denna sida: http://www.magnetic-declination.com/
Ha i åtanke att deklinationen är i grader, så Lägg till (eller subtrahera) deklination när lagret beräknas i grader. Ett exempel kan hittas här:
https://bitbucket.org/RoboBasics/Raspberry-Robo-ca...
Nu den kalibrera är gjort, kan du köra den senaste skriften och upprepa det första testet genom att rotera bot genom 90° steg och även jämföra lagret med en annan digital kompass (på din mobiltelefon till exempel).
Det är det!