Arduino İle Kameradan Görüntü Alma (Image Acquisition with the Arduino Camera)

21 14.555

[wp-review]

Bu projemizde ethernet shield kartı kullanarak ip üzerinden kameradan görüntü alacağız.

Malzemeler:

  1. Arduino
  2. Arduino Ethernet Shield
  3. Serial kamera

Kamera Kod

#include <Adafruit_VC0706.h>
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>

// Arduino Ethernet shield: pin 4
#define chipSelect 4
// Using SoftwareSerial (Arduino 1.0+) or NewSoftSerial (Arduino 0023 & prior):
#if ARDUINO >= 100
// On Uno: camera TX connected to pin 2, camera RX to pin 3:
SoftwareSerial cameraconnection = SoftwareSerial(2, 3);
// On Mega: camera TX connected to pin 69 (A15), camera RX to pin 3:
//SoftwareSerial cameraconnection = SoftwareSerial(69, 3);
#else
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
#endif

Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);

/************ ETHERNET STUFF ************/
byte mac[] = {0x90,0xa2,0xda,0x0e,0xf7,0xfc};
byte ip[] = {192, 168, 0, 30};
char rootFileName[] = "index.htm";
EthernetServer server(80);

/************ SDCARD STUFF ************/
SdFat SD;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
PgmPrint("error: ");
SerialPrintln_P(str);
if (card.errorCode()) {
PgmPrint("SD error: ");
Serial.print(card.errorCode(), HEX);
Serial.print(',');
Serial.println(card.errorData(), HEX);
}
while(1);
}

/**********************SETUP()*********************/

void setup() {
#if !defined(SOFTWARE_SPI)
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
if(chipSelect != 53) pinMode(53, OUTPUT); // SS on Mega
#else
if(chipSelect != 10) pinMode(10, OUTPUT); // SS on Uno, etc.
#endif
#endif

PgmPrint("Free RAM: ");
Serial.println(FreeRam());
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);

if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");
if (!volume.init(&card)) error("vol.init failed!");

PgmPrint("Volume is FAT");
Serial.println(volume.fatType(),DEC);
Serial.println();

if (!root.openRoot(&volume)) error("openRoot failed");

PgmPrintln("Files found in root:");
root.ls(LS_DATE | LS_SIZE);
Serial.println();

PgmPrintln("Files found in all dirs:");
root.ls(LS_R);

Serial.println();
PgmPrintln("Done");
Serial.begin(9600);
Serial.println("VC0706 Camera snapshot test");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Ethernet.begin(mac, ip);
server.begin();
}

#define BUFSIZ 100

/**********************LOOP()*********************/

void loop() {
char clientline[BUFSIZ];
char *filename;
int index = 0;
int image = 0;

EthernetClient client = server.available();
if (client) {
boolean current_line_is_blank = true;
index = 0;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c != '\n' && c != '\r') {
clientline[index] = c;
index++;
if (index >= BUFSIZ)
index = BUFSIZ -1;
continue;
}
clientline[index] = 0;
filename = 0;
Serial.println(clientline);
if (strstr(clientline, "GET / ") != 0) {
filename = rootFileName;
}
if (strstr(clientline, "GET /") != 0) {
if (!filename) filename = clientline + 5;
(strstr(clientline, " HTTP"))[0] = 0;
Serial.println(filename);
if (strstr(filename, "tttt") != 0)
takingPicture();
if (strstr(filename, "rrrr") != 0)
removePicture();
if (! file.open(filename, O_READ)) {
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/html");
client.println();
client.println("File Not Found!");
break;
}

Serial.println("Open!");
client.println("HTTP/1.1 200 OK");
if(strstr(filename, ".css") != 0)
client.println("Content-Type: text/css");
else if (strstr(filename, ".htm") != 0)
client.println("Content-Type: text/html");
else if (strstr(filename, ".jpg") != 0)
client.println("Content-Type: image/jpeg");
client.println();

int16_t c;
while ((c = file.read()) >= 0) {
Serial.print((char)c);
client.print((char)c);
}
file.close();
}else {
// everything else is a 404
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/html");
client.println();
client.println("File Not Found!");
}
break;
}
}
delay(1000);
client.stop();
}
}

/**********************FUNCTION1()*********************/

void takingPicture(){
if (cam.begin()) {
Serial.println("Camera Found:");
} else {
Serial.println("No camera found?");
return;
}
char *reply = cam.getVersion();
if (reply == 0) {
Serial.print("Failed to get version");
} else {
Serial.println("-----------------");
Serial.print(reply);

Serial.println("-----------------");
}
//cam.setImageSize(VC0706_640x480); // biggest
cam.setImageSize(VC0706_320x240); // medium
//cam.setImageSize(VC0706_160x120); // small

uint8_t imgsize = cam.getImageSize();
Serial.print("Image size: ");
if (imgsize == VC0706_640x480) Serial.println("640x480");
if (imgsize == VC0706_320x240) Serial.println("320x240");
if (imgsize == VC0706_160x120) Serial.println("160x120");

Serial.println("Snap in 3 secs...");
delay(3000);
cam.takePicture();
Serial.println("taking picture");

file.open("IMAGE.jpg", O_RDWR | O_CREAT);

uint16_t jpglen = cam.frameLength();
pinMode(8, OUTPUT);

byte wCount = 0;
while (jpglen > 0) {
uint8_t *buffer;
uint8_t bytesToRead = min(32, jpglen);
buffer = cam.readPicture(bytesToRead);
file.write(buffer, bytesToRead);
if(++wCount >= 64) {
Serial.print('.');
wCount = 0;
}
jpglen -= bytesToRead;
}
file.close();
Serial.println("end of taking picture");
}
/**********************FUNCTION2()*********************/
void removePicture(){
file.open("IMAGE.jpg", O_READ | O_WRITE);
file.remove();
}

