[WikiItic] [TitleIndex] [WordIndex

1. Projecte realitzat durant el taller


El darrer dia del taller d'Arduino varem fer diferents coses, pero varem acabar jugant amb la possibilitat de construir un seguidor solar. La proposta resultant va ser algo semblant a la que es mostra a continuació. Aquest és el muntatge:

Esquema.jpg

En el nostre cas en comptes de moure els mortors de seguiment indicabem amb un LED si haviem d'anar a la dreta, a l'esquerra o be si ja estavem en la situació més óptima per rebre la maxima radiació en els dos LDR.

Varem fer una cosa una mica especial que és indicar que no hi ha radiació solar suficinet (perque és de nit, per exemple) encenent els tres LED's alhora.

Aquest és el codi:

   1 /*
   2 SISTEMA DE SEGUIMENT SOLAR
   3 ---------------------------
   4 Desenvolupat per el grup iTIC de la EPSEM
   5 durant la Frikiweek2011.
   6 
   7 El sistema consta de dos sensors de llum LDR. 
   8 Aquests sensors tenen una resistencia que varia per 
   9 sobre dels 26KOhms en la foscor, fins per sota de 
  10 900 Ohms amb llum directe.
  11 Cada sensor esta conectat amb serie amb una resistencia 
  12 de 22KOhms conectada a positiu (+5V). Del divisor resistiu 
  13 es pren la senyal que alimenten les entrades analogiques.
  14 
  15 Stilitza la sortida serie de dades per obtenir informaci 
  16 dels dos sensors i apode fer 'debugging'.
  17 */
  18 
  19 //Parametres
  20 #define dreta 3    //Led groc
  21 #define centrat 5  //Led verd
  22 #define esquerra 6 //Led vermell
  23 #define sensor1 0  //Sensor dret
  24 #define sensor2 1  //Sensor esquerre
  25 #define marge 100  // +/-Marge de captura
  26 #define foscor 512 //Valor a partir del qual es declara l'estat fosc. 
  27                    //El valor s'ha de re-calcular per series de LDR 
  28                    //i resistencia diferents.
  29 
  30 //Programa
  31 void setup(){
  32   pinMode(dreta, OUTPUT);
  33   pinMode(centrat, OUTPUT);
  34   pinMode(esquerra, OUTPUT);
  35   Serial.begin(9600);
  36 }
  37 
  38 
  39 void loop(){
  40 //Llegim entrades analgies  
  41 int analog1=analogRead(sensor1);
  42 int analog2=analogRead(sensor2);
  43 
  44 //Calculem la diferencia entre sensors
  45 int resta=analog1-analog2;
  46 
  47 //Comencem a prendre decissions
  48 if (analog1>foscor && analog2>foscor){ //Si els dos sensors detecten foscor...
  49   //Activen (per nivell baix) els tres LEDS.
  50   digitalWrite(dreta, LOW);
  51   digitalWrite(centrat, LOW);
  52   digitalWrite(esquerra,LOW);
  53 }
  54 else if(resta<-marge){            //Si la diferencia es menor que -marge...
  55   //Hi ha mes llum a l'esquerre
  56   digitalWrite(dreta, HIGH);
  57   digitalWrite(centrat, HIGH);
  58   digitalWrite(esquerra, LOW);
  59 }
  60 else if(resta<marge){            //Si la diferencia esta entre +/-marge...
  61   digitalWrite(dreta, HIGH);
  62   digitalWrite(centrat, LOW);
  63   digitalWrite(esquerra, HIGH);
  64 }  
  65 else {                        //Si no, aleshores la diferencia es major que +marge....
  66   digitalWrite(dreta, LOW);
  67   digitalWrite(centrat, HIGH);
  68   digitalWrite(esquerra, HIGH);
  69 }
  70 
  71 //Imprimeix per el port serie una linia amb l'estat dels dos sensors.
  72 Serial.print(analog1);
  73 Serial.print(" ");
  74 Serial.println(analog2);
  75 
  76 delay(100);                   //Espera 100ms en tornar a calcular
  77 }

2023-07-03 11:46