Подключение TTL камеры "MTKvision MV500NK" к ардуино

Alexbloger
Offline
Зарегистрирован: 29.11.2015

Доброго времени суток!

Хотел бы подключить данную камеру

http://ru.aliexpress.com/item/NEW-RS232-TTL-JPEG-Digital-Serial-Port-CCTV-Camera-Module-SCB-1-with-video-out-Support/1975852463.html  к ардуино.

Цель - снять фото с камеры, и записать на флешку. 

Все описания подключения камер к ардуино либо под VIMICRO0706:

(картинки делал кликабельными : ) )

либо под OV7670:

0760

на моей же камере красуется MTKvision MV500NK: (клик для хорошей картинки)

Исходя из чего, в большинстве случаев во всех скетчах фигурирует библиотека

#include <Adafruit_VC0706.h>

Библиотека на GitHube тут >

Там же есть пример подключения:

// This is a basic snapshot sketch using the VC0706 library.
// On start, the Arduino will find the camera and SD card and
// then snap a photo, saving it to the SD card.
// Public domain.

// If using an Arduino Mega (1280, 2560 or ADK) in conjunction
// with an SD card shield designed for conventional Arduinos
// (Uno, etc.), it's necessary to edit the library file:
//   libraries/SD/utility/Sd2Card.h
// Look for this line:
//   #define MEGA_SOFT_SPI 0
// change to:
//   #define MEGA_SOFT_SPI 1
// This is NOT required if using an SD card breakout interfaced
// directly to the SPI bus of the Mega (pins 50-53), or if using
// a non-Mega, Uno-style board.

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

// comment out this line if using Arduino V23 or earlier
#include <SoftwareSerial.h>         

// uncomment this line if using Arduino V23 or earlier
// #include <NewSoftSerial.h>       

// SD card chip select line varies among boards/shields:
// Adafruit SD shields and modules: pin 10
// Arduino Ethernet shield: pin 4
// Sparkfun SD shield: pin 8
// Arduino Mega w/hardware SPI: pin 53
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
#define chipSelect 10

// Pins for camera connection are configurable.
// With the Arduino Uno, etc., most pins can be used, except for
// those already in use for the SD card (10 through 13 plus
// chipSelect, if other than pin 10).
// With the Arduino Mega, the choices are a bit more involved:
// 1) You can still use SoftwareSerial and connect the camera to
//    a variety of pins...BUT the selection is limited.  The TX
//    pin from the camera (RX on the Arduino, and the first
//    argument to SoftwareSerial()) MUST be one of: 62, 63, 64,
//    65, 66, 67, 68, or 69.  If MEGA_SOFT_SPI is set (and using
//    a conventional Arduino SD shield), pins 50, 51, 52 and 53
//    are also available.  The RX pin from the camera (TX on
//    Arduino, second argument to SoftwareSerial()) can be any
//    pin, again excepting those used by the SD card.
// 2) You can use any of the additional three hardware UARTs on
//    the Mega board (labeled as RX1/TX1, RX2/TX2, RX3,TX3),
//    but must specifically use the two pins defined by that
//    UART; they are not configurable.  In this case, pass the
//    desired Serial object (rather than a SoftwareSerial
//    object) to the VC0706 constructor.

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

// Using hardware serial on Mega: camera TX conn. to RX1,
// camera RX to TX1, no SoftwareSerial object is required:
//Adafruit_VC0706 cam = Adafruit_VC0706(&Serial1);

