Components and supplies
LED (generic)
Arduino UNO
Resistor 1k ohm
Resistor 1k ohm
LED (generic)
LED (generic)
lcd i2c
Buzzer
Resistor 1k ohm
keypad
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
paolo_cravero
0 Followers
•0 Projects
Table of contents
Intro
6
0