Arduino e condizionatore

Per analizzare precisamente i segnali di un qualunque telecomando IR basta un led, un cavo per cuffie e un PC!

Poi devi "solo" programmare arduino per "illuminare" lo stesso LED (i led IR funzionano sia in trasmissione che in ricezione) secondo gli intervalli e la portante del segnale precedentemente registrato ed esaminato.

Devi impostare la frequenza di campionamento più alta disponibile su tuo PC, e usare una versione "vecchia" di audacity, che mostri la scala-tempo anche in millisecondi invece che solo in secondi.
Per visualizzare correttamente un segnale a 38 kHz servono almeno 76 kHz (per motivi fisici che non sto a spiegare...)

Per sapere a che frequenza è la portante, ingrandisci una parte di segnale in cui la portante è presente (segnale alto), e misura che intervallo di tempo coprono, ad esempio, 10 periodi (10 "gobbe" della sinusoide); supponiamo che siano 200 microsecondi (200 us).
10 periodi : 200 us = n periodi : 1.000.000 us

periodi / secondo = 10 * 1.000.000 / 200 = 50.000 = 50 kHz

In pratica, dividi il numero di periodi per il numero di microsecondi e moltiplica per 1.000.000 per ottenere la frequenza in Hz.

Ma sai che sei un geniaccio :D!!
Questa cosa di misurare la portante con la scheda audio è troppo forte!

Per la questione della frequenza di campionamento che deve essere il doppio della frequenza che vuoi misurare.. credo che si ponga un solo problema di software.. cioè con quale software lo fai?
O meglio tu dici una versione vecchia di audacity.. ma che versione intendi? magari un link su megaupload se lo hai sul pc non sarebbe male :smiley: :smiley:

Non e' per il software, e' il teorema di Nyquist.
Per la cronaca, tutti i led funzionano anche in ricezione, sono antenne per il visibile e come le antenne sono reversibili :slight_smile:

Conoscevo questa tecnica, ma non l'ho mai usata, se a te ha dato risultati allora e' una valida alternativa a quella che avevo detto io :smiley:
Pero' devi ingrandire e guardare la frequenza dei singoli impulsi (non del codice inviato, ovviamente)

EDIT:
Sorry, avevo letto male, non dicevi che il campionamento era legato al software :sweat_smile:

A dir poco GENIALE :smiley:
tutto questo mi sa di teoria dei segnali.. una delle materie che devo ancora studiare all'università!
Comunque proverò tutto in questi giorni e vi farò sapere :wink:

superkulak:
Non e' per il software, e' il teorema di Nyquist.

Teorema di Nyquist-Shannon per la precisione.

(Volevo fare il pignolo una volta tanto) 8)

Beh credo che chiunque abbia fatto ingegneria o semplicemente un corso sul trattamento dei segnali sappia cosa sia :grin:

Comunque resta il fatto che serve la versione giusta di audiacity per poter calcolare la frequenza...
Quindi aspettiamo almeno di sapere che versione del programma serve per avere una base dei tempi nell'ordine dei millisecondi o microsecondi che sia...

Io uso la 1.2.6

In realtà anche in quelle nuove si puo' in qualche modo riuscire a vedere i millesimi, ma bisogna cambiare un'impostazione che non mi ricordo...

Si', il SW non c'entra niente con la frequenza necessaria:il teorema di Nyquist "decide" qual è la frequenza minima necessaria, l'HW della scheda "decide" quale frequenza massima si puo' impostare.
Mi sembra che con Audacity 1.3 si poteva impostare piu' facilmente una frequenza di 100.000 aggirando dei controlli presenti invece in 1.2.6, ma non mi rocordo bene, e' tanto che non gioco coi telecomandi...

f.schiano:
... Teorema di Nyquist-Shannon per la precisione.
(Volevo fare il pignolo una volta tanto) 8)

una volta tanto perché io non dicevo niente :wink: :wink: :wink: :wink:
Ciao Uwe

jumpjack:
Si', il SW non c'entra niente con la frequenza necessaria:il teorema di Nyquist "decide" qual è la frequenza minima necessaria, l'HW della scheda "decide" quale frequenza massima si puo' impostare.
Mi sembra che con Audacity 1.3 si poteva impostare piu' facilmente una frequenza di 100.000 aggirando dei controlli presenti invece in 1.2.6, ma non mi rocordo bene, e' tanto che non gioco coi telecomandi...

Per chiarire.. So bene come funziona il campionamento.. e se noti bene sopra ho scritto che la frequenza di campionamento deve essere il doppio della frequenza della portante...

Quando parlavo del software intendevo dire che deve darti la possibilità di arrivare a selezionare una scala massima di almeno 100 Khz per poter campionare portanti sino a 50 Khz..

Spero di aver chiarito il mio punto..

Cmq vedo che si arriva a molto di più che 100 Khz.. quindi siamo apposto..
Lo proverò sicuramente

Una domanda sulla costruzione di questo ricevitore magico :slight_smile:
é sufficiente collegare il led direttamente ad un cavo jack mono? ha importanza la polarità?

non vedo tutta la necessità della scheda audio etc.. quando puoi usare direttamente arduino come logger (o meglio, la lireria IR in modalità RAW)

