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
Phidgets | IAT351 | 04.03.2008
traditional physical UI :
examples
Walking pad (DIUF)
Phidgets | IAT351 | 04.03.2008
traditional physical UI :
examples
Lego Mindstorms
Phidgets | IAT351 | 04.03.2008
traditional physical UI :
examples
SmartHome
Phidgets | IAT351 | 04.03.2008
Motivation
• Pertaining to ubiquitous computing (ubicomp), two areas are
relevant:
Context-aware computing
Tangible user interfaces
Phidgets | IAT351 | 04.03.2008
What remains hard?
• Sensing…
• Actuation…
• We’ll get back to how Phidgets address this
Phidgets | IAT351 | 04.03.2008
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
Phidgets | IAT351 | 04.03.2008
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?
Phidgets | IAT351 | 04.03.2008
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.
Phidgets | IAT351 | 04.03.2008
Simple Example: In/Out Board
Phidgets | IAT351 | 04.03.2008
Simple Example: In/Out Board
In/Out
Board
Phidgets | IAT351 | 04.03.2008
Location
Widget
Location
Widget
Face
Recognition
Smart Card
Reader
ID to Name
Interpreter
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
Phidgets | IAT351 | 04.03.2008
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
Phidgets | IAT351 | 04.03.2008
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
Phidgets | IAT351 | 04.03.2008
Tangible Video Browser
•
Tokens are used to:
Act as container for videos
Select a video
Navigate within the video
Phidgets | IAT351 | 04.03.2008
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.
Phidgets | IAT351 | 04.03.2008
Why is this hard?
•
Steps
•
Acquisition
Representation
Interpretation
Storage
Delivery
Reaction
Most of these steps repeated in all development.
Phidgets | IAT351 | 04.03.2008
Related Work
•
Tools for working with physical
input/output devices
•
•
•
iRX Board
Digital I/O boards
Tini boards
Phidgets | IAT351 | 04.03.2008
traditional physical UI :
problems
1.
2.
3.
4.
5.
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
Phidgets | IAT351 | 04.03.2008
Goals
• Simple so developers concentrate on overall use, modification, and
recombination
• Easy for average programmer
Phidgets | IAT351 | 04.03.2008
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 | IAT351 | 04.03.2008
phidgets :
definition
• widget
(1931) small mechanical device
(today) ‘windows gadget’
• phidget (aka phydget)
‘physical widget’
Phidgets | IAT351 | 04.03.2008
phidgets :
definition
Phidgets™, or physical widgets, are building blocks that help a
developer construct physical user interfaces.
Phidgets | IAT351 | 04.03.2008
phidgets :
architecture
Phidget
Device
Device manager
Simulation
API
Phidgets | IAT351 | 04.03.2008
phidgets :
architecture
API
Simulation
Device
Device manager
Phidgets | IAT351 | 04.03.2008
phidgets :
API
actuator
sensor
Phidget-specific
properties, e.g.
NumMotors
Phidget-specific
events, e.g.
OnTag
DeviceType
IsAttached
SerialNumber
Int Count
Phidget[] Item
OnAttach()
OnDetach()
OnError()
Phidgets | IAT351 | 04.03.2008
Specific phidget
Generic phidget
Phidgets manager
phidgets :
java API
Phidgets | IAT351 | 04.03.2008
phidgets :
java API
Phidgets | IAT351 | 04.03.2008
phidgets :
programming (output)
opens
Phidget
COM
Object
creates
sets
Application
Phidgets | IAT351 | 04.03.2008
Device
sets
phidgets :
programming (input)
opens
Phidget
COM
Object
Device
starts
creates
fire events
reads
Listener
Application
Phidgets | IAT351 | 04.03.2008
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 | IAT351 | 04.03.2008
phidgets :
programming
Extend adapter
Implement OnEvent methods
Create OS Object
Attach Listener
Open connection to device
Start listening
Phidgets | IAT351 | 04.03.2008
public class OpenIFKitExample
{
public static final void main(String args[]) throws Exception {
InterfaceKitPhidget ik;
System.out.println(Phidget.getLibraryVersion());
Basic listeners
ik = new InterfaceKitPhidget();
ik.addAttachListener(new AttachListener() {
public void attached(AttachEvent ae) {
System.out.println("attachment of " + ae);
}
});
Phidgets | IAT351 | 04.03.2008
ik.addDetachListener(new DetachListener() {
ik.addInputChangeListener(new InputChangeListener() {
public void inputChanged(InputChangeEvent oe) {
System.out.println(oe);
}
});
ik.addOutputChangeListener(new OutputChangeListener() {
public void outputChanged(OutputChangeEvent oe) {
System.out.println(oe);
}
});
ik.addSensorChangeListener(new SensorChangeListener() {
public void sensorChanged(SensorChangeEvent se) {
System.out.println(se);
}
});
Phidgets | IAT351 | 04.03.2008
IK listeners
ik.openAny();
System.out.println("waiting for InterfaceKit attachment...");
ik.waitForAttachment();
Waits until a device is plugged in
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 | IAT351 | 04.03.2008
Phidgets | IAT351 | 04.03.2008
Phidgets Requirement
• Connection manager
• ID
• Simulation mode
Phidgets | IAT351 | 04.03.2008
Phidget Manager
•
•
onAttach()
onDetach()
•
•
Count
Item
Phidgets | IAT351 | 04.03.2008
•
•
•
DeviceType
isAttached()
SerialNumber
Phidget Servo
• MotorPosition
• NumMotors
• onPositionChanged()
Phidgets | IAT351 | 04.03.2008
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();
Phidgets | IAT351 | 04.03.2008
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);
Phidgets | IAT351 | 04.03.2008
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);
Phidgets | IAT351 | 04.03.2008
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);
Phidgets | IAT351 | 04.03.2008
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
Phidgets | IAT351 | 04.03.2008
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);
Phidgets | IAT351 | 04.03.2008
Drawbacks
• Need PC
• Not mobile
• Not easy to deploy
Phidgets | IAT351 | 04.03.2008
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.
Phidgets | IAT351 | 04.03.2008
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
Phidgets | IAT351 | 04.03.2008
© Copyright 2026 Paperzz