Accendere relè da telecomando

Progetti Arduino
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Accendere relè da telecomando

Messaggio da Marcodb »

Ciao a tutti
Approfitto di questo spazio messo a disposizione da Pier per chiedervi aiuto, in un piccolo progetto di arduino, che mi crea un piccolo problema.
Premetto che ne capisco poco quanto nulla, nelle mie intenzioni vorrei realizzare uno sketch che, tramite un tasto del telecomando della TV accenda e spenga un relè.
In effetti qualcosa ho fatto ma c'è un piccolo problema:
Quando premo il tasto del telecomando, questi emette per più volte il codice facendo, di fatto, accendere e subito spegnere il relè.
Dovrei limitare l'istruzione a recepire un solo comando.
Spero di essere stato chiaro.
Se può servire posso postare lo sketch che sto utilizzando.
Grazie a chiunque voglia aiutarmi
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Accendere relè da telecomando

Messaggio da pgv »

Sarebbe bene leggere lo sketch e sapere che telecomando e', magari si potrebbero scegliere due codici diversi per accensione e spengimento.
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Re: Accendere relè da telecomando

Messaggio da Marcodb »

Certo
Posto il codice.
Il discorso del doppio tasto l'ho scartato poiché nelle mie intenzioni c'è la volontà di utilizzare il solo telecomando della TV per accendere e spegne il decoder Sky, in quanto lo skyQ consuma in standby ben 18W.
Visto che lo uso sporadicamente volevo usare un solo tasto del telecomando che apparentemente non offre funzioni attive sulla Tv per evitare che si accenda, o si spenga, quando si cerca qualche funzione nella tv.
Il codice usato è questo

Codice: Seleziona tutto

include <IRremote.h>

int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(7, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value

    if (results.value == 0xFF6897) {
     stato = !stato;
     delay(200);
    }

    if ( stato == HIGH) {
      digitalWrite(7, HIGH);
    } else {
      digitalWrite(7, LOW);
    }
    
  }
  delay(100);
}
Grazie
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Accendere relè da telecomando

Messaggio da pgv »

Il problema e' che soprattutto con i telecomandi e' difficile mandare un impulso solo. Inoltre, riabiliti la ricezione immediatamente dopo aver ricevuto un risultato:

Codice: Seleziona tutto

  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
quindi indipendentemente dal delay() che metti dopo aver cambiato lo stato del rele' trovreai subito il primo rimbalzo dell'interruttore. Potresti provare a spostare l'istruzione

Codice: Seleziona tutto

    irrecv.resume(); // Receive the next value
alla fine del loop. Ancora meglio avere un loop infinito dentro il quale verifichi se c'e' un risultato, nel qual caso prendi azione, dopo di che, e solo dopo aver atteso un tempo specifico, riabiliti la ricezione di segnali. Potrebbe funzionare.
Magari meglio se aggiungiamo l'include della libreria correttamente... Il compilatore si lamenta che il metodo secode() e' deprecato, by the way.

Codice: Seleziona tutto

// Al prete (bof), al medico (meglio) ed al compilatore (assolutamente) non si deve mai mentire...
#include <IRremote.h>	// con il carattere #
// include <IRremote.h>	// e non senza che non funziona

int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(7, OUTPUT);
}

void loop() {
  while (1) { // Continua per sempre
  // a questo punto copio e incollo dal tuo codice
    if (irrecv.decode(&results)) {
      Serial.println(results.value, HEX);
//      irrecv.resume(); // Receive the next value si e' spostato

      if (results.value == 0xFF6897) {
       stato = !stato;
//       delay(200); // Questo delay non serve
      }
      if ( stato == HIGH) {
        digitalWrite(7, HIGH);
      } else {
        digitalWrite(7, LOW);
      }
      delay(500);	// Questo viene eseguito ogni volta
    }
//    delay(100);	// Questo delay() si e' spostato un po' sopra
    irrecv.resume(); // Receive the next value e' arrivato da sopra
  }
}
WARNING: io non ho un ricevitore, e non ho testato il codice. Possono esserci sciocchezze. Garantisco solo che compila.
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Re: Accendere relè da telecomando

Messaggio da Marcodb »

pgv ha scritto: mer 16 feb 2022, 16:59 Il problema e' che soprattutto con i telecomandi e' difficile mandare un impulso solo. Inoltre, riabiliti la ricezione immediatamente dopo aver ricevuto un risultato:

