Components and supplies
1
LED (generic)
1
Arduino UNO
1
Resistor 1k ohm
1
Resistor 1k ohm
1
LED (generic)
1
LED (generic)
1
lcd i2c
1
Buzzer
1
Resistor 1k ohm
1
keypad
1
Breadboard (generic)
Project description
Code
arduino burglar
arduino
it's the code that made work the project
1#include <Wire.h> 2#include <LCD.h> 3#include <LiquidCrystal_I2C.h> 4LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity 5#include <Keypad.h> //includo libreria per tastierino numerico 4*4 6#define led 10 7#define led1 13 8#define led2 12 9#define PIR 7 10#define BUZZER 6 11 12const byte dim = 4; 13char tastiera[dim][dim] = 14 15{ 16 {'1','2','3','A'}, 17 {'4','5','6','B'}, 18 {'7','8','9','C'}, 19 {'*','0','#','D'} 20}; //matrice che rappresenta la tastiera collegata ad arduino 21byte pinRiga[dim] = {19, 15, 16, 17}; 22byte pinColonna[dim] = {1, 2, 3, 4}; //vettore che contiene i pin delle colonne 23 //vettore che contiene i pin delle righe 24char tasto; //variabile che contiene il valore del tasto premuto 25bool Pass_Completa = false ; 26 27#define Lunghezza_Password 5 //costante che identifica la lunghezza della password = 4 cifre + '\\0' --> ( '\\0' indica che la stringa è FINITA) 28char password[Lunghezza_Password];//vettore di caratteri per password inserita dall'utente 29char passAllarme[] = "9856"; //vettore di caratteri che indica la password dell'antifurto 30byte conta = 0; //variabile contatore 31unsigned int tempo = 100; //tempo di ritardo per il debounce della tastiera 4*4 32#define DEBUG 1 //costante per il debug --> 1=attiva,0=disattiva 33byte stato = 0; //variabile per lo stato dei case dello switch 34bool AllarmeAttivo = true; //variabile booleana per indicare se l'allarme è attivo o no 35byte valPIR=0; 36/*Fine variabilit*/ 37 38void interruzione (void); //prototipo della funzione dell'interrupt sul pin 2 39 40Keypad keypad = Keypad(makeKeymap(tastiera),pinRiga,pinColonna,dim,dim); //oggetto keypad 41 42void setup() 43{ 44 lcd.clear(); 45 lcd.begin(16,2); 46 lcd.backlight(); 47 pinMode (led,OUTPUT); 48 pinMode (led1,OUTPUT); 49 digitalWrite(led2,OUTPUT); 50 pinMode(PIR,INPUT); //imposto il pin 2 come input 51 pinMode(BUZZER,OUTPUT); //imposto il pin 3 come output 52 //imposto la velocità di comunicazione seriale a 9600 bit al secondo 53 // attachInterrupt(0,interruzione,RISING); //imposto il pin di interruput,la funzione che deve richiamare e in quale caso si deve attivare (RISING --> sul fronte di salita) 54 55}//end setup 56 57void loop() 58{ 59 switch(stato) 60 { 61 /*Stato di partenza in cui si chiede la password per abilitare l'antifurto*/ 62 case 0: 63 64 65 digitalWrite(led1,HIGH); 66 lcd.clear(); 67 lcd.print("Digitare PIN: "); 68 while(Pass_Completa == false) 69 { 70 tasto = keypad.getKey(); //lettura del tasto premuto 71 keypad.setDebounceTime(tempo); //tempo di debounce per premuta tasti 72 if(tasto) 73 { 74 password[conta] = tasto; //salvo il tasto premuto nel vettore di caratteri 75 lcd.print(password[conta]); //stampa del tasto premuto 76 77 delay(100); 78 lcd.clear(); 79 #if DEBUG 80 delay(100); 81 lcd.print(conta); 82 #endif //fine if condizionale del preprocessore 83 84 lcd.clear(); 85 delay(100); 86 lcd.println(""); 87 conta++; 88 }//end if 89 90 91 if(conta == Lunghezza_Password-1) 92 { 93 password[5] = '\\0'; //chiudo la stringa 94 95 //visualizzo la password per debug 96 #if DEBUG 97 lcd.print("Password "); 98 lcd.clear(); 99 delay(100); 100 lcd.println(password); 101 #endif 102 103 Pass_Completa = true; //imposto la password a vero per uscire dal ciclo while 104 conta = 0; //imposto la variabile contatore nuovamente a 0 per un possibile nuovo input di password 105 } //end if 106 }//end while 107 lcd.clear(); 108 109 110 /*Controllo se la password è corretta tramite "string-compare"*/ 111 if(strcmp(password,passAllarme) == 0 ) 112 { 113 lcd.println("PASSWORD ESATTA!"); //comunico che la password digitata è corretta 114 delay(1000); 115 lcd.clear(); 116 lcd.println("Attivazione"); //comunico che l'antifurto sta per essere attivato 117 stato = 1; //cambio il valore di stato per cambiare case 118 }//end if se la password è corretta 119 else 120 lcd.clear(); 121 lcd.println("PASSWORD ERRATA!");//comunico che la password digitata è errata 122 delay(1000); 123 lcd.clear(); 124 125 /*Riazzero il vettore caratteri per la password digitata dall'utente*/ 126 for(int i=0;i<4;i++) 127 password[i] = NULL; 128 129 Pass_Completa = false; //imposto nuovamente false 130 131 delay(3000); //ritardo di un secondo 132 133 134 digitalWrite(led1,LOW); 135 136 break; //end case 0 137 138 139 /*Stato in cui è attivo rilevatore di momvimento (PIR)*/ 140 case 1: 141 digitalWrite(led2,HIGH); 142 lcd.clear(); 143 tasto = 0; //il contenuto di tasto è nullo 144 145 lcd.println("Antifurto ON"); 146 delay(3000); 147 lcd.clear(); 148 lcd.println("Tasto D per OFF"); 149 //delay(3000); 150 151 while(AllarmeAttivo == true) 152 { 153 tasto = keypad.getKey(); //lettura tasto premuto 154 keypad.setDebounceTime(tempo); //debounce per tasto premuto 155 156 valPIR = digitalRead(PIR); 157 158 lcd.clear(); 159 #if DEBUG 160 lcd.clear(); 161 lcd.println(tasto); 162 delay(1000); 163 lcd.clear(); 164 delay(10); 165 #endif 166 167 if(valPIR == 1) 168 { digitalWrite(led2, LOW); 169 stato = 2; 170 AllarmeAttivo = false; //imposto il valore a falso 171 } 172 173 if(tasto == 'D') 174 { digitalWrite(led2, LOW); 175 lcd.clear(); 176 lcd.println("disattivazione"); 177 stato = 0; //imposto lo stato a 0 per tornare così allo stato di partenza 178 179 AllarmeAttivo = false; //imposto il valore a falso 180 delay(3000); 181 lcd.clear(); 182 183 } //end if 184 185 } //end while 186 187 AllarmeAttivo = true; //reimposto valore iniziale di AllarmeAttivo 188 189 break; //end case 1 190 191 case 2: 192 193 for(int c = 0; c < 3; c++) 194 195 { 196 analogWrite(BUZZER,HIGH); 197 digitalWrite(led, HIGH); 198 delay(500); 199 analogWrite(BUZZER,LOW); 200 digitalWrite(led, LOW); 201 delay(500); 202 } 203 204 stato = 1; 205 break; 206 207 208 209 210 } 211 212} 213 214
arduino burglar
arduino
it's the code that made work the project
1#include <Wire.h> 2#include <LCD.h> 3#include <LiquidCrystal_I2C.h> 4LiquidCrystal_I2C 5 lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, 6 backlighpin, polarity 7#include <Keypad.h> //includo libreria per tastierino numerico 8 4*4 9#define led 10 10#define led1 13 11#define led2 12 12#define PIR 7 13#define 14 BUZZER 6 15 16const byte dim = 4; 17char tastiera[dim][dim] = 18 19{ 20 21 {'1','2','3','A'}, 22 {'4','5','6','B'}, 23 {'7','8','9','C'}, 24 {'*','0','#','D'} 25}; 26 //matrice che rappresenta la tastiera collegata ad arduino 27byte pinRiga[dim] 28 = {19, 15, 16, 17}; 29byte pinColonna[dim] = {1, 2, 3, 4}; //vettore che contiene 30 i pin delle colonne 31 //vettore che contiene i pin delle righe 32char tasto; 33 //variabile che contiene il valore del tasto premuto 34bool Pass_Completa = false 35 ; 36 37#define Lunghezza_Password 5 //costante che identifica la lunghezza della 38 password = 4 cifre + '\\0' --> ( '\\0' indica che la stringa è FINITA) 39char password[Lunghezza_Password];//vettore 40 di caratteri per password inserita dall'utente 41char passAllarme[] = "9856"; 42 //vettore di caratteri che indica la password dell'antifurto 43byte conta = 0; 44 //variabile contatore 45unsigned int tempo = 100; //tempo di ritardo per il debounce 46 della tastiera 4*4 47#define DEBUG 1 //costante per il debug --> 1=attiva,0=disattiva 48byte 49 stato = 0; //variabile per lo stato dei case dello switch 50bool AllarmeAttivo 51 = true; //variabile booleana per indicare se l'allarme è attivo o no 52byte valPIR=0; 53/*Fine 54 variabilit*/ 55 56void interruzione (void); //prototipo della funzione dell'interrupt 57 sul pin 2 58 59Keypad keypad = Keypad(makeKeymap(tastiera),pinRiga,pinColonna,dim,dim); 60 //oggetto keypad 61 62void setup() 63{ 64 lcd.clear(); 65 lcd.begin(16,2); 66 67 lcd.backlight(); 68 pinMode (led,OUTPUT); 69 pinMode (led1,OUTPUT); 70 71 digitalWrite(led2,OUTPUT); 72 pinMode(PIR,INPUT); //imposto il pin 2 come 73 input 74 pinMode(BUZZER,OUTPUT); //imposto il pin 3 come output 75 //imposto 76 la velocità di comunicazione seriale a 9600 bit al secondo 77 // attachInterrupt(0,interruzione,RISING); 78 //imposto il pin di interruput,la funzione che deve richiamare e in quale caso si 79 deve attivare (RISING --> sul fronte di salita) 80 81}//end setup 82 83void 84 loop() 85{ 86 switch(stato) 87 { 88 /*Stato di partenza in cui si 89 chiede la password per abilitare l'antifurto*/ 90 case 0: 91 92 93 94 digitalWrite(led1,HIGH); 95 lcd.clear(); 96 lcd.print("Digitare 97 PIN: "); 98 while(Pass_Completa == false) 99 { 100 tasto 101 = keypad.getKey(); //lettura del tasto premuto 102 keypad.setDebounceTime(tempo); 103 //tempo di debounce per premuta tasti 104 if(tasto) 105 { 106 107 password[conta] = tasto; //salvo il tasto premuto nel vettore 108 di caratteri 109 lcd.print(password[conta]); //stampa del tasto 110 premuto 111 112 delay(100); 113 lcd.clear(); 114 115 #if DEBUG 116 delay(100); 117 lcd.print(conta); 118 119 #endif //fine if condizionale del preprocessore 120 121 lcd.clear(); 122 123 delay(100); 124 lcd.println(""); 125 conta++; 126 127 }//end if 128 129 130 if(conta 131 == Lunghezza_Password-1) 132 { 133 password[5] = 134 '\\0'; //chiudo la stringa 135 136 //visualizzo la password per 137 debug 138 #if DEBUG 139 lcd.print("Password 140 "); 141 lcd.clear(); 142 delay(100); 143 144 lcd.println(password); 145 #endif 146 147 148 Pass_Completa = true; //imposto la password a vero per uscire 149 dal ciclo while 150 conta = 0; //imposto la variabile contatore 151 nuovamente a 0 per un possibile nuovo input di password 152 } //end 153 if 154 }//end while 155 lcd.clear(); 156 157 158 /*Controllo 159 se la password è corretta tramite "string-compare"*/ 160 if(strcmp(password,passAllarme) 161 == 0 ) 162 { 163 lcd.println("PASSWORD ESATTA!"); //comunico 164 che la password digitata è corretta 165 delay(1000); 166 lcd.clear(); 167 168 lcd.println("Attivazione"); //comunico che l'antifurto sta per essere 169 attivato 170 stato = 1; //cambio il valore di stato per cambiare case 171 172 }//end if se la password è corretta 173 else 174 lcd.clear(); 175 176 lcd.println("PASSWORD ERRATA!");//comunico che la password digitata 177 è errata 178 delay(1000); 179 lcd.clear(); 180 181 /*Riazzero 182 il vettore caratteri per la password digitata dall'utente*/ 183 for(int 184 i=0;i<4;i++) 185 password[i] = NULL; 186 187 Pass_Completa 188 = false; //imposto nuovamente false 189 190 delay(3000); //ritardo 191 di un secondo 192 193 194 digitalWrite(led1,LOW); 195 196 197 break; //end case 0 198 199 200 /*Stato in cui è attivo rilevatore 201 di momvimento (PIR)*/ 202 case 1: 203 digitalWrite(led2,HIGH); 204 205 lcd.clear(); 206 tasto = 0; //il contenuto di tasto è nullo 207 208 209 lcd.println("Antifurto ON"); 210 delay(3000); 211 212 lcd.clear(); 213 lcd.println("Tasto D per OFF"); 214 //delay(3000); 215 216 217 while(AllarmeAttivo == true) 218 { 219 tasto = keypad.getKey(); 220 //lettura tasto premuto 221 keypad.setDebounceTime(tempo); //debounce 222 per tasto premuto 223 224 valPIR = digitalRead(PIR); 225 226 227 lcd.clear(); 228 #if DEBUG 229 lcd.clear(); 230 231 lcd.println(tasto); 232 delay(1000); 233 lcd.clear(); 234 235 delay(10); 236 #endif 237 238 if(valPIR 239 == 1) 240 { digitalWrite(led2, LOW); 241 stato = 2; 242 243 AllarmeAttivo = false; //imposto il valore a falso 244 } 245 246 247 if(tasto == 'D') 248 { digitalWrite(led2, 249 LOW); 250 lcd.clear(); 251 lcd.println("disattivazione"); 252 253 stato = 0; //imposto lo stato a 0 per tornare così allo stato di 254 partenza 255 256 AllarmeAttivo = false; //imposto 257 il valore a falso 258 delay(3000); 259 lcd.clear(); 260 261 262 } //end if 263 264 } //end while 265 266 AllarmeAttivo 267 = true; //reimposto valore iniziale di AllarmeAttivo 268 269 break; 270 //end case 1 271 272 case 2: 273 274 for(int c = 0; c < 3; 275 c++) 276 277 { 278 analogWrite(BUZZER,HIGH); 279 digitalWrite(led, 280 HIGH); 281 delay(500); 282 analogWrite(BUZZER,LOW); 283 284 digitalWrite(led, LOW); 285 delay(500); 286 } 287 288 289 stato = 1; 290 break; 291 292 293 294 295 } 296 297} 298 299 300
Downloadable files
electrical drawing
electrical drawing
Comments
Only logged in users can leave comments