Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentartiQUI (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.
gpb01:
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentartiQUI (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.
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?
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.
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.
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
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.