Go Down

Topic: Fotocellula con due diodo led IR per accendere un led (Read 1 time) previous topic - next topic

idroid2011

ciao a tutti
scusatemi per il disturbo .
ho usato 2 led ir per rilevare gli ostacoli , allora io vorrei collegare  questo 2 led sulle parete della mia stanza che quando qulcuno entra mi accende una lamapdina e quando esce mi spegne la lampadina, vorrei fare un modo  mi memorizza una valore HIGH quando qualcuno entra e mi accende la lampada , e quando quella persona esce  mi converte il valore HIGH in LOW.
solo che è importante anke la distanza perchè voglio che il mio sensore riesce a leggere fino a  130cm  .

non lo so se puo funzionare con questo sensore.
spero che mi sono spiegato bene
il programma è questo : 
Quote
#define irEmitter 13   // polo positivo emettitore - positive emitter pin
#define irReceiverN 12  // polo negativo ricevitore - negative receiver pin
int Ledvar = 2; // variabile del led
int soglia = 1000;   
long ambient = 0;
long emission = 0;
boolean ledstatus = false; //variabile dell'if
long distance = 0;
long setDistance = 0;
long lightTime = 0;
int currentInit = 0;
//// Valori di setup - setup&tune values ////
long gain = 4;                  //gain crescita valore distanza
long maxRangeSetDistanceValue = 666666;  //valore setDistance range massimo
long maxRange = 2000;         //distanza range massimo in mm
int startDriftDistance = 15; //valore distanza inizio drift distanza
////////////////////////////////////////////

void setup() {   
Serial.begin(9600);
}

void getDistance() {
if(currentInit == 0){if(digitalRead(irReceiverN) == LOW){ ambientLightCheck();}}
if(currentInit == 1){if(digitalRead(irReceiverN) == LOW){ reflectionLightCheck();}}
}

void ambientLightCheck() {
ambient = micros() - lightTime;
init(1);
}

void reflectionLightCheck() {
emission = micros() - lightTime;
distance = emission * (ambient / (ambient - emission));
setDistance = distance;
distance = map(distance, 0, maxRangeSetDistanceValue, 0, maxRange);
if(distance <= 0) distance = 0;
if(distance > startDriftDistance) distance = sqrt(distance) * gain;
Serial.println(distance);
emission = 0;
ambient = 0;
init(0);
}

void init(int emitter) {
if(emitter == 0)digitalWrite(irEmitter, LOW);   
if(emitter == 1)digitalWrite(irEmitter, HIGH);
lightTime = micros();
pinMode(irReceiverN, OUTPUT);
digitalWrite(irReceiverN, HIGH); //carico ricevitore di induttanza
pinMode(irReceiverN, INPUT);
digitalWrite(irReceiverN, LOW);
if(emitter == 1) currentInit = 1;
if(emitter == 0) currentInit = 0;
}

void loop() {
 
getDistance();
if (distance > soglia & ledstatus ==  false )
ledstatus = true;
else if  (distance > soglia & ledstatus ==  true )
ledstatus = false;

if (ledstatus == true)
digitalWrite(Ledvar, HIGH);
else
digitalWrite(Ledvar, LOW);
 
}



è normale che non si accende il mio led????

grazie

Madwriter

ti avevo detto di modificare int soglia = 1000;   
con int soglia = 70;
prova ;)   
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

idroid2011


ti avevo detto di modificare int soglia = 1000;   
con int soglia = 70;
prova ;)   


grazie 
ma il led  devo attacare a   pin digital  2  giusto ,  ??
ma solo devo cambiare la  soglia   e posso cambiare anke la distance???

Madwriter

la distance è quella letta quindi non puoi cambiarla, puoi cambiare la soglia a cui far scattare il led tipo 20/30/40 etc
prova con un valore molto basso se rilevi che è troppo sensibile sali ok?
si il led va al pin 2!
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

idroid2011


la distance è quella letta quindi non puoi cambiarla, puoi cambiare la soglia a cui far scattare il led tipo 20/30/40 etc
prova con un valore molto basso se rilevi che è troppo sensibile sali ok?
si il led va al pin 2!


sei un genio , grazie mille  per aiuto ,   adesso si accende il led , solo la luce è molto debole,  cmq si accende e si spegneee   grazie  per i consigli e aiuto , allora buone vacanze ,

Madwriter

ok ora prova con qualche resistenza sui led dovrebbe intesificare la potenza del raggio parti anche qui da volori molto bassi come ti avevo anticipato qui dovrai fare delle prove,cambi i valori delle resistenze e controlli sia vedendo a che distanza arriva sia con la fotocamera quanto è intenso il led inoltre procurati un tubicino e metti i led al'linterno in modo tale da renderlo più direzionale.
Buon divertimento,tranquillo il forum ti aiuterà al posto mio ;)
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

idroid2011

ciao  a tutti   

avevo un problema  con il codice che ho scritto sopra  il mio led si accende e si spegne automaticamente , qualcuno che può aiutare per favore??

grazie

Go Up