WARNING: io non ho un ricevitore, e non ho testato il codice. Possono esserci sciocchezze. Garantisco solo che compila.
Ciao pgv
Innanzitutto grazie per l'interessamento
Si, il problema è proprio quello del rimbalzo dell'impulso che accende ed immediatamente spegne il relè.
Ad ogni modo, sabato o domenica che avrò un po' più di tempo testerò la tua modifica e ti aggiornerò.
Intanto posso solo ringraziarti ancora.
P.S. l'avevo messo il # ma nella copia/incolla si era perso
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Re: Accendere relè da telecomando

Messaggio da Marcodb »

pgv ha scritto: mer 16 feb 2022, 16:59
WARNING: io non ho un ricevitore, e non ho testato il codice. Possono esserci sciocchezze. Garantisco solo che compila.
Buongiorno pgv e buona domenica
Ti aggiorno per dirti che purtroppo il codice non funziona
In questa configurazione l'IR non riceve nulla e non stampa nulla sulla seriale.
La conseguenza è che non compie nessuna azione.
Ripristinato il vecchio codice, stampa sulla seriale, quindi l'IR riceve il codice, ed accende e spegne il relè.
Ma rimane l'inconveniente del rimbalzo del segnale.
Grazie
Avatar utente
scossa
Messaggi: 689
Iscritto il: lun 28 dic 2020, 23:06
Località: Verona provincia

Re: Accendere relè da telecomando

Messaggio da scossa »

Marcodb ha scritto: dom 27 feb 2022, 11:35 Ripristinato il vecchio codice, stampa sulla seriale, quindi l'IR riceve il codice, ed accende e spegne il relè.
Ma rimane l'inconveniente del rimbalzo del segnale.
Grazie
Io ho modificato così il codice e funziona senza rimbalzi:

Codice: Seleziona tutto

#include <IRremote.h>

int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(7, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    delay(200);
    if (results.value == 0xFF9867) {
     stato = !stato;
     digitalWrite(7, stato);
     //Serial.println(results.value, HEX);
     Serial.println(digitalRead(7));
    }
    irrecv.resume();
    delay(100);
  }
}
Ovviamente i vari Serial.println poi puoi toglierli/commentarli
Bye!
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
(George Bernard Shaw)
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Re: Accendere relè da telecomando

Messaggio da Marcodb »

scossa ha scritto: dom 27 feb 2022, 13:15
Io ho modificato così il codice e funziona senza rimbalzi:
Grazie scossa
Nella giornata di oggi lo carico e ti aggiorno

Ovviamente si, stampare sulla seriale mi serve solo a capire che comando riceve l'ir

Grazie ancora
Marcodb
Messaggi: 37
Iscritto il: ven 28 gen 2022, 13:11

Re: Accendere relè da telecomando

Messaggio da Marcodb »

scossa ha scritto: dom 27 feb 2022, 13:15 Io ho modificato così il codice e funziona senza rimbalzi:
Aggiornamento
il codice sembra funzionare anche se, alla pressione del tasto, invia i seguenti codici

8CCC9BB4
6F
1006F
0
6F
1006F
1


ovviamente, tenendo per sbaglio qualche decimo di secondo in più il tasto può succedere che il relay si spenga o riaccenda.
posso aumentare il ritardo ( delay ) o non risolvo nulla?
Si possono inserire anche altri codici? ( 6F e 1006F) che sono i più ricorrenti?
Grazie per l'interessamento
Avatar utente
scossa
Messaggi: 689
Iscritto il: lun 28 dic 2020, 23:06
Località: Verona provincia

Re: Accendere relè da telecomando

Messaggio da scossa »

Marcodb ha scritto: lun 28 feb 2022, 22:18 Aggiornamento
il codice sembra funzionare anche se, alla pressione del tasto, invia i seguenti codici
....
Acc... avevo notato anch'io questo problema col telecomando dell'amplificatore Lepy, mentre con quello nel kit della Elegoo e col telecomando del decoder dtt funziona perfettamente; ma visto che avevi scritto
Quando premo il tasto del telecomando, questi emette per più volte il codice facendo, di fatto, accendere e subito spegnere il relè.
pensavo fosse solo un problema di "rimbalzi".
Puoi provare a verficare con un altro telecomando?
Bye!
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
(George Bernard Shaw)
Rispondi