Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: Ugur2006 - 19 Kasım 2014, 14:56:52

Başlık: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 19 Kasım 2014, 14:56:52
Arkadaslar ben bir yerin güvenligi icin kendim Bilgisayar veya ona benzer kayit cihazlari kullanmadan söyle birsey yapmak istiyorum.
Arduino'ya bir Webcam baglayip bu Webcam fotograf cekip bu Fotografi SD kartina kayit ettirmek istiyorum.
Bunun icin su SD kart okuyucuyu almak istiyorum.
http://www.ebay.de/itm/SD-Kartenadapter-Card-Adapter-Arduino-ATmega-STM32-/301376967812?pt=LH_DefaultDomain_77&hash=item462b779484 (http://www.ebay.de/itm/SD-Kartenadapter-Card-Adapter-Arduino-ATmega-STM32-/301376967812?pt=LH_DefaultDomain_77&hash=item462b779484)

Kamera olarak su modul isimi görürümü?
http://www.ebay.de/itm/CMOS-Kamera-Modul-OV7670-640-x-480-SCCB-Compatible-w-I2C-Interface-fur-Arduino-/371033535119?pt=LH_DefaultDomain_77&hash=item566352728f (http://www.ebay.de/itm/CMOS-Kamera-Modul-OV7670-640-x-480-SCCB-Compatible-w-I2C-Interface-fur-Arduino-/371033535119?pt=LH_DefaultDomain_77&hash=item566352728f)

Hatta projeye birde Ultrasonic Module HC-SR04 ekleyip güvenlik icin belirledigim bölgeye yaklasan kisi veya cisimleri algilayip
Kameraya cekim yaptirip SD kartina kayit ettirebilirmiyim?

Böyle bir örnek Proje varmi link verebilirmisiniz?
Yardimci olacak arkadaslara simdiden tesekkürler.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: polleme - 19 Kasım 2014, 15:16:35
Hiç uğraşma, bir Raspberry Pi ile onun kamerası ile hazır çok sayıda proje var. RPi'ın kendi kamerasını kullanmasanız bile bir uyumlu USB kamera da kullanabilirsiniz. Bir örnek:

http://www.instructables.com/id/Raspberry-Pi-as-low-cost-HD-surveillance-camera/?ALLSTEPS (http://www.instructables.com/id/Raspberry-Pi-as-low-cost-HD-surveillance-camera/?ALLSTEPS)
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 19 Kasım 2014, 16:01:09
Saol Dostum ama bu si Arduino ve ona uyumlu modullerle yapmam gerek.
O nedenle Arduino ile yapilmis uygulamalar ariyorum. Bu konuda bilgisi olan varsa yardimci olursa sevinirim.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: polleme - 19 Kasım 2014, 16:09:31
O zaman şu kamerayı kullanabilirsiniz. Seri porttan görüntü alabiliyorsunuz, elimde bir adet var ama henüz test edemedim.

http://robotic-controls.com/learn/arduino/linksprite-jpeg-camera (http://robotic-controls.com/learn/arduino/linksprite-jpeg-camera)

http://www.linksprite.com/article/shownews.php?lang=en&id=122 (http://www.linksprite.com/article/shownews.php?lang=en&id=122)


mesaj birleştirme:: 19 Kasım 2014, 16:18:46

Şu link tam istediğiniz durumu gösteriyor.

http://robotic-controls.com/learn/sensors/linksprite-jpeg-camera/saving-images-sd-card-0 (http://robotic-controls.com/learn/sensors/linksprite-jpeg-camera/saving-images-sd-card-0)
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 20 Kasım 2014, 01:04:44
olmadi yaaa,
ben su kaerayi satin aldim.
http://www.ebay.de/itm/271513576941?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649 (http://www.ebay.de/itm/271513576941?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649)

