CREU Project Blog


Considering to use new Multitouch Technology by NYU Researcher
October 31, 2007, 2:38 pm
Filed under: Uncategorized

We met with professor Anind yesterday and we discussed about the problems with the LED sensing solution.  We are now considering a new possibility of construction a new device using a novel Multi-Touch technology developed by Jeff Han at NYU.  There seems to be a fair amount of documentations on how to constructed a multi-touch table online.   The theory of operation of the technology is as following.   IR light is shone into a plastic surface such that the IR light reflect internally inside the plastic.  When the reflection is disturbed by for example the touch of a finger the light will scatter and the camera placed underneath the plastic will sense blobs of IR light.  We can track the movement on the plastic by tracking the blobs of light sensed by the camera.  A picture of the setup described in the paper is shown below

    multitouch

However for the purpose of the project, we are going to make some slight change to this setup.  Our initial goal of the project is to build a 3D input device, that would allow easier manipulation of 3D models on the computer.  We are interested in tracking finger movements on a sphere using this technology.   We propose to construct a spherical device that is composed of two semi-spherical plastic surfaces.  We want to shine IR light into the two semi-spherical surface and track the finger movements on the sphere using two cameras facing back to back.

Reference:Jefferson Y. Han, Low-Cost Multi-Touch Sensing through Frustrated Total Internal Reflection 

Advertisements


Multitouch LED Display PART IV (NEW PROBLEM ARISES~!!)
October 21, 2007, 7:00 am
Filed under: LED Display, Multitouch

Now that the Bidirectional LED demo is working but we realized a few problems. 

The refresh rate is too slow.  It appears that it is taking too much time for the LED to discharge.  However this is quite minor, we fixed this by grounding the LED using a resistor. 

 When we try to extend this to the 8×8 LED Matrix we found a much bigger problem and we are quite clueless as to how to solve it.  When we work with the matrix, we are not dealing with a single LED.  All the LED are connected to each other by the matrix.  The problem is that when a user places a finger on an LED, all the matrix in the entire array is distrubed, so it is almost impossible to determine where the user is touching. 

We don’t really have a solution right now but we are thinking about switching to a multitouch surface instead. 



Multitouch LED Display PART IV (FIXED BIDIRECTIONAL PROBLEM~!!)
October 15, 2007, 6:44 am
Filed under: Uncategorized

After consulting with Johnny and debugging the bidirectional LED test circuit using an oscilloscope,  we figured out the problem.  Previously in the firmware code of the, we used the Arduino API to set the state of the pin (that is to set the digital pins to input/output state).  The problem occurs at the discharing stage.  When we set the digital pin to input mode using the pinMode function, the pull up resistor is also set.  This is definitely not a good sign, because setting the pull up resistor  prevents the LED from discharging.  What this means is that we cannot call the digital I/O functions in the Arduino API.   Since the Arduino API is actually built upon the AVR-GCC, a free C compiler for the Atmega series microcontroller, we simply have to manipulate the digital I/O using the functions provided in the AVR-GCC lib.  Here is a table on how to manipulate the digital I/O on the Atmega microcontroller.

Here is the modified code


int digi_fwd = 2;
int digi_rev = 3
unsigned int count;
void setup(){
Serial.begin(9600);
Serial.println("Arduino");
DDRD |= _BV(digi_fwd); //set port D pin 2 as output
DDRD |= _BV(digi_rev);
}
void loop(){

//Emitting
PORTD |= _BV(digi_fwd); //set digi_fwd high
PORTD &= ~_BV(digi_rev); //set digi_rev low

//Reverse Bias
PORTD |= _BV(digi_rev); //set digi_rev high
PORTD &= ~_BV(digi_fwd); //set digi_fwd low

//Discharge
DDRD &= ~_BV(digi_rev); //set digi_rev input
PORTD &= ~_BV(digi_rev); //Disable pull up

count = 0;
while(digitalRead(digi_rev)){
count++;
}

Serial.println(count, DEC);

DDRD |= _BV(digi_rev); //set digi_rev input
}



Multitouch LED Display PART III (SUCCESS WITH CONTROLLING LED MATRIX)
October 8, 2007, 6:14 am
Filed under: download, LED Display

Although we have not yet been able to get any useful input from the LED.  We bought some LED Marix Display wired them up to the Arduino Stamp.  We wrote some firmware code in C and a demo app in Processing.  I was hoping to quickly draw a schematic of how the LED Matrix is wired, but I didn’t get to that yet.  Hopefully it will be up in the near future.  Below is a picture of the 8×8 LED Matrix setup.  Each row of the matrix is controlled by a digital I/O pin on the Arduino Stamp.  However there is not enough digital I/O on the Arduino Stamp to control the columns, we use a shift register to output data to control the columns on the matrix.

leddisplay.jpg

Each circle on the java applet corresponds to a single LED on the display.  

Below is also a youtube demonstration of the setup

 For those of you that are interested here is the Firmware Source Code in an Arduino Project and here is the Processing Source Code for the GUI as an Eclipse project.

**Note that the RxTxLib included in the GUI source code is strictly for MacOSX