
for 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

rc transmitter - spektrum dx6i

ar6200

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

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