Ciao a tutti, ho comprato un sensore ottico a forcella che mi serve per il progetto che voglio portare alla maturità. Ho fatto i vari collegamenti e ho testato il suo funzionamento.
Praticamente ho aggiunto un led e se metto qualcosa tra emettitore e ricevitore il led si deve accendere.
Il codice che ho utilizzato è questo:
int Led = 8;
int Receiver = A0;
void setup() {
Serial.begin(9600);
pinMode(Receiver,INPUT);
pinMode(Led,OUTPUT);
}
void loop() {
int valSensore = analogRead(Receiver);
digitalWrite(Led,LOW);
Serial.println(valSensore);
if (valSensore < 700) {
digitalWrite(Led,HIGH);
delay(100);
}
delay(100);
}
Il mio problema è che ogni volta che apro il monitor seriale per vedere che valore legge come primo, questo valore cambia sempre (ogni volta che lo apro).
Poi se metto qualcosa in mezzo il valore cambia di poco e se lo rimuovo (l oggetto) il valore che ho in uscita resta presocchè lo stesso di quello con l oggetto in mezzo.
Potete aiutarmi?
posta il datasheet del sensore, ma penso che il tuo sensore sia un semplice on off e non restituisce valori analogici
questo è il mio sensore ottico.
Ok.... un semplice diodo+fototransistor, come dice Stefa è abbastanza ON/OFF
dicci anche come l'hai collegato e siamo a posto 
Come l' hai collegato e che resistenze hai usato?
Ciao Uwe
si quei dispositivi si usano ON/OFF non in "analogico" quindi gia parti con il piede sbagliato nel programma 
Questo è come l ho collegato.
Ho utilizzato come resistenze :
-in uscita dall emettitore due resistenze in parallelo da 100 ohm ;
- in uscita dal ricevitore ho messo una resistenza da 100 ohm;
- per il led una resistenza da 220 ohm.
Mhhhh.... non mi convince. L'uso è digitale quindi in emissione 220 può andare anche se 330 va meglio. In uscita emettitore a massa e collettore sull' ingresso digitale con resistenza di pull-up attiva e sei a posto...... Perché hai fatto uno stadio di ingresso analogico, c'è un motivo?
Ho rifatto come mi avete detto voi e quindi ho usato un pin digitale (naturalmente ho rifatto il programma)
int pinLed = 8;
int receiver = 9;
int valSens = 0;
void setup() {
Serial.begin(9600);
pinMode( receiver,INPUT );
pinMode( pinLed,OUTPUT );
digitalWrite( receiver,LOW );
digitalWrite( pinLed,LOW );
Serial.println( "Fine Setup" );
}
void loop() {
valSens = digitalRead (receiver);
if ( valSens == HIGH ) {
digitalWrite( pinLed,LOW );
Serial.println ( "1");
delay( 1000 );
}
else {
digitalWrite( pinLed, HIGH );
Serial.println ( "2");
delay( 1000 );
}
delay( 100 );
}
ora pero' continua a dirmi sempre che è LOW nonostante io metto qualcosa davanti oppure no.
certo che se metti due resistenze da 100 Ohm in parallelo ( = 50 Ohm ) sul led, gli mandi 75mA.... e rischi che sia saltato, visto che accetta al max 60mA
Comunque il collegamento correto è questo

Sul led ho messo una resistenza da 220 ohm.
Il collegamento è uguale a quello che mi hai mandato ma continua a non andare nemmeno col programma nuovo. Cosa ho sbagliato?
Ciao, se non hai messo la resistenza tra l'ingresso di arduino e +5 (4.7/10K, come ha scritto Brunello) nel setup non devi mettere
digitalWrite( receiver,LOW );
ma
digitalWrite( receiver,HIGH);
così la resistenza di pull-up viene collegata dal microporcessore ed il ricevitore del fotoaccoppiatore può lavorare.
Paulus, probabilmente gli serve per avere un riscontro rassicurante 