Go Down

Topic: [RISOLTO]Infrarossi (Read 947 times) previous topic - next topic

pres961

Apr 05, 2013, 09:43 pm Last Edit: Apr 05, 2013, 10:50 pm by pres961 Reason: 1
Salve ragazzi è diversi giorno che cerco in rete ma tutti i collegamenti che trovo non funzionano. Ho un led IR ed un ricevitore TSOP 4838. Il mio sketch dovrebbe funzionare che all'interrompere del fascio infrarosso dovrebbe incrementarsi il contatore. Allego qua sotto il codice, così avete un idea più chiara inoltre chiedo di nuovo consiglio sui collegamenti perchè davvero non riesco a farlo funzionare. Help Me
Code: [Select]
/**
* /@author Christian Berti
* /rilevatore di ingressi PROTOTIPO
**/
int TxPin=6;//pin trasmissione seriale display LCD
const char tras= 'h';
#include <SoftwareSerial.h> //importo libreria seriale per display LCD
SoftwareSerial mySerial = SoftwareSerial(255,TxPin);//dichiaro un oggetto della libreria per display LCD
int FotoPin = 1;//dichiarazione attributo per memorizzazione lettura fotoresistore
int ledpin=13; //pin led riflettore fascio luminoso
int FotoValue;//attributo in cui viene memorizzato valore letto da fotoresistore
int ricevitoreIR=8;//pin led segnalatore passaggio
int contatore;//attributo dedito al conteggio
char valbutton;//dichiarazione attributo per memorizzazione stato interruttore
int val=0;//attributo in cui viene memorizzato valore letto da interruttore
void setup() {//dichiarazione utilizzo pin
 pinMode(ledpin,OUTPUT); //dichiarazione tipo di pin
 OCR2A = 211;
 TCCR2A = 0b01000011;
 TCCR2B = 0b00001001;
 Serial.begin(9600);
 pinMode(ricevitoreIR, INPUT);//dichiarazione tipo di pin
 pinMode (TxPin, OUTPUT);//dichiarazione tipo di pin
 mySerial.begin(9600);//dichiarazione velocità aggiornamento LCD
 delay(100);
 mySerial.write(12);//pulizia LCD

}
void loop() {
 valbutton= Serial.read();//associo lettura digitale all'attributo
 digitalWrite(ledpin,HIGH);//accende il led riflettore
 FotoValue = digitalRead(ricevitoreIR);// assegna all'attributo il valore letto
 if (valbutton==tras){ //confronto lettura interruttore con valore HIGH
   contatore=0;//azzero contatore
   mySerial.println("Sistema Azzerato");//stampa su LCD
   delay (2000);//ritarda di 2 secondi
 }
 else{ //confronto lettura interruttore con valore LOW

   if (FotoValue==LOW){//confronto attributo con soglia prefissata
     mySerial.write(12);//pulizia LCD
     Serial.println(FotoValue);// stampa su seriale il valore del fotoresistore
     contatore++;//incremente l'attributo
     mySerial.print("Persone: ");//stampa su LCD
     mySerial.println(contatore);//stampa su seriale l'attributo
     delay(1500);//aspetta un secondo e mezzo
   }
   else{
     delay(500);//aspetta mezzo secondo e riesegue la lettura del fotoresistore
   }
 }
}



Michele Menniti

Devi capire come funziona il tuo TSOP, se è impulsivo o a tempo: nel primo caso quando si interrompe il fascio dà un solo rapido impulso, nel secondo caso invece resta su HIGH per tutto il tempo dell'interruzione. Tutti quei delay non ti aiutano sicuro, il modo più efficace è collegare il TSOP ad un pin interrupt ed è fatta.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

pres961

Ed il led emittente va collegato con una resistenza in seria da 100 ohm? La modulazione a 38 KHz è eseguita nel mio sketch?

Michele Menniti


Ed il led emittente va collegato con una resistenza in seria da 100 ohm? La modulazione a 38 KHz è eseguita nel mio sketch?

la R da 100 ohm è indispensabile, lo sketch per la parte 38kHz sembra a posto, solo che non credo tu possa usare il pin 13, devi usare uno di quelli collegati al TIMER, non ricordo se è il 3 o l'11, controlla dove hai preso lo sketch, inoltre ricordo che OCR2A = 211; era l'ultima delle tre righe di istruzione, ma onestamente non so se ha importanza, ora passa un capo e te lo spiegherà meglio...
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

pres961

Ok per quanto riguarda il ricevitore ho usato il piedino 2 di arduino utilizzando un interrupt

Michele Menniti


Ok per quanto riguarda il ricevitore ho usato il piedino 2 di arduino utilizzando un interrupt

chiaramente ti devi costruire una routine con attachInterrupt, ecc.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

pres961

Esattamente grazie ho risolto tutti i miei problemi grazie mille!

Michele Menniti

Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy