Arduino and Servos: How to Make a Laser Turret with XOD

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

I just sat and watched videos on your channel for the last hour and a half. Subbed. I have to get to sleep but wow! thank you so much for offering all this info. Your videos are extremely easy to follow and understand.

👍︎︎ 9 👤︎︎ u/bigd5783 📅︎︎ Dec 30 2017 🗫︎ replies

Question...

Do the lasers actually burn or are they just lights?

👍︎︎ 6 👤︎︎ u/JoseCFM 📅︎︎ Dec 29 2017 🗫︎ replies

Your channel is absolutely great. This video is exactly what I have been looking for as well...

Now I have a project to play with for the rest of the holidays! It would be awesome to have a rpi track a laser pointer that you are shining on a wall and have the servos trying to catch it....

👍︎︎ 3 👤︎︎ u/methreethatis 📅︎︎ Dec 30 2017 🗫︎ replies

Really excited to learn about Xod visual programming language. I may start using this with Arduino instead of C.

👍︎︎ 3 👤︎︎ u/Henri_Dupont 📅︎︎ Dec 30 2017 🗫︎ replies

Your tutorials are legitimately some of the best arduino tutorials I've ever come across. Great editing, not a lot of bullshit, little bit of nerd humor... good stuff sir. Subbed.

👍︎︎ 3 👤︎︎ u/corsair130 📅︎︎ Dec 30 2017 🗫︎ replies

Nice demo

👍︎︎ 2 👤︎︎ u/[deleted] 📅︎︎ Dec 30 2017 🗫︎ replies

Great video as usual, thanks!

👍︎︎ 2 👤︎︎ u/louky 📅︎︎ Dec 30 2017 🗫︎ replies

Good to see you active, afro!

👍︎︎ 2 👤︎︎ u/bdazman 📅︎︎ Dec 30 2017 🗫︎ replies

Holy crap I have a new channel to binge watch

