sensore come interrupt e fotoaccopiatore

ciao
circuito allegato quello con fotoaccopiatore, non funziona +, ho letto riga per riga il datasheet, ma mi sembra a posto, uso un 4n32 con R2 3300 ohm R3 10000 ohm niente diodo D2, il sensore induttivo è alimentato a 12 vdc come pure gli arduini, la tensione tra R2 lato fotoacc e GND vale 1.09vdc quando il sensore non è eccitato, se collego manualmente arduino input (interrupt) ad arduino 5vdc il programma funziona, inoltre se misuro la tensione tra R3 lato fotoaccopiatore e GND misuro 5vdc o 0.7vdc se il sensore è eccitato oppure no, se collego invece arduino input alla resistenza R3 lato fotoaccopiatore e uso il sensore non ottengo nessun risultato,
quello che non mi spiego è che il tutto funzionava, qualcuno ha qualche suggerimento

questi sono i codici
TX

#include <LiquidCrystal.h>  // include the library code
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins


int statosensore1=LOW;  //stato iniziale del sensore
//int count=0;
//int i=1;
//int outpin=13;
void setup()
{
   lcd.begin(16, 2);  // set up the LCD's number of columns and rows:
  Serial.begin(9600); // initialize serial communication:
  lcd.clear();
  delay(1000);
// pinMode(outpin,OUTPUT);
  attachInterrupt(1,sensore1,FALLING); //sensore induttivo collegato al pin 3
}

void loop()
{
   if (statosensore1==HIGH)
   {
      statosensore1=LOW;
//     digitalWrite(outpin,HIGH); 

    Serial.print(1); //trasmesso attraverso xbee ASCII=49

 //    delay(100);
 //    digitalWrite(outpin,LOW);  
    }
}

//funzione richiamata da interrupt

void sensore1() //sul pin 3
{
  statosensore1=HIGH;
}

RX

/*
modulo ricevitore xbee RX
  
 An example of using the Arduino board+xbee to receive data from the 
 computer another arduino board+xbee  
 
 This example code is in the public domain.

 This sketch prints i dati ricevuti to the LCD
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
  */

#include <LiquidCrystal.h>  // include the library code
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins
int incomingByte=0;
int cont=0;

void setup() 
{
  lcd.begin(16, 2);  // set up the LCD's number of columns and rows:
  Serial.begin(9600); // initialize serial communication:
  lcd.clear();

  delay(2000);
  
    lcd.print("pronto");
}

void loop() 
{
 if (Serial.available() > 0)  // see if there's incoming serial data:
  {  
 incomingByte=Serial.read();
     if (incomingByte=49)
     {
cont++;
 lcd.setCursor(0,1);
 lcd.print(cont);
//  lcd.print(incomingByte);
//		Serial.print("I received: ");
		Serial.println(incomingByte);
               Serial.println(cont);
//Serial.print("\t");
//Serial.print(incomingByte, BYTE);
//Serial.print("\t");
///Serial.println(incomingByte, BIN);
//Serial.flush();
   }
  }
}

grazie
stefano

Level_shifting_4_arduino.pdf (25 KB)

4n33.pdf (123 KB)

1mA é molto poco per pilotare il LED del Optocopler (R2 =3,3kOhm). Metti una resistenza che fa circolare ca 10mA. Ciao Uwe

ciao dopo diverse prove senza risultati, ma quello che non capisco è che io misuro, 5vdc sensore eccitato e 0vdc sensore diseccitato, tra la resistenza R3 lato fotoaccopiatore e GND senza collegare il pin di arduino input (pin3), io ne deduco che il collegamento del sensore è corretta e il fotoaccopiatore funziona, non comprendo come mai arduino sul pin 3 non rileva la variazione di tensione, ho cambiato anche la scheda arduino ma senza risultati

grazie stefano

ciao
dopo diverse prove senza risultati, ma quello che non capisco è che io misuro, 5vdc sensore eccitato e 0vdc sensore diseccitato, tra la resistenza R3 lato fotoaccopiatore e GND senza collegare il pin di arduino input (pin3), io ne deduco che il collegamento del sensore è corretta e il fotoaccopiatore funziona, non comprendo come mai arduino sul pin 3 non rileva la variazione di tensione, ho cambiato anche la scheda arduino ma senza risultati