bu aldigim Kameranin arduino ile uyumlu oldugunu okudugum icin aldim.
ama elle turulur bir proje uygulamasi bulamadim.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: muhendisbey - 20 Kasım 2014, 09:37:58
Doğru ürün almışsın. Arduino'nun hızı fotoğraf çekmeye müsait değil. Bu nedenle FIFO'lu bir kamera alman gerekirdi ki öyle yapmışsın. Çektiğin fotoğraf fifoya kaydolur, sonrasında fotoğrafı fifodan okursun. Sıkıntı yok.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 20 Kasım 2014, 19:34:45
@muhendisbey
o Zaman iyi yapmisim, peki benim istegime Uygun bir uygulama linki vermeniz mümkünmü?Tabiki bildiginiz bir link varsa?
Su linkte bir örnek var
http://nicolasfley.fast-page.org/?page_id=35 (http://nicolasfley.fast-page.org/?page_id=35)

Hatta orda söyle bir baglanti mevcut.
(http://nicolasfley.fast-page.org/wp-content/uploads/2013/09/schema_arduino_FIFO_OV7670.png)

fakat sitedeki bu resmin altinda verilen Arduino kodunu anlayamadim.
Kamare görüntüsü nasil aliniyor?
Ne Zaman aliniyor, herhangi bir Button veya ultrashall falan yok, SD karti yok.
ben ultrasall göz baglayip, 50 cm yaklasan bir cisim oldugunda Foto ceksin ve SD karta kayit etsin.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 20 Kasım 2014, 20:18:43
https://github.com/arndtjenssen/ov7670 (https://github.com/arndtjenssen/ov7670)
kod var.

Senin için aslında daha iyisi vardı. Ama linkleri kaybolmuş. "Witness camera" başlığı altında yayınlanan hatta elektronik dergilerin birisinde yayınlanmış bir proje.(Atmega32 ile yapılmış)  İstediğin gibi pır ile sinyal geldiğinde kameradan görüntü alınır ve sd karta kaydedilen bir yapı)
http://www.electronics-lab.com/blog/?p=1567 (http://www.electronics-lab.com/blog/?p=1567)
http://www.electronics-lab.com/blog/?p=1074 (http://www.electronics-lab.com/blog/?p=1074)
http://www.electronics-lab.com/blog/?p=1460 (http://www.electronics-lab.com/blog/?p=1460)


http://electronix.ru/forum/index.php?act=Attach&type=post&id=16463 (http://electronix.ru/forum/index.php?act=Attach&type=post&id=16463)
en azından bir fikir verebilir.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: bocek - 21 Kasım 2014, 00:02:59
@ambar7 bahsettiğin proje Ricci Bitti isimli şahsınki galiba ama sayfası kaybolmuş.
http://www.riccibitti.com/witnesscam/entry/witnesscam.htm (http://www.riccibitti.com/witnesscam/entry/witnesscam.htm)

Ruslar şuraya koymuş sağolsunlar:
http://roboforum.ru/forum58/topic5907.html (http://roboforum.ru/forum58/topic5907.html)

İranlılar'da da var ama üyelik istiyor:
http://www.tamirkaran.ir/forum/TamirKaran58/atmega32-3418.html (http://www.tamirkaran.ir/forum/TamirKaran58/atmega32-3418.html)

Biraz daha zorlasak Çinli'sini, Alman'ını filan da bulacaz ama gerek yok :)
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 22 Kasım 2014, 21:06:31
@bocek
1.link calismiyor
2.linkdeki calismada Arduino kodu verilmemis
3.link arapca hangi linke tiklanacagini dahi bulamadim.

OV7670 Kamera 'yi satin aldim.
http://www.ebay.de/itm/271513576941?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649 (http://www.ebay.de/itm/271513576941?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649)

cünkü bir cok yerde Arduino ile uyumlu oldugu yaziyordu.
ama hic biryerde bu kameraya görüntü aldirip, bu görüntüyü SD karta resim dosyasi olarak kayit ettiren uygulama veya proje bulamadim.
Tabik ARDUINO UNO ile yapilmis bir örnek!
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: bocek - 22 Kasım 2014, 23:17:55
1. linkin çalışmadığını biliyorum. Onu @ambar7'nin bahsettiği "wittness camera" nın orijinal linki olsun diye verdim. Çünkü "witness camera" diye aratınca hep bu linke çıkıyor.
2. link te, kaybolan orijinal linktekileri bulmak isteyenler içindi.
3. linki (ve rusça, çince gibi olanları) google translate ile okuyacaksın.

