DIY - Digital Lock - with Processing
This is a simple and easy digital lock that uses serial communication between Processing and Arduino.
Components and supplies
1
4,5 volts battery
1
DC motor 1-5 volts type 130
1
H Bridge L293D
1
Wires male-to-male
1
Arduino uno R3
1
LCD 16x2 Without I2C
2
Resistor 220 ohmios
1
Potentiometer 10 K ohmios
Apps and platforms
1
arduino IDE
1
Processing
Project description
Code
Arduino Code
cpp
1#include <LiquidCrystal.h> 2 3LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 4 5const int in1 = 8; 6const int in2 = 9; 7 8String clave = "1234"; 9String entrada = ""; 10 11void setup() { 12 lcd.begin(16, 2); 13 pinMode(in1, OUTPUT); 14 pinMode(in2, OUTPUT); 15 lcd.print("Enter Password"); 16 Serial.begin(9600); 17} 18 19void loop() { 20 while (Serial.available() > 0) { 21 char c = Serial.read(); 22 if (c == '\n') { 23 validarEntrada(); 24 } else { 25 entrada += c; 26 } 27 } 28} 29 30void validarEntrada() { 31 lcd.clear(); 32 if(entrada == "CLOSE"){ 33 lcd.setCursor(0, 0); 34 lcd.print("Closing..."); 35 cerrarCerradura(); 36 }else if (entrada.startsWith("SET:")) { 37 String nuevaClave = entrada.substring(4); 38 if (nuevaClave.length() >= 4 && nuevaClave.length() <= 8) { 39 clave = nuevaClave; 40 lcd.setCursor(0, 0); 41 lcd.print("Password"); 42 lcd.setCursor(0, 1); 43 lcd.print("Updated"); 44 delay(3000); 45 lcd.clear(); 46 lcd.setCursor(0, 0); 47 lcd.print("Enter Password"); 48 } else { 49 lcd.setCursor(0, 0); 50 lcd.print("Cannot Update"); 51 lcd.setCursor(0, 1); 52 lcd.print("Password"); 53 delay(3000); 54 lcd.clear(); 55 lcd.setCursor(0, 0); 56 lcd.print("Enter Password"); 57 } 58 } else if (entrada == clave) { 59 lcd.setCursor(0, 0); 60 lcd.print("Correct Password"); 61 abrirCerradura(); 62 } else { 63 lcd.setCursor(0, 0); 64 lcd.print("Wrong Password"); 65 delay(3000); 66 lcd.clear(); 67 lcd.setCursor(0, 0); 68 lcd.print("Enter Password"); 69 } 70 71 entrada = ""; 72} 73 74void abrirCerradura() { 75 digitalWrite(in1, HIGH); 76 digitalWrite(in2, LOW); 77 delay(1500); 78 digitalWrite(in1, LOW); 79 digitalWrite(in2, LOW); 80 lcd.setCursor(0, 1); 81 lcd.print("Lock Opened"); 82 delay(2000); 83 lcd.clear(); 84 lcd.setCursor(0, 0); 85 lcd.print("Enter Password"); 86} 87 88void cerrarCerradura() { 89 digitalWrite(in1, LOW); 90 digitalWrite(in2, HIGH); 91 delay(1500); 92 digitalWrite(in1, LOW); 93 digitalWrite(in2, LOW); 94 lcd.setCursor(0, 1); 95 lcd.print("Lock Closed"); 96 delay(2000); 97 lcd.clear(); 98 lcd.setCursor(0, 0); 99 lcd.print("Enter Password"); 100}
Processing Code
js
1import processing.serial.*; 2 3Serial myPort; 4 5String clave = ""; 6String nuevaClave = ""; 7boolean cambiandoClave = false; 8 9void setup() { 10 size(300, 500); 11 printArray(Serial.list()); 12 myPort = new Serial(this, Serial.list()[2], 9600); 13} 14 15void draw() { 16 background(240); 17 textAlign(CENTER, CENTER); 18 textSize(24); 19 fill(0); 20 text(cambiandoClave ? "New password: " + nuevaClave : "Password: " + clave, width / 2, 50); 21 22 23 for (int i = 1; i <= 9; i++) { 24 drawButton((i - 1) % 3, (i - 1) / 3 + 1, str(i)); 25 } 26 27 28 drawButton(1, 4, "0"); 29 30 31 fill(100, 200, 100); 32 rect(200, 300, 80, 50); 33 fill(255); 34 text("Send", 240, 325); 35 36 37 fill(100, 100, 350); 38 rect(70, 365, 160, 50); 39 fill(255); 40 textSize(18); 41 text("Change password", 150, 390); 42 43 44 fill(255, 100, 100); 45 rect(80, 430, 140, 40); 46 fill(255); 47 textSize(18); 48 text("Close lock", 150, 450); 49 50} 51 52void drawButton(int col, int row, String label) { 53 int x = col * 100 + 10; 54 int y = row * 70 + 10; 55 fill(200); 56 rect(x, y, 80, 50); 57 fill(0); 58 textSize(20); 59 text(label, x + 40, y + 25); 60} 61 62void mousePressed() { 63 64 for (int i = 1; i <= 9; i++) { 65 int col = (i - 1) % 3; 66 int row = (i - 1) / 3 + 1; 67 if (dentroDelBoton(col, row)) { 68 agregarDigito(str(i)); 69 } 70 } 71 72 73 if (dentroDelBoton(1, 4)) { 74 agregarDigito("0"); 75 } 76 77 78 if (mouseX > 200 && mouseX < 280 && mouseY > 300 && mouseY < 350) { 79 if (cambiandoClave && nuevaClave.length() > 0) { 80 myPort.write("SET:" + nuevaClave + "\n"); 81 println("Sending new password: " + nuevaClave); 82 nuevaClave = ""; 83 cambiandoClave = false; 84 } else if (clave.length() > 0) { 85 myPort.write(clave + "\n"); 86 println("Sending password: " + clave); 87 clave = ""; 88 } 89 } 90 91 92 if (mouseX > 70 && mouseX < 230 && mouseY > 365 && mouseY < 415) { 93 cambiandoClave = true; 94 nuevaClave = ""; 95 } 96 97 98 if (mouseX > 80 && mouseX < 220 && mouseY > 430 && mouseY < 470) { 99 myPort.write("CLOSE\n"); 100 println("Sending command to close lock"); 101 } 102 103} 104 105boolean dentroDelBoton(int col, int row) { 106 int x = col * 100 + 10; 107 int y = row * 70 + 10; 108 return (mouseX > x && mouseX < x + 80 && mouseY > y && mouseY < y + 50); 109} 110 111void agregarDigito(String digito) { 112 if (cambiandoClave) { 113 if (nuevaClave.length() < 8) nuevaClave += digito; 114 } else { 115 if (clave.length() < 8) clave += digito; 116 } 117}
Comments
Only logged in users can leave comments