Problema con Barriera IR

Stavo provando a creare uno sketch di una barriera IR semplice, come quelle più comuni.
Ma ho un problema, ho letto nei vari post che il codice giusto per far andare il Led Ir a 38kHz è questo:

 OCR2A = 211;
 TCCR2A = 0b01000011; 
 TCCR2B = 0b00001001;

Bene, vedendo il led con la videocamera lo vedo accendersi, ma il ricevitore riceve sempre 0.
Ora due sono le cose, o il led non va a 38kHz o il ricevitore non va bene ..... però questo stesso ricevitore l'ho usato per ricevere comandi da un telecomando ed ha funzionato alla perfezione.
comunque il mio sketch è il seguente:

#include <IRremote.h>
IRrecv ricevitore(2); //pin del ricevitore IR
decode_results codice; //codice ricevuto dal ricevitore
void setup ()
{
 pinMode(11, OUTPUT);
 OCR2A = 211;
 TCCR2A = 0b01000011; 
 TCCR2B = 0b00001001; 
 Serial.begin (9600);
 ricevitore.enableIRIn(); //inizializza il ricevitore
}
void loop ()
{
  ricevitore.decode (&codice);
  Serial.print ("Nuova lettura: ");
  Serial.print (codice.value);
  Serial.print ("\n");
  ricevitore.resume(); //prepara il ricevitore a ricevere nuovamente
  
}

Quelle tre righe (copyright Astrobeed :)) generano una frequenza prossima ai 38KHz, e funzionano al 100%, ma la generazione è costante e l'uso possibile è appunto quello di un controllo di barriera. Quindi non capisco a che ti serve la libreria e che codici vuoi leggere, è l'inizio di un'altra storia drammatica??

Prima di tutto mi scuso per aver sbagliato sezione, non me ne ero accorto!
In effetti prof. ha ragione, stavo decodificando il nulla XD
Comunque ora il problema è un altro xD
In effetti sul seriale mi viene stampato il numero 1 però quando metto il dito fra il ricevitore e il led .... non succede nulla XD mi continua a stampare il numero 1, ed ho notato che a volte stampa uno 0, diciamo 1 volta ogni 20 "1".... sarà normale credo

Non stai spedendo nessun codice. Stai spedendo un segnale continuo rettangolare con la frequenza di 38kHz. Non c'é nessun codice da decodificare. Non Ti serve nessuna libreria IRremote.h. Il TSOP mette l' uscita a LOW quando riceve un segnale a 38kHz e va a HIGH
Il codice sottostante puó accendere e spegnere il segnale 38kHz sul pin 2.
Ciao Uwe

#define RXTSOP 3      //Pin TSOP 
#define TXIR 2        //LED IR
#define LED13 13      //LED on pin 13


//flag
boolean transmitting_IR; //transmission flag

// turn_off , turn_on, detect functions come as is from
// http://www.eng.utah.edu/~cs1410/Labs/lab09.html

void turn_off_IR ()
{
  // Instead of just adjusting the output on pin 11, this code also
  // turns off the timer controlling the PWM output on pin 11
  
  TCCR2A = 0;                                   // Disconnect PWM
  TCCR2B = 0;                                    // Stops the timer
  OCR2A = 0;                                      // No timer top
  digitalWrite(TXIR, LOW);                 // Ensure output is off
  
  transmitting_IR = false;
}

void turn_on_IR ()
{
  //   Set up Timer2 (which can be connected to pins 3 and 11)
  //   For full details, see:
  //   arduino.cc/en/Tutorial/SecretsOfArduinoPWM
  //   The syntax here has me baffled, but the patterns of usage
  //   are clear if you look at the ATMega328 diagrams.
  //   _BV appears to stand for 'bit value'
  //   Different bits need to be set to control each timer
  //   Refer to diagrams for clarity

  TCCR2A = _BV(WGM21) | _BV(COM2A0);      // This mode toggles output once per timer cycle
  TCCR2B = _BV(CS20);                                  // Do not scale the clock down - use 16 MHz timer rate.
  OCR2A = 210;                                              // Divide sys. clock by 210, 1/2 cycle = 76 khz, 1 cycle = 38 khz
  
  // Output pin 11 should now be emitting a 38 khz signal.
  
  transmitting_IR = true;
}

