Project showcase
DataTouch: Tangible Presentations

DataTouch: Tangible Presentations © CC BY

A presentation system based on RFID-reading rings, controlling the slides by picking up objects and walking on the stage. No clicker.

  • 5,245 views
  • 0 comments
  • 13 respects

Components and supplies

Ardgen mega
Arduino Mega 2560 & Genuino Mega 2560
×1
RFID reader (generic)
The antenna should have roughly the same diameter as the ring.
×2
Mxhmfwn8a7kytzskdv8n
Microsoft Kinect Sensor
×1

About this project

Introduction

I love presenting on stage – it's always fun to show people things they didn't know before, and to spark new ideas and conversations.

But I hate PowerPoint.

I'm a researcher in the field of Tangible User Interfaces, and so I decided to do a project on making presentations better: more usable, more intuitive, less abstract.

The result is a presentation system that's based on how we speak about presentations in everyday language: We 'pick up' a topic, and we 'walk through them', sometimes 'step by step'.

Video Demonstration

That's also how DataTouch works:

Controlling presentations by picking up objects and by moving on stage.

Step by step instructions

Technically, the rings are re-wound antennas of RFID readers, which are connected to an Arduino, which, in turn, is talking to the computer. A Kinect tracks the user on stage, and their hands.

Being able to detect which objects a user holds in their hands, as well as how they are held in relation to each other, opens up a lot of opportunities for interaction design:

While I was happy with the concept, the system turned out to be quite prone to detection errors, so I looked for an alternative.

As nice as the rings are, they also caused a lot of problems – hence, I decided to move the technology away from the body, and into a small pedestal on which all the objects (each of which can represent one topic) are stored. Every object contains an RFID tag, the pedestal contains one RFID reader for every object spot on it. As soon as one RFID tag is detected to be missing, it is assumed that the user has picked it up, taking it into their hand.

Conclusions

The result is a much more robust version of the system, following the same interaction principles. I enjoy using it on stage, and I won't switch back to PowerPoint.

Live Demo of DataTouch 2 at TEI 2016

Code

RFID DetectionArduino
This code runs on the Arduno Mega inside the RFID-reading pedestal. It detects RFID tags put ("PUT" via Serial) on and taken ("TKN") off each of the three RFID readers connected to it.
unsigned long pulse_width;

int ledPin1 = 2;
int ledPin2 = 3;
int ledPin3 = 4;
int ledPin4 = 5;
int ledPin5 = 6;

/*
int vibPin  = 7;

int pirPin1 = 8;
int pirPin2 = 9;
int pirPin3 = 10;
int pirPin4 = 11;
int pirPin5 = 12;
*/

int triggerPin = 7;
int monitorPin = 8;


void setup() {

  delay(250);
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial2.begin(9600);
  Serial3.begin(9600);

  delay(250);
  
/*
  pinMode(vibPin,OUTPUT); // vibration motor

  pinMode(pirPin1,INPUT); // PIR 1
  pinMode(pirPin2,INPUT); // PIR 2
  pinMode(pirPin3,INPUT); // PIR 3
  pinMode(pirPin4,INPUT); // PIR 4
  pinMode(pirPin5,INPUT); // PIR 5
  */

  pinMode(ledPin1,OUTPUT); 

  pinMode(triggerPin, OUTPUT); 
  pinMode(monitorPin, INPUT); 
  digitalWrite(triggerPin, LOW); 


  digitalWrite(ledPin1,LOW);

//  Serial.println("Datatouch 0.5");

}

String id1 = "";
String id2 = "";
String id3 = "";

String old_id1 = "";
String very_old_id1 = "";
String old_id2 = "";
String very_old_id2 = "";
String old_id3 = "";
String very_old_id3 = "";

void touchDown() {
  
/*
      digitalWrite(vibPin, HIGH);
      delay(200);
      digitalWrite(vibPin, LOW);
*/
}


void pickUp() {

/*
      digitalWrite(vibPin, HIGH);
      delay(50);
      digitalWrite(vibPin, LOW);
*/

}


