Stap 5: Arduino Sketch
WhatItDoes: Mijn schets van de SpotterLevel toont de kop of rekening houdend met dat het toepassingsgebied is gericht. De standaard magnetisch kompas is verdeeld in 360 graden met Champagne bij 0, 90, 180 Noord en West 270 Oosten. De kop is de richting die het toepassingsgebied is gericht in graden.
Voor het kompas op deze foto is de kop ongeveer 123 graden.
Ook weergegeven zijn de x, y en z-waarden van de versnellingsmeter in graden met niveau 0 en straight up op 90. Zo perfect niveau zou 0, 0, 90.0.
Ik gebruik Adafruit bibliotheken voor de LCD5110 module.
Waarschuwing: Toen ik naar Arduino aan 1.6.1 bijgewerkt, moest ik bijwerken van Adafruit_GFX en Adafruit_PCD8544 bibliotheken:
https://Learn.adafruit.com/adafruit-GFX-graphics-library
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-Library
Zoals al eerder gezegd:
Let op: Mijn PCB gebruikt een Atmega328 geprogrammeerd met Pro-MINI 8 MHZ 3.3V bootloader. Als u deze PCB bouwen, u moet het programma met de Pro-MINI 8 MHZ, 3,3 v bootload en moet niet selecteren wanneer gebruik van de Arduino omgeving.
Arduino Environment versie 1.6.4:
Selecteren, selecteer juiste poort
SELECT, onder planken, selecteer (Arduino Pro of Pro Mini)
Selecteer, onder Processor, (Atmega328 (3,3 v, 8 Mhz))
Opmerking: Oudere versies niet hebben Processor selectie maar hebben een Pro Mini AtMega328 (3,3 v, 8 MHz) selectie onder Boards.
De PCB is ontworpen voor gebruik van een adapter van USB-BUB, of ik gebruik, het equivalent van een PL2303.
Mijn schets van de SpotterLevel moet worden gewijzigd voor uw kalibratie-waarden gevonden in de laatste stap:
Vanuit het programma kalibreren aansluit op de min/max-waarden SpotterLevel schets, ter vervanging van de waarden in de volgende regels:
Compass.m_min = (LSM303::vector) {-433,-600,-546};
Compass.m_max = (LSM303::vector) {570, 488, 579};
Dit moet het verbeteren van de rubriek lezingen.
Van het AccelCal -programma, sluit u de min/max-waarden op SpotterLevel schets, ter vervanging van de waarden in de volgende regels:
Kalibratie van de versnellingsmeter {x, y, z}
Const lange acmin [3] = {-17008,-16432,-17120};
Const lange acmax [3] = {16064, 16480, 18176};
Dit moet het verbeteren van het niveau lezingen.
LSM303dlhc richting: Er is een andere instelling van de software die mogelijk moeten worden aangepast afhankelijk van hoe de LSM303dlhc module is gericht en welke richting je geïnteresseerd bent in. In het kader van de spotter zin mij voor weet welke richting het toepassingsgebied wijst. Bij het toevoegen van de module, wilt u ervoor zorgen dat er parallelle of loodrecht op de richting die u geïnteresseerd bent. In dit geval wijst de X pijl in de richting die ik ben geïnteresseerd in. De volgende regel weerspiegelt dit:
rubriek = compass.heading((LSM303::vector) {0, 1, 0});
Als u geïnteresseerd in de tegenovergestelde richting bent als de X wijst u gebruikt:
rubriek = compass.heading((LSM303::vector) {-1, 0, 0});
Als u geïnteresseerd in dezelfde richting bent als de Y wijst u gebruikt:
rubriek = compass.heading((LSM303::vector) {0, 1, 0});
Als u geïnteresseerd bent in de richting naar beneden (Z) die u wilt gebruiken:
rubriek = compass.heading((LSM303::vector) {0, 0, -1});
De drie waarden zijn om samen te vatten, X, Y en Z. Slechts één van hen kunnen niet-nul zijn. Als het dezelfde richting als de richting dan 1 is. Als het de tegenovergestelde richting dan -1.
TECHNOBABBEL: Ik denk dat dit is met behulp van lineaire algebra en vector math. (BAH!)
Helaas, er is wat meer kalibreren om te doen. De LSM303dlhc IC is aangesloten op de interface PCB. De Raad van bestuur is vastgebout aan de bovenste plaat. Al deze spanningen op de IC van invloed op de versnellingsmeter lezen dus nul zal niet gelijk aan nul zijn. Dus voegde ik een kleine correctiefactor in mijn schets.
Laatste kalibratieprocedure:
De schets van de SpotterLevel voor bewerken openen Controleer of de waarden in deze lijn zijn alle 0.0:
dubbele ac_off [3] = {0,0, 0,0 0,0}; Gebruik deze om te kalibreren.
Laden de schets aan de Arduino.
De vergadering hechten aan een statief.
Niveau de bovenplaat van de vergadering. Ik heb een beetje T-waterpas daarop. Meeste statieven hebben een paar aanpassingen worden aangepast voor niveau.
Dit is moeilijk om te doen. Wat ik doe is het niveau parallel met een van de aanpassingen uitlijnen. Maken de aanpassing dan draai het 180 graden en controleren. Vervolgens de vergadering 90 graden draaien en herhaal voor de andere aanpassing.
Let op: de peiling heeft een heleboel spelen daarin dus zorg ervoor dat de vergadering is gelijkmatig rustend op de peiling.
Als u eenmaal de bovenste plaat zo niveau is aangezien u het kunt krijgen, is inschakelen van de Arduino. Nu langzaam de plaat rond te draaien en u de min en max waarden voor x, y, z. Neem dan het gemiddelde. Hier is wat ik kreeg, een tijd:
X Y Z
Max-0.0 0.4 83,7
Min-1.6 -1,0 83,3
Ave -0,8 -0,3 83,5
Voor de Z moet je aftrekken 90 daaruit (-6.5)
Steek deze in de schets
dubbele ac_off [3] = {-0,8, 0.3,-6.5};
Je dan eindelijk klaar bent met het kalibreren!!