Friday, April 17, 2015

UIST Paper and Demonstration






After testing our prototypes a number of time, we decided to film the final demonstaration and the reult turned out really well. TeamTouch is able to detect all the users with different frequencies and the chains of users. Therefore, the demo game and the painting work perfectly. However, we see the obvious fact that the system need to calibration as different person has a different level of conductive. This directly effects the result of detecting frequencies of the system. In the future, this may consider as a major development for this project.

After completing the filming and editing the videos, we decided to write our paper to submit to UIST conference. We use google drive to share the work between team members and by the end of the day we completed and submited the paper. Such a long hard working day but we feel rewarded by seeing the videos. So please watch it and comment what do you think? Will it be a millionare project in the future? what should we do better?

Wednesday, April 15, 2015

Demos Application

To illustrate potential applications of TeamTouch, we developed two simple demos. The first is a whack-a-mole game designed to support user identification and collaborative inputs. The game requires three players: moles appear randomly on the screen in various colors, which users must “whack”. Brown moles can be whacked by any user, while red, green, and blue moles must be whacked by a specific user--inputs by other users are ignored. Moles overlaid with a “2+” or “3+” require a collective input by two or three users, respectively. Inputs with fewer users are ignored

TeamTouch-enabled Whack-a-Mole

Our second demo is a painting application that assigns a different color to each user. The contributions of each individual to the shared workspace is tracked by color. Collective contributions by two or more users result in the combination of the users’ individual colors (red and blue yield purple, green and blue yield yellow, etc.)

Tracking individual and collective contributions

Thursday, April 2, 2015

Pre-Easter Demo Session


