Need a cheap touch sensor idea.. here it is


Results 1 to 21 of 21

Threaded View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Default Need a cheap touch sensor idea.. here it is

    Hi all! Even if there's some built-in solution and dedicated IC to do the job, here's my few cents solution. Not that it is the only one and safest solution but it's working for me on few home-dedicated application.

    The touch sensor itself:
    almost everything you have on hand and conductive.

    The only thing you have to do is to touch the XYZ conductive material and TADA! No mechanical switch or push button... only one floating piece of conductive material.

    Maybe not suitable in harsh environement, but working great in home application.

    The schematic:
    <img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=570&stc=1&d=1130515579 ">

    The code:
    Code:
    '   Few cents touch sensor
    '   ======================
    '   Using : PIC12F629
    '    
    '   Circuit is quite simple. One pin(GP4) is used as a signal generator.
    '   This pin send signal to all "virtual push button" (GPIO<2:0>)
    '   via 3 X 22K resistor. The touch sensor could be almost everything 
    '   conductive.  
    '
    '   Once a sensor is touched, the program will blink a LED as follow
    '                            GPIO.0 => 1 Blink
    '                            GPIO.1 => 2 Blink
    '                            GPIO.2 => 3 Blink
    
    
    '   PIC config and programming mode
    '   ===============================
        '
        @ DEVICE  PIC12F629,INTRC_OSC_NOCLKOUT ' internal RC osc
        @ DEVICE  PIC12F629,MCLR_OFF           ' Disable external MCLR
        @ DEVICE  PIC12F629,WDT_OFF            ' Disable WatchDog timer
        @ DEVICE  PIC12F629,PROTECT_OFF        ' Disable device protect
        @ DEVICE  PIC12F629,CPD_OFF            ' Disable Code-Protect
        @ DEVICE  PIC12F629,PWRT_ON            ' Enable Power-up timer
        @ DEVICE  PIC12F629,BOD_ON             ' Enable Brown-out detect
    
    '   I/O Alias definition
    '   ====================
        '
        LED        VAR GPIO.5
        Generator  var GPIO.4
        
    '   Hardware definition
    '   ===================
        '                           
        TRISIO = $0F ' GPIO<3:0> as input
                     ' GPIO<5:4> as output
                     '
        CMCON  = 7   ' Disable internal comparator
        
    '   Variable definition
    '   ===================
        '
        Sensor var byte
        Loop   var byte
    
    '   EEPROM assignement
    '   ==================
        '
        data @3,3,0,2,1 ' table to convert 'Sensor' variable result to according
                        ' LED blink. See Result list bellow
        
    '   Software/hardware initialisation
    '   ================================
        '
        led = 0
        generator = 0
        
                
    Start:
        ' /////////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
        ' /                              Start                                    \ 
        ' /////////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
        '
        ' Short explanation of the whole thing.
        '       1. Send a high level to all sensor input => GPIO<2:0>
        '       2. Read GPIO port 
        '       3. Send a low level to all sensor input
        '       4. Keep only GPIO<2:0> bits
        '       5. Test result
        '
        ' If no sensor has been touched, the result will be 7 => 0000 0111, case
        ' else, the body capacitance will introduce sufficient delay between
        ' step 1 and 2 wich will keep the according bit to 0.  
        '
        ' Results will be as follow
        '               NoSensor => 0000 0111 => 7
        '               GPIO.0   => 0000 0110 => 6
        '               GPIO.1   => 0000 0101 => 5
        '               GPIO.2   => 0000 0011 => 3
        '
        repeat
            Generator = 1       ' enable sensor power
            Sensor = GPIO       ' read sensor
            Generator = 0       ' disable sensor power
            Sensor = Sensor & 7 ' keep only Sensor bits
                                '        
            until Sensor != 7   ' redo the test untill one sensor is touch
        '
        ' Now we will flash an LED to confirm wich sensor has been touch
        '                      GPIO.0 => 1 Blink
        '                      GPIO.1 => 2 Blink
        '                      GPIO.2 => 3 Blink
        '
        read sensor,loop ' convert result to blink
        repeat
            LED = 1
            PAUSE 200
            lED = 0
            PAUSE 200
            loop = loop - 1
            until loop = 0
    
        goto start ' do it again...
    Have fun!
    Attached Images Attached Images  
    Attached Files Attached Files
    Last edited by mister_e; - 28th October 2005 at 21:24.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. Any Ideas for a cheap touch sensor??????
    By rsocor01 in forum mel PIC BASIC Pro
    Replies: 17
    Last Post: - 19th October 2013, 00:33
  2. Touch screen 4-wire interface
    By Demon in forum General
    Replies: 6
    Last Post: - 31st December 2011, 18:02
  3. Relaxation oscillators (for capacititive touch sensing)
    By HankMcSpank in forum mel PIC BASIC Pro
    Replies: 24
    Last Post: - 6th December 2009, 22:03
  4. touch switch dimmer
    By helmut in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 18th August 2007, 11:25
  5. Touch Screen Wish List!!!
    By Amity in forum PBP Wish List
    Replies: 2
    Last Post: - 15th September 2005, 14:40

Members who have read this thread : 4

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts