Étape 2: Conception globale
Le cerveau du système est l’Arduino Uno, qui contient un microcontrôleur AVR cadencé à 16MHz.
1000 fois par seconde, le microcontrôleur lit l’état actuel du gyroscope et accéléromètre ; mises à jour son modèle interne du bot et de ce modèle décide quelle vitesse de lancer les moteurs à meilleur équilibre le bot. (Le code est tout partagé sur mon repo Github .)
Le gyroscope est un gyroscope de taux, ce qui signifie que sa sortie est proportionnelle au taux actuel de rotation. Pour estimer l’inclinaison actuelle, le microcontrôleur a additionner les valeurs entrantes, dont il lit à l’aide d’un convertisseur numérique analogique. Malheureusement, aucun gyroscope ou ADC n’est parfait, ce qui entraîne des erreurs dans la sommation qui ont tendance à croître au fil du temps. Si le bot utilisé seulement un gyroscope pour essayer d’équilibrer son idée de « up » pourrait dériver lentement au fil du temps et il finirait par tomber.
Pour contrer la tendance du gyroscope à la dérive, le bot utilise un accéléromètre 2D pour mesurer la direction de la gravité. En additionnant les valeurs de gyroscope, il ajoute dans une infime partie de l’estimation de l’accéléromètre dans le calcul. Juste assez afin de compenser la dérive. Il est impossible d’ajouter trop parce que l’accéléromètre est un capteur très bruyant - il capte les vibrations provenant des roues et l’accélération des moteurs.
Le gyroscope et l’accéléromètre sont montés sur l’axe de rotation des roues pour obtenir le meilleur signal.
Une fois que le microcontrôleur a décidé quelle vitesse, de lancer les moteurs, il utilise la modulation de largeur d’impulsion pour faire varier leur vitesse et les accule au travers du bouclier de Ardumoto. Le bouclier est nécessaire car les moteurs attirer beaucoup plus de courant que le microcontrôleur peut fournir à elle seule.
Le module BlueSMIRF fournit serial-over-Bluetooth, permettant le bot de communiquer dans les deux sens avec un autre périphérique compatible Bluetooth. J’utilise mon téléphone Android pour relayer les données sérielles à la console sur le pont de débogage Android. J’ai également l’intention d’envoyer des signaux de l’autre façon d’utiliser mon téléphone comme télécommande.