Today, we have a group meeting to test the new electrode I bought it yesterday. The new electrodes are fit perectly to the device (as shown in Figure  and these can be reuse many times as these don't need the gel to stick to the human. The signal generated directly AD9850 DDS and the one pass through the electrodes to our body are nearly identical.

Figure 1: An Electrode in use.
In addition, we change the signal detection code to make it even more accurate and test it. The below videos shows the test of the device with the electrode.


The test result is amazing. Both user can control the tank directly or through touching each other hand. This is a very promising result.

By the end of today I think I will have 2 tasks to do

  1. To symplify the already existing code of the Tank application. At the moment, the Tank application is written by 1 python file which includes the code to detect the signal from Pico Oscilloscope. I believe It is best to seperate the detection code as a seperate module and other games or applications have just import it and use it. I will make it easier for the developers to maintain the signal detection and the applications. The jobs can be independent. The application, game developers dont need to know about the detection code, they have just rather use it. On the other hand, the device developers can make changes and update without interfere with the application development.
  2. To implement the painting application to demonstrate the functionality of the collabrative touch device. Initially, I think this will be easily implemented by using existing free painting source code. From that, I can just added neccesary functions to adapt to new input in this case requencies.
Thats quite alot of work for today (nearly 7hours work) before Easter. I can see that everyone in the group are excited with what we got so far and we are also work hard. Specially Paul, he is the key idea and role in this project.

Anyway, Happy Easter!!!

The problems

So it has been a few weeks since we decided the final hardware for the collabrative touch idea. This is to use the combination of Arduino and AD9850 DDS as the frequency generator and the Pico Oscilloscope as the signal detector. The project seems going well as we are able to generate and detect he desire frequencies we want. However, I think it is worth mention that are the problems we are facing and the propose solutions.

Problem 1 - USB Power (Dedicated to all Mac Haters): After many times couldn't get the signal from the AD9850 DDS, we figured out that the usb power or the current supply of the Macbook are not enough for the Aruino and AD9850 DDS function properly. It turn out that the Macbook power management is so "advanced" so that I can control the current out of the each of the USB port depends on the device plug in to that port.  This problem has caused alot of troubles for us in the last week. The current solution is to move to use the PC usb port with laptop hooked to the socket all the time.

Problem 2 - Contact to the skins: It is hard to connect the signal generator to human skin and even we can do that, the contact between the signal generator wire to the skin is not very good. It also painful to stick the shart "ugly" wire to our skin to test. We decided to bought the reusable electrodes (as shown in Figure 1) which we believe that is best adhesive for optimal conductivity and skin adherence. This has solved the problem completely. The pad is easy to use and can be reuse. The signal pass through our body is good and the Pico Oscolliscope can detect it accurately.


Figure 1: The Reusable Electrodes.

Problem 3 - Switching to battery: After successfully tested using the usb power supply, We wanted to switch to battery so that the device can be portable. We bought the 2.1mm DC Jack to use the battery as the power suppyl for the Arduino ( as shown in Figure 2). The problem is that the signal received from the battery power is not as good as the one fromt he USB power supply. The signal is just 50% clear compare to the one from the USB power signal. The reason is the current from the 9V battery is much less than the current directly from the USB and hence, the signal is not as good. We are currently working on this problem and will find a solution soon as this is the neccessary step to increase the detect arruracy and to cutting wire.

Figure 2: 2.1mm DC Jack Plug Arduino

Monday, March 30, 2015

Arduino with AD9850 - Redesign

Today, we have a meeting to test the target frequencies by using Pico Oscilloscope and the game programmed by Sven. The test was sucessful with high accuracy. Hence, we move to redesign the Arduino + AD9850 set to make it more compact so that it can be treated as a wearable device.

Thanks to the first set up by Andy in the group, I am able to rearrange the Ardunio and AD9850 so that it takes less space and looks a bit cooler. The below figure shows the new set up where the AD9850 board sits on top of the Ardunio.




By pushing the AD9850 chip into the Arduino right digital pin set, The AD9850 uses different pins in the Ardunio compare to the orgional propose by Andy. Here is the full new pins set up;

  • Wire from AD9850 VCC pin to 3.5V on Arduino
  • Male AD9850 W_CLK pin plug to directly to pin 10 on Arduino
  • Male AD9850 FV_VD pin plug to directly to pin 11 on Arduino
  • Male AD9850 DATA pin plug to directly to pin 12 on Arduino
  • Male AD9850 RESET breadboard row to digital pin 11 on Arduino
  • Male AD9850 GND pin plug to directly to pin GND on Arduino
  • Wire from AD9850 ZOUT2 so that we can use it for testing
As the new pins set have been changed the code for the Arduino has been changed to adapt to a new set up. Here the full new code based on the origional code by Andy:

 //AD9850 DDS test  
 #define DDS_CLOCK 125000000  
 #define CLOCK 10 //pin connections for DDS  
 #define LOAD 11  
 #define DATA 12  
 #define RESET 13  
 int flag=0;  
 int time = 2000;  
 bool on = false;  
 long lastTime;  
 long freq1 = 5000000;  
 long freq2 = 6000000;  
 long freq3 = 7000000;  
 long freq4 = 8000000;  
 long freq5 = 9000000;  
 long freq6 = 10000000;  
 long freqUp = freq3;  
 long freqDown = freq3;  
 void setup()  
 {  
  pinMode (DATA, OUTPUT);  
  pinMode (CLOCK, OUTPUT);  
  pinMode (LOAD, OUTPUT);  
  pinMode (RESET, OUTPUT);  
  AD9850_init();  
  AD9850_reset();  
  SetFrequency(freqUp);  
  Serial.begin(9600);  
  lastTime = millis();  
 }  
 /*void loop() {  
 SetFrequency(freqUp);  
 while(1);  
 } */  
 void loop()  
 {  
  // if(flag==1)  
  if (millis() - lastTime > time)  
  {  
   if (on)  
   {  
    SetFrequency(freqUp);  
   }  
   else {  
    SetFrequency(freqDown);  
   }  
   on = !on;  
   lastTime = millis();  
  }  
  // read the input on analog pin 0:  
  int sensorValue = analogRead(A0);  
  // print out the value you read:  
  Serial.println(sensorValue);  
  delay(1);  
 }  
 void SetFrequency(unsigned long frequency)  
 {  
  unsigned long tuning_word = (frequency * pow(2, 32)) / DDS_CLOCK;  
  digitalWrite (LOAD, LOW);  
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word);  
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 8);  
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 16);  
  shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 24);  
  shiftOut(DATA, CLOCK, LSBFIRST, 0x0);  
  digitalWrite (LOAD, HIGH);  
 }  
 void AD9850_init()  
 {  
  digitalWrite(RESET, LOW);  
  digitalWrite(CLOCK, LOW);  
  digitalWrite(LOAD, LOW);  
  digitalWrite(DATA, LOW);  
 }  
 void AD9850_reset()  
 {  
  //reset sequence is:  
  // CLOCK & LOAD = LOW  
  // Pulse RESET high for a few uS (use 5 uS here)  
  // Pulse CLOCK high for a few uS (use 5 uS here)  
  // Set DATA to ZERO and pulse LOAD for a few uS (use 5 uS here)  
  // data sheet diagrams show only RESET and CLOCK being used to reset the device, but I see no output unless I also  
  // toggle the LOAD line here.  
  digitalWrite(CLOCK, LOW);  
  digitalWrite(LOAD, LOW);  
  digitalWrite(RESET, LOW);  
  delay(5);  
  digitalWrite(RESET, HIGH); //pulse RESET  
  delay(5);  
  digitalWrite(RESET, LOW);  
  delay(5);  
  digitalWrite(CLOCK, LOW);  
  delay(5);  
  digitalWrite(CLOCK, HIGH); //pulse CLOCK  
  delay(5);  
  digitalWrite(CLOCK, LOW);  
  delay(5);  
  digitalWrite(DATA, LOW);  //make sure DATA pin is LOW  
  digitalWrite(LOAD, LOW);  
  delay(5);  
  digitalWrite(LOAD, HIGH); //pulse LOAD  
  delay(5);  
  digitalWrite(LOAD, LOW);  
  // Chip is RESET now  
 }  

