Vai al contenuto
PLC Forum


Controllare Arduino con telecomando TV IR


alexcanadair

Messaggi consigliati

salve, chiedo un vostro aiuto per la realizzazione di un progetto interessante ovvero controllare arduino con il telecomando del mio tv

praticamente vorrei realizzare il circuito e la programmazione di arduino in tal modo per farlo funzionare in questo modo:

con un tasto del telecomando devo far eccitare un relè da NA ad NC per 1,5 secondi per poi ritornare in posizione di riposo NA da solo

mi serve questa combinazione perchè ho collegato un notebook nel mio tv e vorrei usarlo come media center con tastiera e mouse wireless, però l'unica pecca e che per accende il pc devo alzarmi e premere il pulsante power.

Per spegnerlo non ho problemi perchè lo spengo da arresta sistema ma con questa funzione posso impostare il pulsante power come accensione e spegnimento, mi potete illustrare lo schema di collegamento, sensore da usare, e la programmazione arduino e per finire come programmare quel tasto del telecomando? grazie in anticipo ragazzi ^_^

Link al commento
Condividi su altri siti


per accende il pc devo alzarmi e premere il pulsante power.

 

Accidenti deve essere un'impresa titanica, una fatica erculea.:lol:

Battute a parte manca una dato fondamentale: le tue conoscenze di elettronica circuitale e di programamzione.

Forse risolvi prima il probleam con un secondo telecomando. Ne trovi tanti su ebay g'à belli e pronti il cui costo è inferiore al solo costo del materiale che vorresti impiegare. Senza contare che usando il telecomando del televisore rischi o di dare un comando al TV quando accendi il PC o di spegnere il PC quando dai un comando al TV.

Link al commento
Condividi su altri siti

c'e' un telecomando per arduino comprensivo di ricevitore che costa 2 euro 

Il telecomando spara infrarossi ad arduino che li riceve e poi fa quello che gli dici di fare , in base al programma

Link al commento
Condividi su altri siti

bhe lo so ma la tecnologia ci ha viziati un po troppo :lol:

 allora diciamo che sono messo bene con conoscenze di elettronica, per la programmazione diciamo così così...

non ho mai avuto a che fare con il mondo di Arduino ma ci provo, imparo in fretta ^_^

Arduino lo ho già comprato su ebay a 10 euro e posato nel cassetto da tempo

comunque per quanto riguarda i tasti del telecomando ho provato ora e ho 4 tasti a disposizione che premendoli non hanno nessuna funzione 

ovvero tasto rosso, verde, giallo, azzurro

ma sono tasti che non ho mai usato fino ad ora e credo siano tasti interattivi per il decoder ma ho disattivato il servizio e dunque ci siamo 

se possibile vorrei usare un solo telecomando per tv, decoder, come sto facendo tutt'ora e per accendere-spegnere il pc

lo so Walter che ci sono già i kit per Arduino ma vorrei evitare di avere telecomandi in più se possibile, alla fine dei conti basta programmare Arduino per fare quella funzione e memorizzare l'impulso del tasto per il mio scopo, in pratica so come fare ma mi manca la programmazione gia pronta, e come caricare il programma, per il resto collegamenti ecc ecc basta avere lo schema e lo faccio gia ho preparato arduino in questo modo come in foto 

ir_receiver_sender_bb.png

Modificato: da alexcanadair
Link al commento
Condividi su altri siti

prima di collegare il ricevitore al arduino dovresti conoscere il protocollo , i segnali e la loro interpretazione 

Puoi farlo anche con arduino visualizzando nel monitor cosa ti arriva ma dubito ....

 

Link al commento
Condividi su altri siti

inizia col cercare sul web le informazioni di come si fa a scaricare e installare l'ide di arduino .Poi guardi come si fa a compilare e caricare un programma o sketch .Dopodiche inizi col studiare come si fa a programmare , leggi , studi e provi .Quando hai preso dimestichezza col sistema allora provi a vedere cosa succede quando ricevi dei segnali IR . 

Link al commento
Condividi su altri siti

