Partagez

Suivez moi

Twitter

Google+

LinkedIn

TinyRover - Rover à évitement d'obstacle basé sur un ATtiny85

Après avoir joué avec le Raspberry Pi, , je me suis dit que j'allais essayer le monde d'Arduino. Plus précisément, j'ai été séduit par la compacité du micro-contrôleur ATtiny85, compatible avec l'environnement de développement Arduino.

 

Si vous voulez en savoir plus…

Afin d'en savoir plus sur le micro-contrôleur ATtiny85 et comment y transférer les sketches, vous pouvez jeter un œil à ATtiny85 vs ATmega328.

Les éléments nécessaires

Pour la partie mobile du rover, je ne me suis par vraiment embêté, et ai directement réutilisé le chassis de MovingRaspi. Du coup, la partie électronique fait vraiment petite par rapport à l'ensemble (un rover compact qu'il disait précédemment). Pour le reste, que du classique :

  • Un ATiny85 pour la partie logique.
  • Un L293D pour la commande des moteurs.
  • Un détecteur de proximité infrarouge Sharp GP2Y0A21YK0F.
  • Un L78S05CV pour baisser la tension venant des batteries à +5V (tension pour l'ATtiny85, qui supporte de +1,8V à +5,5V, le L293D, le GP2Y0A21YK0F et les moteurs).

Concernant le pilotage des moteurs, il est nécessaire d'utiliser 3 broches du L293D par moteur : une broche pour activer le moteur, une broche pour le faire tourner dans un sens, une broche pour le faire tourner dans l'autre sens. Ce qui fait donc un total de 6 broches, soit plus que les 5 E/S disponibles de l'ATtiny85. Il y a une astuce facile : on peut se contenter d'activer les moteurs en permanence (ce qu'ils ne vont pas dire qu'il vont tourner en permanence, il faut ensuite jouer sur les broches de commande du sens de rotation) en connectant les deux broches correspondantes à la ligne +5V. Dans ce cas, on n'a plus besoin que de 4 E/S numériques de l'ATtiny85, correspondant aux broches de pilotage du sens de rotation du L293D.

Il reste donc à utiliser le détecteur de proximité. Ce dernier a besoin d'une alimentation en +5V (fournie par le régulateur de tension) et d'une mise à la masse. Idéalement, il faut mettre un condensateur de 10µF entre le +5V et la masse pour filtrer les parasites. N'en ayant pas sous la main, j'ai mis 4 condensateurs 0,1µF en parallèle, ce qui semble suffire (mais ça dépend de chaque montage). Le troisième connecteur est une sortie analogique dont la tension varie en fonction de la distance de l'obstacle en face (plus la distance est grande, plus la tension de sortie est faible). En revanche, si vous jetez un œil aux caractéristiques techniques du détecteur, vous verrez deux choses :

  • La courbe de réponse n'est pas linéaire. Le calcul de la distance en fonction de la tension est donné par la formule : 65,0 * volts^(-1,10) / 2,55. La formule vient de http://luckylarry.co.uk/arduino-projects/arduino-using-a-sharp-ir-sensor-for-distance-calculation/ (sa formule donne une distance en pouces, d'où la division par 2,55 pour avoir une distance en centimètres).
  • Il y a un pic de tension qui se situe aux alentours de 4cm : pour un obstacle donné, on ne peut pas savoir s'il est à moins de 4 cm ou bien à plus de 4 cm. Il faudra en tenir compte lors des stratégies d'évitement. Dans mons cas, je lance la stratégie d'évitement à environ 15 cm.

L'unique sortie étant analogique, il ne reste qu'à la connecter à la dernière entrée disponible de l'ATtiny85 (analogique donc).

Voilà, tous les éléments sont connectés (voir le paragraphe suivant pour les détails de connections), et l'ATtiny85 bien rempli. Il ne doit lui rester que la broche 1 de non connectée. Cette broche peut normalement fonctionner en mode entrée analogique ou bien E/S numérique, mais si elle est utilisée, il ne sera plus possible de programmer le micro-contrôleur par la suite (sauf manipulation « lourde » qui ne nous concerne pas). Donc, on ne s'en sert pas.

Les schémas de branchement et le programme

Breadboard assembly

Breadboard assembly

Les schémas de branchement sont disponibles sur le GitHub du projet, ainsi que le code associé.

Télécharger sur GitHub

Un mot sur la stratégie d'évitement, qui est bête comme chou :

  1. Le rover avance jusqu'à ce qu'il soit à moins de 15 cm de l'obstacle.
  2. Puis il recule jusqu'à ce qu'il soit à plus de 25 cm de l'obstacle.
  3. Puis il tourne aléatoirement vers la gauche ou la droite pendant 2 à 4 secondes.
  4. Retour au point 1.

Quelques photos de la bête

TinyRover core
Le cœur de TinyRover. À gauche, le micro-contrôleur ATtiny85; au centre, le contrôleur de moteurs L293D; et à droite, le régulateur de tension. Admirez la pièce de 1 euro pour l'échelle.

IR proximity sensor
Le détecteur de proximité infrarouge. Vous pouvez-voir les condensateurs de filtrage de l'alimentation salement insérés.

Battery pack
Les batteries alimentant l'ensemble. Nettement plus grosses que la partie « utile ».

TinyRover en action



comments powered by Disqus