void detectIR()
{
    if(digitalRead(RXTSOP)
    {
    digitalWrite(LED13 ,LOW);
    }
    else
    {
    digitalWrite(LED13 ,HIGH);
    }
}

void setup()
{  
  pinMode(TXIR, OUTPUT);
  pinMode(RXTSOP, INPUT);
  turn_on_IR();
  delay(100);
}

void loop()
{
  detectIR();                        // search for IR
  delay(50);  
}

in realtà il codice vorrei scriverlo io per capire come funziona XD
Quel codice postato da uwe l'ho capito ma vorrei prima risolvere il mio ....

void setup()
{
 pinMode(11, OUTPUT);     
 OCR2A = 211;
 TCCR2A = 0b01000011; 
 TCCR2B = 0b00001001;
 Serial.begin (9600);
}
void loop ()
{
int i= digitalRead (5);
Serial.println (i);
}

Mi stampa 1 sul monitor seriale, ed è giusto così, ma anche quando metto il dito fra il led IR e il ricevitore stampa sempre 1

Il tuo codice attiva sul pin 11 una frequenza fissa di 38khz.
il pin 5 non lo hai dichiarato, non so se di default è impostato come INPUT o OUTPUT, comunque lo dovresti decidere tu. Ora sul pin 5 il programma legge lo stato HIGH, perché ti aspetti che cambi di stato, c'è collegato il ricevitore? Non sarebbe allora il caso che alleghi uno schema elettrico e vediamo di capire se hai collegato tutto correttamente?

Si al pin 5 è collegato il ricevitore. Ecco lo schema... come al solito non so farli ordinatissimi ma spero si capisca >_<, non avendo trovato il ricevitore tra i componenti ho messo quello col punto interrogativo, e la resistenza che ho messo prima del led IR è da 180ohm non da 220
Inoltre volevo chiedervi ... ma che led è quello nel secondo allegato? non ha la classica bandierina al suo interno

2012-11-17 23-43-02.559.jpg

Lo schema è una schifezza ma almeno si capisce che il sensore RX è montato a rovescio; MA IL SENSORE che modello è??? Se è il classico TSSOP34838 o similari i collegamenti sono (visti dalla faccia con la protuberanza):
pin 1 = uscita
pin 2 = GND
pin 3 - R da 100ohm - 5V
Tra pin 3 e pin 2 devi mettere un C elettrolitico da minimo 4,7µF a massimo 47µF col + sul 3 e - sul 2
La foto del LED o quello che è guardala tu e dimmi se ti pare possibile capirci qualcosa.
Ho capito che è iniziata un'altra nottata :fearful:

La foto del led l'ho fatta apposta così per far vedere all'interno che non c'è la tipica bandierina XD ... io la capisco ... :expressionless:
Comunque lo so che il ricevitore ha i pin da destra verso sinistra se lo si guarda dalla facciata con la protuberanza e i pin sono Vcc, GNd e out.
Però quando ho fatto il progetto che con un telecomando facevo suonare un buzzer con varie tonalità non ho usato ne il C ne la R e funzionava comunque ... come mai? X D

ok, comunque sullo schema è sbagliata la numerazione ed io non riesco a leggerti nel pensiero, perlatro sono terrorizzato all'idea di cosa potrei trovare ]:smiley:
Resistenza e condensatore sono ESPRESSAMENTE consigliati dal datasheet, la R fa da limitatore di corrente, il C serve come serbatoio, per assorbire i picchi di assorbimento e per garantire al sensore la stabilità di cui ha bisogno.
Ora diamo per scontato che tu stia usando un LED IR ed un ricevitore entrambi a 38KHz, visto che sigle non ne fornisci, durante il normale funzionamento, quando il sensore riceve il fascio sulla sua uscita devi rilevare uno stato logico LOW, appena il fascio si interrompe lo stato logico passa su HIGH.
Quindi inizia a misurare questa situazione col tester posto tra out e gnd, portata 10V o 20V, quella che hai; il LOW è circa 0V, l'HIGH è circa 5V. Se in condizioni normali non leggi 0V vuol dire che ci sono problemi sui componenti.

Sisi sto usando sia ricevitore che emettitore a 38kHz ovvio xD non l'ho detto perchè pensavo fosse implicito
comunque non ho un tester :\

allora prova ad aggiungere sull'uscita del ricevitore una R da 1kohm ed in serie un LED normale con anodo alla R e catodo a GND, se è acceso è HIGH, se è spento è LOW; però senza tester non vai lontano, è una spesa che devi fare.

Ho usato sia il metodo del prof che il programma di uwe ...
Nel caso di uwe il led rimane spento e a volte lampeggia per pochi millisecondi
Nel caso del prof il led rimane sempre acceso
Quindi le cose combaciano ... è un problema hardware allora :expressionless:

Non ho visto come funziona lo sketch di Uwe quindi non so dirti se deve andare come dici.
Se è sempre acceso vuol dire che o il LED o il sensore non stanno lavorando correttamente.
Hai controllato se i LED sta lavorando, guardandolo direttamente con una fotocamera? Dovresti vedere una luce non fortissima, di colore bianco o rosa.

si il led emette una piccola luce bianca, lo controllo ad ogni prova

ma se io ti allego una mia foto in ginocchio, che dici, me lo faresti il miracolo di darmi la sigla e magari anche una foto seria del sensore ricevitore? (terza ed ultima volta che te lo chiedo...)

sto forum è diventato troppo lento >_<
Ora carico le immagini su un sito di host dato che non me le fa mettere

e' stato l'unico modo per metterle ... non me ne faceva allegare nemmeno una alla volta :expressionless:

toti94:
e' stato l'unico modo per metterle ... non me ne faceva allegare nemmeno una alla volta smiley-neutral

forse perché sono troppo grandi.
Ciao Uwe