Progetto di una semplice centrale di allarme antifurto

Ciao a tutti, :slight_smile:
volevo condividere con voi questo mio primo progetto un po più complesso del solito per quanto mi riguarda ma è sicuramente un buon inizio XD. Si tratta di una centrale di allarme antifurto che simpaticamente ho chiamato AllarmDuino :P.E' una semplice centrale a una zona nel mio caso perché ho un solo PIR a disposizione, ma ovviamente espandibile, che si attiva o disattiva tramite un tag RFID, essa può memorizzare fino a tre tag più una chiave master. Gli "ingredienti" che ho usato sono: Arduino uno, lettore RFID-RC522 e la sua relativa libreria, sensore PIR, display LCD 16x2, un buzzer, 3 led colorati, un trimmer, un pulsante, 3 resistenze da 220 ohm e una da 10 kohm.
Seguono lo schema dei collegamenti e l'allegato con il codice del programma, inoltre questo è un video dimostrativo.

NOTA: Alla pagina 3 troverete la versione avanzata della centrale in questione!!!

AllarmDuino.zip (685 KB)

Bell progetto! Anche io stavo pensando di fare una cosa del genere :slight_smile:

Bel progetto, complimenti. Però non ha i requisiti per stare in Megatopics (almeno per ora).

Bellissimo!

Interessante.
Mi riprometto di studiarlo e proporre qualche aggiunta.

anche io sto lavorando ad un progetto simile, potremmo unire le forze.
avrei alcuni consigli da chiedervi, procediamo per gradi:
il sistema è costituito da una centralina e vari sensori magnetici che comunicano via radio.
inizialmente mi concentrerei sul sensore.
ho usato:
arduino micro
modulo tx
http://www.ebay.it/itm/KIT-RF-AM-315-330-433-MHz-Modulo-TX-e-RX-per-ARDUINO-433-92-/121134544891?pt=Automazione_domestica&hash=item1c342e77fb
contatto magnetico

#include <avr/sleep.h>
#include <VirtualWire.h>

int allarme;
int stato=0;
char *a="1";
char *b="R";

void setup() 
{
  Serial.begin(9600);
  pinMode(12, OUTPUT);   // led
  pinMode(2, INPUT);     // sensore

  vw_set_tx_pin(4);    // Arduino pin to connect the receiver data pin
  vw_setup(2000);      // bps connection speed
}

void wakeUpNow() 
{ 
}

void sleepNow() 
{
  ADCSRA = 0;   // disable ADC
  set_sleep_mode (SLEEP_MODE_PWR_DOWN);  
  sleep_enable();
  noInterrupts ();
  attachInterrupt (0, wakeUpNow, LOW);
  interrupts ();  
  sleep_cpu (); 

  sleep_disable();
  detachInterrupt (0);  
}

void loop()
{   
  sleepNow();
  allarme = digitalRead(2);

  if (allarme == LOW && stato == 0)
  {  
    vw_send((uint8_t *)a, 1);
    vw_wait_tx();
    stato=1;
    digitalWrite(12,HIGH);
    delay(400);
    digitalWrite(12,LOW);

    /* DEBUG */
    Serial.println("Allarme acceso");
    Serial.print("Stato: ");
    Serial.println(allarme);
    Serial.print("Trasmesso: ");
    Serial.println(a);
  }

  if (allarme== HIGH && stato==1)
  {
    vw_send((uint8_t *)b, 1);
    vw_wait_tx();
    stato=0;
    digitalWrite(12,LOW);

    /* DEBUG */
    Serial.println(" ");
    Serial.println("Allarme spento");
    Serial.print("Stato: ");
    Serial.println(allarme);
    Serial.print("Trasmesso: ");
    Serial.println(b);
    Serial.println(" ");
  }
}

funzionamento:
quando allontano i contatti, invio "1" e quando li riavvicino invia "R", poi la centralina agisce di conseguenza...ma lo vedremo dopo.
funziona tutto, il mio problema è il risparmio energetico.
al posto dell'arduino micro potrei usare:

