mercredi 27 novembre 2013

[Software] Interface graphique (Qt)

Le projet AutoBot a bien avancé. Les bases sont prêtes, il ne manque plus que le matériel. Je pense le commander début Décembre.
Du coup en attendant, j'ai un peu bossé sur la carte Arduino qui servira de plate-forme pour le robot. En parallèle, je me suis remis sur QtCreator pour faire mes propres IHM.

Pour le moment pas de nouveaux articles sauf peut-être des tuto Arduino.


mercredi 20 novembre 2013

[Software] Modélisation du robot AutoBot

La modélisation par réseaux de Pétri permet de mettre en lumière les points clé de notre système. De plus, cette modélisation donne des informations sur les états les états possibles comme par exemple des risques de blocage, si le processus est réinitialisation, etc.

Pour ce faire, j'utilise le programme Tina LAAS. Il est téléchargeable depuis la page "Download".

Petit rappel :
o Les places (rond) sont des états du système
o Les transitions (carré) sont des changements d'état
o Les jetons ou pièces représentent l'état du système à un instant "t"

Voici une partie de mon RdP
Bon comme ça ça semble indigeste. Il suffit de suivre les flèches pour comprendre.
C'est encore mieux avec tout le schéma donc voici un pdf ou sinon le .ndr à ouvrir avec Tina.

Je n'ai pas eu le temps de faire tous les tests mais les premiers semblent corrects.
A savoir :
- réseau réinitialisable
- pas de blocage
- réseau borné à 1
- pas de puits

Ce premier travail va faciliter la suite, c'est-à-dire le codage, car tous les états du système sont définis !

dimanche 17 novembre 2013

[Hardware] Détection obstacles et mesure de la distance

L'une des premières choses à faire avant de se lancer, est de savoir si notre robot travaillera dans un espace connu ou inconnu. Typiquement, les bras que l'on trouve sur les chaînes de montage dans  l'industrie sont des automates évoluent dans un environnement connu. A contrario, les drones sont souvent utilisés dans des lieux peu ou pas connus (robot d'exploration par exemple).

Pour mon projet AutoBot, je veux que mon robot mobile, dans un premier temps, se déplace de manière autonome et sans percuter d'objets. Il faut donc mettre en œuvre des capteurs pour que le robot prenne conscience de l'environnement à proximité de lui.

Pour cela, il existe les télémètres. Cette grande famille, souvent utilisée en robotique, se partage en deux grandes parties :
  1. Télémètre infrarouge
  2. Télémètre ultrason
1- Principe : 

Quel que soit le type de télémètre, le principe reste le même. Le capteur est composé de 2 parties, une émettrice et l'autre réceptrice. La première partie va donc émettre une "onde" qui sera réfléchie par les objets. "L'onde" sera perçue par le récepteur qui fournira une information sur la distance entre capteur et objet.

1.2- Infrarouge :

L'un des télémètres qui m'intéresse est le SHARP "GP2Y0A02YK".
L'avantage de ce capteur est qu'il est assez simple d'utilisation. La Datasheet nous présente un système muni de 3 fils :
1. données
2. masse
3. alimentation

Mais surtout, un abaque très clair.

1.2- Ultrason :
Dans cette gamme, les plus connus sont les "SRF04" ou le "SRF05".
L'information sur la distance est disponible de différentes manières selon les modèles. L'information de distance est proportionnelle à la longueur d'impulsion en sortie.
Cette abaque n'étant pas très pratique, je me suis renseigné sur internet et j'ai trouvé un petit article bien sympathique. Arduino+SRF05.

Le code, repris de la page citée au-dessus.
// include the library code:
#include <LiquidCrystal.h>
#define echoPin 6             // the SRF05's echo pin
#define initPin 7             // the SRF05's init pin
unsigned long pulseTime = 0;  // variable for reading the pulse
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
 // set up the LCD's number of rows and columns:
 lcd.begin(16, 2);
 // make the init pin an output:
 pinMode(initPin, OUTPUT);
 // make the echo pin an input:
 pinMode(echoPin, INPUT);
}
void loop() {
 digitalWrite(initPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin, LOW);
 pulseTime = pulseIn(echoPin, HIGH);
 lcd.setCursor(0,0);
 lcd.print(pulseTime / 58, DEC);
 lcd.print("cm");
 delay(100);
 lcd.clear();
}
La division par 58 permet d'obtenir la distance en "cm". Il est possible de l'avoir en "inches" en divisant par 148.

