Tutoriel : Utilisation de la Caméra PTC06 avec Arduino pour Enregistrer des Images sur une Carte SD

L’intégration d’une caméra comme la PTC06 avec un microcontrôleur Arduino pour capturer des images et les enregistrer sur une carte SD semble être un processus simple sur le papier. Cependant, dans la réalité, cela peut s’avérer être un défi de taille.

Ce tutoriel vise à démystifier cette procédure complexe en partageant notre expérience et les solutions adoptées, illustrant ainsi le parcours souvent tumultueux vers le succès.

Présentation de la Caméra PTC06

La Caméra PTC06, une caméra Jpeg Cmos, offre la capacité de prendre des photos (snapshots). Elle fonctionne via le protocole UART et peut être connectée à différents microcontrôleurs équipés d’un port UART.

Connexion avec Arduino et le Module Carte SD

L’intégration de la caméra PTC06 avec un Arduino Mega et un module carte SD nécessite une configuration précise.

Les détails de connexion, y compris les valeurs des résistances dans le diviseur de tension, sont cruciaux pour assurer un fonctionnement efficace de l’ensemble.

Programme et Étapes

La compréhension du fonctionnement de la caméra, en particulier des trames à envoyer, ainsi que l’extraction des données Jpeg représentant les images, étaient des défis majeurs.

Les nombreux programmes Arduino créés témoignent des étapes franchies pour atteindre le succès final.

Programme "GOD_HELP_ME_PLEASE"

Dans un élan de désespoir, le programme “GOD_HELP_ME_PLEASE” a été conçu et s’est avéré être la solution à nos problèmes.

Ce programme, élaboré par Christian Joseph le 03/09/2020, a été un tournant dans notre exploration de l’utilisation de la caméra PTC06 avec Arduino.

				
					/*Programme: GOD_HELP_ME_PLEASE
Auteur: Christian Joseph
Date: 03/09/2020
www.eagle-robotics.com
*/
#include "SPI.h"
#include "SD.h"

 
byte ZERO = 0x00;
byte incomingbyte;
long int j=0,k=0,count=0,i=0x0000;
uint8_t MH,ML;
boolean EndFlag=0;
File  myFile;
 
void SendResetCmd()
{
    Serial1.write(0x56);
    Serial1.write(ZERO);
    Serial1.write(0x26);
    Serial1.write(ZERO);
}
 
/*************************************/
/* Set ImageSize :
/* <1> 0x22 : 160*120
/* <2> 0x11 : 320*240
/* <3> 0x00 : 640*480
/* <4> 0x1D : 800*600
/* <5> 0x1C : 1024*768
/* <6> 0x1B : 1280*960
/* <7> 0x21 : 1600*1200
/************************************/
void SetImageSizeCmd(byte Size)
{
    Serial1.write(0x56);
    Serial1.write(ZERO);  
    Serial1.write(0x54);
    Serial1.write(0x01);
    Serial1.write(Size);
}
 
/*************************************/
/* Set BaudRate :
/* <1>¡¡0xAE  :   9600
/* <2>¡¡0x2A  :   38400
/* <3>¡¡0x1C  :   57600
/* <4>¡¡0x0D  :   115200
/* <5>¡¡0xAE  :   128000
/* <6>¡¡0x56  :   256000
/*************************************/
void SetBaudRateCmd()
{
    Serial1.write(0x56);
    Serial1.write(ZERO);
    Serial1.write(0x31);
    Serial1.write(0x06);
    Serial1.write(0x04);
    Serial1.write(0x02);
    Serial1.write(ZERO);
    Serial1.write(0x08);
    Serial1.write(0X2A);
    Serial1.write(0xF2);
}
 
void SendTakePhotoCmd()
{
    Serial1.write(0x56);
    Serial1.write(ZERO);
    Serial1.write(0x36);
    Serial1.write(0x01);
    Serial1.write(ZERO);
}
 
void SendReadDataCmd()
{
    MH=i/0x100;
    ML=i%0x100;
    Serial1.write(0x56);
    Serial1.write(ZERO);
    Serial1.write(0x32);
    Serial1.write(0x0c);
    Serial1.write(ZERO);
    Serial1.write(0x0a);
    Serial1.write(ZERO);
    Serial1.write(ZERO);
    Serial1.write(MH);
    Serial1.write(ML);
    Serial1.write(ZERO);
    Serial1.write(ZERO);
    Serial1.write(ZERO);
    Serial1.write(0x20);
    Serial1.write(ZERO);
    Serial1.write(0x0a);
    i+=0x20;
}
 
void StopTakePhotoCmd()
{
    Serial1.write(0x56);
    Serial1.write(ZERO);
    Serial1.write(0x36);
    Serial1.write(0x01);
    Serial1.write(0x03);
}
 
void setup()
{
    Serial.begin(38400);
    while (!Serial)
    {
        ;
    }
 
    Serial.print("Initialisation carte SD...");
    pinMode(53, OUTPUT);
    if (!SD.begin(53))
    {
        Serial.println("initialisation KO!");
        return;
    }
    Serial.println("initialisation reussie.");
    Serial.println("Veuillez patienter ....");
 
    Serial1.begin(115200);
    delay(500);
    SendResetCmd();
    delay(2000);
    SetBaudRateCmd();
    delay(500);
    Serial1.begin(38400);
    delay(100);
}
 
void loop()
{
    byte a[32];
    int ii;
 
    SendResetCmd();
    delay(2000);                            //attente 2 à 3 secondes pour prendre la photo
    SendTakePhotoCmd();
    delay(1000);
    while(Serial1.available()>0)
    {
        incomingbyte=Serial1.read();
    }
 
    myFile = SD.open("pic777.jpg", FILE_WRITE); //Nom de la photo à enregistrer
 
    while(!EndFlag)
    {
        j=0;
        k=0;
        count=0;
        //Serial1.flush();
        SendReadDataCmd();
        delay(20);
        while(Serial1.available()>0)
        {
            incomingbyte=Serial1.read();
           // Serial.print(incomingbyte);
            k++;
            delay(1);
            if((k>5)&&(j<32)&&(!EndFlag))
            {
                a[j]=incomingbyte;
                if((a[j-1]==0xFF)&&(a[j]==0xD9))     //Donnée indiquant le photo terminée
                {
                    EndFlag=1;
                }
                j++;
                count++;
            }
        }
 
        for(j=0;j<count;j++)
        {
            if(a[j]<0x10)  Serial.print("0");
            Serial.print(a[j],HEX);           // observation de la donnée via le port série
            Serial.print(" ");
        }
 
        for(ii=0; ii<count; ii++)
        myFile.write(a[ii]); //Ecriture de la donnée dans la carte SD
        Serial.println();
    }
 
    myFile.close();
    Serial.print("Photo enregistree dans le fichier");
    while(1)
    {
      
    } }


				
			
Ce programme a permis de configurer et d’utiliser efficacement la caméra PTC06 avec Arduino Mega pour capturer des images et les enregistrer sur une carte SD, surmontant ainsi les défis techniques rencontrés précédemment.

Bonjour ! 🌟 Rejoignez notre newsletter pour ne rien manquer.

Recevez nos offres spéciales et les derniers articles directement dans votre boîte de réception

Nous ne faisons pas de spam, promis ! Consultez notre politique de confidentialité pour en savoir plus.

Panier
Retour en haut

Projet sur mesure