Satın aldığın ebay sayfasında adam zaten örnek proje linki vermiş.

"Projekt OV7670 with the AL422 FIFO and an Arduino uno Rev3  , klicken Sie HIER (http://nicolasfley.fast-page.org/?page_id=35)"



mesaj birleştirme:: 22 Kasım 2014, 23:28:53

şurda da tam senin istediğin var:
https://github.com/arndtjenssen/ov7670
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 26 Kasım 2014, 14:31:39
Burdaki uygulama ile isi cözdüm.
http://learn.linksprite.com/jpeg-camera/use-linksprite-jpeg-camera-to-take-picture-and-store-to-a-sd-card/ (http://learn.linksprite.com/jpeg-camera/use-linksprite-jpeg-camera-to-take-picture-and-store-to-a-sd-card/)

Simdi kameradan bir görüntüyü SD karta yazdirabiliyorum.
fakat bir kare Fotografi SD karta yaklasik 30-40 saniyede yaziyor.
sanirim buda Arduino üzerindeki Atmega 328P islemcisinin yavasligindan kaynaklaniyor.
Acaba bu süreyi indirme imkanim vami?
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 26 Kasım 2014, 15:15:58
Bu olayda biraz zor. Normalde Uno üzerindeki işlemci 20MHz'de çalışabilir. Kart 16MHz'de çalışıyor. Kristal değiştilerek yükseltme imkanı var. Ama bu durumda seri port ve zamanlayıcı ile ilgili ayarlar kayar.
Burada kameradaki görüntüye aktarma şekli ile ilgili bir durumda olabilir. Ram kapasitesi 2k civarındadır. 147 bayt civarı değişkenlere ayrılıyor geri kalan hem veri aktarımında hemde flash belleğe yazmak için kullanılıyor. Baya küçük bir alan kalıyor.

Olay birde Arduino Mega (ATmega2560 işlemci ) bir kart ile de denebilir.  Saat frekansı 16 MHz'da ama ram kapasitesi daha yüksek. Muhtemelen hızlanabilir.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: muhendisbey - 26 Kasım 2014, 15:59:33
Arduino due dahi kullansan olmaz. Kısaltman mümkün ama normal süresine inmesi için iyi bir işlemci kullanman şart.
Bu arada DUE hakkında da bilgi vereyim, işlemci ferrari görünümlü şahin. 84MHz demesine rağmen bunu çalışması esnasında asla göremiyorsunuz ve çalışması UNO'dan farksız kalıyor. Port manipulation dahil herşeyi denedim. Bir tek denemediğim atmel studio kaldı.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 26 Kasım 2014, 16:58:10
Bu arada eğer resmi hangi çözünürlükte kaydediyor bakılıp, çözünürlük azaltılarak kaydedilebilir.

ALternatif yöntem kameranın jpeg resim gönderme özelliği varsa o yöntem ile kaydedilebilir.

