Wednesday, May 1, 2019

Panasonic Pro AG-DVC7 Rebuild with higher resolution

I am rebuilding a Panasonic AG-DVC7 to give a better image resolution.  I am looking at USB Camera boards with sound on eBay to attach to the existing optics.  An Arduino will handle the Zoom, Focus, and Iris.  A Raspberry Pi will do the recording and provide a viewfinder.

One of the first steps is to reverse engineer the optics.

This is the main side of the optical assembly with the Zoom and Focus stepper motors.

This is the back side - The Iris solenoid connections are shown.  You need to remove the cover on the left to get to the connections.

This is a close up of the Iris assembly.  You do not need to take the optics apart this far.

Here is the first video of the arrangement working.


Yet to do:
Increase the range of the zoom - Add a spacer between board and the image sensor.
Set up a viewfinder - Need a small 5-7 inch HDMI Monitor.
Make the steps finer/smoother. - Done with 8 phases for servos instead of 4.
Auto focus - Need to run the focus to its stop then keep track of its position.
  Perhaps add an ultrasonic distance sensor?
Focus Issue - Somehow I damaged the optical assembly, it does not focus properly when installed back in the DVC7 camera....

Here is the schematic of the Arduino servo controller that was used for the camera.

This is a close up of the Arduino and servo driver interface.

This is a close up of the Raspberry Pi. You could use a USB camera board as well.

Here is the code for the servos.

/*****************************
Dual Four wire stepper motor Control
For Panasonic AG-DVC7 with two servos
by Bob Davis
May 1, 2019
*****************************/
// To L293 one
int motor1A =4;
int motor1B =5;
int motor1C =6;
int motor1D =7;
// To L293 Two
int motor2A =8;
int motor2B =9;
int motor2C =10;
int motor2D =11;
// 2P Momentary Switch One Center is off
int m1sw1 = 14;
int m1sw2 = 15;
// 2P Momentary Switch Two Center is off
int m2sw1 = 16;
int m2sw2 = 17;
// Variables
int m1step = 0;
int m2step = 0;
int mspeed = 100; // Step speed

void setup() {
  pinMode(motor1A, OUTPUT);
  pinMode(motor1B, OUTPUT);
  pinMode(motor1C, OUTPUT);
  pinMode(motor1D, OUTPUT);
  pinMode(motor2A, OUTPUT);
  pinMode(motor2B, OUTPUT);
  pinMode(motor2C, OUTPUT);
  pinMode(motor2D, OUTPUT);
  pinMode(m1sw1, INPUT_PULLUP);
  pinMode(m1sw2, INPUT_PULLUP);
  pinMode(m2sw1, INPUT_PULLUP);
  pinMode(m2sw2, INPUT_PULLUP);
}

void loop() {
// read switches
  if (digitalRead (m1sw1)==HIGH) m1step=m1step+1;
  if (digitalRead (m1sw2)==HIGH) m1step=m1step-1;
  if (m1step > 7) m1step=0;
  if (m1step < 0) m1step=7;
  if (digitalRead (m2sw1)==HIGH) m2step=m2step+1;
  if (digitalRead (m2sw2)==HIGH) m2step=m2step-1;
  if (m2step > 7) m2step=0;
  if (m2step < 0) m2step=7;
// respond M1 with 8 smooth steps
  if (m1step==0){
    digitalWrite (motor1A, LOW); //+A
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, HIGH);}
  if (m1step==1){
    digitalWrite (motor1A, LOW); //+A,+B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==2){
    digitalWrite (motor1A, HIGH); //+B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==3){
    digitalWrite (motor1A, HIGH); //+B,-A
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, LOW);
    digitalWrite (motor1D, HIGH);}
  if (m1step==4){
    digitalWrite (motor1A, HIGH); // -A
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, HIGH);}
  if (m1step==5){
    digitalWrite (motor1A, HIGH); // -A,-B
    digitalWrite (motor1B, LOW);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
  if (m1step==6){
    digitalWrite (motor1A, HIGH); // -B
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
  if (m1step==7){
    digitalWrite (motor1A, LOW); // -B,+A
    digitalWrite (motor1B, HIGH);
    digitalWrite (motor1C, HIGH);
    digitalWrite (motor1D, LOW);}
 
// respond M2
  if (m2step==0){
    digitalWrite (motor2A, LOW); //+A
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, HIGH);}
  if (m2step==1){
    digitalWrite (motor2A, LOW); //+A,+B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==2){
    digitalWrite (motor2A, HIGH); //+B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==3){
    digitalWrite (motor2A, HIGH); //+B,-A
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, LOW);
    digitalWrite (motor2D, HIGH);}
  if (m2step==4){
    digitalWrite (motor2A, HIGH); // -A
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, HIGH);}
  if (m2step==5){
    digitalWrite (motor2A, HIGH); // -A,-B
    digitalWrite (motor2B, LOW);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}
  if (m2step==6){
    digitalWrite (motor2A, HIGH); // -B
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}
  if (m2step==7){
    digitalWrite (motor2A, LOW); // -B,+A
    digitalWrite (motor2B, HIGH);
    digitalWrite (motor2C, HIGH);
    digitalWrite (motor2D, LOW);}

  delay (mspeed);
}


1 comment:

Vladimir said...

Thank you! I also made the focus of the camera on the basis of your sketch. The camera was lying idle.