Necesitaremos los siguientes materiales:
- 1 botón
- 1 buzzer
- 3 LEDS (rojo, verde y amarillo)
- 3 resistencias de 220 Ω
- 1 resistencia de 10 kΩ
- 1 resistencia de 1 MΩ
- 1 servo
- 1 condensador de 100 uF
La practica consistirá en hacer una cerradura que controlaremos con nuestra placa Arduino (o similar).
El esquema con las conexiones viene a continuación, en la imagen:
Cargaremos el siguiente código en nuestra placa:
#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 = 1053;
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("The box is unlocked!");
} //end of 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("The box is locked!");
delay(1000);
} //end of nested if()
} //end of outer if()
if(locked == true){
knockVal = analogRead(piezo);
if(numberOfKnocks < 3 && knockVal > 0){
if(checkForKnock(knockVal) == true){
numberOfKnocks ++;
}
//subtract knocks made so far from three
Serial.print(3-numberOfKnocks);
Serial.print(" more knocks to go");
}
if(numberOfKnocks >=3){
locked = false;
myServo.write(0);
delay(20);
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
Serial.println("The box is unlocked!");
numberOfKnocks = 0;
} //end of if(numberOfKnocks..)
} //end of if(locked==true)
} //end of loop
boolean checkForKnock(int value){
if(value > quietKnock && value < loudKnock){
digitalWrite(yellowLed, HIGH);
delay(75);
digitalWrite(yellowLed, LOW);
Serial.print("Valid knock of value ");
Serial.println(value);
return true;
}
else{
Serial.print("Bad knock value ");
Serial.println(value);
return false;
}
}
Este código no está comentado ya que tras haber hecho el resto de prácticas, está bastante claro que hace cada parte, ya que no hay nada especial
El código hará que se se habrá y cierre la cerradura (movimiento del servo) al hacer vibrar el buzzer 3 veces, y que se quede cerrada de nuevo al pulsar el botón, además de que quede indicado su estado mediante las bombillas.
Nos dará el siguiente resultado al simular en circuits.io, sin cambios en el código aunque haya que cambiar el buzzer por un botón, ya que el buzzer no puede ser usado como entrada en la simulación.
Nos dará el siguiente resultado al simular en circuits.io:
Y el funcionamiento, ya construido en formato físico, es el siguiente: