design for the 5 senses by makiko saito

back to project list

project 2 : light controller / light switch with Michael J. Horan and Ernesto Rios

description:

Size

  • 24 by 8 by 8
    • we made it a little smaller because of the size of sensors

Surface

  • Plexi
    • we decided not to use silicon rubber for our prototype (maybe in the future)

Light sources

  • 24 Superbright LEDs
    • put one LED for 1.5 inches

Sensor

  • Linear Pots
    • we wanted to use three of them, but one we ordered didn't get here before the final presentation day... so now we are using two and connecting them in series

our idea:

ORIGINAL CONCEPT
Original concept  suggested a 48"x10"x5" box using a touch- and
pressure-sensitive silicone rubber panel to illuminate 125 LEDs.

FINAL IMPLEMENTATION
Our final iteration of the LightTouch is 24"x8"x8" with a pressure-
proximity plexi panel to illuminate 24 LEDs.

REASONS FOR CHANGE
The reasons for the marked departure from the original concept are
many, but time and cost figured greatly.  First, the size of the box
had to be minimized in height & width to accommodate our budget with
respect to the silicone panel, something which we ultimately did not
use because of an added level of sensor-reading difficulty.  The
depth increased because of our underestimation in the volume LED
wires occupy.

We abandoned the touch-sensitive aspect of the LightTouch relatively
early because of the erratic behavior of multiple QProx sensors in
tight spaces.  We tried using FSRs as a replacement because they
would assist in both registering touch and pressure.  After realizing
how many manufactured FSRs we'd need to buy, we attempted to build
our own using conductive foam and metal mesh.  The readings we
received from these homemade FSRs were too unstable for
implementation so we moved to touch-sensitive linear potentiometers
made by SpectraSymbol.  These sensors register proximity very well,
but not pressure.  We decided to use the linear pots and eliminate
the pressure aspect of the LightTouch.  The actual implementation of
the pots required more work than we thought, but the effect remains.

We used two linear potentiometers, in series, mounted under the front
plexi panel.  To receive distinct touch states, we affixed rubber
'nubs' to the back of the plexi which act as contact points on the
sensors.  This allows the user to touch anywhere on the plexi panel
and receive an illumination under their hand.

Another abandoned feature in this final iteration is the slow and
steady illumination across the entire panel.  PWM and digital pots
were creating more confusion and frustration than we could handle, so
we settled on the somewhat stilted illumination seen.

FUTURE PLANS
An immediate goal is to resolve the strobe-like effect created as a
user's hand crosses the panel.  Digital potentiometers will achieve
this, and we intend to implement them soon.  The amount of pressure
required to get a response is too great, so we have to figure out a
way to lighten it.  We also would like to use the silicone rubber
panel we originally intended to use, to heighten the user's touch
response.  Another improvement is to use pressure sensors to affect
luminosity.

detail

sensors are put on the bottom-edge of the box

 

Mounting LEDs in the Perf-board to keep them in the same place

 

backside of LED board

 

for easy maintainance, we used serial male&female cable to connect LEDs to a breadboard.

 

one spot lights up three LEDs at the same time.

 

putting in the box (left) and connecting with a breadboard (right)

 

affixed "nubs" to act as contact points on sensors

 

working michael...

 

used a sander to create a brushed metal effect

 

put metal on the top and bottom of the box to hold plexi (in a future, put on sides)

 

once you touch, the part will be illuminated.

 

see our video clip

   

others

Sketches

Code

' Define ADCIN parameters
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 15 ' Set sampling time in uS

' Set PORTA to all input
' TRISA = %11111111
input porta.0
input porta.1
' This means AN0 to AN4 are analog
' and AN 5, 6, 7 are digital
ADCON1 = %10000010

adcVar VAR WORD ' ADC result
dutyCycle var byte ' Duty cycle for PWM
adcVar2 VAR WORD
dutyCycle2 var byte

' LED right row
led1 var portb.7
led2 var portb.6
led3 var portb.5
led4 var portb.4
led5 var portb.3
led6 var portb.2
led7 var portb.1
led8 var portb.0
led9 var portd.7
led10 var portd.6
led11 var portd.5
led12 var portd.4

' LED left row
led13 var portc.5
led14 var portc.4
led15 var portd.3
led16 var portd.2

led17 var portd.1
led18 var portd.0
led19 var portc.3
led20 var portc.2
led21 var portc.1
led22 var portc.0
led23 var porte.2
led24 var porte.1

output led1
output led2
output led3
output led4
output led5
output led6
output led7
output led8
output led9
output led10
output led11
output led12
output led13
output led14
output led15
output led16
output led17
output led18
output led19
output led20
output led21
output led22
output led23
output led24

main:
low led1
low led2
low led3
low led4
low led5
low led6
low led7
low led8
low led9
low led10
low led11
low led12
low led13
low led14
low led15
low led16
low led17
low led18
low led19
low led20
low led21
low led22
low led23
low led24

ADCIN 0, adcVar
adcin 1, adcVar2
' config 2 only calls for 1 adcin
' config 1 calls for 3 adcins (adcin 0, adcin 1, adcin 2)

' convert ADC value to a byte value:
dutyCycle = adcVar / 4
dutyCycle2 = adcVar2 / 4

' controlling a linear pot #1
if (5<dutyCycle) and (dutyCycle<20) then
high led1
high led2
high led3
endif
if (21<dutyCycle) and (dutyCycle<40) then
high led3
high led4
high led5
endif
if (41<dutyCycle) and (dutyCycle<60) then
high led5
high led6
high led7
endif
if (61<dutyCycle) and (dutyCycle<80) then
high led7
high led8
high led9
endif

' controlling a linear pot #2
if (81<dutyCycle) and (dutyCycle<100) then
high led9
high led10
high led11
endif
if (101<dutyCycle) and (dutyCycle<120) then
high led11
high led12
high led13
endif
if (121<dutyCycle) and (dutyCycle<140) then
high led13
high led14
high led15
endif
if (141<dutyCycle) and (dutyCycle<160) then
high led15
high led16
high led17
endif

' controlling a linear pot #3
if (161<dutyCycle) and (dutyCycle<180) then
high led17
high led18
high led19
endif
if (181<dutyCycle) and (dutyCycle<200) then
high led19
high led20
high led21
endif
if (201<dutyCycle) and (dutyCycle<220) then
high led21
high led22
high led23
endif
if (221<dutyCycle) and (dutyCycle<255) then
high led23
high led24
endif

serout2 portc.6, 16468, ["dutyCycle= ", DEC dutyCycle, 10, 13]
'serout2 portc.6, 16468, ["dutyCycle2= ", DEC dutyCycle2, 10, 13]

goto main