Étape 3: Utilisation de l’accéléromètre et gyroscope
L’accéléromètre permet l’Arduino comprendre la position de notre caméra à un moment donné en référence à la gravité et détecte les accélérations axiales. Le gyro détecte les modifications apportées en angle. Avec ces données, nous avons créé un servo (une boucle de rétroaction qui s’approche d’un point de consigne donné) pour maintenir le cardan à une position fixe. Nous avons utilisé la MPU 6050 6-DOF (degré de liberté) accéléromètre et gyroscope monté sur la carte de dérivation 521 GY.
Nous avons câblé l’accéléromètre à l’Arduino comme on le voit dans l’image ci-dessus. Malheureusement il n’y a aucune feuille de données pour cette carte de dérivation. C’est ce que nous avons trouvé dans les commentaires sur Amazon :
- VCC: + 3.3V de Arduino (joindre le condensateur de 0,1 μF à terre)
- GND : GND
- SCL : A5 sur Arduino Uno (avec 2,2 k tirer résistance à Arduino + 5V)
- SDA : A4 sur Arduino Uno (avec 2,2 k tirer résistance à Arduino + 5V)
- XDA : Non connecté
- XCL : Non connecté
- ADO : GND
- INT : Broche numérique 2 sur Arduino
Nous avons cherché et trouvé quelques croquis Arduino qui vous donnent les données brutes. Cependant, c’est assez bruyant et pas particulièrement utile, en particulier dans les servo-ing. La MPU 6050 a construit en Digital Motion processeur (DMP) ; Toutefois, les instructions d’utilisation il ne sont pas fournies. Une personne brillante au MIT (Merci Jeff Rowberg!) inverse machiné la puce et trouvé comment activer le DMP et obtenir les données propres et stables de celle. Nous avons utilisé son code qui nous a permis de recevoir les données sous plusieurs formes différentes ainsi que des Angles d’Euler, Quaternions ou Pitch Yaw Roll (YPR).
Nous avons décidé d’utiliser les données YPR étant donné qu’elle est directement corrélée à comment nous sommes contrôler notre caméra. Nous avons un moteur de pitch (pensez à regarder de haut en bas) et un moteur de rouleau (pensez à un avion bancaire). Une fois que nous avons eu les données dans ce formulaire le codage a été relativement facile, et nous avons écrit un code de base servo pour tourner le moteur à n’importe quel angle nous avons mis dans le code, en « incrémentant » l’onde sinusoïdale dans le bon sens. Idéalement, nos deux moteurs correspondent exactement à deux de ces coordonnées, afin que nous puissions les deux servomoteurs séparément sans eux interfèrent entre eux. Il s’agissait d’un noyau de concept relativement simple à notre projet.
Les données YPR sont un peu délicates, car il donne seulement des angles entre -90 et 90 degrés pour le servo se confondre parfois si elle est presque horizontal, théoriquement pas un problème dans une application de cardan (bien que toujours un endroit pour améliorer nous pensons).