Ama bunlar için programın düzenlenmesi ve yeniden yazılması gerekebilir.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 27 Kasım 2014, 14:12:13
Aldigim Foto kalitesi 320x240 Pixel.
Bir örnek kare:
(http://img5.fotos-hochladen.net/uploads/piczmp78eo25f.jpg)

bu edaptaki bir fotoyu 30-40 Saniye gibi bir sürede olusturuyor.
Sanirm Serial Kamera modulun icindeki islemciyi okuyup, sonra SD karta HEX olarak yaziyor bu nedenle.
baska alternatif?
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 27 Kasım 2014, 15:27:37
muhtemeler (programını fazla incelemedim) 512 baytlık gruplar halinde okuyup yazıyor.
Tek tek okuyup yazması daha fazla zaman alır. Senin için resim küçük olabilir ama resmi 320x240x3 olarak bayt cinsinden değer sahip bir alanı kaplıyor. Aslında en hızlısı tüm resmi işlemcinin okuyup sonra bunu doğrudan sd karta göndermesi olurdu, ama göreceğin gibi bu işlemcinin alamayacağı bir ram boyutundadır.
Program incelenip kamera ve sd kard kablo boyutları kısaltılıp iletişim protokolleri biraz daha hızlandırılabilir.

daha üst işlemci bulunan bir kart kullanılabilir (RAM olarak),

veya kendi programınızı yazabilecekseniz ARM işlemci kullanan bir kart kullanılabilir.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 30 Kasım 2014, 16:53:21
Neyse hizi simdilik idare eder.
Ama söyle bir sorunla karsilastim.
Bu yaptigim projenin Arduino dosyasi asagidaki linkte.
Su an kod Serial Monitör'ün acilisinda Kameradan bir kere görüntü alip PIC.JPG  adinda SD karta yaziyor.
https://www.dropbox.com/s/2wh5i9ulww5q1lu/Serial_Kamera.ino?dl=0 (https://www.dropbox.com/s/2wh5i9ulww5q1lu/Serial_Kamera.ino?dl=0)

Ben bu kodu su sekile getirmek istiyorum.Istedigim su:
Bu devreye bir Button ekleyip örnegin A5 pinine.
Bu buttona her tiklandiginda SD karta Resim olustursun.
Her Resimin adini pic1.jpg, pic2.jpg, pic3.jpg, ....  seklinde kayit etsin istiyorum.
Yukardaki kodu bu sekilde nasil düzenlemeliyim?
Ben düzenlemeye calistim fakat bir türlü beceremedim..!
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 30 Kasım 2014, 17:39:07

// 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

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND



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

byte ZERO = 0x00;
const int buttonPin = 5; //sinyal bacağı girişi
int foto_say=0;  //fotograf sayacı

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);
pinMode(buttonPin, INPUT);

  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;
if (buttonState == LOW) {   //pin5 girişi lojik 0 ise işleme başla.
  foto_say ++;
  SendResetCmd();
  delay(4000);                            //Wait 2-3 second to send take picture command
  SendTakePhotoCmd();
  while (mySerial.available() > 0)
  {
    incomingbyte = mySerial.read();
  }
  String dosya_adi;
  dosya_adi =String("pic")+ foto_say + "jpg" ;
  myFile = SD.open(dosya_adi, 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");
}

}

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);
}


Kütüphaneler olmadığı için denemedim o yüzden
hata olabilir ama mantık üç aşağı beş yukarı bu şekilde..

Seri port ile ilgili satırları ayıklarsan biraz daha hızlanabilir. Bu program bazı seri port satırlarını başka açlar için de kullanıyor. Dikkatli olmak gerekir.

Not: Elektrik kesilince pic sayma olayını sıfırdan başlar. dikkat etmek gerekir. Yoksa sayacı eeprom'a yazmak ve oradan okumak gerekirdi....
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: SERRO EFE - 30 Kasım 2014, 17:55:33
Kayıt hızı için kamera daha yüksek baudrate destekliyordur. 38400 baud olarak çalıştırmışsınız bunu 115200 hatta fazlasını destekliyorsa kayıt hızınız o oranda artacaktır.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 30 Kasım 2014, 22:41:42
Alıntı yapılan: ambar7 - 30 Kasım 2014, 17:39:07

// 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

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND



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

byte ZERO = 0x00;
const int buttonPin = 5; //sinyal bacağı girişi
int foto_say=0;  //fotograf sayacı

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);
pinMode(buttonPin, INPUT);

  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;
if (buttonState == LOW) {   //pin5 girişi lojik 0 ise işleme başla.
  foto_say ++;
  SendResetCmd();
  delay(4000);                            //Wait 2-3 second to send take picture command
  SendTakePhotoCmd();
  while (mySerial.available() > 0)
  {
    incomingbyte = mySerial.read();
  }
  String dosya_adi;
  dosya_adi =String("pic")+ foto_say + "jpg" ;
  myFile = SD.open(dosya_adi, 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");
}

}

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);
}

@ambar7
Dostum buttonPin degiskeni tanimlamissin fakat kod icinde buttonState yazmissin , orayi düzelltim fakat su satirdada hata veriyor
myFile = SD.open(dosya_adi, FILE_WRITE); [code]verdigi hata söyle:
no matching function for call to 'SDClass::open(String&, int)

