Semplice antifurto con telecomando

Con Arduino ed un paio di moduletti economici come quelli già visti qui è possibile realizzare un automatismo telecomandato con apprendimento per “insegnare” ai trasmettitori programmabili per apricancelli il codice di trasmissione. E’ possibile adattare il circuito per utilizzare più uscite e più pulsanti per l’insegnamento (uno per ogni codice). Qui di seguito lo schema elettrico utilizzabile con qualsiasi modello di Arduino base (UNO, Mini, Nano, etc…)

Schema elettrico Antifurto
Schema elettrico Antifurto

Per modificare il codice di trasmissione modificate la linea

char *codice = “00000000111111000111111”; // codice 24 bit lasciare i primi 8 bit a 0

usate una qualsiasi sequenza binaria di 24 caratteri lasciando sempre i primi 8 a “0”.

Per insegnare al vostro telecomando il codice avvicinatelo al trasmettitore e premete il pulsante fino a quando il codice verrà memorizzato. Ora potrete utilizzarlo per far accendere o spegnere il relè connesso all’Arduino.

telecomando programmabile
telecomando programmabile

/*
 Utilizza la libreria  
 http://code.google.com/p/rc-switch/
  www.sciamannalucio.it
*/

#include <RCSwitch.h> 
RCSwitch mySwitch = RCSwitch();
char *codice = "00000000111111000111111"; // codice 24 bit lasciare i primi 8 bit a 0

int RX_Interrupt = 0; // DIGITAL Pin 2 da collegare al pin DATA della ricevente radio
int TXbutton = 3; // Pulsante per l'insegnamento del codice al telecomando
int led = 5; // led che indica che si sta insegnando al telecomando
int relay = 6; // relè di uscita
unsigned int value = 0; // conterrà il codice ricevuto

int readBinaryString(char *s) {
  int result = 0;
  while(*s) {
    result <<= 1;
    if(*s++ == '1') result |= 1;
  }
  return result;
}

void setup() {
  mySwitch.enableTransmit(4); //Digital PIN 4 TX
  Serial.begin(115200); // imposta il baud del monitor seriale a 115200
 // Il ricevitore radio è connesso al DIGITAL Pin #2
  mySwitch.enableReceive(RX_Interrupt); // collega il Pin con funzione interrupt
  mySwitch.setRepeatTransmit(4);
  pinMode(TXbutton, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  pinMode(relay, OUTPUT);
}

void loop() {
  while (digitalRead(TXbutton)==LOW) {
    digitalWrite(led, HIGH);
    mySwitch.send(codice);
  }
  digitalWrite(led, LOW);
  // Se è arrivato un dato
  if (mySwitch.available()) { // controlla se è stato ricevuto un codice
    // memorizza il dato
    int value = mySwitch.getReceivedValue();
    // Se il dato vale zero
    if (value == 0) {
      Serial.print("Unknown encoding");
      // altrimenti
    } else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() ); // stampa il dato ricevuto
      if (readBinaryString(codice)==value) { // controlla se il valore ricevuto è uguale al codice memorizzato
        digitalWrite(relay, !digitalRead(relay));
        Serial.println(" OK!");
        delay(1000);  // pausa di 1 secondo per evitare l'attivazione/disattivazione veloce
      } else {
        Serial.println(" NO!");
      }
    }
    // ri-arma la ricezione dei dati
    mySwitch.resetAvailable();
  }
}

Libreria RCSwitch

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.