👍︎︎ 4 👤︎︎ u/bflfab 📅︎︎ Dec 30 2017 🗫︎ replies
Captions
In this video, I'm going to teach you about servos! What they are, how they work, and how to use them. Then I'm going to show you a practical example where we make a simple laser turret! Finally, I'm going to show you how to program an Arduino to control the laser turret using a free, open source, visual programming language called XOD. What is a servo? In this context, the term servo is short for servo motor. The term servo means there is a closed loop control system that accurately regulates the position of the servo's output shaft. Now let me go into more detail. In my previous video about H bridges I showed you a circuit that can control the speed and direction of a motor. But that's all it can do. The motor just moves faster or slower depending on the duty cycle. And if you put a load on the motor it slows down. And there's no way to accurately control how much the motor rotates. This is what is called an open loop control system i.e. there is no way to regulate the output, you're just changing the power going to the motor and hoping for the best. A servo motor is a motor with a closed loop control system. This means that you do have a way to control the speed and position, regardless of the load. Here's how they work. You've got a DC motor being powered by an H bridge. Then you have a series of gears to increase the torque of the system. Most cheaper servos will have a plastic gearing system, but servos designed for higher holding torque will usually have metal gears. (alert noise) Metal Gear?! Yes. They're very solid. Next, a servo will have some sort of feedback system that detects the rotation angle of the output. It could be a potentiometer, a magnetometer or an encoder, but for hobby servos it's usually just a potentiometer. Inside the servo motor there's some circuitry that compares the user's desired rotation angle with what the servo's feedback system is measuring. If the output has rotated even a tiny bit in the wrong direction, it adjusts the power to the H bridge, and makes sure the output is exactly where it's supposed to be. When you put all these things together, you get a very useful building block in robotics. From simple toys to industrial robotics and animatronics nearly every robot will have servo motors in some form or another. There are many types of servos out there, from many different manufacturers, and they all have different ratings. The main specifications to look out for are the input voltage range, the stall torque, and the speed. You should also be aware of the servo's travel. This refers to how much the output shaft can rotate. It could be anywhere from 90 degrees to 200 degrees or more. And you can even get servos that continuously rotate. Servos come in standardized sizes. These are "standard" servos, and these are sub micro servos. These would probably be all you'd ever care about for projects at home, but I want you to be aware that for bigger robotics projects you can get servos in larger form factors. If all these options seem overwhelming to you, don't worry. A good general purpose servo you can use is the Hitec HS-311. It's been around for years. It's functional and it's reliable. In bulk you can get sub micro servos for $2 a pop. I'll put links in the video description section. Ok, so now you know what servos are and where to get one. Let's talk about how to use them. Every servo will come with a bag of extra parts. These things are called servo horns. The output shaft of a servo has these little teeth on them that grip the horn. Screw the horn onto the output shaft, and then you can wiggle the horn around. (Juvenile laughing) The point of the horn is that you can screw other mechanical parts onto it. Here's an example where I have some plastic gears attached to the horn, and when I rotate the servo shaft the gripper opens and closes. And you can use servos to control pretty much anything mechanical in any axis. Next let's talk about how to actually control a servo. In addition to horns, servos also have pigtails. I swear I'm not making this stuff up. The colors will be either orange red brown or yellow red black. Red and brown is where you connect power to the servo, and this usually needs to be between 4.5 and 6 volts. So most people use either a 3 or 4 cell alkaline or NiMH battery pack, or sometimes people will use a 5 volt switch mode power supply. For this project I'm just going to use my bench power supply set to 5V. This third wire is where you connect the input signal that controls the servo. Technically the signal is a PWM signal, but it's a very special PWM signal. We're going to start by sending out a pulse that is 1.5ms wide, at 50Hz. And the pulse is 0 to 5 volts. This will center the servo. You can repeat the pulses slightly faster or slower than 50Hz and the servo will still work. The most important thing here is the pulse width, not the frequency. If we change the pulse width from 1.5ms to 2ms, the servo rotates clockwise. And if we change the pulse width from 1.5ms to 1ms, the servo rotates counterclockwise. You can move a little further than those extremes, but the standard signal is expected to be 1 to 2 ms wide. I've been using a fancy waveform generator to generate these pulses for demonstration purposes. But you don't need one of these to do this at home. It is possible to generate servo pulses with a 555 timer circuit, but I would not recommend it. Really the best way to do it is with a microcontroller like an Arduino because it will give you very precise control over the timing. Make sure you've watched my previous tutorial on Arduino if you need an introduction, and then soon I'm going to show you how to use XOD to create the servo signals. Okay, let's talk about assembling the laser turret. If you want, you could simply glue a second servo to a servo horn, and tape on a laser, but I wanted something a little nicer than that for the video. So I ended up buying a pan-tilt servo kit from Digikey. You can get them pre-assembled or buy the servos separately. You can use any dollar store laser pointer for the laser, or you can get them in bulk for even less than a dollar on Amazon. The laser modules have integrated resistors, so you just need to give them 3 to 5 volts and they will work without any special circuitry. Since they are cheap, I glued two of them onto the pan tilt head. To control the turret in the X and Y direction, I'm using two 10k potentiometers. The output of these will feed a 0 to 5 volt analog signal into the Arduino on pins A0 and A1. If you're really creative you could hack an old analog joystick to be the controller. I already mentioned I'm going to power the servos with an external 5 volt supply, and over here you can see how I'm using Arduino output pins 8 and 9 to feed the servo pulse signals into the servos. Here's a view of the overall project. Notice how I have a jumper wire connecting the ground from the external 5 volt supply to the ground of the Arduino. They both need to have a common ground connection in order for things to work reliably! Okay, that takes care of the hardware side of things, now let's talk about programming the Arduino so we can control the servos with the potentiometer. We're going to be using a free, open source visual programming environment called XOD. Go to XOD.io, then click IDE, Download Desktop IDE at the top. Register if you want, but I'm going to proceed without registration. Now you can download XOD for any of the major operating systems. After you run the installer and start XOD, you'll be greeted with the option to run through a set of tutorials. I do recommend you check these out at some point, but for now let's create a blank new project. We give it a name... and now we have a blank space to work with. So the first thing we're going to do is go to the common hardware list on the left. You can see a lot of devices are supported but we are just going to look for pot, short for potentiometer. And we're going to drag two of them onto the workspace. These little boxes are called "nodes", and the way XOD works is you create a bunch of these little nodes that represent inputs and outputs on the microcontroller, and you connect them with wires in the interface. Now let's go back to our hardware list and create two nodes for the two servos we want to control. And we're going to connect the output of the potentiometers to the servos by dragging a couple of wires. At this point I recommend you go to view, toggle helpbar. This will give you a guide to what all the little input and output parts of each node are. For example, a servo node has two inputs: the output port number on the Arduino, and the value to send the servo. In this case the servo node accepts a value from 0 to 1 to represent the servo's rotation. And for the potentiometer, you can see how the output is a value from 0 to 1, depending on how much you have rotated the potentiometer. This is perfect, it's exactly what the servo node would expect to see on the input, so we can connect the two nodes directly with a wire. Next, for the sake of clarity, we should start giving our potentiometers and servos meaningful names. And we do that by clicking on the nodes, and then typing names into the properties section on the left. We're just going to call them X and Y potentiometers and servos. Now that we have some meaningful names, we can start defining which pins our hardware is connected to. I want my X potentiometer input to be Arduino pin A0, so we are okay here. I want my Y potentiometer input to be pin A1, so let's change the port number to 1. I want my X servo output signal to come from Arduino pin 8, so we set that to 8, and let's make the Y servo signal appear on pin 9. And that's it! We're done! Let's go to Deploy, Upload code to Arduino. Double check your board type and COM port settings are correct, and hit upload. It'll take a few seconds to compile the visual, node based programming into native microcontroller code. And there you go! Now we can use the potentiometers to rotate the laser turret in different directions. But there is a small problem... I don't like how in the Y direction, the head can move all the way down to the floor, or point straight up at the ceiling. I'm not enemies with Spiderman. I'd rather have it so a full potentiometer rotation will move the servo up and down in roughly a 40 degree arc. To do this, let's go back to XOD, and let's browse the list of core nodes. These are all the different math operations you can do. We're looking for one called map range. Let's drag that onto the workspace, and we can delete the existing wire by clicking on it and hitting backspace. Then we connect the potentiometer's output to the map range node's input, and connect its output to the servo. If we click on the map range node the help bar will explain how it works, and we're going to make it so that a value of 0 to 1 coming from the potentiometer will end up being mapped to a value between 0.5 and 0.75 going to the servo. This should limit the movement of the Y axis servo. After compiling and uploading the code to the Arduino again, now the travel range of the Y servo is a lot more practical. It's a very simple project, but the principles you learned here will apply to building more serious robots... or more fun robots! Thank you for watching! And be sure to check out other videos on my channel to learn more about electronics.
Info
Channel: Afrotechmods
Views: 760,191
Rating: 4.9047127 out of 5
Keywords: arduino, servo, servo motor, microcontroller, electronics, engineering, electrical, electrical engineering, laser, laser diode, diode, turret, pan-tilt, servo kit, motor, mechatronics, programming, XOD, firmware, arduino uno, tutorial, potentiometer, gearbox, laser turret, voltage, multimeter, oscilloscope, afrotechmods
Id: iH9_xtulyws
Channel Id: undefined
Length: 12min 32sec (752 seconds)
Published: Fri Dec 29 2017
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.