open fonksiyonu char tipinde paremteresini aliyormus.
File SDClass::open(const char*, uint8_t)
 

@SERRO EFE
Kayit hizini 115200 yaptigimda olusan .jpg dosyasinin ici bos cikiyor. 
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 01 Aralık 2014, 00:06:38
#include <SPI.h>
#include <SoftwareSerial.h>
#include <SD.h>

// 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

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND



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

byte ZERO = 0x00;
const int buttonPin = 5; //sinyal bacağı girişi
int foto_say = 0; //fotograf sayacı
int buttonState = 0;

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);
  mySerial.begin(38400);
  pinMode(buttonPin, INPUT);

  // 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;
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {   //pin5 girişi lojik 0 ise işleme başla.
    foto_say ++;
    SendResetCmd();
    delay(4000);                            //Wait 2-3 second to send take picture command
    SendTakePhotoCmd();
    while (mySerial.available() > 0)
    {
      incomingbyte = mySerial.read();
    }
    dosya_adi(foto_say);
    //myFile = SD.open(dosya_adi[foto_say], 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");
  }

}

void dosya_adi(int dosya_no)
{
if (dosya_no==1)
myFile = SD.open("pic1.jpg", FILE_WRITE);
else if (dosya_no==2)
myFile = SD.open("pic2.jpg", FILE_WRITE);
else if (dosya_no==3)
myFile = SD.open("pic1.jpg", FILE_WRITE);
else if (dosya_no==4)
myFile = SD.open("pic4.jpg", FILE_WRITE);
else if (dosya_no==5)
myFile = SD.open("pic5.jpg", FILE_WRITE);
else if (dosya_no==6)
myFile = SD.open("pic6.jpg", FILE_WRITE);
else if (dosya_no==7)
myFile = SD.open("pic7.jpg", FILE_WRITE);
else if (dosya_no==8)
myFile = SD.open("pic8.jpg", FILE_WRITE);
else if (dosya_no==9)
myFile = SD.open("pic9.jpg", FILE_WRITE);
else if (dosya_no==10)
myFile = SD.open("pic10.jpg", FILE_WRITE);
else if (dosya_no==11)
myFile = SD.open("pic11.jpg", FILE_WRITE);
else if (dosya_no==12)
myFile = SD.open("pic12.jpg", FILE_WRITE);
else if (dosya_no==13)
myFile = SD.open("pic13.jpg", FILE_WRITE);
else if (dosya_no==14)
myFile = SD.open("pic14.jpg", FILE_WRITE);
else if (dosya_no==15)
myFile = SD.open("pic15.jpg", FILE_WRITE);
else if (dosya_no==16)
myFile = SD.open("pic16.jpg", FILE_WRITE);
else if (dosya_no==17)
myFile = SD.open("pic17.jpg", FILE_WRITE);
else if (dosya_no==18)
myFile = SD.open("pic18.jpg", FILE_WRITE);
else if (dosya_no==19)
myFile = SD.open("pic19.jpg", FILE_WRITE);
else if (dosya_no==20)
myFile = SD.open("pic20.jpg", FILE_WRITE);
}


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);
}


Benim bulduğum çözüm ancak bu kadar olabiliyor...

void dosya_adi(int dosya_no)  fonksiyonu altında dosya isimlerini ayrı ayrı tanımlamakta. Pek iyi bir çözüm olmasada şidilik bu kadar.
sadece foto_say dikkate etmek gerekecek. Ben 20'ye kadar dosyaya isim verdirdim. Daha isteniyorsa eklenmesi ve foto_say  o değeri geçtiği zaman sıfırlanması gerekir yoksa resimleri kaydetmez.

mesaj birleştirme:: 01 Aralık 2014, 00:14:23

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

// 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

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND

