Arduino Board and FRC Victors

So, I made several attempts to use a potentiometer and the PWM outputs on a Arduino board that were connected to a Victor powered by the old FRC distribution board.

Has anyone else tried this? Mind sharing your code or some ideas?

Thanks
Davis

A victor uses an R/C type PWM signal. A pulse of 1 mSec is full reverse, 2.0 mSec is full forward, 1.5 mSec is neutral. These pulses repeat at perhaps 200 Hz.

What kind of PWM pulses are you sending to the Victor?

Hi-

I actually just recently used my Arduino to control both a Victor and a Jaguar, (Wired a potentiometer and had the Arduino scale the speed based on the pot value)

Try using the Servo library that comes with the Arduino.

Telling the pin to write the servo with a value of 90 will stop it, and > 90 is forward and < 90 is backwards.

If you want I can find the code I used.

Servo library is the way to go. Just finished a project using victors and the arduino. Banged our heads against the wall before figuring out arduino PWM output won’t get it done. You need PPM output on the arduino, which the myservo.write() function will generate. Look up the servo example included with the arduino software.

Thanks all. Yea I set it all up and tested it with the default “Servo Knob” example. Which worked great! I also added part to turn the 0 to 179 value into a -1 to 1 value and used the serial monitor to see the relative value.

Now I believe this is by far a stretch (considering the code is on the board), but has anyone successfully used a joystick with this? When using the computer, the only idea I would have is to somehow (i have no clue) send the joystick value to the board such as what the serial monitor does?

Also have you used the game pad shield to try and control it?

I haven’t, but Google it. I’m sure someone has and you can look at their resources. There’s a massive community out there for Arduino.

Sure. A joystick likely just has a potentiometer inside. Wire it to an analog input, then use the analogRead() function to get the value from the joystick. use the map() command to map the values of the joystick pot onto the range of values you are supplying the victor.

The Arduino website reference section will tell you how to setup all these commands.

I think he meant a USB or other type of joystick connected to the computer or laptop, not a direct, wired connection.

You might be able to send it down with the serial connection, but you would have to get or write your own application for the computer side. Arduino’s serial monitor can’t help you with a joystick.

You can definitely hook up joysticks…we build complete robot control systems using only an Arduino.

Robot with Arduino control system

We did something like this as a side project this summer to build a wired controller for our robot for moving it around and testing without setting up a real drivers station. You can buy old game controllers at Goodwill or other locations for about $2. PS2 controllers are dirt cheap now. Have the students cut the connections to the existing PC board, and wire directly to the potentiometer. We used a standard 9 pin D connector which provided 5 volt power and ground into the controller to connect across the potentiometers. That left left enough extra connections to return the 4 analog values from the center tap on the potentiometers, and three additional connections that could be used to wire some buttons.

The students were very impressed with the idea of opening up an old controller and re-purposing it for a new function. The PS2 controller now just acts as a set of potentiometers and switches connected to the 9 pin connector. A little hot glue for strain relief, and reassembling the case, and the thing looks reasonably professional. The Arduino and a small battery to power it goes into another box that can be placed on the robot and also has four connectors for the PWM outputs. In use you can connect a standard serial cable between the controller and the arduino box since that has a 9 pin D connector as well. Just make sure you serial cable is straight through and not null modem.

I can post the code separately.

Ok, I have access to the code now. here it is

This is untested sample code supplied as is with no implied suitability for any actual application. The programming team is relatively new and still learning Java, so I wrote most of this just to get us started. We still need to test it a bit more and have the software team rewrite it at some point. But this should give you an idea of how to get started.

I had to convert the code to a .TXT file to get it to upload. Hopefully nothing got changed that would mangle the code. I think just changing the extension back, or cutting and pasting all or part of the code into the Arduino editor should allow you to use it. Our team does not have a lot of meetings left before build season, but if there is any interest I will ask for someone to take some pictures of the finished project.

Mypendant.txt (5.4 KB)


Mypendant.txt (5.4 KB)

Thanks for the info.
@ajlapp - Was looking around on the site and looks interesting, do you have a document that explains how it is setup?

