![]() |
![]() |
![]() |
|
Projet radar Arduino + Processing Page très ancienne n'ayant pas été remise à jour |
Maj : 18/04/12
|
Ce projet met en œuvre deux éléments principaux :
Le capteur ultrason à faible coût, vendu sur eBay $3, port compris : www.ebay.com/...ultrasonic | ![]() |
Un servomoteur à faible coût, vendu sur eBay $2.5, port compris : ebay.com/...servo | ![]() |
Vue de détail du montage du servo bricolé avec des bouts d'aluminium. La position du servo et la distance lue sont affichées en local sur un LCD 2 lignes 24 caractères. Il est relié très classiquement en I2C à un PCF8574, comme décrit partout. |
![]() |
L'idée est de faire un système de vision pour un robot avec une présentation du résultat sur écran PC simulant un vrai demi-écran radar (vision vers l'avant à 180 degrés).
Dans cette phase la liaison vers le PC se fait par le câble USB. En exploitation, la liaison se fait par un module radio vers PC et smartphone.
La rotation du servo permet un balayage permanent sur 180 degrés mais en favorisant la vision dans l'axe pendant les déplacements.
Cet exemple est statique, mais en exploitation sur un châssis mobile, le spot central se déplace évidemment dans la carte de la zone explorée.
Un petit laser avec réticule est embaqué pour visualiser la direction "regardée" par le capteur.
Il y a donc deux parties distinctes :
Le logiciel embarqué sur l'Arduino
Le logiciel en Processing sur PC
Par soucis de cohérence, les parties communes ont la même terminologie de variables.
Plusieurs programmes préparatoires élémentaires ont été nécessaires pour réaliser le projet, testé sur ATMega 2560 :
Prise en main du servomoteur et algorithmes de balayages privilégiant la vision axiale.
Prise en main du capteur ultrasons et algorithmes de compressions de "grandes" distances.
Prise en main des échanges bidirectionnels entre Arduino et Processing à 115 kb.
Réalisation d'animations graphiques sur l'afficheur LCD 2*24 pour le mode simulateur (servo et ultrasons coupés)
Une fois tous ces éléments débuggés, intégration dans le programme final.
Un premier essai n'utilisait que l'affichage en mode terminal sur la console pour tracer l'écran en caractères ASCII, mais l'impossibilité de remonter le curseur obligeait à faire un défilement permanent insupportable.
Cette partie est simple car elle n'est constituée que de l'agrégation de morceaux de code fournis par les exemple des bibliothèques. Il n'y a aucune subtilité particulière. J'avais testé séparément auparavant tous les éléments, l'écriture en a été rapide
Retour vers la page principale Arduino 1/2
Partie Processing (affichage sur PC)
Réalisation d'un environnement graphique approchant au mieux un écran radar conventionnel avec son balayage.
J'ai d'abord testé sous Visual Studio, puis j'ai découvert Processing qui c'est avéré comme bien mieux adapté.
La difficulté est de rafraichir sans clignotement très vite, et pour compliquer, j'ai intégré des fenêtres de debug, une horloge analogique temps réel, un spot tournant rétrograde...
Le but de cet exercice était d'apprendre à connaitre Processing pour réaliser des affichages complexes. Plusieurs programmes préparatoires ont été nécessaires pour réaliser le projet :
Découverte des innombrables commandes graphiques et sonores, ainsi que l'utilisation de la souris pour interagir. Réalisation d'une centaine de bouts de programme pour comprendre les notions de base.
Réalisation d'un simulateur pour travailler sur le graphisme sans Arduino.
Prise en main des échanges bidirectionnels entre Arduino et Processing à 115 kb.
La partie Processing m'a pris plus de vingt fois le temps consacré à la partie Arduino car je partais vraiment de zéro. Il n'ya aucun problème pour l'écriture conventionnelle en C, mais on se trouve un peu noyé au début devant l'abondance des commandes et des bibliothèques dont l'intérêt m'apparaît que très progressivement, mais cela vaut la peine de faire l'effort d'immersion.
Tous les éléments graphiques sont positionnés dynamiquement avec le seul paramètre modifiable, la largeur d'écran. Il est par défaut xSize = 1200 (voir en haut à droite de l'écran). La hauteur" ySize" est calculée automatiquement. Vous pouvez tester d'autres valeurs de largeur, mais si vous réduisez trop les panneaux vont se chevaucher.
Il reste beaucoup d'améliorations à faire, n'hésitez pas à me suggérer de meilleures routines, en particulier pour accélérer la réaction au click souris... Toutes mes sources sont disponibles dans ce fichier zippé d'archives : |
![]() |