top of page

Safari browser sometimes has issues displaying images...

I.e: *you have to click on the images to see them...

For a better browsing experience on Brainy-Bits

Please use Chrome, Edge or Firefox browser.

  • Writer's pictureBrainy-Bits

Wireless Arduino controlled PTZ Camera System



OVERVIEW


A while back I made a video on YouTube showing how I built the Wireless RC Controlled Pan Tilt and Zoom Camera system that I use to make my videos, but never got around to make a Tutorial page for it.

In the spirit of “Better Late than Never” here it is!



The system uses the affordable Bescor MP-101 motorized Pan and Tilt head.


I got mine from Amazon.com here : 

Bescor MP-101 Kit 

but you can find them at other places as well.


The Bescor works using 4 AA batteries or using a power supply if you are near an outlet.  


From my experience the batteries last quite a long time, so I’m using it that way.


I’m using a simple RC Transmitter and Receiver to send Up-Down, Left-Right and Zoom In-Out commands to the Arduino Nano which then moves the Bescor.



To implemented Zoom control I used a cheap LANC remote control made by eBenk:


eBenk Lanc Zoom Remote


Of course you will need a Camera that has a LANC port to use this function.  I’m using the Canon Vixia HG20 HD Camcorders:


Don’t forget to watch this video to get a better idea on how this works:

 

CONNECTIONS


To have Zoom control you will need to get an eBenk LANC remote, open it up and then you will see 2 tact switches that are under the Zoom rocker.


You then need to solder some wires to those tact switches as seen in the shematic above.


We are simulating pushing the tact switches that are on the eBenk LANC remote by connecting them to a 4066 IC bilateral switch.


Connect the D2-D5 pins of the NANO to CH1-CH5 of the RC receiver.

These will be receiving the commands sent by the RC Transmitter when we move the sticks.


Pins D9-D12 are used to move the Bescor MP-101 head.


The connections pictured above are from the point of view of looking directly at the connector on the Bescor itself.


You then need to power the RC receiver and the 4066 by using the 5V out and GND pins of the NANO.


You can then power the NANO itself using a 5V battery pack or plug it in a USB power Supply.

 

THE CODE


When you move the RC controller sticks, that information is received by the Arduino NANO that then makes pins High or Low.

Those pins are connected to either the Bescor Up-Down or Left-Right pins, and if you are trying to Zoom, then it sends that to the hacked eBenk remote tact switches via the 4066 IC.


Also watch this video for the tutorial on the Bescor MP-101 camera system:  Arduino RC Camera System Tutorial


/* Arduino RC controlled PTZ camera mount
 
Created by Yvan / https://Brainy-Bits.com

This code is in the public domain...

You can: copy it, use it, modify it, share it or just plain ignore it!
Thx!

*/


#define left 11  // Pin 12 controls left pan
#define right 10  // Pin 10 controls right pan
#define down 12  // Pin 9 controls down tilt
#define up 9  // Pin 8 controls up tilt

#define zoomin A0  // Pin A0 controls Zoom In
#define zoomout A1 // Pin A1 controls Zoom Out

#define zoom 4      // Pin 4 connected to RC receiver channel 3 which controls Zoom
#define receiver 3  // Pin 3 connected to RC receiver channel 1 which controls Tilt
#define receiver2 2 // Pin 2 connected to RC receiver channel 2 which controls Pan

// Note that Pin 5 is connected to RC receiver channel 4 but is not used in this code

// Variables to hold the RC Receiver received values
int ch1 = 0;
int ch2 = 0;
int ch3 = 0;

void setup()
{
  // Set the Pin modes
  pinMode(receiver, INPUT);
  pinMode(receiver2, INPUT);
  pinMode(zoom, INPUT);
  pinMode(left, OUTPUT);
  pinMode(right, OUTPUT);
  pinMode(down, OUTPUT);
  pinMode(up, OUTPUT);
  pinMode(zoomin, OUTPUT);
  pinMode(zoomout, OUTPUT);
  
  //Write all pins LOW at start
  digitalWrite(up, LOW);
  digitalWrite(down, LOW);
  digitalWrite(left, LOW);
  digitalWrite(right, LOW);
  digitalWrite(zoomin, LOW);  
  digitalWrite(zoomout, LOW);
}

void loop() {
  
// Get current values of RC Receiver Channels
  ch1 = pulseIn(receiver, HIGH, 20000);
  ch2 = pulseIn(receiver2, HIGH, 20000);
  ch3 = pulseIn(zoom, HIGH, 20000);


// Tilt based on the input from the Right (Up-Down movement) joystick from the RC Transmitter
  if (ch1 < 1200)  // Transmitter Joystick pushed UP
  {
    analogWrite(up, 255);  // Move the Bescor MP-101 Camera Tilt UP
  }

  else if (ch1 > 1700)  // Tranmitter Joystick pushed DOWN
  {
    analogWrite(down, 255); // Move the Bescor MP-101 Camera Tilt DOWN
    }

  else  // Put pins LOW to stop Tilt movement of Bescor MP-101
  {
    digitalWrite(up, LOW);
    digitalWrite(down, LOW);
  }
  

  // Pan based on the input from the Right (Left-Right movement) joystick from the RC Transmitter
  if (ch2 < 1200)  // Transmitter Joystick pushed Left
  {
    digitalWrite(left, HIGH);  // Move the Bescor MP-101 Camera Pan LEFT
  }

  else if (ch2 > 1700)  // Transmitter Joystick pushed RIGHT
  {
    digitalWrite(right, HIGH);  // Move the Bescor MP-101 Camera Pan RIGHT
  }

  else  // Put pins LOW to stop Pan movement of Bescor MP-101
  {
    digitalWrite(right, LOW);
    digitalWrite(left, LOW);
  }
 
   // Zoom based on the input from the Left (Up-Down movement) joystick from the RC Transmitter
   if (ch3 < 1000)  // Transmitter Joystick pushed UP
  {
    digitalWrite(zoomin, HIGH);  // Simulate pushing the Zoom IN tact switch on the eBenk LANC remote
  }

  else if (ch3 > 2000)  // Transmitter Joystick pushed DOWN
  {
    digitalWrite(zoomout, HIGH);  // Simulate pushing the Zoom OUT tact switch on the eBenk LANC remote
  }

  else  // Put pins LOW to stop ZOOM
  {
    digitalWrite(zoomin, LOW);
    digitalWrite(zoomout, LOW);
  }  
}
 

TUTORIAL VIDEO PART 1



TUTORIAL VIDEO PART 2



3,093 views

Recent Posts

See All

All my content is and will always be Free.

If you feel that my Videos / Tutorials are helping, and you would like to contribute...

 You can toss some coins in the Tip Jar via PayPal.

Select amount then click the “Donate” button.

bottom of page