Meilleures ventes

View All

Facebook Timeline

Tutoriel Caméra PTC06, Arduino, et carte SD: GOD HELP ME PLEASE

Posted On: sept. 3, 2020

Seen by: 191

Categories: CAMERAS

Author: Christian Joseph

Tags: Caméra , ptc06 , arduino mega , module sd arduino , shield sd arduino , image , photo

Nous allons prendre  des photos avec  la camera PTC06 et un Arduino Mega, et enregistrer l’image sur une carte SD via un module carte SD Arduino…Dis comme ça cela a l’air facile, parce que sur le papier c’est toujours parfait, mais dans la réalité c’est autre chose : sinon les normes environnementales seraient respectées de tous, le PSG aurait gagné la ligue des champions, et l’OM ne se serait pas fait battre par une équipe avec un nom de médicament (Dunajská  Streda, mais bon eux  ils ont l’étoile  gneugneugneu et patati et patata!!!). Enfin Bref comme je le disais c’est peut être simple sur le papier, mais pas toujours dans la réalité, d’où le titre GOD HELP ME PLEASE...

1. Présentation:

La Caméra PTC06 est une caméra Jpeg  Cmos qui permet de prendre des photos (snapshots).

La caméra PTC06 se commande par le protocole UART, et peut être relié à tous types de microcontrôleurs  disposant d'un port UART.

 

2. Connection avec Arduino et le module carte SD (ou micro sd)

 wiring Arduino mega ptc06 cameracamera PTC06 Arduino Mega SD CardLa valeur des résistances dans le diviseur de tension est de 1 Kohms.

3. Programme

Au départ, il n'était pas simple de comprendre le fonctionnement de la caméra, surtout avec les trames à envoyer. De plus, extraire la donnée Jpeg représentant la photo relevait plus du parcours du combattant , et il existe très peu d'informations claires concernant cette caméra et sa mise en oeuvre avec Arduino

c'est la raison pour laquelle nous avons eu plusieurs programmes Arduino:

·         Camera1.ino--------Failed

·         Camera2.ino--------Failed

·         Purée_De_Camera.ino--------Failed

·         Jy_Comprend_rien_a_cette_Camera.ino--------Failed

·         BIP_BIP_de_Camera_de BIP_BIP.ino--------Failed

Et finalement dans un élan de désespoir, nous avons crée le programme:

GOD_HELP_ME_PLEASE.ino-----Success

Alléluia notre prière a été entendue:

/*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)
    {
      
    } }