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:
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 }