ciao walter allora diciamo che sto facendo un po di pratica ho installato il software arduino e ho gia provato a fare la cosa piu elementare tramite le librerie ovvero il blink led e ci sono riuscito ho cambiato anche la velocità di lampeggio  ritardi ecc tramite la stringa della programmazione dello sketch blink ed è stato facile

poi ho fatto quello crepuscolare con breadboard e ha funzionato seguendo una guida 

diciamo che sono benino ora non è così complicato. ^^

ora arrivo al punto del mio scopo ho scaricato la libreria IRremote premo e provo a caricare lo sketch e mi dice errore durante la compilazione però con gli altri esempi tipo crepuscolare, blink, ecc ecc me li carica e va a buon fine e  funziona egregiamente quest'ultimo non ne vuole a che sapere 

dove sbaglio??? avete gia file programmato per installarlo?

una libreria funzionante? la mia domanda e questa:

mi serve il file pronto per abilitare arduino come ricevitore infrarossi, che mi fa funzionare come un relè monostabile premendo un pulsantedel telecomando... poi per finire mi dovete spiegare come programmare il tasto del telecomando e memorizzarlo nella stringa di programmazione annullando così altri impulsi del telecomando.

Modificato: da alexcanadair
Link al commento
Condividi su altri siti

devi capire se la libreria è valida per tutte le schede arduino o solo per alcune.Nel menu c'e' la voce scheda che ti permette di scegliere l'arduino

Se stai usando l'ultima versione arduino 1.6.x credo ci siano dei problemi

Io sono rimasto alla V1.5.7 che funziona molto meglio , la 1.6.x non mi compilava alcune cose ....prova a cercarla ed installarla dopo aver eliminato la 1.6..x

Link al commento
Condividi su altri siti

allora buone notizie ho caricato la funzione nella libreria e ho scelto la funzione IRrelay e funziona perfettamente premendo un qualsiasi tasto del telecomando 

riesco ad accendere e spegnere il led fino a qui ci siamo ora arduino è abilitato solo che mi resta un ultimo passo 

escludere ogni altro impulso IR del telecomando e memorizzare solo il tasto interessato ho aperto il monitor seriale e premendo il tasto mi dice:

Decoder RC5: A37 (12bit)

e questa e la la programmazione fatta su arduino:

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;
int RELAY_PIN = 4;

