Le module caméra CJPEG

La caméra utilisée et un module miniature qui à la particularité d'encoder directement les captures réalisées sous un format JPEG.

  Caractéristiques :
- Alimentation: + 3,3 VCC
- Sortie série (TX / RX / GND) 115.2 K/bps
- Restitution d'images au format JPEG
- Restitution d'images basse résolution (160 x 128 @ 8 bpp avec 0,75 à 6 fps)
- CODEG JPEG avec résolution et réglage de qualité variable
- Conversion de couleur: 4 / 16 / 256 niveaux de gris - 12 / 16 bits RGB 
- Capteur "VGA"

- Utilisation simple via commande externe
- Dimensions : 20 x 28 mm

La documentation PdF est ICI

 Sont brochage est le suivant :

Le module et pilotable à l'aide d'un jeu de 11 instructions résumées ci après. Les commandes respectent le protocole série RS232 dont voici un exemple de trame :

Le jeu d'instructions du module :


Pour plus d'informations concernant l'utilisation du jeu d'instructions, merci de bien vouloir consulter le datasheet constructeur.

 

A la mise sous tension la vitesse de communication par défaut du module est de 9600 Bds. C'est à cette vitesse que nous effectuerons sont initialisation. La phase d'initialisation consiste à envoyer la commande SYNC (AA 0E 0D xx 00 00) jusqu'a ce que le module réponde par un acquittement (ACK) et une synchronisation (SYNC). Cette opération est à effectué 60 fois au maximum, imparti ce nombre d'essaie, il est préférable de réaliser un hard reset. Généralement le module répond au bout de la 25 ème tentatives. Une fois la réponse reçue, il faut impérativement la validé par un nouvelle commande SYNC
Ci dessous l'organigramme de la procédure de reset :

 

Dans le projet Camrecorder, nous utiliserons la caméra à sa vitesse de communication maximale, soit 115200 Bps.
Aussitôt après la phase de reset et d'établissement de la communication avec le module, le microcontrôleur enverra la commande
SET BAUDRATE suivante : AA 07 0F 01 00 00, vérifiable à l'aide du tableau d'instructions.

Ensuite et dans l'ordre il faut envoyer les commandes suivantes afin de récupérer un snap JPEG de dimension 320 x 480 :

Bien entendu, la prise en compte de chaque commande est validée du coté module par un ACK.

Interessons nous maintenant à la structure des paquets retournés aussitôt envoyé la commande GET PICTURE; Ils contiennent l'image compressée sous format JPEG.
Tous les fichiers JPEG comprennent un entête contenant les informations de taille, palette de couleur et type de compression. La suite du fichier JPEG est constituée de l'image par elle même. Cette image et bien sur inexploitable sans le Codec correspondant.
Ce qui nous interresse n'est pas de décoder l'image en temps réel, bien que cela reste possible, mais de récupérer les paquets que l'on va coller les uns à la suite des autres pour parvenir à la construction du fichier totale. Je rappelle au passage que la caméra peut très bien être utilisée sans Codec : noir et blanc ou couleur... mais la taille de l'image récupérée et bien évidement supérieure au JPEG

Pour revenir sur la structure des paquets, nous avions décidé de fixer leurs taille à 512 octet, on récupérera dans un paquet les informations suivantes visualisées à l'aide de winhex :

Comme le datasheet nous l'indique, les 2 premiers octets nous donne le numéro de paquet, par conséquent comme il s'agit du premier, il est identifié 00 00 , le deuxième lui sera 01 00, il faut effectivement inverser les octets.
Les 2 octets suivants renseigne sur la taille utile occupée pas les informations du fichiers JPEG par lui même sans celles spécifiques au module JPEG; comme expliqué précedement , nous avons la valeur FA 01, qui une fois inversé donne $01FA soit en décimale : 506.
Les 2 derniers octets sont un code de vérification, un genre de checksums, bien que je n'ai aucune information à ce sujet.

Maintenant, il reste donc à enlever les octets ne faisant pas partis de l'image elle même, puis de créer un fichier dans lequel sera mis suite à suite les prochains paquets en effectuant le même type d'ablations d'informations. En le nommant monfichier.jpg, il pourra être visualisé dans toute sorte de logiciels photos ou navigateurs.

Une dernière précision : aussitôt envoyé la commande GET PICTURE, le module retourne 12 octets , les 6 premiers étant l'ACK normale et les 6 autres contenants la taille du snap.

Exemple D'utilisation:

On retrouve les convertisseurs MAX485 afin de remettre en forme les signaux de communications. Un petit diviseur de tension composé de R3 et R4 est nécessaire afin de faire chuter la tension de sortie du drivers MAX485 de 5 à 3 Volts.