Ciao a tutti, sto cercando di far funzionare questo fotointerruttore HY810H con un Arduino Nano seguendo lo schema in allegato ma non mi funziona...
Il codice è un semplice analogRead del pin A0...
Con il resistore da 10k mi restituisce sempre 0... senza sempre un valore intorno al 1022... ma passando qualcosa nel HY810H non succede nulla...
qualcuno sa dirmi dove sbaglio?
Grazie, ciao
La resistenza da 10 kOhm va posta IN SERIE al filo rosso che va dal 5V al collettore del sensore. Il segnale per l'analogRead lo prendi direttamente dal collettore.
Ciao,
P.
Grazie P... intendevi come in allegato?
No.
Il HY810H va collegato così: Emettitore => GND, Collettore => resistore 10k => 5V, A0 => Collettore
Ciao,
P.
Ok allora adesso dovrebbe essere giusto
Grazie per la pazienza e dispobilità
Niente, così il valore di A0 resta sempre a 1023 (a volte cala di 1) e passando qualcosa nel sensore non succede niente...
Il HY810H è composto da un diodo emettitore e da un transistor a cui manca la base, sostituita da una parte fotosensibile.
Il diodo ha una sua polarità. Per accenderlo occorre collegarlo correttamente. Per vedere se è collegato correttamente basta misurare la tensione ai suoi capi. Se è minore di 2V il diodo è collegato correttamente, se è circa 5V il diodo è collegato all'inverso.
Il transistor è un NPN e ha un collettore che deve essere più positivo dell'emettitore. Quindi va collegato al +5V con una resistenza per limitare la corrente. Se connetti il collettore al +5V e l'emettitore al GND direttamente rischi di bruciare il componente.
Qui trovi un tutorial. Il segnale è preso dall'emettitore, anzichè dal collettore, e la resistenza è da 56k anziché da 10k. Prova lo schema con la resistenza da 10k.
Ciao,
P.
No non funziona... o sono tutti difettosi o c'è qualcosa che non va... provo stasera per l'ultima volta con il tester poi butto tutto e magari cambio sensore
Grazie, ciao!
Non arrenderti!
La ricerca del guasto insegna molto.
Prima prova il diodo. Misura la corrente con un milliamperometro IN SERIE, mi raccomando. Dal datasheet consigliano 20mA quindi ci vuole una resistenza da 220 Ohm. Il massimo assoluto sono 50mA (da NON raggiungere) con una resistenza da 100 Ohm.
Se il diodo funziona, prova il transistor, sempre con un mulliamperometro IN SERIE. Sempre dal datasheet la corrente di collettore MASSIMA è data per 20mA. Prova con una una resistenza da 10kOhm che farebbe scorrere una corrente da 0,5mA quando il fototransistor è illuminato. Se il tuo tester ha qualche difficoltà a misurare quella corrente puoi scendere a 470 Ohm e misurare una corrente di circa 10mA.
Fai queste prove e troverai il guasto.
Ciao,
P.
Ti ringrazio della pazienza... ma io non ho un milliamperometro... purtroppo sono più programmatore che elettronico
Ho visto che coprendo il sensore con la mano, i valori (anche se erano sul 20) si abbassavano... così ho puntato una luce sul sensore e sono arrivato a 200 di lettura e mettendo qualcosa davanti al sensore arrivavano a meno di 10... quindi potrebbe essere il diodo che non funziona... ma possibile che non funzioni in tutti e 5 i sensori che ho acquistato?
Aggiornamento:
forse ho trovato... ho invertito la polarità dell'alimentazione del diodo e sembra funzionare... probabilmente hanno messo il simbolo sulla plastica al contrario :? Mi è già capitato anche con una striscia led cinese... li ammazzerei
Comprati un tester. L'investimento non è eccessivo. Li trovi a meno di 4 euro.
Ciao,
P.
Il tester ce l'ho ma non ero a casa quindi non riuscivo a provare... ma fortunatamente ho risolto lo stesso
Ciao
Aggiornamento:
Ciao a tutti... ora il circuito funziona perfettamente, l'unico problema è che io devo contare il passaggio di pallini da softair. Se passo con il dito fra il sensore lo rileva, ma il pallino che viaggia più veloce non riesce a vederlo.
Potrebbe essere che il sensore non rilevi il pallino o arduino non sia abbastanza veloce con l'analogRead()? Sapete darmi qualche suggerimento?
Grazie, ciao
analogRead() ? ? ? :o :o :o ... quel genere di letture va fatto con delle digitalRead(), o leggendo direttamente il PIN della porta o, ancora meglio con impulsi, sempre digitali, su un pin di interrupt ...
La analogRead() è estremamente lenta per sua natura, inoltre, sei sicuro che il "pallino" riesca ad oscurare il sensore ?
Se fai un po' di ricerche qui sul forum, l'utente Etemenanki ha affrontato il problema con altri utenti più di una volta ...
Guglielmo
Si il pallino oscura il sensore... facendolo scivolare dentro al "tubo" che ho fatto con la stampante 3d per le prove lo vede... sparato invece no... forse leggendo il pin digitale funziona e infatti mi ero già appuntato di provarlo stasera
Speriamo sia quello... grazie
Guarda la fig 3 di questo datasheet. Per ottenere il minimo tempo di salita e discesa dell'impulso dovuto al passaggio del pallino devi usare una resistenza da 1 kOhm, fornire 5V di alimentazione (anche dall'Arduino) e far scorrere una corrente di 20mA nel led, il che implica una resistenza da 270 Ohm per una tensione di 5V (anche dall'Arduino). In funzione della velocità del pallino e della sua dimensione puoi calcolare il tempo dell'impulso e vedere se e come catturarlo.
Ciao,
P.
Ok ti ringrazio, stasera provo con queste modifiche e vediamo che succede
Niente da fare... Il digitalRead funziona bene, il sensore va se passo un dito o anche uno stuzzicadenti, ma il pallino sparato non lo rileva...
Ultima prova, mi studio gli interrupt e provo con quello...
Considera che il digitalRead() NON ha memoria di ciò che è accaduto, ma ti dice lo stato del pin nel momento in cui leggi. Ora, quanto dura l'impulso passato dal passaggio del pallino? Lo hai calcolato?
Perché se dura meno del tempo di ciclo in cui tu leggi con digitalRead(), ovviamente difficilmente potrai accorgeti del passaggio ...
Per questo normalmente si usano gli interrupts, perché comunque catturano l'evento, anche molto veloce, in modo indipendente da ciò che sta facendo il programma.
Guglielmo