Realizzazione circuito Sharp DN7C3CA006

Buongiorno, mi sto approcciando al mondo Arduino e sto realizzando un piccolo circuito per poter rilevare i livelli di pm10 in un ambiente.

Ho scelto il sensore Sharp DN7C3CA006 (le specifiche tecniche sono disponibili qui: http://media.digikey.com/pdf/Data%20Sheets/Sharp%20PDFs/DN7C3CA006_Spec.pdf)

Tramite alcune ricerche ho trovato che un altro utente aveva già provato a realizzare un circuito ma poi non ha più dato seguito al suo thread. (Sharp dust sensor project, help - Project Guidance - Arduino Forum)

Innanzi tutto volevo capire se lo schema allegato rispecchia le specifiche tecniche di Sharp pg.7 del PDF (a mio parere sì) e se era possibile utilizzare il Transistor Mosfer (https://www.arduino.cc/documents/datasheets/MosfetTransistor.pdf)
al posto di quello indicato nello schema P2N2222a "http://web.mit.edu/6.131/www/document/p2n2222a.pdf)

Grazie mille.

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Non vedo perché dovresti usare un MOSFET, visto che la corrente necessaria al FAN è di soli 140mA.

Comunque puoi usare un MOSFET N a bassa potenza tipo BS170, inserendo sul gate sempre il resistore da 330 ohm.

Se invece vuoi usare un transistor, puoi usare il classico NPN BC337.

Per sicurezza, aggiungi un diodo 1N4148 oppure 1N4007 in antiparellelo al FAN.

gpb01:
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Ciao Guglielmo e grazie, ho scritto una breve presentazione. Se avete domande ben venga.
Ho preso anche atto del vostro regolamento con una rapida lettura.

Buona giornata.

Annuncio che l'hardware è pronto, ringrazio @cyberhs per il contributo. Ora passerò al codice e vi terrò informati sullo svolgimento.

cyberhs:
Non vedo perché dovresti usare un MOSFET, visto che la corrente necessaria al FAN è di soli 140mA.

Comunque puoi usare un MOSFET N a bassa potenza tipo BS170, inserendo sul gate sempre il resistore da 330 ohm.

Se invece vuoi usare un transistor, puoi usare il classico NPN BC337.

Per sicurezza, aggiungi un diodo 1N4148 oppure 1N4007 in antiparellelo al FAN.

Ho difficoltà ad interpretare questo schema, non riesco a capire come porre il condensatore e la resistenza al pin 6 nel circuito. Puoi darmi un indizio?

Grazie.

Foto 30-08-16, 23 57 33.jpg

L'alimentazione del dispositivo prevede la connessione di una tensione sino a 7V tra in pin 3 (Vcc) ed il pin 5 (GND).

La stessa tensione può essere utilizzata per alimentare il LED IR interno mediante connessione del pin 6 a Vcc ed il pin 5 a GND mediante il circuito (resistore da 150 ohm + condensatore elettrolitico da 220μF) che hai visto.

Il LED IR, inoltre, richiede un pilotaggio in PWM con periodo di 10mS (+/-1) equivalente a 100Hz ed impulso della durata di di 320μs (+/- 20μs) mediante un MOSFET N in configurazione a source comune oppure un transistor NPN ad emettitore comune applicato sul pin 4.

Se vuoi, posso prepararti uno schema chiarificatore.

Se avessi possibilità di farlo te ne sarei davvero grato.

Ho aggiunto anche dei condensatori sull'alimentazione.

Grazie mille, domattina ti invierò alcune considerazioni!

Ho fatto tutti i collegamenti correttamente (penso però nei tentativi passati di aver "rotto" il sensore").

La lettura dell A0 (pin analog) ora mi restituisce sempre valori vicino allo 0 (<100).

Inizialmente invece mi dava valori attorno al 1500 (Da Datasheet infatti erano corretti)....

vSrawvalue = analogRead(measurePin);

Voltaggio istantaneo rilevato [mV]: 0.00 Voltaggio totale [mV]: 0.00
Tempo rimanente: 15
Voltaggio istantaneo rilevato [mV]: 9.77 Voltaggio totale [mV]: 9.77
Tempo rimanente: 14
Voltaggio istantaneo rilevato [mV]: 92.77 Voltaggio totale [mV]: 102.54
Tempo rimanente: 13
Voltaggio istantaneo rilevato [mV]: 0.00 Voltaggio totale [mV]: 102.54

Può essere che lo abbia cortocircuittato vero? Naturalmente se stacco il cavo dal terzo connettore che va ad A0 i valori tornano sui 1000.

Idee?

Grazie.

Il sensore fornisce un rateo V/100μg/m3 ovvero 1 volt ogni 100μg/m3.

La misura è alterata da temperatura (°C) ed umidità (RH%)

PM2.5 level [μg/m3] = α × β ×(Vo[mV] – Vs[mV])

ove
α = 0.6
β = 1 se RH% <= 50%
β = 1 - 0.01467 * (RH% - 50) se RH% > 50%

Vo = tensione di misura
Vs = tensione di riferimento in ambiente privo di polvere e FAN spento per alcuni minuti

Quindi in ambiente privo di polvere penso sia normale misurare un valore di circa 100mV.

Avevo dimenticato di inserire nello schema il MOSFET per spegnere il FAN durante la calibrazione.

cyberhs:
Il sensore fornisce un rateo V/100μg/m3 ovvero 1 volt ogni 100μg/m3.

La misura è alterata da temperatura (°C) ed umidità (RH%)

PM2.5 level [μg/m3] = α × β ×(Vo[mV] – Vs[mV])

ove
α = 0.6
β = 1 se RH% <= 50%
β = 1 - 0.01467 * (RH% - 50) se RH% > 50%

Vo = tensione di misura
Vs = tensione di riferimento in ambiente privo di polvere e FAN spento per alcuni minuti

Quindi in ambiente privo di polvere penso sia normale misurare un valore di circa 100mV.

La formula che viene applicata per questo tipo di calcolo prevede un α = 0.6 correttivo mentre utilizzo β = 1 visto che ho un ambiente con umidità < 50%.

La misurazione l'ho effettuata su una scrivania e da Data Sheet il valore che dovrei avere in V in un ambiente senza polvere è di V 1.0 MIN e 1.7 MAX quindi 1000 e 1700 mV.

Quindi ipotizzando un ambiente al limite senza polvere dovrei avere un Vs compreso tra 1000 e 1700 (ipotizziamo 1700) e un valore di rilevazione più alto se spostato in un ambiente polveroso.

Quindi:0.6(1800-1600) = 120 (Il datasheet indica che il valore può oscillare tra 25 e 800)

Ipotizzo quindi che tarare ogni volta il sensore con un vS medio dei valori rilevati è insensato. Forse è più opportuno fare una taratura in un ambiente senza polvere leggere il valore medio e salvarlo come costante in maniera tale da spostare poi il dispositivo altrove per delle misurazioni.

In questo caso il sensore da lettura sull'analog mi indica un valore di 0mV quindi mi sembra ci sia qualcosa che chiaramente non funziona perchè al minimo dovrei avere comunque circa 1000mv e non 100mv.

E' un ragionamento corretto o mi manca qualche pezzo?

cyberhs:
Avevo dimenticato di inserire nello schema il MOSFET per spegnere il FAN durante la calibrazione.

Si lo avevo notato ma nessun problema, parte FAN è molto basilare rispetto all'altra.

Se la SHARP avesse inserito delle appication note sarebbe stato molto meglio.

Così com'è, facendo lo slalom tra cinese ed inglese, non è chiarissimo, ma credo che il senso sia quello.

La taratura ovvero il calcolo del Vs, secondo me, va fatto solo una volta e ripetuto sporadicamente.

E' il PWM del LED IR che mi lascia perplesso: ovviamente se lo hanno inserito un motivo c'è, ma mi sfugge la teoria di funzionamento.

Sono d'accordo con te, effettivamente (a prescindere dal fatto che ora la lettura di P0 non superi mai 1000... avrò rotto qualcosa ma ne ho già ordinato un'altro) non riesco a capire come mai nel codice sorgente che avevo trovato inizialmente la persona che lo ha scritto spegnava il LED impostando il digitalWrite ad HIGH e lo accendeva impostandolo a LOW.

Facendo un ulteriore test quando il sensore inizia a leggere se utilizzo LOW per spegnere e HIGH per accendere non riesce ad identificare i valori mentre se li utilizzo al contrario mi restituisce un mV più sensato ma non corretto (< 500).

Hai qualche idea in merito al fatto che LOW e HIGH vengano utilizzati al contrario?

  digitalWrite(ledPower,LOW); // LED ON
  delayMicroseconds(samplingTime); //Attesa di 0.28ms prima della lettura dal Pin 0
 
  voMeasured = analogRead(measurePin); // Lettura valore grezzo del pin 0 (0-1023)
 
  delayMicroseconds(deltaTime); // Attesa di 0.4ms prima di spegnere il LED come da DATA SHEET
  digitalWrite(ledPower,HIGH); // LED OFF

Osservando lo schema di pag. 10, il transistor PNP conduce quando la sua base, collegata al pin 4, è LOW.

Infatti, il grafico più in basso parla di corrente è non di tensione: la corrente è ON quando il pin 4 è LOW.

Quindi nessuna meraviglia.

Ho aggiunto il grafico corretto nello schema.

Grazie per la spiegazione, ora attendo il nuovo sensore e provo nuovamente ad effettuare alcune rilevazioni, speriamo vada bene il secondo tentativo.

Smontando il sensore ho scoperto che il DN7C3CA006 non è altro che un GP2Y1010AU0F con ventolina aggiunta e piccolo case in plastica.

La sensibilità del GP2Y1010AU0F è doppia rispetto a quella del DN7C3CA006 ed il pin out è diverso: probabilmente hanno inserito uno stadio di amplificazione aggiuntivo che dovresti vedere perché esterno al GP2Y1010AU0F.

Mi inserisci una foto?