Club robotique de Sophia-Antipolis

Accueil > Projets et études > Nos robots > Réalisations personnelles > BaBa, un robot piloté par Bluetooth (2011)

BaBa, un robot piloté par Bluetooth (2011)

dimanche 15 juillet 2012, par Grégory Fromain, Julien H.

Ce robot est l’oeuvre de Greg, un adhérent de l’association qui nous a rejoint en 2011.

Baba signifie Bot Arduino Bluetooth Android.

Le robot intègre de nombreux kits : Arduino, plate-forme 4WD, échanges Bluetooth, capteurs ultra-son, tourelle pan-tilt... ce qui en fait une plate-forme d’étude très pratique.

Il a été présenté lors de nos ateliers, puis a servi à une démonstration de mathématiques lors de la présentation MathC2+ de l’INRIA.

Le code source du projet est mis à jour régulièrement sur la page GitHub de Baba.

JPEG - 249.1 ko

 Baba 1.1

Baba évolue et bascule de technologie... Le châssis est conservé mais le Bluetooth et le téléphone Android disparaissent au profit de :
- une Raspberry Pi avec 4 Go,
- une webcam pour avoir le son et l’image,
- une connexion wifi
- côté logiciel, tout est géré par un serveur node.js (langage Javascript)

Il reste à créer une carte pour l’alimentation à connecter sur la Roméo pour la gestion des différentes cartes et actionneurs.

Les photos de Baba dans l’album de Greg

JPEG - 110.4 ko

 Baba 1.0

- kit plate-forme robotique 4WD
- tourelle pan-tilt
- capteurs à ultrasons SRF08 (I2C)
- DFRDuino Romeo
- module Bluetooth
- téléphone Androïd

Il y a donc 6 moteurs : 4 pour le déplacement (utilisés par paire) et 2 pour la tourelle.

Le robot est programmé avec Arduino mais les déplacements complexes sont gérés par un téléphone portable : le mobile ou smartphone équipé d’Androïd se connecte via Bluetooth à la carte Arduino pour récupérer les valeurs des capteurs et envoyer les consignes de moteurs par liaison série.

Les capteurs de distance à ultra-son permettent une détection des obstacles (bas du châssis) et une détection de l’environnement (tourelle pan/tilt) :

JPEG - 286.5 ko
JPEG - 270 ko

Les moteurs du châssis 4 roues motrices permettent d’ajouter des encodeurs pour connaître la position et la vitesse du robot :

JPEG - 344 ko

La tourelle utilise deux servomoteurs :

JPEG - 315.8 ko
JPEG - 345.4 ko

Cela donne une tourelle sur laquelle on peut fixer une caméra, des capteurs :

JPEG - 422.3 ko

Malgré l’utilisation de kits, il est toujours nécessaire de travailler de longues heures pour finir un robot, pour le câblage, la connectique ou pour des cartes électroniques spécifiques, ici la gestion des batteries avec un régulateur LM7805.

JPEG - 248.3 ko
JPEG - 292 ko

 Exemple de code

Pour une démonstration à des élèves de lycée (filière ISN), nous avons adapté le code initial pour le simplifier et montrer une action distante (modifier l’angle de la tourelle) et une lecture distante (récupération de la distance lue par le capteur ultrason).

On utilise deux protocoles de communication : la liaison série avec un ordinateur distant (PC, mobile) et le bus I2C avec le capteur.


// bibliothèque I2C sur Arduino
#include

<Wire.h>

// bibliothèque pour servomoteur sur Arduino
#include

<Servo.h>

/**
* Programme de gestion d’un radar
* avec 1 capteur US (SRF08) et un servomoteur
* Reçoit l’angle
* Envoie la distance mesurée sur la liaison série
*/

Servo serv ;

void setup()

// initialisation de la liaison série
Serial.begin(115200) ;
//Serial.println("Tourelle ultra-son") ;

Wire.begin() ;
// initialisation du servomoteur sur la patte numérique 9
serv.attach(10) ;

// position de départ
serv.write(80) ;

//Serial.println(lire()) ;

void loop()

while (Serial.available() > 0)
int angle = Serial.read() ;
serv.write(map(angle,15,180,0,165)) ;
int val = lire() ;

Serial.write( 0xff) ;
Serial.write( (val >> 8) & 0xff) ;
Serial.write( val & 0xff) ;

int lire(void)

// on demande la lecture en centimètres
Wire.beginTransmission(0x70) ; // 0x70 sur 7 bits ou 0xE0 sur 8 bits
Wire.write((uint8_t)0x00) ;
Wire.write(0x51) ;
Wire.endTransmission() ;

// on attend que la lecture soit finie (première méthode)
delay(100) ;

// on demande la lecture à partir du premier octet
Wire.beginTransmission(0x70) ;
Wire.write(0x02) ;
Wire.endTransmission() ;

// on lit 2 octets (haut puis bas)
Wire.requestFrom(0x70, 2) ;
while(Wire.available() < 2) ;

return (Wire.read() << 8) + Wire.read() ;


 Mise à jour logicielle

La diffusion vidéo (streaming) avec la webcam fonctionne. Toutes les caméras ne sont pas compatibles, mais la plus basique de grande surface a fonctionné.

démo à la dure : http://youtu.be/415CCOoIe2k

Le wifi fonctionne pour le dialogue entre un téléphone ou un ordinateur et la Raspberry Pi.

La connexion entre la Raspberry Pi et la carte Arduino utilise le câble USB.

Baba grandit et veut maintenant faire comme les ados... Il dispose donc d’un ampli de 2 watts avec caisson et batterie dédié (sur la partie haute arrière) pour une puissance de 89 décibels ! La qualité sonore est impressionnante.

La lecture de MP3 ainsi que la synthèse vocale fonctionnent avec la Raspberry Pi !

Vos commentaires

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document