sensore infrarossi IR38DM.. non riceve..?!

Ciao a tutti, con lo starter kit ho ricevuto questo sensore ifrarossi:

Ora, cercavo di fare qualche esperimento, tipo accendere un semplice led via IR..

Anche se ho collegato i pin come dice il link qui sopra e cioè:

PIN1: OUT= uscita segnale TTL
PIN2: GND= massa, 0
PIN3: Vdd= + 5 Vdc

caricando questo semplice sketch(la libreria l'ho scaricata e installata quinsi si compila senza problemi lo sketch):

#include <IRremote.h>

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

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

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

quando apro il serial monitor non mi esce nessun codice.. cioè è come se non riceve il segnale.

premetto che ho usato ciraca 4 telecomandi.. tra cui uno di una televisione LG, un altro Samsung..

qualche idea in merito?

Grazie a tutti in anticpo..!!

Credo che il problema sia nel fatto che hai la versione dell'IR38DM che lavora ad impulsi.
Ho avuto difficoltà con la mia barriera per questo motivo.
Di norma un TSOP, in assegna di segnale in ingresso ha l'OUT in HIGH, appena riceve un segnale a frequenza 38KHz va in LOW, ovvio che se invii dei "treni", come nel caso del telecomando, il TSOP reagisce di conseguenza.
Alcune versioni di fototransistor invece reagiscono con un semplice impulso, a prescindere dalla durata del segnale; se il tuo IR38DM (i miei venivano proprio da Futura) funziona così temo che il tuo programma non funzioni.

Aggiungo, per completezza di informazioni, che i fototransitor impulsivi si usano in quei circuiti in cui bisogna semplicemente rilevare e NON interpretare la presenza di un segnale infrarosso; pensa p.es. a quelli usati nei sistemi di allarme, rilevano il segnale, mandano l'impulso, scatta l'allarme (poi c'è la logica, ma questo è un altro discorso).

Ti consiglio di provare il TSOP34838, costa poco ed ha una sensibilità eccezionale (stessa pinatura dell'IR38DM)

mmm.. forse allora è proprio questo il problema.. perchè ti spiego subito.. ho trovato in giro un altra libreria: "NECIRrcv.h"
Con essa riesco a captare i segnali di uno dei telecomandi (a dire il vero non ho fatto prove con altri perchè ho visto che mi riconosce questo e ho lasciato).

Insomma con questa libreria ho caricato questo codice:

#include <WProgram.h>
#include <NECIRrcv.h>
#define IRPIN 5    // pin that IR detector is connected to

NECIRrcv ir(IRPIN) ;

void setup()
{
  Serial.begin(9600) ;
  Serial.println("NEC IR code reception") ;
  ir.begin() ;
}

void loop()
{
  unsigned long ircode ;
  
  while (ir.available()) {
    ircode = ir.read() ;
    Serial.print("got code: 0x") ;
    Serial.println(ircode,DEC) ;
  }
}

Effettivamente dal terminale premendo qualsiasi tasto del telecomando mi da un numero diverso (la conversione in decimale l'ho messa io per comodità)

Esempio:
tasto POWER: 64217440
tasto 3: 399761760

Risolto questo ho proseguito nel fare qualche altro tentativo, tipo accendere un led.. caricato il codice.. e funziona, alla pressione del tasto il led si accende.

Ora però.. volevo provare a fare in modo che alla pressione di un tasto parte in loop una funzione che, in modo random mi da diversi colori su un led RGB.

il codice è questo:

#include <WProgram.h>
#include <NECIRrcv.h>
#define IRPIN 5    // sensore IR

NECIRrcv ir(IRPIN) ;

//setto i PIN dell'arduino e altri parametri..
int redLed = 9;
int greenLed = 10;
int blueLed = 11;
int red = 255;
int green = 255;
int blue = 255;


void setup()
{
pinMode(redLed, OUTPUT); 
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
ir.begin() ; //inizializzo IR


}

void loop()
{

unsigned long ircode=0; 
unsigned long aux=0;

//while (ir.available()) 
//{
ircode = ir.read() ; 
aux=(ircode);

if (aux == 64217440) 
{ 
RGBloop(); //richiamo la funzione
}
}


void RGBloop()
{
randomSeed(3);  
int redNew;
int greenNew;
int blueNew;
{
redNew = random(256);
greenNew = random(256);
blueNew = random(256);

analogWrite(redLed, red+(redNew-red));
analogWrite(greenLed, green+(greenNew-green));
analogWrite(blueLed, blue+(blueNew-blue));
}
red = redNew;
green = greenNew;
blue = blueNew;
}

Il problema sta nel fatto che premendo il tasto assegnato, lo sketche entra nel ciclo (perchè il LED RGB si accende), xò poi non continua..cioè si ferma lì, con il led acceso in quella posizione.

Ho provato anche a mettere un controllo di tipo while ma niente.. stessa cosa..
Cioè dovrebbe richiamare sempre la funzione e cambiare colore ma non lo fa!
Quindi a questo punto, sto effettuando un errore di logica nello sketch, oppure il problema sto proprio nel fatto che il ricevitore IR funziona ad impulsi?!

Grazie mille!!

Passo ai softwaristi :slight_smile:

Avevi già visto questo ?

http://www.ladyada.net/learn/sensors/ir.html

non so se può esserti d'aiuto.

Ciao