Étape 5: Arduino Sketch
WhatItDoes : Mon esquisse SpotterLevel affiche la rubrique ou portant que le champ d’application est pointée vers. Le compas magnétique standard est divisé en 360 degrés nord à 0, est à 90, Sud à 180 et ouest à 270. Le titre est la direction que le champ d’application est pointée vers en degrés.
Pour la boussole sur cette photo, le titre est d’environ 123 degrés.
Également affiché sont le x, les valeurs y et z de l’accéléromètre en degrés avec le niveau à 0 et tout droit vers le haut à 90. Si parfaitement niveau serait de 0, 0, 90,0.
J’utilise les bibliothèques Adafruit pour le module LCD5110.
Avertissement : Quand j’ai upgradé 1.6.1 pour Arduino, j’ai dû mettre à jour les bibliothèques Adafruit_GFX et Adafruit_PCD8544 :
https://Learn.Adafruit.com/Adafruit-gfx-Graphics-Library
https://github.com/Adafruit/Adafruit-PCD8544-Nokia-5110-LCD-Library
Comme déjà dit :
Mise en garde : Mon PCB utilise un Atmega328 programmé avec Pro-MINI 8 MHZ 3, 3V bootloader. Si vous construisez ce PCB, vous devez programmer il avec le Pro-MINI 8 MHZ 3, 3V bootload et devez la sélectionner lors de l’utilisation de l’environnement Arduino.
Arduino environnement Version 1.6.4 :
Sélectionner, sélectionnez Port correct
Select, sous les planches, sélectionnez (Arduino Pro ou Pro Mini)
Sélectionnez, sous processeur, (Atmega328 (3, 3V, 8 Mhz))
Remarque : Les anciennes versions n’avons sélection processeur mais avons un AtMega328 Mini Pro (3, 3V, 8 MHz) sélection dans le cadre de conseils.
Le PCB est conçu pour utiliser un adaptateur USB-BUB, ou, je me sers, un équivalent de PL2303.
Mon esquisse de SpotterLevel doit être modifié pour vos valeurs d’étalonnage dans la dernière étape :
Du programme d’étalonner , branchez les valeurs min/max SpotterLevel esquisse, remplaçant les valeurs dans les lignes suivantes :
Compass.m_min = (LSM303::vector) {-433, -600,-546} ;
Compass.m_max = (LSM303::vector) {570, 488, 579} ;
Cela devrait améliorer les relevés de position.
Dans le programme AccelCal , branchez les valeurs min/max SpotterLevel esquisse, remplaçant les valeurs dans les lignes suivantes :
Calibrage de l’accéléromètre {x, y, z}
const long acmin [3] = {-17008,-16432,-17120} ;
const long acmax [3] = {16064, 16480, 18176} ;
Cela devrait améliorer les mesures de niveau.
LSM303dlhc Orientation : Il y a un autre paramètre de logiciel qui peut devoir être ajustée selon comment le module LSM303dlhc est orienté et la direction dans laquelle vous êtes intéressé. Dans le champ d’application de l’observateur, je veux savoir dans quelle direction pointe l’étendue. Lors de la fixation du module, vous voulez vous assurer c’est parallèle ou perpendiculaire à la direction, vous êtes intéressé. Dans ce cas la flèche de X est orientée dans le sens que je suis intéressé. La ligne suivante reprend cette disposition :
position = compass.heading((LSM303::vector) {1, 0, 0}) ;
Si vous êtes intéressé dans la direction opposée, comme le X est orientée, vous utiliseriez :
position = compass.heading((LSM303::vector) {-1, 0, 0}) ;
Si vous êtes intéressé dans la même direction que le Y est orientée, vous utiliseriez :
position = compass.heading((LSM303::vector) {0, 1, 0}) ;
Si vous êtes intéressé par la direction vers le bas (Z), vous utiliseriez :
position = compass.heading((LSM303::vector) {0, 0, -1}) ;
Pour résumer, les trois valeurs sont X, Y et Z. Seul d'entre eux peut être différent de zéro. Si c’est la même direction que celle qu’il est 1. Si c’est le sens inverse qu’il est -1.
TECHNOBABBLE : Je crois que c’est en utilisant algèbre linéaire et calcul vectoriel. (Beurk!)
Malheureusement, il y a quelques calibrage plus pour faire. L’IC LSM303dlhc est attaché à l’interface de PCB. Le jury est boulonné à la plaque supérieure. Toutes ces contraintes sur l’IC affectera l’accéléromètre lecture alors zéro ne sera pas zéro. Alors j’ai ajouté un petit facteur de correction dans mon sketch.
Procédure de calibrage final :
Ouvrez le dessin SpotterLevel pour l’édition. Assurez-vous que les valeurs dans cette ligne sont tous 0,0 :
double ac_off [3] = {0.0, 0.0, 0.0} ; Utilisez-les pour calibrer.
Charger le croquis à l’Arduino.
Fixez l’ensemble sur un trépied.
Niveau de la plaque supérieure de l’Assemblée. J’ai un petit niveau de T-bulle là-dessus. Plupart des trépieds ont quelques ajustements de l’ajuster pour le niveau.
C’est difficile à faire. Ce que je fais est d’aligner le niveau en parallèle avec un des ajustements. Effectuer le réglage puis pivoter 180 degrés et vérifier. Pivoter l’ensemble de 90 degrés, puis répétez pour l’autre rajustement.
Attention : le roulement a un grand nombre de jouer dedans, afin de s’assurer que l’Assemblée se repose uniformément sur le palier.
Une fois que vous avez la plaque supérieure au niveau que vous pouvez l’obtenir, tourner sur l’Arduino. Maintenant lentement tourner la plaque autour et obtenir les valeurs minimale et maximale pour x, y, z. Prenez ensuite la moyenne. Voici ce que j’ai obtenu, une fois :
X Y Z
Max-0.0 83,7 0,4
Min -1,6 -1,0 83,3
Ave -0,8 -0,3 83,5
Pour le Z, il faut soustraire 90 de celle-ci (-6,5)
Branchez ces derniers dans l’esquisse
double ac_off [3] = {-0,8, 0,3, -6,5} ;
Vous avez enfin fini avec étalonnage!!