To sump up, It has been a great work to reduce the side of the device. The new set up may also promise a space for the 9V battery to sit on top of the Arduino and next to the AD9850.

Wednesday, March 25, 2015

Successful Application Scenario - Multiplayer Tank Game

Sven in the group has created a simple tank game that use the frequencies as the controllers for the game. We tested with our design device and the result is promising. Here is the video of the test.

The Tank Application Scenario

It is clearly that the game is function with a very high accuracy. This test seesion today has motivated us to dveelop the device better and think about more applications in the future if the time is allow.

Wednesday, March 18, 2015

Band-pass filter

Today lab session, we used the Oscilloscope to test the signal generators built built by Paul and Sven (as shown in Figure 1). However, one colpitts oscillator generated expected signal which is 7Mhz, the other one ,instead of producing 10Mhz, has a uneven output signal.


Figure 1: Signal generator Oscilloscope testing. 

After having a discussion and suggestion from the lab instructor, we decide to built the band-pass filter to detect our target frequency (ass shown in Figure 2). I spent hours to look at the combination of capacitors, resitors to peoduce the target 7Mhz and 10 Mhz band-pass filters. However, what I found was that the capacitor and resitors I needed for the circuit were'nt not avalable. Hence, we thought about buying it.

Figure 2: Band-pass filter diagram.


In the end of the lab, after considering the time limit and the current problem with the hand built signal generators, we decided that we will come back and use AD9850 DDS (see Figure 3) as the signal generators.

Figure 3: AD9850 DDS.

There are a few reasons make us choose AD9850 DDS instead of continuing building our own signal generator:
  • AD9850 DDS is the ready chip. It is ready to use and hence, it can save us time.
  • It is realative cheap around 8£ which is still under budget for this project
  • It produces clean sine wave signal which important for detecting signal later
  • It can be easily programme to change the frequency
However, there are some drawbacks that we need to deal with when using the AD9850 DDS;
  • We need the Arduino to programme/control the AD9850. It means that they must come as a set of Arduino+AD9850 DDS to work.
  • The combination of Arduino and AD9850 is relatively big.
Considering the advanatges of using the AD9850 outbreak some small drawacks using AD9850 brings, we have made the final decision that using the AD9850 as the signal generator.