Sensore IR stampante HP

Buongiorno a tutti

Smontando una vecchia stampante che avevo in casa ho trovato un sensore, mi sono informato in questo forum leggendo tutti i precedenti aricoli e ho capito che è un sensore ad infrarossi che rileva un stato a due variabili. Sensore libero / sensore interrotto.

Purtroppo sul forum si tratta solo sensori a 4 pin liberi ma il mio è montato su una schedina che trasforma i 4 pin in tre connettori.

Ho a disposizione quindi tre cavi ed ho immaginato che due siano i due poli mentre il terzo sia il segnale.
L'idea è quella di capirne il funzionamento cosi ho scritto questo sketch che di default accende un led collegato direttamente sulla scheda e, se si interpone qualcosa nel sensore dovrebbe spegnere il led. Ma il tutto non funziona. Qualcuno può darmi una mano a capire?
ve ne sarei molto grato

allego quanto più possibile per rendere chiara la situazione.

Riccardo

int ir = 2;
int ledPin = 13;

void setup() {
  pinMode(ir, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(ir);
  if (value) {
   Serial.println("Aperto");
   digitalWrite(ledPin, HIGH);
  } else {
   Serial.println("Chiuso");
   digitalWrite(ledPin, LOW);
  }
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Quello é un semplice optokoppler a forcella. C'e un LED e un fototransistore. Un polo el LED e del Transistore sono collegati. (non so dirti se la massa o il positivo)
Devi alimentare il LED con una resistenza (ca 470 Ohm) e mettere una resistenza in serie al fototransistore per leggere il cambio di stato.
Il circuito é errato: mancano dei ponti sulla breadbord; mancala resistenza sul transistore e manca la restitenza sul LED collegato al pin 13.

Ciao Uwe

nid69ita:
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Grazie. Mi sono presentato e ho preso visione del regolamento. Ho trovato davvero utili i tuoi collegamenti.

uwefed:
Quello é un semplice optokoppler a forcella. C'e un LED e un fototransistore. Un polo el LED e del Transistore sono collegati. (non so dirti se la massa o il positivo)
Devi alimentare il LED con una resistenza (ca 470 Ohm) e mettere una resistenza in serie al fototransistore per leggere il cambio di stato.
Il circuito é errato: mancano dei ponti sulla breadbord; mancala resistenza sul transistore e manca la restitenza sul LED collegato al pin 13.

Ciao Uwe

Seguendo le tue indicazioni, e sulla base dei link di Nid69ita Ho creato questo nuovo circuito, collegando la resistenza da 470 Ohm al fototransistore e uno al led della medesima resistenza.
Guardando i collegamenti sulla schedina ho notato che il verde collega in effetti due dei quattro pin mentre il nero e il giallo uno solo. Dato che quello che ne collega due deve essere il + o il - ho ipotizzato, data l'esistenza di un nero che che il verde sia il polo positivo mentre il nero il negativo e il giallo il segnale.
Utilizzando questo nuovo codice sul monitor seriale mi appare un valore che varia da 350 a 380 indipendentemente dal fatto che il flusso sia interrotto o meno.

Dove sbaglio?

int ir = 2;
int ledPin = 13;

void setup() {
  pinMode(ir, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(ir);
  if (value) {
   Serial.println("Aperto  ");
   Serial.print(value);
   digitalWrite(ledPin, HIGH);
  } else {
   Serial.println("Chiuso  ");
   Serial.print(value);
   digitalWrite(ledPin, LOW);
  }
}

Di solito (non sempre, ma nel 99% dei casi si) quelle forcelle usano un fototransistor, come rilevatore, con l'emettitore collegato a massa (che e' il filo che collega i due pin insieme) ... quindi quello connesso al led va al positivo con una resistenza in serie, mentre quello connesso al fototransistor va collegato all'ingresso, con una resistenza di pullup verso il positivo (perche' il fototransistor chiude verso massa quando e' illuminato, quindi quando non c'e' nulla in mezzo)

Usa una resistenza da 10K o simile fra l'ingresso ed il positivo ... e per interrompere il raggio, usa qualcosa che blocchi gli infrarossi (metallo o cartoncino o plastica opaca nera ... alcune plastiche che a noi sembrano scure, sono trasparenti per gli infrarossi, quindi e' da provare)

Dalle foto, il lato con sopra la E dovrebbe essere il led, e quello con sopra la S dovrebbe essere il fototransistor (se e' una forcella standard) ... sempre ad occhio, il verde dovrebbe essere la massa, il giallo il led, ed il nero il fototransistor ...

Etemenanki:
Di solito (non sempre, ma nel 99% dei casi si) quelle forcelle usano un fototransistor, come rilevatore, con l'emettitore collegato a massa (che e' il filo che collega i due pin insieme) ... quindi quello connesso al led va al positivo con una resistenza in serie, mentre quello connesso al fototransistor va collegato all'ingresso, con una resistenza di pullup verso il positivo (perche' il fototransistor chiude verso massa quando e' illuminato, quindi quando non c'e' nulla in mezzo)

Usa una resistenza da 10K o simile fra l'ingresso ed il positivo ... e per interrompere il raggio, usa qualcosa che blocchi gli infrarossi (metallo o cartoncino o plastica opaca nera ... alcune plastiche che a noi sembrano scure, sono trasparenti per gli infrarossi, quindi e' da provare)

