Sony camera controlled with RC transmitter

proxy?url=http%3A%2F%2F2.bp.blogspot.com%2F-GuyfBo2dEGo%2FVFZE4UkC6sI%2FAAAAAAAAAJo%2FbVkSWvEyeKs%2Fs1600%2FIMG_1774.JPG&container=blogger&gadget=a&rewriteMime=image%2F*&width=350for this demo I used 3.3v as power source for the receiver but in real life it will probably be a 5v power source so you'll need to figure a way how to do it (resistors, level converter...) 
 
so let's start 
what you need:
sony block camera (visca)
arduino (3.3v)
rc transmitter
rc receiver
monitor with av
 
fcb-ex11d
 
arduino mini 3.3v

proxy?url=http%3A%2F%2F3.bp.blogspot.com%2F-oWvvP1604Zk%2FVFZPMQ2lr1I%2FAAAAAAAAAJ4%2FlzkHQYpbMEE%2Fs1600%2FIMG_1783.JPG&container=blogger&gadget=a&rewriteMime=image%2F*

 
rc transmitter - spektrum dx6i

proxy?url=http%3A%2F%2F2.bp.blogspot.com%2F-RLpI2rdz3fo%2FVFZPkTL4nAI%2FAAAAAAAAAKA%2FRX-0ULUHuH4%2Fs1600%2FIMG_1772.JPG&container=blogger&gadget=a&rewriteMime=image%2F*

 
ar6200

proxy?url=http%3A%2F%2F1.bp.blogspot.com%2F-r-CTWmjzRZM%2FVFZPmyFs15I%2FAAAAAAAAAKI%2FewwSnEBLiXU%2Fs1600%2FIMG_1777.JPG&container=blogger&gadget=a&rewriteMime=image%2F*

then you'll need to hook up the wires as so
camera rx to arduino tx
camera tx to arduino rx
camera gnd to arduino gnd
arduino digital pin 3 to reciever elev channel

proxy?url=http%3A%2F%2F3.bp.blogspot.com%2F-kgRUB4V93yM%2FVFZPr0LaL-I%2FAAAAAAAAAKQ%2Ffh_DBgBXPAo%2Fs1600%2FIMG_1779.JPG&container=blogger&gadget=a&rewriteMime=image%2F*

 
then you left with video and power
 
power specs says 9v plus or minus 3v
and video is ntsc so any suitable 
monitor will do the job

and of course the code :)

 

/* build and tested using
sony camera block fcb-ex11d and
rc transmitter spektrum dx6i with
ar6200 reciever and connected to the elev channel */
byte address_set[4]= {0x88, 0x30, 0x01, 0xFF};
byte if_clear[5]= {0x88, 0x01, 0x00, 0x01, 0xFF};
byte command_cancel[3]= {0x81,0x21,0xFF};
byte zoom_teleVar[6]= {0x81, 0x01, 0x04, 0x07, 0x23, 0xFF}; //zoom in 81 01 04 07 2p FF - p=0 (low) to 7 (high)
byte zoom_wideVar[6]= {0x81, 0x01, 0x04, 0x07, 0x33, 0xFF}; //zoom out 81 01 04 07 3p FF - p=0 (low) to 7 (high)
byte zoom_stop[6]= {0x81, 0x01, 0x04, 0x07, 0x00, 0xFF}; //stop zoom
byte auto_focus[6]= {0x81, 0x01, 0x04, 0x38, 0x02, 0xFF}; //auto focus

const int thisdelay= 250; //time between sets
const int zoom_out=3; //Zoom 

void setup() {
pinMode(zoom_in, INPUT);
pinMode(zoom_out, INPUT);
// initialize both serial ports:
Serial.begin(9600);
//send Address set
for (int i=0; i<4; i++){
Serial.write(address_set[i]);
}
delay(thisdelay);
//send IF_clear set
for (int i=0; i<5; i++){
Serial.write(if_clear[i]);
delay(thisdelay);
}
}


//zoom in
void loop() {
int zoom_inState=pulseIn(3, HIGH, 25000);
if(zoom_inState>1550 )
{
delay(thisdelay);
//Send zoom tele set
for (int i=0; i<6; i++){
Serial.write(zoom_teleVar[i]);
}
}

//zoom out
int zoom_outState=pulseIn(3, HIGH, 25000);
if(zoom_outState < 1400 )
{
delay(thisdelay);
for (int i=0; i<6; i++){
Serial.write(zoom_wideVar[i]);
}
}
//zoom stop
if(zoom_outState < 1500 && zoom_inState > 1400 ){
//send auto focus cmd
for (int i=0; i<6; i++){
Serial.write(auto_focus[i]);
}
//send zoom stop
for (int i=0; i<6; i++){
Serial.write(zoom_stop[i]);
}
}
}


void sendcommand_cancel(){
for (int i=0; i<3; i++){
Serial.write(command_cancel[i]);
}
}

next thing will be to import it to attiny85

will release the code later tonight

