Controllo volume up/down con telecomando infrarossi ed autoapprendimento

Antonino Toscano | 21 marzo 2012
Categorie: I vostri progetti - PICmicro 10/12/16

Lo scopo di questo progetto, è quello di poter collegare delle comuni casse amplificate ai tv di nuova generazione, muniti di uscita audio, e di poter regolare il volume di quest’ultime con il telecomando originale del tv, senza doversi alzare. In commercio esistono già progetti analoghi, (vedi Sound bar e impiantini dolby) il problema è il costo normalmente superiore al centinaio di euro, e soprattutto hanno un telecomando a parte.

Il mio circuitino tramite un PIC16F873 acquisisce e memorizza 3 comandi del telecomando originale del tv o di un telecomando a vostra scelta (il firmware gestisce solo i protocolli Philips RC5 e RC6). Una volta acquisiti questi comandi è possibile alzare e abbassare il volume e mettere in stand-by. La regolazione del volume viene eseguita tramite un integrato LC7533.

Al posto del PIC16F783 è possibile utilizzare anche i PIC16F874/876/877 senza fare modifiche al codice.

Alimentando il circuito, la prima operazione che viene eseguita è la lettura della eeprom interna del picmicro per recuperare i codici dei comandi di gestione, che ho indicato nel firmware con le sigle VOLMENO, VOLPIU e STANDBY. Nel caso in cui i comandi non fossero presenti in memoria o vogliamo rimemorizzarli, mediante la pressione del tasto MEMO  si avvia la procedura di acquisizione. Tale procedura viene mostrata mediante l’accensione del led ROSSO. Il led rosso rimane acceso finchè non vengono ricevuti correttamente 3 comandi IR. Verranno acquisiti in ordine i comandi VOLMENO, VOLPIU e STANDBY. Potete usare qualsiasi pulsante del telecomando. Ad ogni lettura del ricevitore IR il led GREEN emette un lampeggio rapido.

Dopo le tre acquisizioni, il LED rosso si spegne e il circuito si mette in modalità operativa. A questo punto se viene premuto uno dei tre tasti del telecomando “memorizzati” nel pic, quest’ultimo li confronterà con quelli in memoria e quindi di conseguenza piloterà l’IC LC7533 eseguendo il comando relativo.

Il livello del volume viene visualizzato una coppia di display a 7 segmenti a catodo comune.

Il ricevitore IR utilizzato è un TSOP1736 ma dovrebbe andare bene un qualsiasi ricevitore IR demodulante e operante alla frequenza di 36KHz o 38KHz. Il collegamento dei sistemi esterni al circuito l’ho realizzato mediante connettori RCA, che è il tipo di connettore più comune per l’audio: avremo quindi due ingressi, contrassegnati con IN1 e IN2 sullo schema, che vanno ai pin 12 e 4 dell’ LC7533, e due uscite da collegare all’amplificatore o alle casse amplificate, contrassegnate con OUT1 e OUT2 e facenti capo ai pin 9 e 7. Il comando per lo standby aziona un relè che potete eventualmente utilizzare per spegnere l’amplificatore.

Nel video seguente è possibile vedere il circuito all’opera:

Non sto qui a spiegare le codifiche RC5 e RC6 utilizzate dai telecomandi ad infrarossi dal momento che su internet si trovano moltissime guide ben fatte sull’argomento, vi consiglio pertanto di studiare i tutorial che ho studiato io per realizzare questo progetto, elencati al paragrafo Links.

Vi prego di non utilizzare il codice o parti di esso per ripubblicarlo su altri siti: supportate e collaborate piuttosto settorezero.

Links

Galleria fotografica

Downloads

Il progetto contiene lo schema elettrico in formato eagle, il progetto MPLAB e il sorgente scritto per Hitech-C 9.83

