Sei sulla pagina 1di 18

Chapter-1

PROJECT OVERVIEW

1.1 Introduction

Nowadays, studies of human-computer interactions have been emerging rapidly due to the fast
growing technologies in digital multimedia such as gaming, digital television, smart home
system and many more. Since computers are becoming increasingly integrated in our everyday
life, new technologies and applications are being introduced from time to time in order to
improve the interactions between the users and the computers. However, this interaction is
limited to the device systems such as keyboards, mice, touch screen, trackball, and keypads.
These device systems need a full interaction that requires a contact with the device so that it
can read the input data of interactions to control the computer.

The HCI (human-computer interactions) can be defined as the study, planning, design and uses
of human interface between the users and the computers. Developers ought to improve the
technologies in order to make them more intuitive and have a more natural interaction between
the computer and human themselves. User’s feedbacks and comments on their experience with
the available prototype and the developer provide valuable information to refine the design of
the technology.

Capacitive sensing method has received much attention mainly in the applications of touch
screens as it enables a compelling interface for displays, such as smartphones, tablets and many
other products related to touch screen. By using the same concept, a 3D sensing where that
gestures can be sensed in the out of-plane distance of 20 to 30 cm could enrich the experience
of the user’s interaction with the computer. However, there are challenges when using gestural
input method. The capacitive concept determines how it can achieve sensitivity at a certain
distance when sensing a capacitance distortion as the user interacts with the sensing electrodes
regions. The requirements needed in the development of the capacitive sensing will result in
analogous design decisions. The design enables us to use Low-Cost Electrode Material in
building a mechanism of the gesture sensor hardware.

1
1.2 Project Overview

In this project, we’ll take a very simple idea – the length of time it takes a capacitor to
charge – and make something rather amazing with it: a 3-D interface that can track the
position of your hand.

This 3-D touchless actually uses the same concept on how a capacitive screen on a
smartphone detect the touched location: Capacitive sensing. This technique takes the
human body capacitance as input, for example, when we touch the screen it actually
changes the state of the sensor. When there the does not touch the screen, the
electrostatic field will remain constant. As the person touches the screen, the capacitance
of the sensor changes, which the sensor will register the location of the changed state &
thus registering the location of the screen the user have touched.

In this project the Aluminium foil actually acts as a capacitor that stores the charge when
there is voltage across the foil. Hence these foils are connected to the Arduino to provide
current and voltage to charge the foils. When your hands are nearer to foil, the
capacitance will be lower & foil will takes a small time to charge.

2
Chapter-2

Block Diagram and its Description


2.1 Block Diagram

SchematicDiagram

CircuitDiagram

3
Circuit Description

Circuit diagram for touchless 3-d interface is shown in fig 2.2. In this circuit connections
is as follows:-

 Referring to the schematic, connect the resistor to the three inner wires of the
cables as shown and connect this to the ends of the three wires. The 220k ohm
resistor all connect between the inner wire of the cable and 5V. The 10k ohm
resistor will each be connected between the end of the cable and a pin on the
arduino. The circled area indicates that this wire should be shielded, with the
shield connected to +5V.
 By using a small piece of jumper wire to make the connection between the shield
wires and the 5V output pin on the Arduino.
 Connect each of the 10k ohm resistors to pins 8,9,10 respectively. Connect the
red wire to the +5V pin on the arduino.
 Attach each of the alligator clips to a foil plate. The clips should be attached in
the following order: pin 8= left plate(x), pin 9= bottom plate (y), pin 10= right
plate (z). Make sure that each clip is making good electrical contact with the foil
and is only touching the plate.

4
Original Photograph of Working Project

Fig 3.2 Photo of Working project

Chapter-4

Hardware Design Description

4.1 List of the Components

1. Aluminium Foil
2. Masking Tape
3. Computer with Processing and Arduino Software Installed
4. Shielded Cable

5
5. Arduino
6. 10k ohm resistors
7. 220k ohm resistors
8. Alligator clips
9. Pieces of cardboard

Chapter-5

Software Design Description

5.1 Flow Chart

Fig 5.1 Flow Chart

5.2 Program

5.2.1 3-D Interface Program

import processing.serial.*;

import processing.opengl.*;

Serial serial;

int serialPort = 1;

int sen = 3; // sensors

int div = 3; // board sub divisions

Normalize n[] = new Normalize[sen];

MomentumAverage cama[] = new MomentumAverage[sen];

6
MomentumAverage axyz[] = new MomentumAverage[sen];

float[] nxyz = new float[sen];

int[] ixyz = new int[sen];

float w = 256; // board size

boolean[] flip = {

false, true, false};

int player = 0;

boolean moves[][][][];

PFont font;

