dillon krasovec : jerod ellingson : robert glissmann : ben walker : patrick hanschen team teneo +cdr mission : universal human interface device : intuitive alternative to mouse and keyboard or any difficult to learn remote controller glove architecture adc adc glove schematic gyro schematic glove progress : flex sensor + circuit design + analog input on MSP + testing : external ADCs + circuit design + spi communication + streaming data 80% 33% e progress : accelerometer + + + + circuit design communication streaming data packet data 65% : gyro + + + + circuit design analog input on MSP process angle data connecting to external ADC 50% SPI State Machine 1/x Data Out Data In SPI Slave Slave Select SMClk SPI Master MSP430F2616 •3 SPI State Machines •2 different clock speeds asynchronous spi communication void main() { . . Place commands in FIFO buffer . [ Other tasks ] . Read data from FIFO buffer . FIFO Command Buffer FIFO Receive Buffer void spi_interrupt() { . . Read next command . . Buffer received data . . Send next command . . Request ADXL Data* Request Flex Data* Process ADXL Data Quantize Flex Data Request Gyro Data* Process Data Send Data* timing : what we want + transmission specification: packets/sec : limitations + get sufficient samples for precision + allow sufficient processing : achieving correct timing + set ADXL sampling clock + choose buffer fill threshold Request ADXL Data* Request Flex Data* Process ADXL Data Request ADXL Data* Quantize Flex Data Request Gyro Data* Request Flex Data* Process Data Quantize Flex Data Request Gyro Data* Send Data* Process ADXL Data Process Data Send Data* pc-hub -f2616 class diagram calls pc hub HID_emulator <<boundary>> +DeviceDescriptor(); RF_receiver <<boundary>> +inBuff[]; char +outBuff[]; char glove +getHandState(); +polledByADC(); Gets data from IR_camera <<entity>> +Init(); +transmit(); +transmitComplete(); +sendFeature(char []); +writeBytes(char[]); +readBytes(char &[]); +connect(ID); Xml_interface <<boundary>> +filename +getProfileList(); +saveProfileList(); +loadSettings(); +saveSettings(); Gesture <<entity>> +ID(); string +BitwiseDescriptor(); +XmlNodeDescriptor(); +getName() +getBitwiseDescriptor(); +getXmlNode(); +populateFromXmlNod e(): modifies AnalogSensor <<entity>> +SlaveSelect(); +LookupTable(); ProfileBuffer <<entity>> +ActiveProfile +list<Gesture> gestures +rename(string); +saveProfile(); +cancel(); +createNewGesture(); +saveGesture(); +cancelGesture(); AtmelUSB_interface <<entity>> displays polls +getx(); +gety(); +getz(); +setMode(); HubController <<controller>> +RF_receive(); +HID_emulator(); +IR_tracker(); pc shows/hides calls transmits to calls calls RF_transmitter <<boundary>> +inBuff[]; char +outBuff[]; char +sendBuff(); Accelerometer <<entity>> Gives data/ gets status gets data from gets/sets GloveController <<controller>> +HandState(); struct +FingerTrends(); +AccelTrends(); ControllerState(); +getSensorData(); +sendHandStat() +executeScheduledTasks(); +processCurrentState(); +sendMouseState(); +sendKeyboardState(); MainUI_window <<controller>> +List<Profile> profile(); +ProfileBuffer(); +XmlFileInterface(); +save(); +cancel(); +createNewProfile(); +editProfile(); +downloadProfile(); Profile <<entity>> +List<Gesture>gestures +name(); string +description(); string +setName(); +getName(); +setDescription(); +getDescription(); +getGestureList(); List<Gesture> +addGesture(Gesture); +removeGesture(); Composed of infrared cam : : : : : : PixArt wii remote cmos + preprocessing outputs x y coords and spot size no official spec sheet hacks and snooping ared cam : : : : intermediate circuit 25Mhz oscillator i2c – different clk init() + mode + sensitivity : timer driven polling radiofrequency : : : : : ez430-rf2500 pin header interface initially a risk uart for debugging spi ports + successful + only has two – pins are shared + no uart for debugging : current progress = 85% packets RC LC M 5 discrete bits middle I 5 discrete bits index T 12 bytes accel x-vector accel y-vector accel z-vector misc. 3 bits palm gyro pitch gyro roll 15 3 bits rotation 8 7 0 pc hub gesture lookup 10 8 5 4 3 2 1 0 key RDir PDir RD LD T I M hash function index keyboard seq. mouse action 0 3 chars 2 bits 1 3 chars 2 bits … … … 8 3 chars 2 bits master to usb emulator : spi (3-wire) from master to USB emulator + frame packet (5-bytes) indicates key presses and mouse position K1 K2 K3 ∆X ∆Y + single status-byte returned by emulator + indicates whether a new Profile LUT is available + hub’s look-up table is updated with “focused transfer” : all other transactions and look-ups cease : tables are not persistent between sessions (mouse stored statically) + current progress = 25% pc hub schematic usb emulator module : atmel processor (At90USB1287) implements human interface device (HID) protocol + vendor ID (VID) and product ID (PID) distinguish unit from other USB devices + device descriptors : mouse : keyboard : generic device emulator module : receives output reports from PC utility + when requested by the Hub master processor, reports are forwarded via SPI : receives commands from hub master via SPI: + keys and mouse state to assert in output reports : current progress = 30% pc config utility : software utility allows for complete configuration of glove gesture mapping + written in visual c# : usability profiles enable users to save groups of gestures for a specific type of application + eight or fewer gestures per profile + three-key hotkeys : application saves profiles by serializing to XML <?xml version="1.0" encoding="utf-8" ?> <Profiles> <Profile name="Mouse" default="true" description="Basic mouse controller"> <Gesture id="g45t"> … config utility : library support for device detection + windows messages provide connection notification : DLL wrapper enables communication to Hub device via host “output reports” + allows utility to detect when USB device is connected + gesture descriptors are packed into six-byte structures + profile description table transmitted via OUT reports : current progress = 70% Configuration Utility UI helicopter hub design pitch throttle pirouette roll zigbee heli-hub architecture rc LPF adc v follower MSP430F2616 gpio jtag SP dac helicopter hub schematic controller blues : controller is now optional + very challenging control application + may require more powerful processor + testing could be hazardous : testing shows… + even coaxial helicopter challenging to fly + hovering requires constant adjustment + uncertain if glove will be easier or harder e milestone 1 : derive angle and movement from accelerometer : acquire and process flex and gyro data : IR cam prototyping : integrating RF + emulator + IR into hub proto : demonstrate pass-through function on helihub : rev. 1 PCB’s e milestone 2 : : : : : glove construction helicopter controllable by glove glove fully emulates HID device on a PC GUI with google sketchup profiles rev. 2 PCB’s construction budget = $620 : : : : : repair parts and batteries for heli PCB sensors PCB revisions glove and accessories surface mount components = $190 -= -= -= -= -= $60 $60 $200 $60 $50 Division of Labor task dillon robert IR unit d r drivers / USB d r gyroscopes / accelerometers ben jared p j p j b flex sensors / buttons software system sesign patrick d r sensor processing and comm b helicopter controller interface PCB d r b p j construction d r b p j questions dillon krasovec : jerod ellingson : robert glissmann : ben walker : patrick hanschen