Sujets-libres.fr

Informatique, logiciels libres, internet, humeurs et… le reste !

Mes projets à fin mars 2013

Rédigé par -Fred- Aucun commentaire
Mon action RPG est toujours en pause car je m'amuse toujours avec ma partie sur le projet de résolveur de Rubik's cube.

Je me suis en fait attaqué ce mois ci à l'utilisation de la liaison USB entre l'application C++/Qt et l'arduino. C'est plus simple que je pensais car il s'agit en fait d'une liaison série entre deux appareils. Partant de là :
- Côté C++/Qt, j'ai utilisé la lib qextserialport. Les exemples d'utilisation foisonnent donc pas trop de soucis à implémenter.
- Côté Arduino, c'est encore plus simple. Il suffit de paramétrer la vitesse de la liaison et d'envoyer des données ou d'attendre qu'elle arrivent.

J'ai ensuite dû régler un problème que j'avais jusqu'alors sous estimé. Mon IHM se figeait lorsque j'en étais à la phase d'acquisition du cube et durant les calculs. Je contournais jusqu'alors le problème en affichant une boite de dialogue une fois la face acquise. Cela avait pour effet de mettre en pause le traitement d'acquisition et donc de "libérer" l'IHM. Par contre, je devais placer correctement le cube face à la webcam (avec la nouvelle face à traiter) avant de fermer la boite de dialogue pour poursuivre le traitement de la face suivante (et ainsi de suite). Pour une application se voulant automatisée, ce n'était donc pas terrible.
Le blocage durant la phase d'acquisition était en fait assez problématique car je me retrouvais dans une situation d'interblocage.
Sans rentrer dans les détails, l'application attendait un message de l'arduino, qui devait indiquer que la face suivante du cube était visible, pour avancer dans la découverte du cube. Dans le même temps, le message de l'arduino n'était pas pris en compte tant que l'application n'avait pas complètement terminé sont traitement (traitement terminé lorsque les 6 faces étaient acquises). J'ai donc affecté tout les traitements (acquisition du cube et recherche de solution) à un thread à part. Le thread principal (qui gère l'IHM et la liaison série) n'est donc plus bloqué à cause de cela mon problème a été résolu.

Ayant reçu il y a peu une plaque à essai de taille correcte (720 points), j'ai pu m'attaquer à la partie entre l'arduino et les moteurs. C'est d'ailleurs mon premier projet utilisant de l'arduino.
Rappelons les besoins :
- 4 moteurs à piloter (rotation horaire, anti-horaire, arrêt).
- gérer l'asservissement de ces moteurs.

Pour un moteur à courant continu, deux relais sont nécessaires et un ou plusieurs capteurs de fin de course (admettons qu'il y en ai deux). Cela fait donc, pour quatre moteurs à piloter, 16 broches d'E/S. Cela nous place quasiment déjà aux limites de l'arduino et nous interdit toute amélioration nécessitant l'ajout d'un moteur.
J'ai donc opté pour deux solutions afin de limiter l'usage des E/S du micro-contrôleur :
- Tout d'abord, j'ai préféré utiliser un système basé sur un registre à décalage (avec des bascules D) pour le pilotage des moteurs. Seulement trois broches sont maintenant nécessaires (que je pilote 4 ou 8 moteurs, ça ne change rien).
- Pour ce qui est du traitement des fins de course, comme un seul moteur est actif en même temps et que je sais dire quel moteur est en train de tourner, le message dont j'ai besoin n'est pas "Quel est la position de chaque moteur vis à vis des fins de course ?" mais, "Est-ce que le mouvement en cours est terminé ?". Donc, un simple enchevêtrement de portes logiques peut fournir l'info à l'arduino.

Je n'ai pas encore testé la gestion des fins de course mais le système de registre à décalage fonctionne très bien pour deux moteurs (4 relais donc).

Note : comme pour mes précédents projets, je ne livre pas les sources de suite, bien que je compte publier ma partie sous licence GPLv3 dès que jugerai qu'elle sera fonctionnelle. Bien entendu, je peux livrer l'intégralité des sources actuelles de ma partie du projet si on m'en fait la demande.

A suivre donc...
Classé dans : Divers Mots clés : aucun

Écrire un commentaire

Quelle est la troisième lettre du mot ishaqj ?

Fil RSS des commentaires de cet article