Ciao stefa24, giuro ho riletto un paio di volte ed ogni volta sempre più confuso.
Il tuo sensore passa da uno stato all’altro in questo modo (credo):
ECCITATO : Uscita 12 Vdc
NON ECCITATO : Uscita < 1.1 Vdc

Con questa uscita la connetti al circuito di ingresso dell’optoisolatore.

Lo stato di Uscita dell’optoisolatore segue lo stato inverso all’ingresso.
Se OptoInput = 12Vdc allora OptoOut = ~0.7 Vdc. (In=High, Out=Low)
Se OptoInput ~1Vdc allora OptoOut = 5vdc (In=Low, Out=High)

L’interrupt falling scatta solo durante il fronte di discesa del segnale, cioè dal passaggio da High a Low, quindi nel tuo
caso è corretto perchè sul pin 3 hai normalmente uno stato High, quando si eccita il sensore dovrebbe scattare l’interrupt ed eseguire la funzione agganciata “sensore1”

Ma questo dici che non lo fà, se provi a dare un tensione High (5Vdc) al pin 3 e poi uno stato Low allo stesso pin, cosa accade?
L’interrupt scatta, magari fai accendere un led quando entra nella funzione sensore1.

Vedo che il pin 3 non lo hai impostato come input, questo dovrebbe farlo la funzione Attach… per te.

Prova a ricontrollare con calma e a riportare più dati che commenti.

Ciao.

ciao
per il sensore
tra 2-3 sensore eccitato 0.0vdc led acceso sul sensore
tra 2-3 sensore diseccitato 11.9vdc led spento sul sensore

per il fotoaccopiatore
tra B-GND sensore eccitato 0.0vdc led acceso sul sensore
tra B-GND sensore diseccitato 1.06 vdc led spento sul sensore

tra A-GND sensore eccitato 5.01vdc led acceso sul sensore
tra A-GND sensore diseccitato 0.74 vdc led spento sul sensore

grazie
stefano

ciao

Ma questo dici che non lo fà, se provi a dare un tensione High (5Vdc) al pin 3 e poi uno stato Low allo stesso pin, cosa accade?

ho tolto i commenti alle definizioni del led 13 sul codice TX e si accenda quando metto HIGH al pin 3

grazie stefano

ciao
ho corretto lo schema del sensore induttivo NPN

grazie
stefano

ciao
per il sensore
tra 2-3 sensore eccitato 0.0vdc led acceso sul sensore
tra 2-3 sensore diseccitato 11.9vdc led spento sul sensore

Quindi il sensore ha logica inversa giusto?
Allora perchè usare un’opto? potresti anche usare una R da 2.2k e uno zener da 4.7 volts per ridurre la tensione massima a ~5vdc.

tra B-GND sensore diseccitato 1.06 vdc led spento sul sensore

La tensione di ~1vdc sul led mi sembra pochina, come ha detto uwe potrebbe essere insufficiente la corrente che scorre nel led che si attesta a ~3.3mA se hai usato una R da 3300 ohm come presumo. Portala a 1000 ohm.

Tutto questo suppone che le GND siano connesse insieme altrimenti non ottieni il risultato sperato, nel caso del opto devi collegare GND con GND di arduino.

Ciao.

ciao ho cambiato R2 da 3300 con una da 1000 la corrente che ora circola è di circa 10ma i GND sono in comune, ma quello che assolutamente non capisco è che lo schema con R2 3300ohm, R3 10000 ohm funziona correttamente su una altra breadbord con lo stesso sensore per una altra applicazione, in questa ho replicato esattamente ma ha smesso improvvisamente di funzionare, aspetto dei nuovi 4n33

grazie stefano

ciao ho risolto si trattava di un conflitto tra il pin 2 e 3 di LiquidCrystal lcd(12, 11, 5, 4, 3, 2) e i pin 2 e 3 dell'interrupt

grazie stefano