Resim çekmek için : http:/xxx.xxx.xxx.xxx:5555/ttt yazın.

Çekilen resme bakmak için : http:/xxx.xxx.xxx.xxx:5555/image.jpg yazın.

Resmi silmek için :  http:/xxx.xxx.xxx.xxx:5555/rrr yazın.

[wp-review]

Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

21 Yorum
  1. Anonim

    Visitor Rating: 4 Stars

  2. Anonim

    Visitor Rating: 1 Stars

  3. Anonim

    Visitor Rating: 5 Stars

  4. Anonim

    Visitor Rating: 5 Stars

  5. Bilge

    Bu kodları saniye 10 kare görüntü çekip sürekli aktarımını sağlayarak Real time görüntü sağlayabilir miyiz

  6. ÇİĞDEM

    Merhaba acaba OV7670 kamera ile aynı projeyi gerçekleştirmek mümkün mü?
    Aslında OV7670 ile çektiğim resmi sd karta kaydetmek istiyorum arduino mega kullanarak nasıl yapabileceğim hakkında yardımcı olursanız sevinirim

  7. Anonim

    Visitor Rating: 1 Stars

  8. Anonim

    Visitor Rating: 4 Stars

  9. Can

    Merhaba bu proje ile uzaktan izleme yapılabilir mi? örneğin, izmir de oturuyorum ama arduino kamera istanbulda. uzaktan izlemek mümkün olur mu?

  10. Anonim

    Visitor Rating: 1 Stars

  11. Anonim

    Visitor Rating: 5 Stars

  12. Barış

    Arduino ya bu projede bilgisayar kamerasını bağlayabilir miyiz 4 pinli acil cevap bekliyorum teşekkürler

  13. SeFa

    Yani ben kamera modülünü arduino ya bağlayınca telefondan veya bilgisayar dan görüntüyü izleyebilirmiyiz

    1. abdulkadir tekin

      acaba çözüm bulabildiniz mi ? bulduysanız lütfen bana yardımcı olun. abdulkadirtekin2@gmail.com

  14. cemil sarsılmaz

    peki görüntüyü wireless kart ile (esP8266) aktarabilirmiyiz.?

  15. Musa

    Ardinyo ile ama bir sorunumuz var kameranızı gündüz fotoğraf alabiliyor gece fotoğraf alabilmemiz için kamera üzerinde nasıl bir yöntem izleye biliriz

  16. mamut gül

    Merhaba bu kodlar OV7670 kamera modulü içinde çalışır mı?

    1. Sezgin GÜL

      kütüphanesi ile kendi fonksiyonlarını eklemeniz gerekir.

      1. ÇİĞDEM

        Bu projeyi gerçekleştirebildiyseniz mail atabilirmisiniz
        cigdemmbicer@gmail.com

        1. fatih

          çiğdem hanım siz bu projeyi gerçekleştirdiyseniz mail atabilirmisiniz

  17. Alp Aslan

    Arduino Ethernet Shield kamera ya bağladık peki Arduino yu nerde kullanacaz hepsini kapsayan fritzing görüntüsünü atabilirmisiniz.

    1. Sezgin GÜL

      arduinonun üzerine direk ethernet shield i takıyorsun.

      1. Alp Aslan

        Peki bu kodlar herhangi bir kamera modülünde çalışır mı yoksa illa TTL serial kamera mı olmak zorunda

        1. Sezgin GÜL

          kamera modülün iletişim pinlerinden (tx,rx) gerekli bağlantıları yaptığınızda çalışır

  18. savaş koç

    yeniyim yardımcı olursanız svinirim böyle bir sistem yapmak istiyorum gece görüş harekete karşı duyarlı olması lazım ve veriyi kayıt etmesi lazım bu anlamda arduino işlemci olarak yavaş kalabilirmi

    1. Sezgin GÜL

      arduino görüntü işlemez aktarır işleme yapmak için matlab gibi programlar kullanabılırsınız yani hareket algılama ve kaydetme işlemi için . Ama due modeli ve üzerindekiler görüntü işleme yapıyor.

  19. Osman

    Aynı kamera modelinin 16 pinlisi bu programı ona göre nasıl düzenleyebiliriz acaba?

    1. Osman

      Pardon 18 pin

      1. Sezgin GÜL

        osman bey kamera modülün kütüphanesini ekleyin ve o kütüphane fonksiyonuna göre kodu düzenleyin. serial iletişim pinlerini devre şemasıyla aynı yapabilirsiniz. Lakin kodu modüle göre entegre etmelisiniz.