byte ZERO = 0x00;
const int buttonPin = 5; //sinyal bacağı girişi
int foto_say = 0; //fotograf sayacı
int buttonState = 0;

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);
  mySerial.begin(38400);
  pinMode(buttonPin, INPUT);

  // 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;
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {   //pin5 girişi lojik 0 ise işleme başla.
    foto_say ++;
    SendResetCmd();
    delay(4000);                            //Wait 2-3 second to send take picture command
    SendTakePhotoCmd();
    while (mySerial.available() > 0)
    {
      incomingbyte = mySerial.read();
    }

    char dosya_adi[25] = {};
    sprintf(dosya_adi, "pic%d.jpg", foto_say);

    myFile = SD.open(dosya_adi, 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");
  }

}

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);
}


Böyle bir çözümü de olabiliyormuş...
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Ugur2006 - 06 Aralık 2014, 19:09:03
Dostum bugün deneme firsatim oldu düzenledigin Kodu denemek icin. Sonuc oluyor, SD kartina
PIC1.jpg
PIC2.jpg
PIC3.jpg
diye kayit ediyor.

Fakat,
PIC1.jpg dosyasi aciliyor ve resim görünüyor yaklasik 13 kb dolayinda.
Diger  PIC2.jpg,PIC3.jpg,PIC4.jpg, ... dosyalarinin hepsi bos oluyor, ve 0 kb büyüklügünde yaziliyor.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: Kabil ATICI - 06 Aralık 2014, 23:52:19
#include <SPI.h>
#include <SoftwareSerial.h>
#include <SD.h>

// 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

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND

byte ZERO = 0x00;
const int buttonPin = 5; //sinyal bacağı girişi
int foto_say = 0; //fotograf sayacı
int buttonState = 0;

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 setup()
{

  Serial.begin(38400);
  mySerial.begin(38400);
  pinMode(buttonPin, INPUT);

  // 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;
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {   //pin5 girişi lojik 0 ise işleme başla.

j = 0;      //başlangıç değerleri
k = 0;  //her dosya yazmada sıfırlanması gereken
count = 0;
i = 0;
EndFlag = 0;
ZERO = 0x00;
for (int gg=0;gg<32;gg++)
{
a[gg]=0;
}
//a = 0;     
   
    foto_say ++;
    SendResetCmd();
    delay(4000);                            //Wait 2-3 second to send take picture command
    SendTakePhotoCmd();
    while (mySerial.available() > 0)
    {
      incomingbyte = mySerial.read();
    }

    char dosya_adi[25] = {};
    sprintf(dosya_adi, "pic%d.jpg", foto_say);

    myFile = SD.open(dosya_adi, 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");
  }
}

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);
}


Benim bu kodu doğrudan donanım üzerinde deneme şansım yok. Sadece derlenip, derlenmediğini  bakabilirim.
Başlık: Ynt: Arduino ile Kamera ile Fotograf cekip SD Karta kayit ettirmek isiyorum.
Gönderen: sahinn - 19 Aralık 2014, 12:18:18
Merhaba arkadaşlar,

Ben de bitirme tezim için aynı proje üzerinde çalışıyorum. Kodları deniyorum ama bir türlü aşağıdaki resimde yer alan kısmı geçemedim. "Initializing SD card..." yazıp daha sonra "initialization failed!" hatası veriyor ve kalıyor. Burayı geçebilirsek herhalde çalışacaktır. Pin numaraları da aynı şekilde bağlı acaba onlarda mı sıkıntı var? Yardımcı olabilir misiniz?

Pin bağlantısı:
//  * SD card attached to SPI bus as follows:
//  ** MOSI - pin 11
//  ** MISO - pin 12
//  ** CLK  - pin 13
//  ** CS   - pin 4

//  * Camera
//  ** RX   - pin 6
//  ** TX   - pin 5
//  ** VCC  - 5V
//  ** GND  - GND

Proje bunun aynısı: http://learn.linksprite.com/jpeg-camera/use-linksprite-jpeg-camera-to-take-picture-and-store-to-a-sd-card/ (http://learn.linksprite.com/jpeg-camera/use-linksprite-jpeg-camera-to-take-picture-and-store-to-a-sd-card/)
Teşekkürler..


(http://s30.postimg.cc/gp2284tcd/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/gp2284tcd/)