Dalle foto, il lato con sopra la E dovrebbe essere il led, e quello con sopra la S dovrebbe essere il fototransistor (se e' una forcella standard) ... sempre ad occhio, il verde dovrebbe essere la massa, il giallo il led, ed il nero il fototransistor ...

Grazie per la tua risposta.
Ho provato a fare come mi dici (almeno credo di aver fatto ciò che mi dici) ma ancora non mi funziona.
Il monitor seriale mi da valori variabili tra 350 e 450 indipendentemente dal fatto che il fascio sia interrotto o meno. Allego il circuito. è corretto?
Per il led ho usato resistenze da 470 Ohm mentre per il fototransistor una da 10k.
Nello specifico ho collegato quella da 10k in serie al nero e quella da 470 in serie al giallo.
Per interrompere il fascio ho usato plastica nera spessa.

int ir = 7;
int ledPin = 13;

void setup() {
  pinMode(ir, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(ir);
  if (value) {
   Serial.println("Aperto  ");
   Serial.print(value);
   digitalWrite(ledPin, HIGH);
  } else {
   Serial.println("Chiuso  ");
   Serial.print(value);
   digitalWrite(ledPin, LOW);
  }
  delay (2000);
}

indipendentemente dal collegamento ( non l'ho guardato ) perche' ti ostini a fare un AnalogRead su un pin digitale ?

Brunello:
indipendentemente dal collegamento ( non l'ho guardato ) perche' ti ostini a fare un AnalogRead su un pin digitale ?

Errore nato dal fatto che inizialmente leggevo il segnale da A0

Brunello:
indipendentemente dal collegamento ( non l'ho guardato ) perche' ti ostini a fare un AnalogRead su un pin digitale ?

Se ha un Arduino UNO con controler SMD allora legge l' entrata dell'entrata analogica A7 e percui valori casuali perché non connesso a niente.
Ciao Uwe

delta12:
... quella da 10k in serie al nero ...

E no ... quella da 10K e' di pull-up, non va in serie ... collega la resistenza fra il pin di ingresso ed il positivo, ed il nero direttamente allo stesso pin ...

La resistenza tiene un potenziale alto all'ingresso finche' il fototransistor non viene illuminato e lo porta basso ... o come nekl tuo caso, il transistor e' sempre illuminato e tiene basso l'ingresso, mentre quando interrompi il raggio si apre, e la resistenza lo tira a livello alto ...

E quei sensori non sono analogici, puoi leggerli come 0 o 1 con un'ingresso digitale, non sono previsti per funzionare come uscita analogica ...

collega la resistenza fra il pin di ingresso ed il positivo, ed il nero direttamente allo stesso pin ...

Ma non è quello che ho fatto nell'ultimo schema?

Mi da fisso valore 1

Allora c'e' qualcosa che non quadra nel sensore ... non e' che prima, collegando il fototransistor come led, si sia strinato ? ed il led e' ancora buono ?

Per vedere se il led e' ancora buono ti servirebbe una webcam economica, o una macchina fotografica digitale economica (i led infrarossi non sono visibili ad occhio, ma le telecamere, se non hanno l'obbiettivo filtrato, li vedono come luce bianco/rosa, ed in quelle economiche e' difficile che ci sia un filtro anti-infrarossi nell'obbiettivo)

Per controllare il fototransistor dovrebbe bastare una pila (lampadina a filamento, non led) ... collegalo come nello schema (senza collegare il led), ma con il tester al posto di Arduino, e vedi se illuminandolo in mezzo cambia qualcosa ...

Può essere che il sensore è influenzato da luci esterne?

Solo se e' illuminato in pieno da vicino, con una lampadina a filamento o alogena ... in caso contrario il corpo in plastica nera e le feritoie strette di schermatura di solito sono sufficenti ad evitare l'influenza della luce ambiente ...

A me è capitato che il sole che batteva su un mouse bianco, di quelli antichi con la pallina, mi accecasse completamente i sensori. Il sole entrava da una finestra.

Questo sensore derivava da una stampante funzionate che ho smontato senza danneggiarne le parti. Così, non avendo gli accessori richiesti per verificare il sensore l'ho semplicemente rimontata e in effetti il sensore non è più funzionante. Devo averlo fulminato con i vari test.
Piccolo OT. Possi simulare la presenza del sensore collegando con un jumper maschio femmina il pin che ospitava il cavo nero del segnale a massa e a 3,5V? (intendo ovviamente alla scheda madre della stampante HP)