void setup() {

size(800, 600, P3D);

frameRate(25);

font = loadFont("TrebuchetMS-Italic-20.vlw");

textFont(font);

textMode(SCREEN);

println(Serial.list());

serial = new Serial(this, Serial.list()[serialPort], 115200);

for(int i = 0; i < sen; i++) {

n[i] = new Normalize();

cama[i] = new MomentumAverage(.01);

axyz[i] = new MomentumAverage(.15);

7
reset();

void draw() {

updateSerial();

drawBoard();

void updateSerial() {

String cur = serial.readStringUntil('\n');

if(cur != null) {

String[] parts = split(cur, " ");

if(parts.length == sensors) {

float[] xyz = new float[sen];

for(int i = 0; i < sen; i++)

xyz[i] = float(parts[i]);

if(mousePressed && mouseButton == LEFT)

for(int i = 0; i < sen; i++)

n[i].note(xyz[i]);

nxyz = new float[sen];

for(int i = 0; i < sen; i++) {

float raw = n[i].choose(xyz[i]);

nxyz[i] = flip[i] ? 1 - raw : raw;

cama[i].note(nxyz[i]);

8
axyz[i].note(nxyz[i]);

ixyz[i] = getPosition(axyz[i].avg);

float cutoff = .2;

int getPosition(float x) {

if(div == 3) {

if(x < cutoff)

return 0;

if(x < 1 - cutoff)

return 1;

else

return 2;

else {

return x == 1 ? div - 1 : (int) x * div;

void drawBoard() {

background(255);

9
float h = w / 2;

camera(

h + (cama[0].avg - cama[2].avg) * h,

h + (cama[1].avg - 1) * height / 2,

w * 2,

h, h, h,

0, 1, 0);

pushMatrix();

noStroke();

fill(0, 40);

translate(w/2, w/2, w/2);

rotateY(-HALF_PI/2);

box(w);

popMatrix();

float sw = w / div;

translate(h, sw / 2, 0);

rotateY(-HALF_PI/2);

pushMatrix();

float sd = sw * (div - 1);

translate(

axyz[0].avg * sd,

axyz[1].avg * sd,

10
axyz[2].avg * sd);

fill(255, 160, 0);

noStroke();

sphere(18);

popMatrix();

for(int z = 0; z < div; z++) {

for(int y = 0; y < div; y++) {

for(int x = 0; x < div; x++) {

pushMatrix();

translate(x * sw, y * sw, z * sw);

noStroke();

if(moves[0][x][y][z])

fill(255, 0, 0, 200);

else if(moves[1][x][y][z])

fill(0, 0, 255, 200);

else if(

x == ixyz[0] &&

y == ixyz[1] &&

z == ixyz[2])

if(player == 0)

fill(255, 0, 0, 200);

else

11
fill(0, 0, 255, 200);

else

fill(0, 100);

box(sw / 3);

popMatrix();

fill(0);

if(mousePressed && mouseButton == LEFT)

msg("defining boundaries");

void keyPressed() {

if(key == TAB) {

moves[player][ixyz[0]][ixyz[1]][ixyz[2]] = true;

player = player == 0 ? 1 : 0;

void mousePressed() {

if(mouseButton == RIGHT)

reset();

12
void reset() {

moves = new boolean[2][div][div][div];

for(int i = 0; i < sen; i++) {

n[i].reset();

cama[i].reset();

axyz[i].reset();

void msg(String msg) {

text(msg, 10, height - 10);

5.2.2 Processing Program

#define resolution 8

#define mains 50 // 60: north america, japan; 50: most other places

#define refresh 2 * 1000000 / mains

void setup() {

Serial.begin(115200);

// unused pins are fairly insignificant,

// but pulled low to reduce unknown variables

for(int i = 2; i < 14; i++) {

pinMode(i, OUTPUT);

13
digitalWrite(i, LOW);

for(int i = 8; i < 11; i++)

pinMode(i, INPUT);

startTimer();

void loop() {

Serial.print(time(8, B00000001), DEC);

Serial.print(" ");

Serial.print(time(9, B00000010), DEC);

Serial.print(" ");

Serial.println(time(10, B00000100), DEC);}

long time(int pin, byte mask) {

unsigned long count = 0, total = 0;

while(checkTimer() < refresh) {

// pinMode is about 6 times slower than assigning

// DDRB directly, but that pause is important

pinMode(pin, OUTPUT);

PORTB = 0;

pinMode(pin, INPUT);

while((PINB & mask) == 0)

count++;

14
total++;

startTimer();

return (count << resolution) / total;

}extern volatile unsigned long timer0_overflow_count;

void startTimer() {

timer0_overflow_count = 0;

TCNT0 = 0;

}unsigned long checkTimer() {

return ((timer0_overflow_count << 8) + TCNT0) << 2;

Advantages

 Better human computer interaction technology.


 Touchscreen can be eliminated.
 Better augmented reality experience for users
 Reliable
 Easy to implement
 Low cost, less complexity.

15
Disadvantages

 Accuracy is less than touch devices.

 Range of touchless interface is less.

 Needs fast processor for real-time interaction.

Applications

 Used in Gesture based interaction for medical surgeries

 3-D touchless fingerprints.

 Gesture based security weapons.

 3-D tracking device

 3-D touchless video games.

Future Expansion

We can use this technology in:-

 We can use this technology in touchless screens, where we do not need to touch
the screen, we can operate a device without touching it.
 This technology can be used in games that is based on movement and gestures.
 This technology can be used in humanoid robots in which we can control a robot
by our body movements.

16
17
****

18

Potrebbero piacerti anche