@tsaksa - That seems like an interesting project, I am definitely going to try that, and yea if you get a chance could you snap a pic.

Thanks,
Davis

If you want to use a computer to send commands to the arduino then use Processing (arduino’s computer based cousin). There is a library included in the software package that allows you to interface with the arduino though the usb serial connection.

If you want to control the whole setup remotely, you can use an xbee shield and radio to create a wireless serial connection between two arduinos.

Personally, I have used ps2 controllers as shown in this link (http://www.billporter.info/playstation-2-controller-arduino-library-v1-0/). It’s much cleaner than soldering the connections to the potentiometers inside the controller, plus you can do some interesting things with the ruble feature, etc. There is also some canned code on that web page.

The web site also has a library for creating complex serial communication protocols (which comes in handy when you want to transmit more than one variable over a serial connection).

PM me and I can send you pictures of the project setup and code (if I can find it).

Thanks, this is truly what I was looking for, I had thought of the xbee addition and that would work; I just didn’t know a simple environment that would allow the communication.

Also, I am thinking of the use of bluetooth, or it looks like in aj’s link that with the ethernet shield, it could be connected to a router.

@ajlapp - Was looking around on the site and looks interesting, do you have a document that explains how it is setup?

No specific document exists at this time, sorry. The source code for both the robot side and operator side is available at the link previously provided.

In general each side of this system has an Arduino and an Ethernet shield. We used Asus routers to communicate.

Everything we use in the system is open-source and available in various libraries.

For the linked project we chose to have an Arduino on the operator side for portability, but this isn’t necessary. We typically build these setups with just a laptop on the driver side.

In the very near future this system will be available in a low-cost consumer ready package. It’s very cool and very open. :smiley:

Good information, and the link to the PS2 library was really handy. I was also considering an XBee radio or other wireless interface at some point to build a more complete low cost Arduino controller. However, do not write off the more crude method of wiring directly into the controller to get at the potentiometers. While this is a much less elegant solution than what you propose it has some other values.

  1. Dirt cheap. (I am comparing to the wireless version here) You can build the entire (wired) control system including the computer for less than $30 if you scrounge a few parts for the box and connectors. This is a more reasonable price if your intent is just to build a small debug tool.

  2. The students get to open up the controller, identify and test them with a multimeter, see how the joysticks were used, and connect to them. I find it hard to get some of the students interested in practicing soldering skills. But this project did interest them.

  3. I think it is easier for the students to understand the complete operation of the simpler system. At least till they get more experience with the Arduino.

  4. You can use this approach for controlling your own analog circuits or devices other than the Arduino.

But, you are right that library is cool. I will have to try it now. It is too bad the PS2 used such a large and unusual connector. If it already came with something small and common you could be up and running in half the time.

Ok, I am using Processing to attempt to send the Joystick data to the Arduino board.
But I just can’t figure out how to get the info from the joystick…

As mentioned, an Analog joystick is given 5 volts and ground and returns an analog voltage between 0 and 5 volts (-ish).

A USB Joystick requires you to use the USB Serial connection.

I’m sorry, but I am still very confused on how to do it (been looking on google for a while). I am trying to use a joystick that is connected to the PC which is sending the value to the Arduino Board which will act upon it using the servo class.

Just wanted to throw in my 2 cents. I’ve been working with ajlapp to design an Arduino based control system and we’ve learned a few things along the way.

Your best bet is to go with whatever language you’re most comfortable on your PC (Visual Basic, Java, Python, LabView, etc…). There are plenty of great libraries out there for each of those languages that support reading in USB controllers and make it very simple. I personally use Java along with the JInput USB library: http://www.newdawnsoftware.com/resources/jinput/ If needed I can provide all of the source code to get the basic values using JInput. All you need to do once you have the values is write it out onto the USB serial port that the Arduino is connected to.

It’s up to you how you want to write the values, but one way would be using a delimiter or a marker character that tells the arduino that a new value from the joystick is coming through. All modern programming languages should have a simple library or method of writing out to any connected serial port.

The nice thing about doing it this way is that you could very easily replace the wired USB connection with a XBee shield and XBee USB adapter (http://www.sparkfun.com/products/9819) down the line to go wireless.