PDFProgetto controllo remoto volume (126.37 kB - 258 downloads)
PDFDatasheet TSOP1736 (204.66 kB - 65 downloads)
PDFDatasheet LC7533 (53.68 kB - 82 downloads)
Puoi andare alla fine dell'articolo e lasciare un commento. I trackback e i ping non sono attualmente consentiti.

  1. #1 da PATO65 il 21 marzo 2012

    Ciao Antonino, complimenti per il progetto.
    Volevo vedere come hai realizzato la parte legata al sensore infrarossi che mi servirebbe per un altro progetto, ma non riesco a leggere lo schema elettrico. Io uso circad ma non è compatibile. Potresti mica allegare lo schema anche in formato immagine?

  2. #4 da Davide69 il 20 settembre 2012

    ciao a tutti.
    Sto impazzendo, uso una 16f876a 20mhz, esegue il ciclo di memorizzazione, ma sbaglia la decodifica. qualsiasi tasto del telecomando fa le stesse funzioni. O meglio, al pigiare di un qualunque tasto, si accende, decrementa il valore, si spegne.
    Non posseggo oxilloscopio, ma leggendo la eeprom mi sono accorto che i dati delle tre letture sono simili, uguali, qualche volta casuali. (ovviamente il test è stato effettuato utilizzando gli stessi tasti dello stesso telecomando.

    nota: non conosco la codifica dei telecomandi in mio possesso, tra i quattro che ho c’è un mivar e credo sia rc5/6. comunque con tutti la segnalazione di avvenuta memorizzazione avviene.
    grazie.

  3. #5 da Davide69 il 22 settembre 2012

    Scusate ho scritto una cavolata. I telecomandi in mio possesso e con i quali ho effettuato le prove hanno codifiche diverse.
    Uno è NEC e gli altri ITT.
    Per caso avete pronto il codice per implementare queste codifiche?
    grazie

  4. #6 da Antonino Toscano il 24 settembre 2012

    Ciao non ho più avuto tempo di andare avanti con il progetto,
    appena mi sarà possibile lo farò .
    Saluti Nino

    • #7 da tiger2000 il 22 gennaio 2013

      Ciao, ho provato a realizzare questo tuo progetto, ma ho riscontrato dallo schema eletrico delle incongruenze con i pin per il pilotaggio display. (Ho utilizzato dei luky kw1-561csa) che dovrebbero essere identici dal datasheet!
      Anche l’uscita del pic 16f873 rc0-rc1-rc2 non esce alcun segnale logico di pilotaggio del circuito lc , mentre l’acquisizione,il rele di alimentazione funziona ok!
      Ti è già capitato qualcosa di simile?
      Grazie per l’eventuale risposta.
      R. Rossi.

  5. #8 da Davide69 il 28 settembre 2012

    ho modificato il codice per decodificare il Nek. Spero sia utile a qualcuno.
    if(!IR)
    { //Se il ricevitore IR si attiva, comincio con la lettura
    __delay_us(10);
    if(!IR) {
    __delay_ms(12);
    i=0; //Inizializzo il counter i, utilizzato nella routine di interrupt
    OK=0;
    while(i<32) {
    while(IR) continue;
    if(!IR){
    TMR0=78; //Ricarico TMR0
    TMR0IF=0;
    OK=1; //Inizializzo il counter i, utilizzato nella routine di interrupt
    TMR0IE=1; //attivo il timer0
    while(OK!=0) {continue;} //Con l'ausilio dell'interupt creo un ritardo di 1,2ms
    code[i]=IR^1; //Assegno il valore di IR negato alla posizione i dell'array
    i++;
    }
    continue;
    }

    • #9 da Giovanni Bernardo il 10 ottobre 2012

      ottimo

      • #10 da tiger2000 il 20 gennaio 2013

        Ciao, ho provato a realizzare questo tuo progetto, ma ho riscontrato dallo schema eletrico delle incongruenze con i pin per il pilotaggio display. (Ho utilizzato dei luky kw1-561csa) che dovrebbero essere identici dal datasheet!
        Anche l’uscita del pic 16f873 rc0-rc1-rc2 non esce alcun segnale logico di pilotaggio del circuito lc , mentre l’acquisizione,il rele di alimentazione funziona ok!
        Ti è già capitato qualcosa di simile?
        Grazie per l’eventuale risposta.
        R. Rossi.

  6. #11 da zerotuz il 27 aprile 2014

    ciao giovanni
    sono nuovo e ho letto tutte le tue lezioni e recensioni
    ora mi sto cimentando nelle realizzazione del controllo di volume ir da te progettato
    unico problema per ora e che in mplab x ide v 2.05 mi da un errore in tutti i comandi delay

    __delay_us
    __delay_ms
    come lo posso risolvere?
    ho provato anche con il #define delay.c preso da un tuo articolo
    ho pensato che poteva essere un errore mnemonico e non riconosceva la scritta quindi ho provato in diversi modi:
    DelayMs
    dly100m
    Dly(100)m
    Dlyms(100)

    BHOOO!!!
    puoi aiutarmi?

    • #12 da Giovanni Bernardo il 27 aprile 2014

      gli esempi sono fatti per MPLAB 8 e il compilatore Hitec-C. Dal momento che non hai specificato ne quale compilatore utilizzi ne qual’è l’errore restituito faccio affidamento alla mia sfera magica: stai usando il compilatore XC 8 e non è definito _XTAL_FREQ. Ad ogni modo non è l’unico errore che incontrerai, ce ne saranno tanti altri e ti conviene dare almeno un occhio alle guide in pdf fornite con mplab x e l’XC8.

  7. #13 da hofmann il 16 aprile 2015

    Ciao, ho realizzato anch’io il progetto ed anche a me non funzionano le uscite la memorizzazione dei comandi è ok ma ho riscontrato che funziona anche con tasti non memorizzati non sono molto esperto ma non credo di aver commesso errori.
    puoi aiutarmi?

  8. #14 da Antonino Toscano il 27 aprile 2015

    Cosa usi ? Mplab x o Mplab Ide ? Che compilatore usi ? L’esempio come dice Gianni è stato scritto con Hi-Tech C 9.32, senza queste informazioni è difficile poterti aiutare

  9. #15 da Alessandro2016 il 16 maggio 2017

    Salve Antonino, complimenti per il progetto. Mi servirebbe un po’ di aiuto per favore. Non sono pratico.
    Realizzando questo progetto sto inserendo il file “volume.hex”
    nel pic 16f783a con un programmatore K150. Ma
    non riesco. Mi da errore. Faccio giusto?

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
Settorezero.com e il logo Zroid™ ©2007÷2017 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore. I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia e sono soggetti alle condizioni definite nel disclaimer. Settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge. Settorezero fa uso dei cookie leggi l'informativa estesa. Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti. Siamo presenti anche su Facebook e, meno assiduamente, anche su Twitter - Tumblr - Google+ - Blogspot - Youtube.
Creative Commons BY-NC-ND 2.5