Je travaille actuellement (de façon intensive) sur la validation de l’architecture matérielle de Daryl. En effet, rien ne doit être laissé au hasard. Combien de moteurs? Quel couple pour les moteurs sachant que Daryl pèsera probablement moins de 3 Kg? Comment contrôler ces moteurs ? Quel type de capteur pour éviter les obstacles ? Quel type de batterie pour mon projet ? Quelle puissance de batterie ? Autant de questions auxquelles il faut absolument répondre avant de commencer un projet. Après pas mal de recherches et de réflexions, je suis parti sur la solution illustrée par le diagramme ci-dessous (Rendez-vous plus bas pour les explications) :
- Viliv S5 Premium: Cerveau de Daryl, le viliv S5 hébergera une application Java qui se chargera d’envoyer les commandes vers l’arduino via le port serial rx/tx (USB), mais aussi de recevoir les informations depuis l’arduino (capteurs). Je n’ai pas encore établi le degré d’implication du programme Java concernant l’envoi des commandes. En effet, est-ce que je laisse le viliv et donc l’application Java recevoir les données des capteurs puis traiter en envoyant des commandes à l’arduino pour faire fonctionner les moteurs OU est-ce que je laisse l’arduino traiter lui-même les informations provenant des capteurs et donc commander les moteurs. Dans ce cas, l’application Java n’aurait plus un rôle direct, mais indiquerait simplement à l’arduino: « bouge, arrête de bouger »… Je préfère la première solution, c’est à dire déporter au maximum la logique au sein de l’application Java, mais cela dépendra des temps de réponse entre l’arduino et l’application.
- Hub USB: J’ai opté pour un micro hub USB qui me permettra de connecter, d’une part l’arduino, mais aussi la webcam. J’espère que ces deux éléments ne tireront pas trop sur le viliv. Même si celui-ci possède une excellente autonomie (5h-6h avec la luminosité au minimum), il ne faut pas oublier que l’application Java tournera en permanence, et par conséquent consommera de l’énergie.
- Arduino Uno: Je ne présente plus ce petit micro contrôleur. Il sera connecté au viliv via USB et en mode serial rx/tx. L’arduino pilotera également le contrôleur motor Pololu Trex via un port serial. Il faut savoir que l’arduino possède 2 pins rx/tx pour la communication en mode serial. Cependant, comme j’utilise déjà le serial pour communiquer avec le viliv, je vais devoir utiliser une librairie arduino (SerialSoftware) qui permet de transformer deux pins classiques de l’arduino en pins serial.
- Châssis Lynxmotion Terminator: J’ai choisi ce châssis car il est sympa, mais aussi parce qu’il est livré avec 4 moteurs 12V réduction 50:1 95 RPM. Vu sa petite taille, il est fort probable qu’intégrer l’ensemble des éléments sera difficile. C’est pourquoi j’ai prévu l’achat d’une petite plaque en lexan du même constructeur qui me permettra de construire un étage supplémentaire.
- Webcam Microsoft Lifecam Cinema: Cette micro webcam sera positionnée sur le module tilt/pan sur l’avant du robot. La webcam me permettra par la suite d’agrémenter les fonctionnalités de Daryl (reconnaissance faciale, reconnaissance/suivi d’objets ou marqueurs, éviter les obstacles…). J’ai pris la version 720p pour ne pas trop charger le viliv en traitement d’image (la reconnaissance faciale par exemple est très consommatrice en ressource processeur). De plus les retours sur le web semblent indiquer que le micro est très bon (ce qui n’est pas négligeable pour la reconnaissance vocale). J’espère juste que le bruit des moteurs ne créera pas d’interférence avec le micro.
- Batterie NiMH 12V 4000mAh : Pour la batterie, je me suis tourné vers le NiMH. Au départ j’étais parti sur du Lipo mais les contraintes liées au Lipo m’ont vite calmé (chargeur spécial, surveillance obligatoire pendant la charge, sac anti-feu lors de la charge pour les batteries grande capacité, fragilité…) Je suis donc parti sur du classique NiMH 12V (car les moteurs sont en 12V). De plus l’arduino peut prendre une tension d’entrée jusqu’à 12V ce qui sera parfait pour l’alimenter. Selon mes calculs, l’ensemble du robot devrait consommer 700mAh min à 1450 max à un instant T, et à charge nominale. Donc, en prenant la valeur maximum (ce qui sera peut probable) on arrive à 4000/1450 soit 2.85h de fonctionnement minimum.
- Pololu Trex DMC01 contrôleur de vitesse pour moteur: L’arduino peut délivrer uniquement 50mA par pin. Or un moteur à lui seul peut tirer 270mA (à pleine charge et vitesse max) voir 1.5A en pic lorsque le rotor du moteur est bloqué (ok cela ne doit pas arriver car ça abimerait rapidement les moteurs). Si je connectais directement les moteurs sur l’arduino, les pins rendraient instantanément l’âme. De plus l’arduino ne peut délivrer que 5V max. C’est pour cela que je vais utiliser un contrôleur de vitesse pour moteur. J’ai choisi le Pololu DMC01 car il permet le contrôle de 2 canaux (moteurs gauche / moteurs droit que je branche en parallèle dans mon cas) + un moteur auxiliaire. Il peut encaisser des pics de 13A (donc je suis large car 1.5*2 = 3A max dans mon cas). Il peut prendre une tension d’entrée située entre 6-16V, donc adapté à mes moteurs / batterie 12V. Aussi, il permet les modes de communication suivants: RC/analog/serial. Le mode qui m’intéresse est le mode serial. Il permet de piloter les deux canaux via 2 fils seulement (RX/TX). Comme évoqué plus haut, j’utliserais la librairie SerialSoftware qui permet d’émuler un port série grâce à deux pins classiques de l’arduino.
- Moteurs: Les quatre moteurs sont livrés avec le châssis Lynxmotion. Il s’agit de moteurs 12V avec réduction de 50:1, donc relativement puissants (développe 1.14Kg-cm). Ces moteurs seront largement suffisants compte tenu du poids de Daryl (évalué entre 2kg et 2.4kg max)
- Contrôleur servo moteur: Tout comme les moteurs, les servos moteur peuvent requérir de grande quantité d’énergie. Il est donc nécessaire d’utiliser un contrôleur alimenté en externe. J’ai choisi le micro maestro de Pololu. Il accepte une tension d’entrée située de entre 5 et 6V (tension classique des servos moteur 4,8V ou 6V) et permet de piloter 6 servos moteur. Les servos moteur permettront l’orientation de la tourelle tilt/pan. Tout comme le contrôleur moteur, le micro maestro sera piloté depuis l’arduino via SerialSoftware.
- Module servo tilt/pan: Ce petit module permettra d’une part l’orientation de la webcam (gauche-droite / haut-bas) lors de face/object tracking par exemple, mais aussi la rotation du capteur Sharp central et du capteur ultrason Ping. En effet, lorsque Daryl rencontrera un mur, un des trois capteurs Sharp indiquera à Daryl la présence de l’obstacle. Le module pan réalisera dés lors un balayage ultrason et IR afin de « scanner » l’environnement et indiquer à Daryl ou se rendre.
- Capteur de distance Infrarouge Sharp: Ces capteurs IR seront placés sur la partie avant droite / gauche et au centre du robot. Ils permettront à Daryl d’éviter des petits obstacles (entre 4 et 30 cm de distance). Ces capteurs analogiques renvoient une valeur dépendante de la distance entre l’obstacle et le capteur lui-même. Ce type de capteur existe en version 10-80 / 30-150… J’ai choisi une détection de 4-30 car Daryl sera relativement petit (25 cm sur 25 approximativement). De plus les capteurs grande distance semblent moins précis.
- Ecran LCD Sainsmart 4 lignes LCD2004: J’ai prévu l’installation d’un petit écran LCD 20*4 qui permettra l’affichage de données importantes (ou debug). J’ai choisi cet écran car il utilise seulement 2 fils! En effet, il utilise le BUS I2C (ou IIC) de l’arduino (sur les pins A4 et A5). De plus il est possible d’utiliser plusieurs éléments sur le bus I2C grâce à un système d’adresse.
- Capteur de distance ultrasonique Parallax Ping ))): Ce capteur ultrason viendra en complément des capteurs IR Sharp. Basé sur le système des ultrasons (comme les chauves souris), ce capteur envoi des ondes sonores puis calcule le temps écoulé entre l’émission et le retour. Les types de capteur IR et ultrason sont vraiment complémentaires dans le sens où l’un comble souvent les lacunes de l’autre. Les capteurs IR ont un champ de détection très fin contrairement aux capteurs ultrason qui ont un cône de détection relativement élevé. Les capteurs IR sont sensibles à la lumière et à la couleur des surfaces, ce qui n’est pas le cas des capteurs ultrasons. A contrario, ces derniers sont sensibles à la pression/température et aux échos parasites… Le capteur ultrason Ping de Parallax permet la détection d’obstacles situés entre 2cm et 3m dans un cône relativement restreint 20° max (plus le cône de détection est fin, meilleur sera la détection).
- Sensor shield pour arduino: J’ai prévu l’adjonction d’un petit sensor shield à l’arduino. Ce shield vient se poser directement sur l’arduino et permet d’accéder directement à des connexions pour capteurs. NB: les pins de l’arduino sont toujours accéssibles et un bouton reset est toujours disponible.
Voila pour l’architecture. J’ai déjà commandé prioritairement certains éléments (Pololu Trex et Servo, châssis Lynxmotion Terminator, sensor shield et écran LCD). Les éléments tels que la batterie et les capteurs suivront très vite car importants dans l’architecture. Les éléments restants tels que la webcam et le module PAN viendront un peu plus tard car beaucoup moins importants pour l’instant. Je pense qu’il va se passer quelques semaines entre la réception de tous les éléments et leur intégration. Mais ne vous inquiétez pas je vous tiendrai au courant… En attendant, je fais un peu de veille sur la reconnaissance / tracking d’objet avec la webcam et sur la reconnaissance faciale. Je commence aussi à réfléchir à l’architecture logiciel Java (Thread, séparation commandes…)
@+ Christophe
Bonjour, tout d’abord : beau projet !
Il faudrait que tu puisse contrôler l’alimentation de l’écran LCD pour l’éteindre quand tu n’en a pas besoin, ça économisera un petit peu de batterie.
La reconnaissance facial et vocal se fera aussi en java ?
Moi j’ai essayer un 10-80 et j’aime beaucoup, ils ne sont pas très précis vers les 80 mais vers les 10 c’est très précis. De toute façon tout résidera dans ta formule pour calculer la distance.
Au passage, je te conseil de lire cette article qui se base sur un excellent article d’adafruit :
http://arduinocar103.blogspot.fr/2012/06/lecture-multi-senseurs.html
Et celui là qui je crois apporte une meilleur solution au problème et permet des résultats plus précis :
http://www.pobot.org/Anti-parasites-pour-capteur-Sharp.html
Effectivement, je n’ai pas forcement abordé ce genre de détails mais je vais mettre des inter pour couper les moteurs etc… Et pourquoi pas la led du lcd vu qu’il y a un jumper pour l’activer/désactiver.
J’ai pensé au 10-80 au début mais compte tenu de la petite taille de Daryl je me suis dis qu’il faudrait peut être mieux des 4-30.
Merci pour les conseils et liens j’irais voir ça dès que possible.
Pardon pour la reco vocale et synthèse oui en java voir un de mes précédent billet et la vidéo…
En faite oui dans ton cas c’est surement mieux.
PS : Moi mon robot étais sur la base d’une ancienne voiture de course donc la vitesse du véhicule m’obliger en quelque sorte d’être prévenu d’un obstacle un peu avant. Donc les 30 cm auraient été juste pour le freinage.