Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Caméra Pob-Eye 2 > Communication I2C avec la Pob-Eye 2

Communication I2C avec la Pob-Eye 2

mardi 24 novembre 2009, par Julien H.

Comme cette caméra peut être utilisée pour contrôler tout un robot, on va tester ses autres périphériques, comme le bus I2C, qui peut nous servir à communiquer avec des périphériques d’affichage d’information (écran LCD) mais aussi avec des cartes programmables "filles" qui vont se charger d’une partie des tâches du robot (le déplacement et la commande des moteurs par exemple).

Rappel

Le bus I2C fonctionne en mode maitre/esclave : le maitre envoie sur le bus l’adresse du périphérique esclave avec qui il veut communiquer.

Disponibilité sur la Pob-eye 2

Le circuit intègre déjà un périphérique I2C : la caméra elle-même ! Mais on va essayer dans cet article de communiquer avec un autre périphérique I2C, en l’occurence une led intelligente "BlinkM".

Préparation

Il faut tout d’abord souder un connecteur et préparer un câble ayant un connecteur femelle au format Arduino et BlinkM : GND/VCC/SDA/SCL. Il faut prendre garde car la Pob-Eye a un format différent : GND/VCC/SCL/SDA ce qui empêche de connecter directement la BlinkM, ce qui aurait pourtant été utile pour faire office de "flash" d’appoint pour la caméra :) :) :)

Bibliothèque de fonctions

L’environnement de développement Pob-Tools v4 propose des fonctions déjà écrites pour gérer le bus I2C. Il suffit donc de reprendre les exemples fournis pour les commandes principales parmi :


 void InitI2C (I2C_SPEED speed) : Initalize I2C bus as Master.
 void SendSlaveAddress (UInt8 Addr_S) : Send slave adress through the bus.
 UInt8 ReadOnI2C (void) : Read a byte from a slave device.
 UInt8 ReadOnI2CWithAck (UInt8 ack) : Read a byte from a slave device.
 void WriteOnI2C (UInt8 Byte) : Write a byte on the I2C bus to the slave device.
 void WriteBufferOnI2C (UInt8 *Data, UInt32 Len) : Write a buffer on the I2C bus to the slave device.
 void StopI2C (void) : Stop I2C communication.

Trouver la bonne adresse

Pour ceux qui ont déjà utilisé une BlinkM avec une carte Arduino, vous vous souvenez que Tod utilise comme adresse par défaut 0x09. Mais attention, il s’agit de l’adresse sur 7 bits car la bibliothèque Wire qui gère l’I2C sur Arduino ne demande pas le dernier bit de l’adresse 8 bits qui sert pour indiquer si on est en écriture ou en lecture.

Mais la Pob-Eye 2 considère quant à elle l’adresse en 8 bits. Donc 0x09 ou 000 1001 devient 0001 0010 soit 0x12 !!! Je me suis arraché les cheveux alors que j’avais déjà eu le même problème avec AVRlib..

Dispositif expérimental

On va s’amuser non seulement avec la BlinkM, mais on va conserver le code de la caméra utilisée dans les articles précédents. On va faire une moyenne de tous les pixels sur rouge, vert et bleu puis assigner cette moyenne comme couleur de la BlinkM.

Code


#include <pob-eye.h>

int main(void)

UInt8 *rgbFrame ;
UInt32 i ;
UInt32 red = 0, green = 0, blue = 0 ;

UInt8 blinkm_addr = 0x12 ; // The slave address (sur 8 bits)
UInt8 buffer ;
UInt8 data[4] ;

InitPobeye2() ;
InitI2C(I2C_100_KHZ) ;
InitCameraPobeye2() ;
InitUART0(115200) ;

SendString("Test I2C !") ;

// arrêt de la playlist interne
SendSlaveAddress( blinkm_addr ) ;
buffer = ’o’ ;
WriteOnI2C(buffer) ;
StopI2C() ;

rgbFrame = GetRGBFrame() ;
while(1)
GrabRGBFrame() ;

for (i=0 ; i< 100 ; i++) // 100 valeurs

red += GetRed(rgbFrame[i*100]) ; // tous les 100 pixels
green += GetGreen(rgbFrame[i*100]) ;
blue += GetBlue(rgbFrame[i*100]) ;

red = red / 100 ;
green = green / 100 ;
blue = blue / 100 ;

PrintToUart0("%d %d %d\n",red,green,blue) ;

data[0] = ’n’ ;
data[1] = red ;
data[2] = green ;
data[3] = blue ;

SendSlaveAddress( blinkm_addr ) ;
WriteBufferOnI2C(data,4) ;
StopI2C() ;

WaitUs(500) ;

return 0 ;

Il y aurait sans doute de meilleurs algorithmes pour déterminer une dominante de couleur, mais ici l’intérêt était surtout de montrer 2 communications avec un périphérique I2C : écriture d’un octet et écriture d’un buffer.

Résultat

Voici la caméra et une BlinkM connectée dessus. Belle couleur, n’est-il pas ? :)

Pob-Eye et BlinkM

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 champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.