Pages: [1]   Go Down
Author Topic: Fotocellula con due diodo led IR per accendere un led  (Read 1248 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 159
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti avevo detto di modificare int soglia = 1000;   
con int soglia = 70;
prova smiley-wink   
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Full Member
***
Karma: 0
Posts: 159
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti avevo detto di modificare int soglia = 1000;   
con int soglia = 70;
prova smiley-wink   

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

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Full Member
***
Karma: 0
Posts: 159
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ,
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Full Member
***
Karma: 0
Posts: 159
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: