Abstract

Momentary switches are important building blocks to prototype novel physical user interfaces and enable tactile, explicit as well as eyes-free interactions. Unfortunately, typical representatives, such as push-buttons or pre-manufactured membrane switches, often do not fulfill individual design requirements and lack customization options for rapid prototyping. With this work, we present Pushables, a DIY fabrication approach for producing thin, bendable and highly customizable membrane dome switches. Therefore, we contribute a three-stage fabrication pipeline that describes the production and assembly on the basis of differently demanding prototyping methods making our approach suitable for technology-enthusiastic makers, researchers, fab labs and others who require custom membrane switches in small quantities. To demonstrate the wide applicability of Pushables, we present application examples from ubiquitous, mobile and wearable computing.

Publications & Articles

  • Folientaster selbstgemacht – von Hand oder mit der Maschine

    Folientaster selbstgemacht – von Hand oder mit der Maschine.

    Klamka, K.; Dachselt, R.;

    MAKE Magazin 01/2019, Hannover.Kreativ mit Technik | Make - Heise; Maker Media GmbH,84-85,2019.

    @article{klamka2018_make,
       author = {Konstantin Klamka and Raimund Dachselt},
       title = {Folientaster selbstgemacht – von Hand oder mit der Maschine},
       year = {2019},
       month = {01},
       location = {Hannover},
       pages = {84--85},
       url = { https://shop.heise.de/katalog/community-projekte-bc9a98?wt_pdsrc=productList},
       publisher = {Kreativ mit Technik | Make - Heise; Maker Media GmbH}
    }

    List of additional material

    Online Article, Project page

  • Pushables: A DIY Approach for Fabricating Customizable and Self-Contained Tactile Membrane Dome Switches

    Pushables: A DIY Approach for Fabricating Customizable and Self-Contained Tactile Membrane Dome Switches.

    Klamka, K.; Dachselt, R.;

    In The 31st Annual ACM Symposium on User Interface Software and Technology Adjunct Proceedings.UIST '18, Berlin, Germany.ACM,1-4,2018.10.1145/3266037.3266082

    @inproceedings{klamka2018_pushables,
       author = {Konstantin Klamka and Raimund Dachselt},
       title = {Pushables: A DIY Approach for Fabricating Customizable and Self-Contained Tactile Membrane Dome Switches},
       booktitle = {The 31st Annual ACM Symposium on User Interface Software and Technology Adjunct Proceedings},
       year = {2018},
       month = {10},
       location = {Berlin, Germany},
       pages = {1--4},
       numpages = {3},
       doi = {10.1145/3266037.3266082},
       url = {https://doi.org/10.1145/3266037.3266082},
       acmid = {3266082},
       publisher = {ACM},
       address = {New York, NY, USA},
       keywords = {paper button, tactile, printed electronics, interactive paper, haptic, membrane switch, dome switch}
    }

    List of additional material

    Preview Video, Project page, Poster

Video

1 – Circuit Layer

As a first layer, we have to realize the circuit switch layer that is bridged by a pressed top layer. This could be done by using conductive pens, adhesive copper tape or conductive inkjet-printed traces.

1.1 – Copper Tape

1.2 – Conductive Pens

1.3 – Conductive Inkjet-Printing

2 – Spacer Layer

The second layer extends the travel of the tactile layer and can be easily produced with hole or offices punchers with standard 0.4 mm thick PVC foils.

2.1 – Office Puncher

2.2 – Punch Pliers

2.3 – Hole Punch

3 – PVC Dome Layer

In order to realize membrane buttons with a great tactile feel and nice perceptible counter pressure, we introduce three embossing processes that show how dome-shaped polyester overlays can be DIY fabricated.

3.1 Manual Embossing

The easiest way to build tactile overlays is to manually emboss a dome in a plastic film, however exact timings (4 seconds, orthogonal, 100°C) must be kept.

Part List

Part List for Manual Embossing
Image Part Description
Solder Iron*
*recommented with adjustable temperature control (100°C)
We used an inexpensive temperatur-controlled HoLife solder iron station.
Upholstery Nails Depending on your solder iron you additionally need a screw driver or a drilling machine and a hammer to securely fix the upholstery nails at the solder tip.
Solder Iron Tip We modified a standard exchangeable solder iron tip.
Solder Iron Tip with Upholstery Nail We modified a standard exchangeable solder iron tip with upholstery nail.
Washer We used a standard washer as a spacer for the embossing process.
PVC Foil We used Leitz Copysafe 4100 transparent envelope.
Stopwatch
e.g., smartphone app
Since the timing for the embossing process is very important, you need a stopwatch.

3.2 Semi-automatic Embossing

The manual embossing needs exact timings and is sometimes hard to handle. In order to solve this problem, we introduce a z-axis embossing machine that manages temperature control and timings. A tactile button (or foot switch) triggers an microcontroller that moves a actuator lowering a soldering iron with heated upholstery nail.

Part List

Part List for Semi-Automatic Embossing
Image Part Description
Solder Iron*

*recommented with adjustable temperature control (100°C)

We used an inexpensive temperatur-controlled HoLife solder iron station.
Upholstery Nails Depending on your solder iron you additionally need a screw driver or a drilling machine and a hammer to securely fix the upholstery nails at the solder tip.
Washer We used a standard washer as a spacer for the embossing process.
Access to 3D-Printer In order to 3D print all construction parts you will need access to basic 3D-Printer. We used a modified PP3DP UP! Mini from Tiertime with a black ABS filament.
Screws and Nuts We used several metric screws and nuts to fix all 3D printed parts and electronics.
Stepper Motor To realize an adjustable z-axis, we used a simple 12V stepper motor that we expanded from an old, discarded printer. Of course you can use every stepper motor that have enough force to lift up a solder iron.
Stepper Motor Driver Board We used a SparkFun EasyDriver – Stepper Motor Driver to control our z-axis stepper motor. The board is powered with 12V from our adjustable power supply and is attached to the Arduino.
Cable, Crimp Contacts and Housings We used several standard pin headers to design our semi-automatic embossing machine as flexible as possible without hardwiring all components.
Power Supply We used a laboratory switching power supply from Peaktech (Model: 6225 A) that provides 0-30 DC voltage and 0 – 5A ampere. To run our semi-automatic embossing machine including the Arduino and its stepper motor, we adjust the power supply to 12V and 2A.
Safety laboratory cables We used safety laboratory cables to hook up the stepper motor driver board and Arduino micro-controller.
Arduino compatible Microcontroller Since the Arduino only had to control a stepper motor and needs to be triggered, there are no huge requirements to the micro-controller. We used a Arduino Mega 2560 R3, however, every smaller Arduino, such as an Arduino Uno or Micro will perfectly work, too.
Push-Button A push-button acts as a trigger to start the embossing process.
Foot Switch
(optional)
As an alternative trigger mechanism, we integrated a foot switch enabling a hand-free start of the embossing process. This could be helpful for very precise manual alignments.
PVC Foil We used Leitz Copysafe 4100 transparent envelope.

3D-Printed Parts

CAD Model

Printed Parts

Download

You can download every part as a STL file.

Embossing-Plate-Bottom.stl

Gear_A.stl

Gear_B.stl

Main.stl

Solder-Iron-Case.stl

Arduino Sketch

/* Pushables: A DIY Approach for Fabricating Customizable
 * and Self-Contained Tactile Membrane Dome Switches
 * - Konstantin Klamka & Raimund Dachselt -
 * 
 * Sketch for a simple semi-automatic embossing machine.
 * 
 * This sketch controls a stepper motor. By triggering a 
 * push-button the motor moves a linear actuator 534 steps 
 * down (see EMBOSSING_DISTANCE), waits four secounds (see 
 * EMBOSSING_TIME) and moves a the linear actuator back in 
 * its position. The temperature-controlled solder iron 
 * with the attached upholstery nail is not part of the 
 * arduino sketch since we use a commercial solder iron 
 * station.
 *  
 * created 2018 by 
 * Konstantin Klamka
 * Interactive Media Lab Dresden, Germany
 * 
 * This example code is in the public domain.
 * 
 * Project website:
 * http://www.imld.de/pushables/
 * 
 * ----------------------------------------
 * 
 * The hardware: 
 * Arduino Mega 2560 Rev3, Easy Driver Stepper Motor Driver, 
 * stepper motor from an old printer, laboratory power supply
 * temperature-controlled solder iron with an attached upholstery
 * nail, linear actuator (we used 3D-printed parts that are 
 * available on our project website).
 *  
 * The circuit:
 * 
 * push-button 
 * pin 53 and ground
 * 
 * Easy Driver Stepper Motor Driver: 
 * DIR  : pin 12
 * STEP : pin 13
 * GND  : ground
 * PWR IN: external laboratory power supply (12V, 1A)
 * 
 * ----------------------------------------
  */
 
// ---- Pins ------
#define DIR_PIN 12
#define STEP_PIN 13
#define BUTTON_PIN 53

// ---- Embossing Parameters ------
#define EMBOSSING_DISTANCE  534  // steps
#define EMBOSSING_TIME      4000 // milliseconds

// ---- Setup ------
void setup() {                
  
  // Set Pin Modes
  pinMode(DIR_PIN, OUTPUT);     
  pinMode(STEP_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  digitalWrite(DIR_PIN, HIGH);
  digitalWrite(STEP_PIN, LOW);
}

// ---- loop ------
void loop() {

  // Read the push-button value into a variable
  int button_state = digitalRead(BUTTON_PIN);

  // Keep in mind the pull-up means the pushbutton's 
  // logic is inverted. It goes HIGH when it's open, 
  // and LOW when it's pressed.
  if (button_state == LOW){

    digitalWrite(DIR_PIN, HIGH);

    // move temperature-controlled solder iron 
    // with the attached upholstery nail down
    for(int i = 0; i<EMBOSSING_DISTANCE;i++){
      digitalWrite(STEP_PIN, LOW); 
      delay(1);
      digitalWrite(STEP_PIN, HIGH);
      delay(1);      
    }

    // wait while the heated upholstery nail 
    // embosses the PVC foil...
    delay(EMBOSSING_TIME);

    // move temperature-controlled solder iron 
    // with the attached upholstery nail up...
    digitalWrite(DIR_PIN, LOW);
    for(int i = 0; i<EMBOSSING_DISTANCE;i++){
      digitalWrite(STEP_PIN, LOW); 
      delay(1);
      digitalWrite(STEP_PIN, HIGH);
      delay(1);      
    }
    
    digitalWrite(DIR_PIN, HIGH);
    } 
}

Download the sketch here: pushables.ino

3.3 Automatic Embossing

Complex design may require several manual alignments if you are using the semi-automatic approach that work like a sewing machine. To fully automate the DIY embossing routine along all axis (X/Y/Z), we thought about utilzing the nozzle of a 3D-printer. Therefore, we modify the nozzle with a upholstery nail that allow us to exactly manufacture more complex dome-shaped overlays without manual aligments.

Part List

Part List for Automatic Embossing
Image Part Description
3D-Printer In order to realize our automatic embossing machine, we used a Original Prusa i3 MK3 with our custom embossing nozzle.
Nozzle In order to modify the nozzle, we built on a new replacement nozzle for our 3D printer.
Upholstery Nails Depending on your solder iron you additionally need a screw driver or a drilling machine and a hammer to securely fix the upholstery nails at the solder tip.
PVC Foil We used Leitz Copysafe 4100 transparent envelope.

Basic G-code Procedure

Basic G-code test program
G-code Description
G28 Perform Homing Routine: home all axes (X, Y, and Z)
G1 Z20 F1200 Move the Z-axis to Z=20mm at a slower speed of 1200 mm/min
M104 S100 T0 Start heating T0 to 100 degrees Celsius
M109 S100 T0 Wait for T0 to reach 100 degrees before continuing with any other commands
G1 X50 Y50 F2400 Move to the X=50 Y=50 position on the bed at a speed of 2400 mm/min
G1 Z1 F1200 Move the Z-axis to Z=1mm at a slower speed of 1200 mm/min
G4 P4000 Wait four seconds
G1 Z20 F1200 Move the Z-axis to Z=20mm at a slower speed of 1200 mm/min
M104 S0 T0 Start cooling T0 to 0 degrees Celsius
G1 X0 Y0 F2400 ; Move to the X=50 Y=50 position on the bed at a speed of 2400 mm/min

G-code Template

Warning! Make sure that your 3D printer is calibrated with a new z-offset. Otherwise the modified nozzle can damage the extruder or heat bed of your 3D printer.
G28
G1 Z20 F1200
M104 S100 T0
M109 S100 T0
G1 X50 Y50 F2400
G1 Z1 F1200
G4 P4000
G1 Z20 F1200
M104 S0 T0
G1 X0 Y0 F2400 ;

Download the G-code file here: pushables.gcode