Spotter Scope (5 / 9 steg)
Steg 5: Arduino skiss
WhatItDoes: Min SpotterLevel skiss visar rubriken eller med att tillämpningsområdet är riktad mot. Standard magnetiska kompassen är uppdelad i 360 grader med norr på 0, öst på 90, söder på 180 och väster på 270. Rubriken är riktningen räckvidd är riktad mot i grader.
För kompassen i denna bild är rubriken ca 123 grader.
Visas även är x, y och z-värden av accelerometern i grader med nivå på 0 och rakt upp på 90. Så perfekt som skulle vara 0, 0, 90,0.
Jag använder Adafruit bibliotek för modulen LCD5110.
Varning: När jag uppdaterade till Arduino till 1.6.1, jag var tvungen att uppdatera Adafruit_GFX och Adafruit_PCD8544 bibliotek:
https://learn.adafruit.com/adafruit-gfx-Graphics-Library
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-Library
Som sagt tidigare:
Varning: Min PCB använder en Atmega328 programmerade med Pro MINI 8 MHZ 3.3V bootloader. Om du bygger detta PCB, du måste programmera det med Pro MINI 8 MHZ 3.3V bootload och måste välja det när du använder Arduino-miljö.
Arduino miljön Version 1.6.4:
Välj, Välj rätt Port
Markera, Under styrelser, markera (Arduino Pro eller Pro Mini)
Välj, Under Processor, Välj (Atmega328 (3,3 v, 8 Mhz))
Obs: Äldre versioner har inte processorn urval men har en Pro Mini AtMega328 (3,3 v, 8 MHz) val under styrelser.
PCB är designad för att använda en USB-BUB adapter eller, jag använder, som motsvarar en PL2303.
Min SpotterLevel skiss måste ändras för din kalibrering värdena i det sista steget:
Från programmet kalibrera , koppla in min/max värden i SpotterLevel skiss, ersätta värdena i följande rader:
Compass.m_min = (LSM303::vector) {-433,-600,-546};
Compass.m_max = (LSM303::vector) {570, 488, 579};
Detta bör förbättra avläsningarna som rubrik.
Från AccelCal programmet, koppla in min/max värden i SpotterLevel skiss, ersätta värdena i följande rader:
Accelerometer kalibrering {x, y, z}
CONST long acmin [3] = {-17008,-16432,-17120};
CONST long acmax [3] = {16064, 16480, 18176};
Detta bör förbättra nivå avläsningarna.
LSM303dlhc orientering: Det finns en annan programvara inställning som kan behöva justeras beroende på hur LSM303dlhc modulen är orienterad och vilken riktning du är intresserad. I spotter scope vill jag veta vilken riktning räckvidd som pekar. När du sätter i modulen, vill du se till att den är parallell eller vinkelrät riktning du är intresserad av. I detta fall det X pil som pekar i den riktning som jag är intresserad. Följande rad återspeglar detta:
rubrik = compass.heading((LSM303::vector) {1, 0, 0});
Om du är intresserad i motsatt riktning som X pekar vill du använda:
rubrik = compass.heading((LSM303::vector) {-1, 0, 0});
Om du är intresserad i samma riktning som Y pekar vill du använda:
rubrik = compass.heading((LSM303::vector) {0, 1, 0});
Om du är intresserad i riktning pekar nedåt (Z) vill du använda:
rubrik = compass.heading((LSM303::vector) {0, 0, -1});
Sammanfattningsvis är de tre värdena X, Y och Z. Endast en av dem kan vara noll. Om det är samma riktning som riktning än det är 1. Om det är motsatt riktning än vad det är -1.
TECHNOBABBLE: Jag tror detta med hjälp av linjär algebra och vector math. (Usch!)
Tyvärr finns det några mer kalibrera för att göra. LSM303dlhc IC är kopplad till PCB-gränssnittet. Styrelsen är bultad till den övre plattan. Alla dessa påfrestningar på IC påverkar accelerometern läser så noll inte kommer vara noll. Så jag la en liten faktor i min skiss.
Slutgiltiga kalibreringen:
Öppna SpotterLevel skissen för redigering. Kontrollera att värdena i denna linje är alla 0,0:
dubbel ac_off [3] = {0,0, 0,0, 0,0}; Använd dessa för att kalibrera.
Ladda skissen till Arduino.
Bifoga församlingen till ett stativ.
Nivå topplattan församling. Jag har en liten T-vattenpass på den. De flesta stativ har ett par justeringar att justera den för nivå.
Det är svårt att göra. Vad jag gör är att anpassa nivån parallellt med en av justeringarna. Göra justeringar sedan snurra den 180 grader och kolla. Sedan rotera församlingen 90 grader och upprepa för andra justeringen.
Varning: lagret har en hel del spel i den så se till att församlingen vilar jämnt på lagret.
När du har den övre plattan som nivå som du kan få det, slå på Arduino. Nu långsamt rotera plattan runt och få min och max värden för x, y, z. Ta sedan genomsnittligt. Här är vad jag fick, en gång:
X Y Z
Max-0.0 0.4 83,7
Min -1,6-1.0 83,3
Ave-0.8 -0,3 83,5
Z har du att subtrahera 90 från det (-6.5)
Anslut dessa till skissen
dubbel ac_off [3] = {-0.8, 0,3,-6.5};
Du är äntligen klar med kalibrering!