¿Cerradura de vibración? ¿Cómo? ¿Qué es eso? Una cerradura de vibración es aquella que se abre al detectar una secuencia determinada de golpes. Dicha cerradura puede estar en una caja o en una puerta, por lo que al golpear dicha superficie, la cerradura detectará el impacto y solo se abrirá con la combinación correcta de golpes.
Para realizar este proyecto necesité un interruptor, 3 leds, una resistencia de 10 kiloohmios, otra de 220 ohmios, otro de 1 megohmios, un condensador de 100 uF, un piezo y un servomotor.
No fue difícil crear la interfaz, lo que si fue un poco raro ya que me hice un lío con los leds y el condensador.
El código fue muy largo y bastante difícil, ya que había que tener en cuenta el piezo y el servomotor, y el detector de golpe en la mesa.
Código
#include <Servo.h>
Servo myServo;
const int piezo = A0;
const int switchPin = 2;
const int yellowLed = 3;
const int greenLed = 4;
const int redLed = 5;
int knockVal;
int switchVal;
.
const int quietKnock = 10;
const int loudKnock = 100;
boolean locked = false;
int numberOfKnocks = 0;
void setup(){
myServo.attach(9);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(switchPin, INPUT);
Serial.begin(9600);
digitalWrite(greenLed, HIGH);
myServo.write(0);
Serial.println("La caja esta desbloqueada!");
}//Fin de la función setup.
void loop(){
if(locked == false){
switchVal = digitalRead(switchPin);
if(switchVal == HIGH){
locked = true;
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
myServo.write(90);
Serial.println("La caja esta bloqueada!");
delay(1000);
}
}
if(locked == true){
knockVal = analogRead(piezo);
if(numberOfKnocks < 3 && knockVal > 0){
if(checkForKnock(knockVal) == true){
numberOfKnocks++;
}
Serial.print("Golpes restantes: ");
Serial.println(3-numberOfKnocks);
}
if(numberOfKnocks >= 3){
locked = false;
myServo.write(0);
delay(20);
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
Serial.println("La caja esta desbloqueada");
}
}
}//Fin de la función loop.
boolean checkForKnock(int value){
if(value > quietKnock && value < loudKnock){
digitalWrite(yellowLed, HIGH);
delay(50);
digitalWrite(yellowLed, LOW);
Serial.print("Valor del golpe correcto: ");
Serial.println(value);
return true;
}
else {
Serial.print("Valor del golpe incorrecto: ");
Serial.println(value);
return false;
}
}//Fin de la funcion checkForKnock.
👌
ResponderEliminar