">id="quote"> Questa per me è stata la base di partenza, una sorta di "messaggio all'accensione"... Adesso ho aggiunto un lettore rfid, questo è lo stato attuale del mio step:
Ora bisogna integrare lo sketch per poterlo fare interagire, visto che ci siamo aggiungerei anche tre led per vedere lo stato ed un contatto magnetico ma qui dovete aiutarmi nei collegamenti...
Spero che anche ad altri "duri" come me seguino questo post in modo da realizzare un bel progetto comune...
Post in aggiornamento
MATERIALE UTILIZZATO:
Arduino mega 2650 ( http://store.arduino.cc/product/A000067?language=it )
Lettore rfid RCC ( http://www.miniinthebox.com/it/rfid-rc522-rf-ic-card-sensor-module-blu-argento_p617739.html)
Display lcd i2c ( http://www.miniinthebox.com/it/arduino-iic-i2c-twi-1602-di-serie-modulo-display-lcd_p508937.html )
Breadboard ( http://www.miniinthebox.com/it/bread-board-830-point-solderless-breadboard-201211270080069_p478904.html )
quote:Risposta al messaggio di macrocd inserito in data 13/02/2015 20:18:41 (> Grazie Macrocd per il tuo interessamento, avevo già visto quel link ed ho anche già iniziato a giocarci... ho già letto i 4 byte identificativi dei due tag e della mastercard, non riesco però a compilare lo sketch in modo da gestire l'inserimento e il disinserimento dell'allarme, come base di partenza sto seguendo questo esempio:Visualizza messaggio in nuova finestra
)>
https://www.youtube.com/watch?v...
Sono giorni che cerco di modificare il suo sketch per vedere di adattarlo al mio Hardware, ma non ne vengo fuori....quote:/** * Centrale antifurto costruita con Arduino. Materiali: * Arduino Mega, lettore RFID RC522, contatto magnetico, 3 led colorati, * un pulsante, un modulo relè. * Importante, collegare il lettore RFID ai pin di Arduino come segue: * MOSI: Pin 51 / ICSP-4 * MISO: Pin 50 / ICSP-1 * SCK: Pin 52 / ISCP-3 * SDA: Pin 53 * RST: Pin 5 */ #include <SPI.h> #include <RFID.h> #include <EEPROM.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define SS_PIN 5 #define RST_PIN 53 // Codice della mia chiave master da sostituire con il vostro. #define masnum0 70 #define masnum1 43 #define masnum2 191 #define masnum3 180 #define masnum4 102 #define sensorePir1 5 // Ingresso sensore 1 #define releSirena 7 // A questo pin si può collegare ad esempio un relè che comanda una sirena esterna autoalimentata #define ledRosso 15 // E' il led che indica lo stato della centrale #define ledGiallo 14 // E' il led che indica lo stato del sensore 1 #define resetKey 6 // pulsante di reset e visualizzazione memoria di allarme #define dispositivo1 3 // Uscita dispositivo 1 #define pausa 5000 // Costante che definisce il tempo di ingresso, in questo caso 5 secondi. Il tempo di uscita è possibile modificarlo qualche istruzione più in fondo. RFID rfid(SS_PIN, RST_PIN); LiquidCrystal_I2C lcd(0x27,16,2); String readString = String(30); boolean statoAntifurto = 0; // Variabile antifurto attivo boolean statoAllarme = 0; // Variabile centrale in allarme boolean statoPir1 = 0; // Variabile di stato del sensore 1 boolean statoDispositivo1 = 0; // Variabile di stato on/off del dispositivo boolean cardMaster = 0; // Variabile modalità chiave master boolean memoriaAllarme = 0; // Variabile per gestire la memoria di allarme boolean tastoPremuto = 0; // Variabile che controlla la pressione prolungata del tasto reset int slave; // Contatore di chiavi salvate int lamp; // Variabile per il lampeggio nel tempo di uscita int sernum0; int sernum1; int sernum2; int sernum3; int sernum4; void setup() { lcd.begin(); SPI.begin(); rfid.init(); Serial.begin(9600); pinMode(ledRosso, OUTPUT); pinMode(releSirena, OUTPUT); pinMode(ledGiallo, OUTPUT); pinMode(dispositivo1, OUTPUT); pinMode(sensorePir1,INPUT); pinMode(resetKey, INPUT); digitalWrite(ledRosso, LOW); digitalWrite(ledGiallo, LOW); digitalWrite(dispositivo1, HIGH); standby(); } void loop() { // Inizio blocco per la gestione locale della centrale // Rileva un tag... if (rfid.isCard()) { // Legge il seriale... if (rfid.readCardSerial()) { sernum0 = rfid.serNum[0]; sernum1 = rfid.serNum[1]; sernum2 = rfid.serNum[2]; sernum3 = rfid.serNum[3]; sernum4 = rfid.serNum[4]; slave = EEPROM.read(0); // Se il seriale letto corrisponde con il seriale Master // attiva o disattiva la modalita Memorizzazione chiavi // e in più visualizza il numero di chiavi salvate... if (sernum0 == masnum0 && sernum1 == masnum1 && sernum2 == masnum2 && sernum3 == masnum3 && sernum4 == masnum4) { if (statoAntifurto == 0) { lcd.backlight(); if (cardMaster==0) { lcd.clear(); lcd.print("CARD MASTER"); delay(2000); lcd.clear(); lcd.print("GESTIONE CHIAVI"); cardMaster = 1; lcd.setCursor(0, 1); lcd.print("Chiavi slave: "); lcd.setCursor(15, 1); lcd.print(slave); delay(3000); } else { cardMaster = 0; lcd.setCursor(0, 1); lcd.print("Annullata "); delay(3000); standby(); } } } // Se invece il seriale letto corrisponde con uno dei tre gruppi // di chiavi memorizzate allora attiva o disattiva l'allarme. else if ((sernum0 == EEPROM.read(1) && sernum1 == EEPROM.read(2) && sernum2 == EEPROM.read(3) && sernum3 == EEPROM.read(4) && sernum4 == EEPROM.read(5)) || (sernum0 == EEPROM.read(6) && sernum1 == EEPROM.read(7) && sernum2 == EEPROM.read(8) && sernum3 == EEPROM.read(9) && sernum4 == EEPROM.read(10)) || (sernum0 == EEPROM.read(11) && sernum1 == EEPROM.read(12) && sernum2 == EEPROM.read(13) && sernum3 == EEPROM.read(14) && sernum4 == EEPROM.read(15))) { lcd.backlight(); if (cardMaster==0) { if (statoAntifurto == 0) { statoAntifurto = 1; lcd.clear(); lcd.print("CHIAVE VALIDA"); delay(2000); lcd.clear(); lcd.print("TEMPO DI USCITA"); lamp=1; for (lamp; lamp <= 10; lamp++) { //Sostituire il 10 con il numero di secondi che si desidera per il tempo di uscita. digitalWrite(ledRosso, HIGH); delay(500); digitalWrite(ledRosso, LOW); delay(500); } attiva(); } else { statoAntifurto = 0; statoAllarme = 0; lcd.clear(); lcd.print("CHIAVE VALIDA"); delay(2000); disattiva(); } } } // Se il seriale letto è diverso dal master e nemmeno presente in memoria, // e se è attiva la modalita Memorizzazione chiavi, salva il seriale in memoria // come slave1, slave2 o slave3. else if (cardMaster == 1 && slave == 0) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 1); EEPROM.write(1, sernum0); EEPROM.write(2, sernum1); EEPROM.write(3, sernum2); EEPROM.write(4, sernum3); EEPROM.write(5, sernum4); cardMaster = 0; delay(1000); lcd.setCursor(0, 1); lcd.print("Slave 1 salvata!"); delay(3000); standby(); } else if (cardMaster == 1 && slave == 1) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 2); EEPROM.write(6, sernum0); EEPROM.write(7, sernum1); EEPROM.write(8, sernum2); EEPROM.write(9, sernum3); EEPROM.write(10, sernum4); cardMaster = 0; delay(1000); lcd.setCursor(0, 1); lcd.print("Slave 2 salvata!"); delay(3000); standby(); } else if (cardMaster == 1 && slave == 2) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 3); EEPROM.write(11, sernum0); EEPROM.write(12, sernum1); EEPROM.write(13, sernum2); EEPROM.write(14, sernum3); EEPROM.write(15, sernum4); cardMaster = 0; lcd.setCursor(0, 1); lcd.print("Slave 3 salvata!"); delay(3000); standby(); } } } rfid.halt(); // Se l'infrarosso rileva un movimento accende il led giallo if (digitalRead(sensorePir1) == HIGH) { digitalWrite(ledGiallo, HIGH); statoPir1=1; } else { digitalWrite(ledGiallo, LOW); statoPir1=0; } // Se l'infrarosso rileva un movimento e l'antifurto e attivo // e quindi non in allarme, attiva l'allarme e memorizza la zona corrispondente. if (digitalRead(sensorePir1) == HIGH && statoAntifurto == 1 && statoAllarme == 0){ allarme(); if (memoriaAllarme == 0) { memoriaAllarme = 1; EEPROM.write(16, 1); // Con questa istruzione salva la zona numero 1 in memoria, } } // Se è stata attivata con la card Master la modalità "Memorizzazione chiavi", // premendo il pulsante di reset si azzera il database // delle chiavi salvate fino a quel momento. if (digitalRead(resetKey) == HIGH && cardMaster == 1) { cardMaster = 0; for (int i=0; i<16; i++){ EEPROM.write(i, 0); } lcd.backlight(); lcd.clear(); lcd.print("Reset chiavi..."); delay(3000); standby(); } // Se si preme il tasto reset mentre la centrale e in standby si potrà visualizzare l'ultima memoria di allarme // se si mantiene premuto invece si effettua un reset if (digitalRead(resetKey) == HIGH && statoAntifurto == 0) { tastoPremuto=1; delay(1000); if (digitalRead(resetKey) == HIGH && statoAntifurto == 0 && tastoPremuto == 1) { tastoPremuto=0; EEPROM.write(16, 0); lcd.backlight(); lcd.clear(); lcd.print("Memoria Allarme:"); lcd.setCursor(0, 1); lcd.print("Reset"); delay(3000); standby(); } else { tastoPremuto=0; lcd.backlight(); lcd.clear(); lcd.print("Memoria Allarme:"); lcd.setCursor(0, 1); if (EEPROM.read(16) > 0) { lcd.print("Zona "); lcd.setCursor(5, 1); lcd.print(EEPROM.read(16)); } else { lcd.print("Nessuna Memoria"); } delay(3000); standby(); } } } void standby() { lcd.clear(); lcd.print("AllarmDuino 2.0"); delay(1000); lcd.noBacklight(); } void allarme() { delay(pausa); statoAllarme = 1; digitalWrite(releSirena,HIGH); lcd.backlight(); lcd.clear(); lcd.print(" ALLARME! "); delay(1000); lcd.noBacklight(); } void attiva() { statoAntifurto=1; digitalWrite(ledRosso, HIGH); lcd.backlight(); lcd.clear(); lcd.print(" ANTIFURTO "); lcd.setCursor(0, 1); lcd.print(" ATTIVO "); delay(1000); lcd.noBacklight(); } void disattiva() { statoAntifurto=0; statoAllarme=0; memoriaAllarme = 0; digitalWrite(ledRosso, LOW); digitalWrite(releSirena, LOW); lcd.backlight(); lcd.clear(); lcd.print(" ANTIFURTO "); lcd.setCursor(0, 1); lcd.print(" DISATTIVO "); delay(2000); standby(); }>>
quote:Risposta al messaggio di macrocd inserito in data 13/02/2015 23:35:16 (Visualizza messaggio in nuova finestra)>> Ho gia letto i numeri della carta, quindi per un ipotetico A1B2C3D4 dovrei mettere cosi?: #define masnum A1B2C3D4 oppure cosi?: #define masnum0 A1 #define masnum1 B2 #define masnum2 C3 #define masnum3 D4