che sicuramente consuma meno.
poi ho introdotto la modalità sleep, ad ogni allontanamento o riavvicinamento dei contatti avviene un interrupt che risveglia il micro per poi tornare in sleep (almeno credo)
ho fatto una prova con una batteria da 9 volt... risultato?.. è restato acceso per 20 ore....però non avevo disabilitato ADC (ADCSRA = 0; // disable ADC), non so quanto possa risparmiare.
in sostanza la domanda è:
a batteria sto sensore può funzionare per alcuni mesi? (almeno 6)

@Faster
credo che se aprissi un topic per fare le tue richieste sarebbe meglio, altrimenti si toglie spazio a questo progetto.
comunque ti dico la mia: io opterei per un attiny (lo sto facendo anche io), consuma sicuramente meno e costa 1/10 della scheda che hai segnalato, che, per il poco lavoro che deve fare è sprecata. IMHO

no, bisogna eliminare arduino, cioè quello che consuma in arduino non è il MC che è possibile mandarlo in sleep ma il regolatore di tensione e l'adattatore usb-rs232TTL e qualcos'altro, bisogna togliere tutto, ovviamente si fà prima a costruire una scheda ex novo

la risposta era ovviamente rivolta a faster, come ti ha consigliato ricdata è meglio che apri un nuovo argomento per non inquinare questo e come probabilmente te lo diranno i moderatori

ok avete ragioni, ho creato un nuovo topic
http://forum.arduino.cc/index.php?topic=192023.0

Maxduino:
Ciao a tutti, :slight_smile:
volevo condividere con voi questo mio primo progetto un po più complesso del solito per quanto mi riguarda ma è sicuramente un buon inizio XD. Si tratta di una centrale di allarme antifurto che simpaticamente ho chiamato AllarmDuino :P.E' una semplice centrale a una zona nel mio caso perché ho un solo PIR a disposizione, ma ovviamente espandibile, che si attiva o disattiva tramite un tag RFID, essa può memorizzare fino a tre tag più una chiave master. Gli "ingredienti" che ho usato sono: Arduino uno, lettore RFID-RC522 e la sua relativa libreria, sensore PIR, display LCD 16x2, un buzzer, 3 led colorati, un trimmer, un pulsante, 3 resistenze da 220 ohm e una da 10 kohm.
Seguono lo schema dei collegamenti e l'allegato con il codice del programma, inoltre questo è un video dimostrativo.

Salve, mi chiamo Enzo e sono nuovo da queste parti.
Volevo farti i complimenti per il progetto, l'ho provato e funziona alla grande ma una cosa non riesco a fare e' che non riesco a programmare la chiave master, i due tag che ho li vede entrambi come slave, mi potresti aiutare ?
Grazie anticipatamente.

Ciao enzo, approfitto per ringraziare te e tutti gli altri per i complimenti sul progetto :). Mi fa piacere che nel mio piccolo sia riuscito a dare un input a chi pensava di realizzare qualcosa del genere con arduino, d' altronde devo ringraziare anche la community se sono riuscito nell'intento. Allora riguardo al tuo problema invece ti dico che sicuramente arduino riconosce come slave i tuoi tag perchè i loro codici non corrispondono al codice master caricato di default nella memoria. In pratica la chiave master non si programma, nel senso che il codice devi inserirlo fin dall' inizio nella memoria. Se ci fai caso nel codice del programma nella parte iniziale dove si dichiarano le variabili c'è la parte dedicata alla chiave master dove devi inserire il codice della tua chiave, ora tu dirai: "come faccio a sapere il codice della chiave che vorrei usare come master?"...Semplice, inizialmente devi caricare su arduino un programma che visualizza a video i codici dei tuoi tag, per fare ciò procedi come segue: innanzitutto collega ad arduino SOLO il lettore RFID (utilizzando sempre gli stessi pin dell schema), poi recati nella seguente cartella C:\Program Files\Arduino\libraries\RFIDRC522\examples\cardRead e carica su arduino il programma "cardRead.ino", a questo punto sarai in grado di leggere il codice dei tuoi tag. Non rimane altro che segnarti su un pezzo di carta il codice DECIMALE del tag che decidi di usare come master (il codice è composto da 5 gruppi di numeri decimali) ed inserirlo al suo posto nel programma sostituendo i numeri presenti e il gioco è fatto. Spero di essere stato chiaro, un saluto.

Maxduino:
Ciao enzo, approfitto per ringraziare te e tutti gli altri per i complimenti sul progetto :). Mi fa piacere che nel mio piccolo sia riuscito a dare un input a chi pensava di realizzare qualcosa del genere con arduino, d' altronde devo ringraziare anche la community se sono riuscito nell'intento. Allora riguardo al tuo problema invece ti dico che sicuramente arduino riconosce come slave i tuoi tag perchè i loro codici non corrispondono al codice master caricato di default nella memoria. In pratica la chiave master non si programma, nel senso che il codice devi inserirlo fin dall' inizio nella memoria. Se ci fai caso nel codice del programma nella parte iniziale dove si dichiarano le variabili c'è la parte dedicata alla chiave master dove devi inserire il codice della tua chiave, ora tu dirai: "come faccio a sapere il codice della chiave che vorrei usare come master?"...Semplice, inizialmente devi caricare su arduino un programma che visualizza a video i codici dei tuoi tag, per fare ciò procedi come segue: innanzitutto collega ad arduino SOLO il lettore RFID (utilizzando sempre gli stessi pin dell schema), poi recati nella seguente cartella C:\Program Files\Arduino\libraries\RFIDRC522\examples\cardRead e carica su arduino il programma "cardRead.ino", a questo punto sarai in grado di leggere il codice dei tuoi tag. Non rimane altro che segnarti su un pezzo di carta il codice DECIMALE del tag che decidi di usare come master (il codice è composto da 5 gruppi di numeri decimali) ed inserirlo al suo posto nel programma sostituendo i numeri presenti e il gioco è fatto. Spero di essere stato chiaro, un saluto.