void setup() {

  // When using hardware SPI, the SS pin MUST be set to an
  // output (even if not connected or used).  If left as a
  // floating input w/SPI on, this can cause lockuppage.
#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

  Serial.begin(9600);
  Serial.println("VC0706 Camera snapshot test");
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }  
  
  // Try to locate the camera
  if (cam.begin()) {
    Serial.println("Camera Found:");
  } else {
    Serial.println("No camera found?");
    return;
  }
  // Print out the camera version information (optional)
  char *reply = cam.getVersion();
  if (reply == 0) {
    Serial.print("Failed to get version");
  } else {
    Serial.println("-----------------");
    Serial.print(reply);
    Serial.println("-----------------");
  }

  // Set the picture size - you can choose one of 640x480, 320x240 or 160x120 
  // Remember that bigger pictures take longer to transmit!
  
  cam.setImageSize(VC0706_640x480);        // biggest
  //cam.setImageSize(VC0706_320x240);        // medium
  //cam.setImageSize(VC0706_160x120);          // small

  // You can read the size back from the camera (optional, but maybe useful?)
  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);

  if (! cam.takePicture()) 
    Serial.println("Failed to snap!");
  else 
    Serial.println("Picture taken!");
  
  // Create an image with the name IMAGExx.JPG
  char filename[13];
  strcpy(filename, "IMAGE00.JPG");
  for (int i = 0; i < 100; i++) {
    filename[5] = '0' + i/10;
    filename[6] = '0' + i%10;
    // create if does not exist, do not open existing, write, sync after write
    if (! SD.exists(filename)) {
      break;
    }
  }
  
  // Open the file for writing
  File imgFile = SD.open(filename, FILE_WRITE);

  // Get the size of the image (frame) taken  
  uint16_t jpglen = cam.frameLength();
  Serial.print("Storing ");
  Serial.print(jpglen, DEC);
  Serial.print(" byte image.");

  int32_t time = millis();
  pinMode(8, OUTPUT);
  // Read all the data up to # bytes!
  byte wCount = 0; // For counting # of writes
  while (jpglen > 0) {
    // read 32 bytes at a time;
    uint8_t *buffer;
    uint8_t bytesToRead = min(32, jpglen); // change 32 to 64 for a speedup but may not work with all setups!
    buffer = cam.readPicture(bytesToRead);
    imgFile.write(buffer, bytesToRead);
    if(++wCount >= 64) { // Every 2K, give a little feedback so it doesn't appear locked up
      Serial.print('.');
      wCount = 0;
    }
    //Serial.print("Read ");  Serial.print(bytesToRead, DEC); Serial.println(" bytes");
    jpglen -= bytesToRead;
  }
  imgFile.close();

  time = millis() - time;
  Serial.println("done!");
  Serial.print(time); Serial.println(" ms elapsed");
}

void loop() {
}

Результат при подключение на UNO, MEGA2560 - "No camera found?".

Подключал и с 10кОм резистором на RX:

И без его с различными вариациями. 

Самая полезная информация про MV500NK это только то, кто его производит: http://www.jotrin.com/product/parts/MV500NK . И никаких упоминаний, как его связать с ардуино.

Ответ продавца данного товара на вопрос, возможно ли подключить его к ардуино:

2016-02-28 05:53:47 

3 SCA protocol is the same with SCB , Only the mainchip is not the same 

Jacky Zhao 

2016-02-28 05:53:00 

Hello Friend : 

1 The module default is 5V / 232 level , Not TTL, if your Arduino is TTL, please change the module to TTL 

232 Level to TTL : 232 Level (Default) , R15 &R16 0 ohm or Short , Delete Max232 

2 Connect method : TX-RX RX-TX GND-GND Power part : 5V-5V GND-GND 

3 SCA protocol is the same with SCB 

Thank you 

jacky 

Что нужно сделать? R15 и R16 отсутствуют, только контакты для них. MAX232 возле R15:

R16 - левый верхний угол:

R15 &R16 0 ohm or Short  = это перемкнуть места для резисторов?

А что значит  "Delete Max232 " - выпаять его, или перемкнув 15-16, я его "удалю" из схемы? 

И даже если это поможет, то всё равно вопрос остается - как его подключать, и какой библиотекой ? VIMICRO0706, он станет с ней работать?

Помогите, пожалуйста. Данных тем на форуме нету.

Fox4Den
Offline
Зарегистрирован: 21.09.2017

Здравствуйте, у меня таже самая проблема, и похоже что один и тот же продавец у нас с Вами. 
Смогли ли Вы решить проблему?

Ответ продавца:

Please kindly note the module default is 232 level .not TTL level 

The arduino should work at TTL level 
232 to TTL 
 
232 Level to TTL : 232 Level (Default) , R15 &R16 0 ohm or Short , Delete Max232
please do it 

Еще я обнаружил, и не смог понять должно ли быть так или нет, но по той ссылке что у вас на гитзхабе скетчи файл C++ в библиотеке заточен под hwserial, а подключение заточено под software serial. Сравните с++ файлы той библиотеки и вот этой https://github.com/medcv/Adafruit_VC0706

 
еще прочитал, что надо прошивать ардуино с отключенной камерой, а затем подключать... 
 
Но даже с этой библиотекой пишит, что camera not found :(