Pages: [1] 2 3 4   Go Down
Author Topic: Problema con Barriera IR  (Read 3275 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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:
Code:
#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
 
}
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quelle tre righe (copyright Astrobeed smiley) 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??
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima di tutto mi scuso per aver sbagliato sezione, non me ne ero accorto!
In effetti prof. ha ragione, stavo decodificando il nulla smiley-lol
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 smiley-lol 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
« Last Edit: November 17, 2012, 08:00:01 pm by toti94 » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20166
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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); 
}
« Last Edit: November 20, 2012, 03:19:06 pm by uwefed » Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in realtà il codice vorrei scriverlo io per capire come funziona smiley-lol
Quel codice postato da uwe l'ho capito ma vorrei prima risolvere il mio ....
Code:
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
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


* barr_IR.jpg (49.32 KB, 1371x883 - viewed 31 times.)

* 2012-11-17 23-43-02.559.jpg (21.64 KB, 417x269 - viewed 20 times.)
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-eek-blue

Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La foto del led l'ho fatta apposta così per far vedere all'interno che non c'è la tipica bandierina smiley-lol ... io la capisco ... smiley-neutral
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
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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-twist
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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-neutral
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11973
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1] 2 3 4   Go Up
Jump to: