Carl Bugeja
Published © CC BY-SA

Haptic Piezo Buzzers

Haptic Feedback with Piezo Buzzers

IntermediateProtip1,049
Haptic Piezo Buzzers

Story

Read more

Schematics

15mm Piezo PCB Files

65mm Piezo PCB Files

Code

Piezo_Button.ino

C/C++
Dummy Arduino Code
/*This SW is just a dummy*/

#define HAPTIC_PERIOD1 30
#define HAPTIC_PERIOD2 (HAPTIC_PERIOD1*2)
#define HAPTIC_PERIOD3 130

int analogPin = A1;
int Gate1 = 12; /*Use Pin12 for Gate1*/
int Gate2 = 13; /*Use Pin13 for Gate1*/
int FreqToogle = 8; 
int ENPin = 7;

int GateToggle = 1;
int ToggleMode = 1;
int sensorlast = 0;

void setup() {
  pinMode(Gate1, OUTPUT);
  pinMode(Gate2, OUTPUT);
  pinMode(FreqToogle, OUTPUT);
  pinMode(ENPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {    
  delay(20);
  digitalWrite(Gate1, LOW);  
  digitalWrite(Gate2, LOW);  
  digitalWrite(ENPin, LOW);  
  int sensor = analogRead(sensor);  // read the input pin
  int der = sensor - sensorlast;
  if(der > 5){
    /*Touch detected*/
    digitalWrite(ENPin, HIGH); 
    for (int p = 0; p < HAPTIC_PERIOD3; p++){ 
    digitalWrite(FreqToogle, HIGH);
    for (int i = 0; i < 5; i++){  
        if(i >= GateToggle){
         digitalWrite(Gate1, LOW);     
         digitalWrite(Gate2, HIGH);     
        }
        else{
          digitalWrite(Gate1, HIGH);
          digitalWrite(Gate2, LOW);    
        }
    }
    digitalWrite(FreqToogle, LOW);  
    ToggleMode++;
    if(ToggleMode == HAPTIC_PERIOD1){
      GateToggle++;      
      if(GateToggle == 6){ 
        GateToggle = 5;
        ToggleMode = HAPTIC_PERIOD1+1;  
      }
      else{
        ToggleMode = 0;
      }
    }
    if(ToggleMode == (HAPTIC_PERIOD2)){
      GateToggle--;
      if(GateToggle == 0){
        ToggleMode = 0;       
      }
      else{
        ToggleMode = HAPTIC_PERIOD1+1;
      }
    }
  }

  for (int w = 0; w < 400; w++){ 
    for (int p = 0; p < HAPTIC_PERIOD3; p++){ 
    digitalWrite(FreqToogle, HIGH);
    for (int i = 0; i < 5; i++){  
        if(i >= GateToggle){
         digitalWrite(Gate1, LOW);     
         digitalWrite(Gate2, HIGH);     
        }
        else{
          digitalWrite(Gate1, HIGH);
          digitalWrite(Gate2, LOW);    
        }
    }
    digitalWrite(FreqToogle, LOW);  
    ToggleMode++;
    if(ToggleMode == 2){
      GateToggle++;      
      if(GateToggle == 6){ 
        GateToggle = 5;
        ToggleMode = 3;  
      }
      else{
        ToggleMode = 0;
      }
    }
    if(ToggleMode == 4){
      GateToggle--;
      if(GateToggle == 0){
        ToggleMode = 0;       
      }
      else{
        ToggleMode = 3;
      }
    }
  }
  }
  delay(500);
  }
  else{
    /*Keep searching for my finger*/
  }
  sensorlast = sensor;
}

Credits

Carl Bugeja

Carl Bugeja

18 projects • 107 followers
Engineer trying to invent new things with electronics

Comments