IRrecv irrecv(RECV_PIN);
decode_results results;

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } 
  else {
    if (results->decode_type == NEC) {
      Serial.print("Decoded NEC: ");
    } 
    else if (results->decode_type == SONY) {
      Serial.print("Decoded SONY: ");
    } 
    else if (results->decode_type == RC5) {
      Serial.print("Decoded RC5: ");
    } 
    else if (results->decode_type == RC6) {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

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

int on = 0;
unsigned long last = millis();

void loop() {
  if (irrecv.decode(&results)) {
    // If it's been at least 1/4 second since the last
    // IR received, toggle the relay
    if (millis() - last > 250) {
      on = !on;
      digitalWrite(RELAY_PIN, on ? HIGH : LOW);
      digitalWrite(13, on ? HIGH : LOW);
      dump(&results);
    }
    last = millis();      
    irrecv.resume(); // Receive the next value
  }
}

Link al commento
Condividi su altri siti

devi vedere con il monitor quello che ti arriva , processare i dati e salvare quello ceh ti serve con i controlli if

Io di solito non mi affido alle librerie ciecamente , preferisco studiarmele e rifarlein parte o comunque farle funzionare come interessa a me 

Le cose gia pronte di solito sono dimostrazioni che non vanno mai bene per un'applciazione complessa o comunque diversa .Vedendo il programma sembrerebbe che ogni 250 ms sia processata una logica che accende o spegne il led del pin incorporato su arduino , pero' non mi dice niente perche come al solito e' una funzione dimostrativa che va bene solo se vuoi accendere un'uscita digitale .Se invece vuoi ricavare altre cose allora devi entrare nella libreria e metterci le mani , magari aggiungendo qualche funzione in callback che invochi nel loop e ti invia i dati che ti servono oppure il servizio che desideri .Questa si chiama progammazione in C/C++ di sistemi embedded. 

Modificato: da walterword
Link al commento
Condividi su altri siti

allora... ^_^ caso risolto da solo ho trovato lo sketch generico per la funzione ho fatto la programmazione, e con qualsiasi tasto del telecomando non funzionava perchè dovevo acquisire il codice del tasto e piazzarlo. poi  ho codificato il telecomando con il tasto che volevo tramite il monitor seriale e me lo sono segnato a penna mettendolo nella stringa, per finire ho provato varie combinazioni dello stato del pin2 fino a quando ho trovato la funzione impulso per 400ms ON per poi ritornare in riposo. Ecco lo sketch completo modificato da me.

non fateci caso le altre uscite, perché questa è una sperimentazione di un utente su internet che ha voluto usare più di una uscita e stato per accendere più carichi ma io ho preferito mettere le altre uscite con una codifica casuale e introvabile per tenerli li predisposti per un uso futuro se mi interessa, lasciando così attivato la mia uscita pin2 con lo stato ON per 400ms, ed off stato riposo. spero di essere stato abbastanza chiaro ed ogni vostro suggerimento e ben accettato. grazie lo stesso a tutti ragazzi.

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String stato;

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

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    
    if(results.value == 16769055){ 
    stato = "acceso1";
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    
    }
    else if (results.value == 1) {
    stato = "acceso2";
    digitalWrite(3, HIGH);
    }
    else if (results.value == 1) {
    stato = "acceso3";
    digitalWrite(4, HIGH);
    }
    else if (results.value == 1) { 
    stato = "mantieniacceso"; 
    }
    else {
    stato = "spento";
    };
    
    if(stato == "acceso1"){ 
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    }
    else if (stato == "acceso2") {
    digitalWrite(3, HIGH);
    }
    else if (stato == "acceso3") {
    digitalWrite(4, HIGH);
    }
    else if (stato == "mantieniacceso") { 
    }
    else if (stato == "spento") {
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);  
    };    
    
    
    
    irrecv.resume(); // Receive the next value
  }
}

Link al commento
Condividi su altri siti

aggiornamento durante la sperimentazione con un altro telecomando funzionava bene con quello del mio tv la storia e lievemente diversa perché ad ogni impulso manda due codici diversi allora girovagando su internet ho trovato come abbinare i due codici alternati con quel tasto e ho integrato il tutto modificando la stringa da cosi:

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    
    if((results.value == 567){

ad:

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    
    if((results.value == 567) || (results.value == 2615)){

cosi sono sicuro che ad ogni pressione del tasto in entrambi le sequenze di codici si attiverà il relè a primo colpo senza problemi.

:thumb_yello:

per chi è interessato a questo progetto ecco lo sketch completo pronto all'uso tranne in codice da memorizzare (io ho messo il mio)

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String stato;

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

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    
    if((results.value == 567) || (results.value == 2615)){
     
    stato = "acceso1";
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    
    }
    else if (results.value == 1) {
    stato = "acceso2";
    digitalWrite(3, HIGH);
    }
    else if (results.value == 1) {
    stato = "acceso3";
    digitalWrite(4, HIGH);
    }
    else if (results.value == 1) { 
    stato = "mantieniacceso"; 
    }
    else {
    stato = "spento";
    };
    
    if(stato == "acceso1"){ 
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    }
    else if (stato == "acceso2") {
    digitalWrite(3, HIGH);
    }
    else if (stato == "acceso3") {
    digitalWrite(4, HIGH);
    }
    else if (stato == "mantieniacceso") { 
    }
    else if (stato == "spento") {
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);  
    };    
    
    
    
    irrecv.resume(); // Receive the next value
  }
}

Modificato: da alexcanadair
Link al commento
Condividi su altri siti

  • 11 months later...

Buon giorno,

ho letto questo progetto,che fa al mio caso premetto che mi sto cimentando da poco con la programmazione di arduino, il mio progetto è quello di accendere due diversi relè ************

Grazie in anticipo

 

Link al commento
Condividi su altri siti

Claudiomagic devi aprire una discussione apposita per il tuo problema, non accodarti ad altre creando confusione di argomenti.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...