Doel:

Lowbudget zonnevolger maken en mijn ervaringen met anderen delen. Hopelijk zullen meerdere mensen hier interesse in hebben.
Ingredienten:
Platvorm:
Stevige en zware basis is essentieel; we willen niet dat hij bij een windvlaag omver valt. Zwaar tafelblad dus, en daarop een standaard, wieltjes komen onderop. Een oude bureaustoel zal hier ook erg geschikt voor zijn vermoed ik.
Random mechanische onderdelen, voornamelijk van oude printers:
Ruime keuze in motoren:
Belangrijkste keuze; welke motor ga ik gebruiken? Een zware 24V DC motor met ketting of een 5V die maar een paar ampere trekt en dus direct op de arduino motorshield kan? Dit motor shield kan maximaal 1,2A aan.
Electronica:

Wat je allemaal ziet: Arduino Uno, Motor Shield, 2 LDR's (lichtgevoelige weerstanden) en het boxje waar ik het allemaal in wil bouwen. Verder 2 zwartgeverfde moeren die ik over de LDR heenplaats, zodat alleen licht recht van boven erop valt.
Code:
Doelstellingen:Volgen van de zon adhv de gegevens uit de LDR's. Daarnaast moet hij 's avonds naar het oosten terugdraaien, zonder 'door' te draaien ivm de draden.
Dit is de code die ik al had gemaakt voor een servo, maar er zitten een paar minpunten in.
Servo
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| //SOLAR TRACKER BETA #include <Servo.h> Servo myservo; //declare servo int pos1 = 0; // Horizontale positie int westLDR = 0; // Westelijke Light Dependent Resistor int eastLDR = 1; // Oostelijke Light Dependent Resistor int threshold = 40; //Resolutie van de LDR's is van 0-1000, bij minder dan 40 verschil wil ik niets laten doen. void setup() { myservo.attach(10); // De signaalkabel van de servo is aangesloten op digitale pin 10 van de arduino myservo.write(90); // we beginnen in het midden van de reikweidte van de servo, 90 pinMode(westLDR, INPUT); // De LDR's willen we als input gebruiken pinMode(eastLDR, INPUT); } void loop() { pos1 = myservo.read(); // pos1 leest de beginpositie in int west = analogRead(westLDR); // leest de waarde van de LDR's int east = analogRead(eastLDR); if(west > east && (west-east) > threshold) // Als west een hogere waarde heeft dan oost, EN het verschil hoger is dan de threshold.... { myservo.write(pos1 +1); //.....draai naar rechts delay(10); // Geeft het systeem even tijd om nieuwe waardes in te lezen. } else if(east > west && (east-west) > threshold) // Andersom als bovenstaande. { myservo.write(pos1 -1); delay(10); } else { myservo.write(pos1); // Alles staat op de zon gericht, niets meer aan doen. } } |
- Minpunten: heb geen servo die het gewicht aankan.
- Draait niet linksom terug naar het beginpunt.
- Maakt nog niet gebruik van functies, dus vrij slordig om later nog bij te werken.
Steppermotor
Stappenmotor zal het dus worden; omdat die gewoon veel meer kracht kan genereren.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| //SOLAR TRACKER BETA V5 - Stepper #include <AFMotor.h> #include <AccelStepper.h> AF_Stepper motor(48, 2); // 360 graden / 7,5 graad per stap = 48. De 2 omdat we M3 en M4 gebruiken. int Hpos = 0; // Horizontale positie int westLDR = 0; // Westelijke Light Dependent Resistor int eastLDR = 1; // Oostelijke Light Dependent Resistor int threshold = 40; //Resolutie van de LDR's is van 0-1000, bij minder dan 40 verschil wil ik niets laten doen. // Functies void MovingWest() { motor.step(1, FORWARD, DOUBLE); Serial.println("We draaien naar het westen..."); delay(5); } void MovingEast() { motor.step(1, BACKWARD, DOUBLE); Serial.println("We draaien naar het oosten..."); delay(5); } void EveningReset() { motor.step(1, BACKWARD, SINGLE); Serial.println("Einde van de dag, terug naar het oosten..."); } void setup(){ Serial.begin(9600); motor.setSpeed(10); // 10 rpm pinMode(westLDR, INPUT); // De LDR's willen we als input gebruiken pinMode(eastLDR, INPUT); } void loop(){ int west = analogRead(westLDR); // leest de waarde van de LDR's int east = analogRead(eastLDR); Serial.println(analogRead(eastLDR)); Serial.println(analogRead(westLDR)); if (west > east && (west-east) > threshold) // Zolang west een hogere waarde heeft dan oost, EN het verschil hoger is dan de threshold.... { MovingWest(); // Voer de functie MovingWest uit... } else if(east > west && (east-west) > threshold) // Andersom als bovenstaande. { MovingEast(); // Voer de functie MovingEast uit... } else if (east < threshold && west < threshold) { EveningReset(); // Voer de functie EveningReset uit... } else { Serial.println("Daar is de zon..."); // Alles staat op de zon gericht, niets meer aan doen. } //toekomstig verticale bewegingen } |
Deze code is nog vrij grof, belangrijkste is dat ik nog moet uitzoeken hoe de stepper weet wat de beginstand is, en hoe hij daar aan het einde van de dag terug kan komen.
To do:
* Omvormer kopen* Zonnepaneel kopen (rekening houden met het gewicht)
* Testen welk gewicht de constructie aankan.
* Code afmaken.