490 likes | 621 Views
Phidgets™ programming framework. IAT 351 Week 8 Lecture/Lab 1 04.03.2008. summary :. traditional physical UI examples problems phidgets goals definition architecture API java API programming applications references bibliography programming resources.
E N D
Phidgets™ programming framework IAT 351 Week 8 Lecture/Lab 1 04.03.2008
summary : • traditional physical UI • examples • problems • phidgets • goals • definition • architecture • API • java API • programming • applications • references • bibliography • programming resources
traditional physical UI :examples Walking pad (DIUF)
traditional physical UI :examples Lego Mindstorms
traditional physical UI :examples SmartHome
Motivation • Pertaining to ubiquitous computing (ubicomp), two areas are relevant: • Context-aware computing • Tangible user interfaces
What remains hard? • Sensing… • Actuation… • We’ll get back to how Phidgets address this
What is Context? • Any information that can be used to characterize the situation of an entity • Who, what, where, when • Why is it important? • information, usually implicit, that applications do not have access to • It’s input that you don’t get in a GUI
How to Use Context • To present relevant information to someone • Mobile tour guide • To perform an action automatically • Print to nearest printer • To show an action that use can choose • Want to phone the number in this email?
Case Study: tour guides • Very popular theme • Location is an easy piece of context • G. Abowd et al. Cyberguide: A mobile context-aware tour guide. Balzer/ACM Wireless Networks, Vol. 3(5), 1997, pp. 421-433.
In/Out Board Location Widget Location Widget ID to Name Interpreter Face Recognition Smart Card Reader Simple Example: In/Out Board
Tangible User Interfaces • Hiroshi Ishii (MIT) • Tangible Bits • physical form to digital information • Tangible User Interfaces • physical objects, surfaces, and spaces that act as tangible embodiments of digital information
Triangles • Pieces are connected together to trigger digital events • influence the progress of a non-linear story • organize media elements in order to create their own story space
LumiTouch • Two interactive picture frames • User’s touching of a local frame translates to a glow on remote frame • She’s thinking of him • He’s thinking of her
Tangible Video Browser • Tokens are used to: • Act as container for videos • Select a video • Navigate within the video
What remains hard? • Well…everything according to the paper • While an exciting new area, everyday programmers still face considerable hurdles if they wish to create even simple physical user interfaces. Perhaps the biggest--but we believe easily solved---obstacle is the sheer difficulty of developing and combining physical devices and interfacing them to conventional programming languages.
Why is this hard? • Steps • Acquisition • Representation • Interpretation • Storage • Delivery • Reaction • Most of these steps repeated in all development.
Related Work • Tools for working with physical input/output devices • iRX Board • Digital I/O boards • Tini boards
traditional physical UI :problems • Electronics (Difficult to write/debug w/o actual devices) • missing API • unsuited API (wrong abstraction level) • commercial target (oriented to different markets) • lack of simulation capabilities • Hard to build
Goals • Simple so developers concentrate on overall use, modification, and recombination • Easy for average programmer
phidgets :goals • simple devices • easy to program … just as widgets make GUIs easy to develop, so could phidgets make the new generation of physical user interfaces easy to develop.
phidgets :definition • widget • (1931) small mechanical device • (today) ‘windows gadget’ • phidget (aka phydget) • ‘physical widget’
phidgets :definition Phidgets™, or physical widgets, are building blocks that help a developer construct physical user interfaces.
phidgets :architecture Phidget
phidgets :architecture API Simulation Device Device manager
phidgets :API actuator Phidget-specific properties, e.g. NumMotors Phidget-specific events, e.g. OnTag Specific phidget sensor DeviceType IsAttached SerialNumber Generic phidget Int Count Phidget[] Item OnAttach() OnDetach() OnError() Phidgets manager
phidgets :programming (output) opens Phidget COM Object Device sets creates sets Application
phidgets :programming (input) opens Phidget COM Object Device starts creates fire events reads Listener Application
Handling the Phidget • 3 important basic events • ATTACH (USB connected) OnAttach(),attached() • DETACH (USB disconnected) OnDetach(),detached() • ERROR (help!) OnError(), error() • Standard Java approach of listeners and adapters • Specific events for each type of device • E.g. rfid.OnTag() for detecting an RFID tag in range
phidgets :programming Extend adapter Implement OnEvent methods Create OS Object Attach Listener Open connection to device Start listening
Basic listeners public class OpenIFKitExample { public static final void main(String args[]) throws Exception { InterfaceKitPhidget ik; System.out.println(Phidget.getLibraryVersion()); ik = new InterfaceKitPhidget(); ik.addAttachListener(new AttachListener() { public void attached(AttachEvent ae) { System.out.println("attachment of " + ae); } }); ik.addDetachListener(new DetachListener() { public void detached(DetachEvent ae) { System.out.println("detachment of " + ae); } }); ik.addErrorListener(new ErrorListener() { public void error(ErrorEvent ee) { System.out.println("error event for " + ee); } });
IK listeners ik.addInputChangeListener(new InputChangeListener() { publicvoid inputChanged(InputChangeEvent oe) { System.out.println(oe); } }); ik.addOutputChangeListener(new OutputChangeListener() { publicvoid outputChanged(OutputChangeEvent oe) { System.out.println(oe); } }); ik.addSensorChangeListener(new SensorChangeListener() { publicvoid sensorChanged(SensorChangeEvent se) { System.out.println(se); } });
Waits until a device is plugged in ik.openAny(); System.out.println("waiting for InterfaceKit attachment..."); ik.waitForAttachment(); System.out.println(ik.getDeviceName()); Thread.sleep(500); ik.getOutputCount() Ik.getSensorCount() ik.getOutputState(i); ik.setOutputState(i,<true/false>); Ik.getSensorRawValue(i) Ik.getSensorValue(i)
Phidgets Requirement • Connection manager • ID • Simulation mode
onAttach() onDetach() Count Item DeviceType isAttached() SerialNumber Phidget Manager
Phidget Servo • MotorPosition • NumMotors • onPositionChanged()
Attaching the interface kit // create the interface kit object InterfaceKitPhidget ik = new InterfaceKitPhidget(); // look for an attachment ik.openAny(); // don’t continue until an attachment is found ik.waitForAttachment();
Digital Input • Use the wires to hook one of the switches up to a digital input and one of the grounds (on either end of the row) • The parameter is the index of the input • The result is a boolean (true for on, false for off) // read the value of input 3 ik.getInputState(3);
Analog Input • Parameter is index of the device • The result is a value between 0 and around 1000 (I’m guessing the max is 1024) // get the value of the first analog device ik.getSensorValue(0);
Digital Output • Boolean values are used to set the output • Each output has an index: 0 - 7 • The two slots at either end are grounds // sets output 2 to “high” ik.setOutputState(2, true);
Ugly Java Stuff: Exceptions • Almost everything in the phidget package throws exceptions • Solution #1: add “throws Exception” at the end of every method signature, including the main method • Solution #2: wrap phidget calls in try/catch blocks
Pausing in Java • If you want to pause execution of your program • The parameter is time in milliseconds // pause for 2 seconds Thread.sleep(2000);
Drawbacks • Need PC • Not mobile • Not easy to deploy
references :bibliography • Greenberg S. and Fitchet C., Phidgets : Easy developement of physical interfaces through physical widgets. Proceedings of the ACM UIST 2001 Symposium. • Greenberg S. and Boyle M., Customizable physical interfaces for interacting with conventional applications. Proceedings of the ACM UIST 2002 Symposium. • www.phidgets.com, www.phidgetsusa.com • www.wikipedia.org (phidget, widget) • www.smarthome.com, www.legomindstorms.com • Laroussi Bouguila, Evequoz Florian, Michèle Courant, Béat Hirsbrunner. Active Walking Interface for Human-Scale Virtual Environment. HCII’05.
references:programming resources • documentation on www.phidgets.com : • C_API_Manual : basic architecture • http://phidgets.com/documentation/C_API_Manual.pdf • COM_API_Manual : object model (VB) • http://phidgets.com/documentation/COM_API_Manual.pdf • Javadoc : java API, quite similar to COM • http://phidgets.com/documentation/JavaDoc.zip • For each particular phidget see its « hardware description » : • Section labelled « Phidgets » on www.phidgets.com >> Documentation • software introduction and tutorials : • www.phidgets.com >> Documentation • http://www.phidgetsusa.com/tutorials/tutorialhome.asp • code examples : • www.phidgets.com >> Download >> Beta >> Examples.zip • www.phidgets.com >> Project / Examples