vendredi 15 novembre 2013

[Hardware] Servomoteurs, moteurs et Commande

Dans toutes structures animées, nous allons trouver des actionneurs. Ces derniers sont principalement des servomoteurs ou des moteurs. Dans tous les cas, il est important de se renseigner sur la consommation et le couple moteur exprimé en Newton mètre (N.m). Si votre couple est faible, vous ne pourrez pas déplacer des charges lourdes sous peine de casser le système mécanique.

1- Les servomoteurs

Les servomoteurs sont très courant dans les systèmes de pilotage de support mobile, gouvernail, etc. L'avantage majeur de ces composants réside dans le fait qu'il est possible de connaitre la position du rotor.
Ce qu'il faut savoir est qu'un servomoteur dispose de butées. Il lui est donc impossible de tourner à 360°.

1.2-  La commande des servomoteurs

Dans la plus part des cas, vous disposerez d'une librairie pour manipuler votre servomoteur. Pour ma part, sur la carte Arduino, il existe la librairie : <servo.h> à inclure en en-tête.
Après rien de bien compliqué. Le servomoteur dispose de 3 fils :
  • Rouge : alimentation
  • Noir : masse
  • Jaune : données
2- Les moteurs DC

Les moteurs à courant continu offrent la possibilité de tourner à 360°. Néanmoins, il est difficile de connaitre de manière précise la position du rotor d'un tel moteur. L'une des solutions est l'utilisation d'un codeur que l'on ajoute au moteur, je pense en parler dans un prochain article.
Bien que les moteurs DC sont utilisable de manière brute, on parle souvent de l'ajout de condensateur de déparasitage, il peut être bien de se renseigner dessus.
2.2- La commande des moteurs DC

La commande d'un tel moteur est un peu plus compliquée que pour les servomoteurs. En effet, le moteur DC ne dispose que de 2 bornes (alimentation et masse). En fonction du montage réalisé, le moteur tournera dans le sens trigonométrique ou anti-trigonométrique.
Dans le cas où l'on veut utiliser les deux sens de rotation, nous devons faire appel à un montage appelé : pont en H. Ce circuit existe sous le nom de L293D ou plus récemment le SN754410 dont voici la datasheet : SN754410.pdf.


Typical montage :
Pont en H - Ulik's Factory

Il suffit de mettre à "1" les entrées "TP1" et "TP2" et à "0" les autres pour que le moteur tourne dans un sens. Pour le faire tourner dans l'autre sens, "TP1" et "TP2" passent à "0" tandis que "TP3" et "TP4" valent "1".

Voilà ce qui conclu pour les servomoteurs et les moteurs.

mercredi 13 novembre 2013

[Hardware] Les châssis

Tous robots mobiles terrestres ont besoin d'un châssis.

Pour moi, il existe deux grandes classes de châssis.
- le châssis voiture
- le châssis chenille

1- Comment faire son choix?

Plusieurs paramètres entre en compte.
  • Le châssis voiture
 Il est composé de 4 roues. Deux des roues servent à modifier la trajectoire tandis que les deux autres permettent d'assurer la propulsion. Ce système consomme peu d'énergie. Cependant, il nécessite d'avoir un système qui commande la propulsion et un autre pour la direction.
  •  Le châssis chenille
Il est composé de 4 roues liées deux à deux. Seul deux des roues sont commandées. L'inconvénient de ce système est qu'il consomme un peu plus d'énergie que le châssis précédent (l'avantage d'être "tout-terrain" à un coût). Néanmoins, sa commande est plus simple à réaliser.

2- Angles de braquage

Une chose intéressante à étudier est l'angle de braquage. C'est ce dernier qui permet à votre véhicule de tourner. On parle alors de centre instantané de rotation ou "CIR".

Voici quelques explications:
Plus l'angle CIR est faible plus la courbure entre la trajectoire désirée et la réelle sera petite.

3- Le modèle Tricycle