il problema (da quello che ho capito) è che i ricevitori IR possono leggere segnali solo di una certa frequenza.. ad esempio per quello che ho comprato io è 38khz.
Li fanno così per filtrare la banda e limitare i disturbi ecc..
mentre con il metodo del led IR usato come ricevitore è possibile leggere segnali di "qualsiasi" frequenza, ovviamente programmando opportunamente arduino
Correggetemi se ho capito male

se il led legge solo 38khz, non vedo come collegandolo a un microfono magicamente legga tutte le frequenze..
mi sa che in entrambi i casi a priori devi prenderti un nuovo led, che copra una banda maggiore. E a questo punto, piuttosto che rischiare di friggere la scheda audio/cuffie/quelchel'è e incasinarsi con circuiti esterni, tanto vale andare direttamente di arduino.

oddio poi magari qualcosa mi sfugge..

Il discorso di distruggere la scheda audio preoccupa un pò anche me.. infatti mi informerò bene su tensioni / correnti ammesse e lo proverò con un pc vecchio.
In linea di principio, è come se si utilizzasse il pc come oscilloscopio e quindi, a differenza di arduino, è possibile vedere il segnale continuo, cioè "analogico". Poi, misurando il periodo del segnale si calcola la frequenza.

lesto:
se il led legge solo 38khz, non vedo come collegandolo a un microfono magicamente legga tutte le frequenze..

I led usati nei due casi sono diversi. Con la libreria IRremote.h utilizzavo questo componente, mentre con questo metodo strano basta un comune led IR per telecomandi.

non vedo perchè non puoi usare il comune led per telecomandi con l'arduino.
Certo non avrai tempi di campionamento così alti come con il PC, ma che te ne fai di campionare dei valori che poi arduino non regge? rimarresti legato al pc...

se non erro, metti i due piedi del led a due pin di arduino. Uno lo usi come input, (il -) e l'altro come output (il +).
dai una veloce scarica di 5v(high) al + e poi ritorni a low, a questo punto il tuo led è in grado di ricevere segnali IR (per quanto riguarda la luce del sole basta una buona schermatura, ovvero tenere il led in ombra). a questo punto dovresti fare varie pulsein() finchè non vai in time out (la funzione ritorna 0) e ridai la scossa e via...
in questo modo dovresti notare che ogni tasto premuto corrisponde una sequenza variabile di segnali di durata LOW e HIGH, se riesci a decifrare quei valori (o un brutale copia incolla) sei a cavallo.

quì trovi il codice sul quale mi son basato per tirar fuori questa traballante(?) idea: http://arduino.cc/forum/index.php?action=printpage;topic=56072.0 si sa mai che ti possa essere utile per uno spunto, anche se mi rendo conto che a parte i collegamenti del led non centra proprio niente! :smiley:

Mi sa che state facendo un po' di confusione...
Non e' il led che e' limitato in banda, ma il ricevitore. Il led, se illuminato direttamente, non produce una tensione (in realta' produce corrente) tale da rompere la scheda audio, che io sappia... Anzi si potrebbe addirittura amplificare con un op amp (anche 3 in cascata: convertitore i-v, amplificatore, buffer) il segnale e mandare alla scheda, ma a questo punto usi arduino e non la scheda audio...
Non capisco dove sta il problema.

Stasera vorrei iniziare il famoso esperimento... qualcuno mi conferma che posso collegare il led direttamente ad un jack? Non sarebbe meglio con una resistenza?

se è solo led e jack ok, la potenza sprigionata è sicuramente inferiore a quella del led trasmissivo, probabilmente anche di qualche ordine di grandezza(infatti credo sia proprio questo il motivo per cui si "carica" il led prima di usarlo come ricevitore nella soluzione che ho proposto, per rendere il segnale "più forte")
il rischio di superare le tensioni lo avevo perché avevo letto di amp etc, e visto che non ne so molto, ma so che sbagliando i valori/collegamenti degli amp qualcosa si può friggere,, ho suggerito un metodo che funziona sicuro solo con arduino senza circuiteria esterna :grin:

Una soluzione alla volta :slight_smile: La tua l'ho messa momentaneamente da parte perchè devo capire un pò meglio alcune cose tra cui pulsein()..

Per quanto riguarda il metodo con la scheda audio, ho collegato tutto e registrato con audacity (impostando la preamplificazione del microfono) ed ecco il risultato:

Bene, mi aiutate a trovare la frequenza? La prova è fatta volutamente con un telecomando da 38khz, che non è quello del condizionatore ovviamente

come puoi vedere hai dei 0 e -1(uhmm led al contrario?), quindi 0 e1, segnali digitali, e hanno una durata.
In questo caso la durata di un segnale 1 e 0 si vede bene che non scende mai oltre un certo limite: ecco, il numero massimo di ripetizioni di 1 (o 0) in un secondo è la frequenza.

ad occhio la distanza picco-picco è 2ms (moolto ad occhio), quindi la frequenza del segnale è = 1/0.002 = 500hz

come puoi notare il segnale non segue la frequenza... infatti ogni "frequenza" il telecomando può scegliere se scrivere 1 o 0... la sequenza di 1 e 0 rappresenta il segnale inviato. Con un pò di pazienza puoi campionare i vari sdegnali o addirittura "decodificarli"

però questa è la frequenza del segnale ricevuto, non dell'onda luminosa che usi come mezzo trasmissivo (38kHz)