The Arduino UNO was used as the interface between the ROBOTmaker's 3D HID sensor and a PC. Some main reasons in the first place is because Arduino UNO is...
As a practical exercise to test this sensor as a 3D HID device is to emulate a 3D mouse in a free 3D CAD package - such as 123D from AutoDESK - such as http://www.iospirit.com/products/remotebuddy/ or http://www.3dconnexion.co.uk/products/spacepilot-pro.html?_s=1d92228a2f0073a547f14679d7f058bf.) which is supported.
The research I did so far I've put on this webpage as a means of discussion and a record of what I've done so far / am doing.
Any help from other enthusiast is really welcome. So if you have anything you'd like to add please just add a comment to this webpage or contact Colin - firstname.lastname@example.org
Where are we now?:
After almost a days of frigging around, I put this project on hold until I get some more feedback and more time to get back to it. I however managed to demonstrate that it's possible to get the ATmega8U2 chipset (which is controlling the Arduino UNO's USB port (newer versions use different chipset)) to load go into programming mode and to reload the original hex file to the ATmega8U2 chipset using FLIP. I've added some screenshots to remind me how far I've got. If I could get a reliable .hex file build from the supplied makefile in winAVR I can continue. As time is runnnig out, in the meantime I've decided just to use Teensy which is described here: http://www.instructables.com/id/USB-Game-Pad-With-Tilt-accelerometer-Mouse/step3/Introducing-the-Teensy-with-HID/. The final version will in anycase use it's own USB chipset, probably the same one the Arduino.
An other option is to use a Teensy which has the native controller already installed. For iPAD see http://web.mac.com/kuwatay/morecat_lab./MocoLUFA.html
OK why are we doing this? I hear you cry! Well the main reasons is that the sensor so far works well through processing sketches, which is fine as a proof of concept but rather limited if you want to use the device within other applications. The device then really needs to emulate a 3D mouse or game controller.
Where's the issue? When you plug an Arduino into the PC / MAC it recognises it as a USB Serial COM port, which is fine if you want to just read data from the Arduino.
But if you want to emulate a mouse you need the PC to recognise it as a HID device. Luckly the latest versions of the Arduino UNO are fitted with the ATmega8U2 chipset to control the USB port. This chipset is a regular chip that can be reprogrammed and configured as a different device. Arduino supply all the code to do this -> here
There has been a great deal of work done in this area such as Dean Camera's project LUFA and Zach Eveland the 8U2 firmwares. To get this working it seemed that it only mostly required reprogramming the Arduino's USB chip.
Why stop now?
The main reason why I had to stop working on this is that when trying to recompile the usb-serial file using the makefile from Arduino the winAVR comes up with compiler errors. It has something to do with the paths and location of the source files. On closer inspection I see that the makefile points to files that no longer exist in the LUFA downloads so there is some general incompatibility between the latest versions or the versions that I've downloaded. To reprogram the makefile will take me some hours so I therefore have put this on hold for now. If anyone else has cracked this please let me know.
The AVR USB chipset version I discuss on this webpage is for the ATmega8U2 chipset version. The latest Arduino USB versions are with a ATmega16U2
The ATmega8U2 in firmware source code is available from the Arduino website. The ATmega16U2/8U2 is loaded with a DFU bootloader, which can be activated by:
One can then use Atmel's FLIP software (Windows) or the DFU programmer (Mac OS X and Linux) to load a new firmware. Or you can use the ISP header with an external programmer (overwriting the DFU bootloader). See this user-contributed tutorial for more information.
Some Background References to read:
Here is a jumbled list of references that will be sorted out soon.Upgrading 8U2 Firmware upgrading the firmware of the Atmega8U2 chip on an Uno or Mega2560. This chip acts as the usb-to-serial converter and can be updated via USB.As a backup copy the original and latest Atmega8U2 firmware versions herehttps://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares. Ensure to use the correct one. In my case the Atmega8U2 version. Ensure to copy and paste the hex file into a notepad as downloading just create a .html file for some reason!
Here is the procedure that I need to come back to when I get a bit of time:
On Unix try this http://hunt.net.nz/users/darran/weblog/13a32/
Other relevant search links
The proCONTROLL library allows Processing to communicate with controll devices like joysticks, joypads but also keyboards and mice. Using proCCONTROLL on MacOSX for example allows you to address more than one mouse. proCONTROLL bases on a modified JInput version. To get access to the different devices it has to communicate with native libraries.
To use a device with proCONTROLL you should ensure that it is properly installed first. Often a joystick has to be calibrated to work correctly. Use the printDevices() function to get a list of the available devices. There are two ways to use proCONTROLL you can access an device and ask for the current state of its buttons and sliders or you can plug methods that handle the events of buttons.
proCONTROLL is tested on Windows but should also work on Linux and MacOSX. http://creativecomputing.cc/p5libs/procontroll/
3DConnexion Sensor Driver for Windows 7
LUFA (Lightweight USB framework for AVR by Dean Camera) & USB-HID Projects
V-USB is a software-only implementation of a low-speed USB device forAtmel’s AVR® microcontrollers, making it possible to build USB hardware with almost any AVR® microcontroller, not requiring any additional chip. V-USB can be licensed freely under the GNU General Public License or alternatively under a commercial license. A comprehensive set of example projects demonstrates the wide range of possible applications.
Using WiiRemote driver
Other sources (needs sorting out)
The following text has been taken from here: http://arduino.cc/forum/index.php?action=printpage;topic=111.0 (and here http://arduino.cc/forum/index.php?topic=111.0) and modified with some of my own texts.
There are two modifications to do:
How to put the Uno on DFU mode:
Hardware, drivers installation:
Arduino Uno DFU: drivers are on Atmel\Flip 3.4.2\usb
To be sure that's working change a line in Descriptors.c:UnicodeString = L"Arduino Uno" by UnicodeString = L"ArduINo UNO"
You should have to modify ARDUINO_MODEL_PID if you use MEGA
Program target device memoryTest
Verify the board
Upload blink program on your uno to check that the board is still working fine.
Updating the Atmega8U2 on an Uno or Mega2560 using DFU
The way I did it is as follows:
1. Install Flip to update the ATmega8U2 on the Arduino
To setup the project and upload the Arduino usbserial application firmware to an ATMEGA8U2 using the Arduino USB DFU bootloader: 1. unpack the source into LUFA's Projects directory 2. set ARDUINO_MODEL_PID in the makefile as appropriate 3. do "make clean; make" 4. put the 8U2 into USB DFU mode: 4.a. assert and hold the 8U2's RESET line 4.b. assert and hold the 8U2's HWB line 4.c. release the 8U2's RESET line 4.d. release the 8U2's HWB line 5. confirm that the board enumerates as either "Arduino Uno DFU" or "Arduino Mega 2560 DFU" 6. do "make dfu" (OS X or Linux - dfu-programmer must be installed first) or "make flip" (Windows - Flip must be installed first) Check that the board enumerates as either "Arduino Uno" or "Arduino Mega 2560". Test by uploading a new Arduino sketch from the Arduino IDE.
2. Open the Device Manager and right-click the Atmel USB device in the Jungo section. Select the driver in the Program Files /Amtel/Flip/Driver directory
In the pop-up menu, select Update Driver.
AT90USB128 is an example; the actual device name is the one you are working with.
Programming the Freeduino
D2XX drivers allow direct access to the USB device through a DLL. http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf & http://www.ftdichip.com/Support/FTSwExamples.htm
Products > Infrared Control Freak - 360 degree Proximity Sensor > Sensorium Project - 3D-360-degree Multi-touch(less) HID sensor >