Ce modèle est une modification du châssis voiture. Il se base sur la commande de la direction par les roues chargées de la propulsion comme pour le modèle unicycle. La troisième roue, idéalement une roue folle, permet d'assurer la stabilité du système.
Un retrouve alors un modèle susceptible de pouvoir tourner à 90° sans arc de courbure.

4- Faire son choix

Pour ma part, je vais commencer par un châssis chenille. Pour l'esthétique, je préfère les chenilles aux roues, la commande simplifiée et surtout pouvoir tourner sur place!

Mon choix s'est posé sur le châssis Tractor chez Lextronic . L'avantage de ce modèle est qu'il intègre déjà le bloc alimentation, les moteurs et les réducteurs.

mardi 12 novembre 2013

[Hardware] L'alimentation et la production d'énergie

1- L'alimentation

L'une des choses la plus importante pour tous systèmes autonomes est l'énergie. Sans elle, le système ne fonctionnera pas.
Il est donc intéressant de réfléchir avant de fabriquer son alimentation. Pour cela, il faut connaitre, à l'avance, les actions que notre robot exécutera. A partir de là, il sera possible de trouver quelle solution technologique mettre en place et surtout les besoins en énergie!

On peut venir facilement à la conclusion que si l'on installe une alimentation puissante, notre système fonctionnera bien et long temps. En théorie oui, mais cela a un prix. Outre le fait de détériorer le système qui sera sur-alimenter, si l'on ne prévoit pas un système de protection, il existe un autre paramètre important. La masse!
En effet, plus une alimentation sera puissante plus son volume augmentera et de ce fait sa masse. Un raisonnement assez simple montre une chose intéressante :

Plus on est lourd, plus il faut d'énergie pour alimenter nos moteurs pour se déplacer. Il faut vaincre les frottements!

Le problème est donc là, faire un compromis entre la durée d'utilisation, les besoins du système et donc le type de batterie utilisée.

Heureusement, bon nombre de systèmes disposent d'une documentation (datasheet) qui nous donne les informations pour dimensionner au mieux notre bloc alimentation.

Bon, tout ça c'est bien, mais du coup comment repousser l'échéance de la batterie déchargée?
C'est une bonne question. Bien  sûr, il existe des solutions.
La première consiste à alimenter les moteurs, gros consommateurs, avec leur propre circuit d'alimentation.
La seconde est de les commander de manière intelligente pour diminuer leur consommation.
La troisième a pour but de fabriquer de l’énergie.

C'est trois points, non exhaustifs, peuvent être combinés pour optimiser votre solution finale.

2- La production d'énergie

Pour produire de l'énergie, rien de plus simple. On le voit souvent avec les éoliennes, panneaux solaires etc. De nos jours, des voitures récupèrent l'énergie lors du freinage. C'est pour dire si des techniques existent.

Dans le cas de robots mobiles, on utilise souvent les panneaux solaires. L'avantage de ces derniers est leur faible poids.

Côté électronique, voilà comment ça se passe :
La cellule photovoltaïque est branchée en parallèle des accumulateurs. La diode "D1" joue le rôle de protection pour éviter que les accumulateurs ne détériorent pas la cellule. La résistance est là pour représenter le système qui sera alimenté.
De cette manière, la cellule va charger votre batterie et la batterie va alimenter votre système.

Note : Alimenter un circuit uniquement avec une cellule photovoltaïque sans stockage d'énergie est possible, mais non recommandé!

lundi 11 novembre 2013

[Hardware] Les résistances

Retour en arrière avec les résistances. Ces petites choses sont incontournables dans tous circuits électronique.
De ce fait, savoir lire leur valeur est important!

Sur le net, on trouve beaucoup de choses. Je ne retiendrai que ça :
Note : on trouve plus souvent des résistances avec 4 bagues.

Bien sûr il existe des gens qui ont pensé à tout avec une petite interface: Code couleur (online)
Une autre technique est l'utilisation d'un Ohmmètre. Hélas, nous n'en avons pas toujours sous la main. Du coup, il existe des moyens mnémotechnique. Ma phrase favorite est :

Ne Manger Rien Ou Jeûner Voilà Bien Votre Grande Bêtise
ce qui donne :
Noir Marron Rouge Orange Jaune Vert Bleu Violet Gris Blanc