void loop() {


pulse_width = pulseIn(monitorPin, HIGH); // Count how long the pulse is high in microseconds
  if(pulse_width != 0){ // If we get a reading that isn't zero, let's print it
        pulse_width = pulse_width/10; // 10usec = 1 cm of distance for LIDAR-Lite
  String s;    
    Serial.println("#DIST:"+String(pulse_width) + ";"); // Print the distance
  }


//  digitalWrite(ledPin1,LOW);
  
  delay(200);


  very_old_id1 = old_id1;
  old_id1 = id1;
  id1 = "";

// Serial.println("voi: "+very_old_id1+"\t | "+"oi: "+old_id1+"\t | "+"i: "+id1+" * ");


  while (Serial1.available() > 0) {
    byte inByte = (byte)Serial1.read();
    id1 = id1 + inByte;
  }
  if (id1.length() > 8) {
    Serial.flush();

    if ((very_old_id1 == "") && (old_id1 == ""))  {
      Serial.println("#RFID1:"+id1+" PUT;");
      touchDown();
    }

  }

  if ((very_old_id1.length() > 8) && (old_id1 == "") && (id1 == ""))  {
      Serial.println("#RFID1:"+very_old_id1+" TKN;");
      pickUp();
  }


  very_old_id2 = old_id2;
  old_id2 = id2;
  id2 = "";

  //Serial.println("voi: "+very_old_id2+"\t | "+"oi: "+old_id2+"\t | "+"i: "+id2+" * ");

  while (Serial2.available() > 0) {
    byte inByte = (byte)Serial2.read();
    id2 = id2 + inByte;
  }
  if (id2.length() > 8) {
    Serial.flush();

    if ((very_old_id2 == "") && (old_id2 == ""))  {
      Serial.println("#RFID2:"+id2+" PUT;");
      touchDown();
    }

  }

  if ((very_old_id2.length() > 8) && (old_id2 == "") && (id2 == ""))  {
      Serial.println("#RFID2:"+very_old_id2+" TKN;");
      pickUp();
  }


  very_old_id3 = old_id3;
  old_id3 = id3;
  id3 = "";

  //Serial.println("voi: "+very_old_id3+"\t | "+"oi: "+old_id3+"\t | "+"i: "+id3+" * ");

  while (Serial3.available() > 0) {
    byte inByte = (byte)Serial3.read();
    id3 = id3 + inByte;
  }
  if (id3.length() > 8) {
    Serial.flush();

    if ((very_old_id3 == "") && (old_id3 == ""))  {
      Serial.println("#RFID3:"+id3+" PUT;");
      touchDown();
    }

  }

  if ((very_old_id3.length() > 8) && (old_id3 == "") && (id3 == ""))  {
      Serial.println("#RFID3:"+very_old_id3+" TKN;");
      pickUp();
  }



if (millis() > 10000) {
  //delay(100000);
}

  
}

Comments

Team datatouch

Fabianhemmert
fabianhemmert
  • 1 project
  • 0 followers

Additional contributors

Published on

December 15, 2016

Members who respect this project

48950.jpgMerlin arch 4fnrmpnf6jMe k5tyvvlhjkDefaultPhotoEinstein65

and 7 others

See similar projects
you might like

Similar projects you might like

Gesture Controlled Robotic Arm Using Kinect & Arduino

Project showcase by Avinash Baranitharan and Karthikeyan

  • 8,652 views
  • 0 comments
  • 28 respects

Electronic Check-In

Project tutorial by Gergely Imreh

  • 5,519 views
  • 9 comments
  • 30 respects

IoT Home Security Model

Project showcase by Aaron Kow

  • 53,004 views
  • 41 comments
  • 155 respects

Use the Force... Or your Brainwaves?

Project tutorial by Tamas Imets

  • 29,213 views
  • 18 comments
  • 101 respects

I Let Everyone On The Internet Control My X-Mas Decoration

Project showcase by Tobi_Lxtr

  • 5,492 views
  • 7 comments
  • 39 respects

The Mill

Project in progress by amosp33

  • 5,536 views
  • 5 comments
  • 9 respects
Add projectSign up / Login