Grazie sei stato molto chiaro ed ho subito provveduto alla lettura dei miei Tag di cui uno l'ho reso master, dopo aver apportato le modifiche che gentilmente mi hai postato. Tutto funziona a dovere adesso posso procedere ad inscatolarlo e a renderlo operativo espandendo con più sensori sia volumetrici che coi reed. Grazie ancora Maxduino.

Ciao a tutti,
volevo prima di tutto chiedere a Maxduino se poteva pubblicare anche il sorgente dello schema di collegamento e non solo l'immagine, in modo da poterlo modificare ed aggiornare.

Per ora mi sono limitato a prendere il progetto pari pari all'AllarmDuino originale.

Le uniche modifiche sono state collegare un display LCD con LCM 1602 di Funduino, simile a questo:

Questo mi ha permesso di occupare solo A4 e A5 (tenendo liberi A0, A1, A2, A3) oltre ovviamente ad evitare resistenza e trimmer per la retro-illuminazione.

Ho utilizzato un'altra libreria e quindi modificato l'include della LiquidCrystal, sostituendola con la LiquidCrystal_I2C (http://magnusglad.se/LiquidCrystal_I2C.rar) e aggiunto l'include della Wire (necessaria per la LiquidCrystal_I2C).

La riga 35: LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
è stata sostituita con: LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Ho inoltre inseriro anche un contatto magnetico (Servizio di incisione e taglio laser - FuturaShop) collegandolo al D2.

Nel codice solo la dichiarazione della var
int magnete;

nel metodo void setup()
pinMode(2, INPUT);

nel metodo void loop()
magnete = digitalRead(2);

modifica delle riga 212
if (digitalRead(pir) == HIGH && antiON == 1 && allarm == 0){
con
if ((digitalRead(pir) == HIGH || magnete == HIGH) && antiON == 1 && allarm == 0){

Prossimo passo:

  • integrare ricevitore e trasmettitore RF 433 Mhz

Ciao Morkar, bella l'idea dell'adattatore per risparmiare sui pin!!! :wink: Riguardo lo schema vorrei anche fartelo questo favore, ma se per "sorgente dello schema" intendi uno schema con tutti quei simboli e linee ti dico che è già tanto che sono riuscito a disegnarne uno con fritzing XD...spero comunque non sia un ostacolo per te o chiunque voglia ampliare il progetto. Una curiosità... quale funzionalità vorresti implementare con il ricevitore e trasmettitore RF??

Innanzitutto buonasera sono nuovo del forum e sono uno studente di quinta informatica e vorrei portare all'esame il progetto di Maxduino ho provato a risolverli da solo ma non ci sono riuscito quindi chiedo cortesemente l'aiuto di qualcuno più esperto.
Il problema è che il componente rfid rc522 non riesce a leggermi la chiave master come tale ma come semplice chiave slave
e quando si attiva l'allarme il buzzer non suona e non capisco il perchè di tale problemi. Lo schema l'ho montato come in figura e usato lo stesso codice controllando più volte il tutto ma nulla, spero mi possiate aiutare, grazie in anticipo.

Ciao Carma e benvenuto nel forum :)...allora il problema della chiave master molto probabilmente è lo stesso che ha avuto l'utente baronweb, se leggi tra i post precedenti troverai la soluzione a questo problema. Riguardo invece alla questione del buzzer posso solo dirti di controllare bene il collegamento, quindi che hai rispettato la polarità e che il pin sia quello giusto, in questo caso il pin7. Spero di essere stato d'aiuto, un saluto.

Grazie Maxduino per la tua risposta proprio ora ho risolto il problema della chiave master ma ora quando entro nel menù memorizzazione chiavi senza premere il pulsante reset key mi resetta tutto in automatico e anche qui il problema anche se guardato e riguardato persiste.Per il buzzer posso dirti di aver invertito la polarità solo per curiosità e all'inizio sembrava andare bene ma poi quando l'allarme si attiva suona e senza che il sensore rilevi nessun movimento suona ancora quindi non ho ancora risolto.
Volevo chiederti poi se posso aggiungere una tastiera numerica in modo tale da poter attivare e disattivare l'allarme attraverso le chiavi slave oppure grazie a un pin segreto. Di seguito riporto l'immagine della tastiera numerica che ho acquistato.
Ringrazio in anticipo chi mi potrà aiutare.

tastiera_4x4.gif

Maxduino:
Ciao Morkar, bella l'idea dell'adattatore per risparmiare sui pin!!! :wink: Riguardo lo schema vorrei anche fartelo questo favore, ma se per "sorgente dello schema" intendi uno schema con tutti quei simboli e linee ti dico che è già tanto che sono riuscito a disegnarne uno con fritzing XD...spero comunque non sia un ostacolo per te o chiunque voglia ampliare il progetto. Una curiosità... quale funzionalità vorresti implementare con il ricevitore e trasmettitore RF??

Con RF devo gestire 3 contatti magnetici, se il week-end è buono penso di postare tutto per domenica :wink:

ciao, anch'io mi sto cimentando in una cosa simile,
ho un progetto però un po' più domotico che limitato al solo antifurto, ma seguirò tutti gli sviluppi di questo thred