Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« on: November 17, 2012, 06:48:47 pm » |
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 }
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #1 on: November 17, 2012, 06:57:55 pm » |
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??
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #2 on: November 17, 2012, 07:19:12 pm » |
Prima di tutto mi scuso per aver sbagliato sezione, non me ne ero accorto! In effetti prof. ha ragione, stavo decodificando il nulla  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  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
Brattain Member
Karma: 162
Posts: 15742
+39 349 2158303
|
 |
« Reply #3 on: November 17, 2012, 09:08:01 pm » |
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); }
|
|
|
|
« Last Edit: November 20, 2012, 03:19:06 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #4 on: November 18, 2012, 10:08:56 am » |
in realtà il codice vorrei scriverlo io per capire come funziona  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
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #5 on: November 18, 2012, 01:52:33 pm » |
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
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #6 on: November 18, 2012, 02:09:08 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #7 on: November 18, 2012, 02:38:21 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #8 on: November 18, 2012, 02:47:22 pm » |
La foto del led l'ho fatta apposta così per far vedere all'interno che non c'è la tipica bandierina  ... io la capisco ...  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
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #9 on: November 18, 2012, 03:10:59 pm » |
ok, comunque sullo schema è sbagliata la numerazione ed io non riesco a leggerti nel pensiero, perlatro sono terrorizzato all'idea di cosa potrei trovare  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
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #10 on: November 18, 2012, 03:51:39 pm » |
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
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #11 on: November 18, 2012, 04:25:22 pm » |
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
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #12 on: November 18, 2012, 04:53:10 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10280
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #13 on: November 18, 2012, 05:58:09 pm » |
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
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 343
|
 |
« Reply #14 on: November 18, 2012, 06:32:51 pm » |
si il led emette una piccola luce bianca, lo controllo ad ogni prova
|
|
|
|
|
Logged
|
|
|
|
|
|