Clonare telecomando con Ricevitore rf 433mhz

Salve, sto provando a clonare il telecomando della porta del pollaio per aprirla tramite Arduino NANO.Ho comprato un ricevitore RF 433 MHz collegato in modo corretto al PIN digitale 2 , e caricato la libreria rcswitch per sniffare il tasto del telecomando.Però andando su monitor seriale e premendo un bottone del telecomando non funziona niente.In foto il telecomando.Non é compatibile? Come fare? Grazie

Se ci dici la marca forse riusciamo ad avere un po' più di info sulla frequenza di lavoro ... :roll_eyes:

Guglielmo

..e non solo la frequenza, bisogna anche capire che codifica usa, perché se ha un rolling code (spero/penso di no) è complicato e si fa prima ad andare in parallelo ai pulsanti del trasmettitore...

... quello era lo step successivo :grin: :grin: :grin:

Guglielmo

La porta del pollaio è questa.É.una marca cinese/sconosciuta immagino.Non penso comunque che abbia un Rolling code.

E il ricevitore usato è questo

Ho trovato l'articolo sul Amazon, ma NON c'è alcuna specifica relativa al telecomando ... scrivi al venditore e recupera tutte le informazioni o difficilmente ne esci ... :roll_eyes:

Guglielmo

Quel ricevitore e' tro...o Qualche centesimo in piu e trovi "superheterodyne", RXB6 per esempio.
Oltre quello, rcswitch non decodifica qualsiasi segnale anche se 433 non-rolling.

Mah, nel dubbio, il mio consiglio è quello di andare in parallelo ai pulsanti (o al solo pulsante che ti interessa "automatizzare") del trasmettitore per "simulare" la loro pressione...

Ciao,
ho visto ora la discussione, non so se già hai risolto.

Io ho un cancello non supportato dalle librerie Arduino ma sono riuscito a decifrare la sequenza e a riprodurla.

Il mio cancello si apre ma con il mio trasmettitore mi devo mettere molto vicino forse perchè la potenza è bassa o la frequenza poco precisa.

Per catturare la sequenza ho utilizzato il seguente codice. Il mio telecomando fa una pausa tra 11 e 12mS tra una trasmissione e l'altra quindi la condizione per avviare la lettura nel mio caso è (basso>11000 && basso<12000), devi verificare se anche il tuo telecomando si comporta nello stesso modo.

const int pin = 2;

int impulsi=26, lettura[28];;

unsigned long basso, alto, tiniz;

int val = LOW, cont=0;

bool sign=false, start=false;


void setup() {

  Serial.begin(115200);

  pinMode(pin, INPUT);

  Serial.println("--- MONITOR TEMPI (uS) ---");

  Serial.println("Formato: H=Alto (Impulso), L=Basso (Pausa)");

  tiniz=micros(); 

}

void loop() {

  val = digitalRead(pin);

  if (val==HIGH && !sign) {

    sign=true;

    basso=micros()-tiniz;

    tiniz=micros();

  }

  if (val==LOW && sign) {

    sign=false;

    alto=micros()-tiniz;

    tiniz=micros();

  }

  if (basso>11000 && basso<12000) {

    start=true;

  }

  if (cont>impulsi-1) {

    start=false;

    //Serial.print("START -> ");

    for (cont=0; cont<impulsi; cont=cont+2) {

      //Serial.print(" L:");

      Serial.print(" ");

      Serial.print(lettura[cont]);

      //Serial.print(" H:");

      Serial.print(" ");

      Serial.print(lettura[cont+1]);      

    }

    //Serial.println(" <- END");

    Serial.println("");

    delay(1000); // Pausa per darti il tempo di leggere

    cont=0;

    tiniz=micros();

  }

  if (start==true) {

    if (alto+basso>0) {

      lettura[cont]=alto+basso;

      alto=0;

      basso=0;

      cont++;

    }

  }

}

Mentre per il trasmettitore ho utilizzato il seguente codice, lascio i tempi del mio cancello perchè dopo essere riuscito ad aprirlo hanno sostituito tutto l'apricancello.
const int TX_PIN = 10;

void sendFrame() {

  // Tempi originali con micro-compensazione per FS1000A

  auto b = [](int h, int l) {

    digitalWrite(TX_PIN, HIGH); delayMicroseconds(h + 40); 

    digitalWrite(TX_PIN, LOW);  delayMicroseconds(l - 40);

  };


  b(642, 241); b(304, 602); b(628, 382); b(299, 786);

  b(319, 589); b(636, 373); b(303, 602); b(627, 382);

  b(340, 252); b(313, 596); b(633, 266); b(300, 792);


  // Sincronizzazione (fondamentale per abbassare il guadagno del cancello)

  digitalWrite(TX_PIN, HIGH); delayMicroseconds(409);

  digitalWrite(TX_PIN, LOW);  delay(12); // 12ms netti

}

void setup() { pinMode(TX_PIN, OUTPUT); }


void loop() {

  noInterrupts();

  for (int i = 0; i < 40; i++) { sendFrame(); }

  interrupts();

  delay(3000); // Aspetta 3 secondi tra un tentativo e l'altro

}

Inizialmente ho utilizzato un ricevitore simile al tuo ma ho avuto più difficoltà, poi ho utilizzato SRX882 ed è andata meglio.