**got really cool board that im using called attami (google it :) )

i was told that it will cost 1euro (not assembled)

and will be available at c31c (chaos communication congress #31)

3689624257?profile=original
code for attiny85 or attami :)

/* build and tested using
sony camera block fcb-ex11d and
rc transmitter spektrum dx6i with
ar6200 reciever and connected to the elev channel */

#include <SoftwareSerial.h>

#define zoom PB0 // zoom
#define rxPin PB1 // rx
#define txPin PB2 // tx

SoftwareSerial mySerial(rxPin, txPin);

byte address_set[4]= {0x88, 0x30, 0x01, 0xFF};
byte if_clear[5]= {0x88, 0x01, 0x00, 0x01, 0xFF};
byte command_cancel[3]= {0x81,0x21,0xFF};
byte zoom_teleVar[6]= {0x81, 0x01, 0x04, 0x07, 0x23, 0xFF}; //zoom in 81 01 04 07 2p FF - p=0 (low) to 7 (high)
byte zoom_wideVar[6]= {0x81, 0x01, 0x04, 0x07, 0x33, 0xFF}; //zoom out 81 01 04 07 3p FF - p=0 (low) to 7 (high)
byte zoom_stop[6]= {0x81, 0x01, 0x04, 0x07, 0x00, 0xFF}; //stop zoom
byte auto_focus[6]= {0x81, 0x01, 0x04, 0x38, 0x02, 0xFF}; //auto focus

const int thisdelay= 250; //time between sets

void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(zoom, INPUT);
// initialize both serial ports:
mySerial.begin(9600);
//send Address set
for (int i=0; i<4; i++){
mySerial.write(address_set[i]);
}
delay(thisdelay);
//send IF_clear set
for (int i=0; i<5; i++){
mySerial.write(if_clear[i]);
delay(thisdelay);
}
}


//zoom in
void loop() {
int zoom_inState=pulseIn(zoom, HIGH, 25000);
if(zoom_inState>1550 )
{
delay(thisdelay);
//Send zoom tele set
for (int i=0; i<6; i++){
mySerial.write(zoom_teleVar[i]);
}
}

//zoom out
int zoom_outState=pulseIn(zoom, HIGH, 25000);
if(zoom_outState < 1400 )
{
delay(thisdelay);
for (int i=0; i<6; i++){
mySerial.write(zoom_wideVar[i]);
}
}
//zoom stop
if(zoom_outState < 1500 && zoom_inState > 1400 ){
//send auto focus cmd
for (int i=0; i<6; i++){
mySerial.write(auto_focus[i]);
}
//send zoom stop
for (int i=0; i<6; i++){
mySerial.write(zoom_stop[i]);
}
}
}


void sendcommand_cancel(){
for (int i=0; i<3; i++){
mySerial.write(command_cancel[i]);
}
}

 
E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones

Comments

  • great little camera - thanks for the link

    different interface (i2c) 

    would love to try it once ill find a good deal for it

  • Want one of these for myself for sure!!

    3701972888?profile=original

    https://www.youtube.com/watch?v=WFYUkBSyMsg

  • right.. didnt check which revision i uploaded 

    just add const int zoom_in= 4 ;// or any other input pin

    after 

    const int zoom_out=3; //Zoom 

  • Hi ,

    i have this problem !

    sketch_dec19b.ino: In function 'void setup()':
    sketch_dec19b:16: error: 'zoom_in' was not declared in this scope

    Peter

  • Hi Elad,

    I looked at the Visca protocol and there is actually a command to send preset zoom positions to the camera. The command is called “Cam_zoom direct” and it is described on page 31 of the document you provided.
    Cam_zoom direct: 8x 01 04 47 0p 0q 0r 0s FF
    The p, q, r, s values are the preset x2, x4, x6, x8 zoom positions

    If these values are combined with preset PWM values on one of the RC radio switches we can probably use a switch to set the camera zoom. 

  • i dont think that there is a visca cmd to do what you ask

    but you can program it for a specific ppm

    featured on hackaday

    3701870084?profile=original

  • Excellent work and documentation! A very useful project for the community.

    I was wondering if there is a way to control the camera zoom level i.e. x2, x3…etc, by sending absolute PWM values for each zoom level. That would certainly be a huge added value.  

  • Good work elad. I too was working on a similar unit (FCB-EX980SP) up to eighteen months ago. Other things took a greater priority as they do! Your post has prompted me to revisit this. Although I have not yet attached it, I also purchased a stabilization output module so I can use as much of the superb zoom these cameras have as possible!

  • Excellent work !

  • I have been looking for an implementation like this for some time now.  I have a Sony FCB-EX1010 and by using the support PDF, I should not have much difficulty making it work with my setup.  I was also thinking about a way to wrap some of these commands into a MAVlink stream and have access to some of the other features of my camera such as switching between NIR and full color, similar to the features I'm used to with the RQ-7b system I operate.

    Thank you very much for this!!

This reply was deleted.