• Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
HomeJPEG CameraUse LinkSprite JPEG Camera to Take Picture and Sto ...
Previous Next

Use LinkSprite JPEG Camera to Take Picture and Store to a SD card

Posted by: admin , February 11, 2014

[vc_row][vc_column][vc_column_text]In this tutorial, we are going to cover using LinkSprite JPEG camera to capture a picture and save it to a SD card.  We have done a tutorial before. In this one, we will repeat the same one for latest Arduino IDE 1.5.

[/vc_column_text][vc_tour][vc_tab title=”Parts List” tab_id=”1392158675-1-11″][vc_column_text]1. Arduino Uno

2. LinkSprite JPEG Camera

3. SD  Card Breakout

4. Male to Male Jumper wires

5. Female to male jumper wires

6. Breadboard

7. SD card[/vc_column_text][/vc_tab][vc_tab title=”Wire Diagram” tab_id=”1392158675-2-28″][vc_column_text]

SD Card Breakout Board

  • MOSI of SD breadout– pin 11 of Arduino
  • MISO  of SD breadout– pin 12 of Arduino
  • CLK of SD breadout – pin 13 of Arduino
  •  CS of SD breadout – pin 4 of Arduino
  • VCC of SD breadout -5v of Arduino

JPEG Camera

  • RX of camera -pin6 of Arduino
  • TX of camera -pin5 of Arduino
  • VCC of camera -5v of Arduino

[/vc_column_text][/vc_tab][vc_tab title=”Arduino Code” tab_id=”1392160485270-2-2″][vc_column_text]

// LinkSprite.com
// Note:
// 1. SD must be formated to FAT16
// 2. As the buffer of softserial has 64 bytes, so the code read 32 bytes each time
// 3. Please add the libaray to the lib path

//  * SD card attached to SPI bus as follows:
//** MOSI - pin 11
// ** MISO - pin 12
// ** CLK - pin 13
// ** CS - pin 4

#include <SoftwareSerial.h>
#include <SD.h>

byte ZERO = 0x00;

byte incomingbyte;
SoftwareSerial mySerial(5,6);          // Set Arduino pin 4 and 5 as softserial

long int a=0x0000,j=0,k=0,count=0,i=0;
uint8_t MH,ML;
boolean EndFlag=0;

File  myFile;

void SendResetCmd();
void SetBaudRateCmd();
void SetImageSizeCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();

void setup()
{

Serial.begin(38400);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

mySerial.begin(38400);

Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);

if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

}

void loop()
{

byte a[32];
int ii;

SendResetCmd();
delay(4000);                            //Wait 2-3 second to send take picture command

SendTakePhotoCmd();

while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}

myFile = SD.open("pic.jpg", FILE_WRITE); //<strong><span style="color: #ff0000;">The file name should not be too long</span></strong>

while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();

delay(20); //250 for regular

while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
k++;
if((k>5)&&(j<32)&&(!EndFlag))
{
a[j]=incomingbyte;
if((a[j-1]==0xFF)&&(a[j]==0xD9))     //tell if the picture is finished
EndFlag=1;
j++;
count++;
}
}

for(j=0;j<count;j++)
{
if(a[j]<0x10)
Serial.print("0");
Serial.print(a[j],HEX);           // observe the image through serial port
Serial.print(" ");
}

for(ii=0; ii<count; ii++)
myFile.write(a[ii]);

Serial.println();

i++;

}

myFile.close();

Serial.print("Finished writing data to file");

while(1);

}

void SendResetCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x26);
mySerial.write(ZERO);
}

void SetImageSizeCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write(ZERO);
mySerial.write(0x19);
mySerial.write(0x11);
}

void SetBaudRateCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0x2A);
mySerial.write(0xC8);

}

void SendTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(ZERO);
}

void SendReadDataCmd()
{
MH=a/0x100;
ML=a%0x100;
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write(ZERO);
mySerial.write(0x0a);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(MH);
mySerial.write(ML);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(0x20);
mySerial.write(ZERO);
mySerial.write(0x0a);
a+=0x20;
}

void StopTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}

[/vc_column_text][/vc_tab][vc_tab title=”Results” tab_id=”1392160521476-3-5″][vc_column_text]We wire everything and connect Arduino to PC through USB port. Launch Arduino IDE 1.5, compile and download the code.

The SD card needs to be formatted to be FAT16.

If we have a serial console, we can observe the progress.

The following is the picture stored on a SD card.

[/vc_column_text][/vc_tab][/vc_tour][/vc_column][/vc_row]

Tags: JPEG Camera

Share!
Tweet

admin

About the author

Leave a Reply Cancel reply

You must be logged in to post a comment.

Category

  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors