Projekt ma na celu zbudowanie interaktywnego panelu fotowoltaicznego, który w trakcie dnia będzie automatycznie śledził Słońce poruszające się po nieboskłonie. Temat podzielony został na cztery części.
Budowany układ powinien mierzyć natężenie światła i w zależności od wyników pomiaru powinien decydować o położeniu płyty z panelem solarnym. Układ testowy został oparty o pomysł przedstawiony w projekcie Arduino Solar Tracker.
Prace oparto o schemat (Fig. 2). Składa się on z płytki prototypowej Arduino oraz dwóch modułów:
Testy miały na celu zapoznanie się z działaniem fotorezystorów (LDR), ich czułością oraz określenie średniego poziomu oświetlenia wieczornego i porannego.
Moduł czujnika oświetlenia to tekturowa płytka prototypowa wyposażona w 4 fotorezystory (LDR) umieszczone w czterech narożach prostokątnej płyty (Fig. 3, 4).
Zmontowany układ testowy (Fig. 1), za pomoca diod LED pozwala na zgrubne sprawdzenie, która ze stron czujnika oświetlenia jest lepiej oświetlona. Zgodnie z działaniem algorytmu (Fig.), sprawdzane jest czy lepiej oświetlona jest strona lewa czy prawa oraz góra czy dół. Moduł kontroli oświelenia ukazuje wynik w postaci dwóch świecących diod: LED1 lub LED3 oraz LED2 lub LED4 (Fig. 2).
Dodatkowo, w celu dokładniejszej kontroli jasności oświetlenia, wartości pomiarowe zostają wyświetlone w postaci czytelnego komunikatu w monitorze portu szeregowego (Fig. 5). Informuje on o natężeniu światła zarejestrowanym przez z cztery LDR oraz o średnich wartościach oświetlenia obliczonych dla strony lewej, prawej, góry i dołu modułu czujnika oświetlenia. Dodatkowo, w środku rysunku przedstawiona jest średnia ogólna zarejestrowana przez 4 fotorezystory.
//Przypisanie pinów fotorezystorom (LDR) int ldrtopl = 2; //górny lewy int ldrtopr = 1; //górny prawy int ldrbotl = 3; //dolny lewy int ldrbotr = 0; //dolny prawy void setup () { //Aktywacja portu szeregowego Serial.begin(9600); //Piny kontroli róznicy oświetlenia pinMode (4, OUTPUT); //gora pinMode (5, OUTPUT); //dol pinMode (6, OUTPUT); //lewa pinMode (7, OUTPUT); //prawa } void loop() { //Pobranie wartości spadków napięć na fotorezystorach int topl = analogRead(ldrtopl); int topr = analogRead(ldrtopr); int botl = analogRead(ldrbotl); int botr = analogRead(ldrbotr); //Obliczenie średnich int avgtop = (topl + topr) / 2; //Średnia arytm. z pomiarów górnych fotorezystorów int avgbot = (botl + botr) / 2; //Średnia arytm. z pomiarów dolnych fotorezystorów int avgleft = (topl + botl) / 2; //Średnia arytm. z pomiarów lewych fotorezystorów int avgright = (topr + botr) / 2; //Średnia arytm. z pomiarów prawych fotorezystorów int avg = (avgtop + avgbot) / 2; //Średnia arytm. z pomiarów 4 fotorezystorów //Przekazywanie na port szeregowy wartości pinów analogowych z fotorezystorów Serial.print(" "); Serial.println(avgtop); Serial.print(topl); Serial.print(" ************************** "); Serial.println(topr); Serial.println(" * * "); Serial.println(" * * "); Serial.print(avgleft); Serial.print(" * "); Serial.print(avg); Serial.print(" * "); Serial.println(avgright); Serial.println(" * * "); Serial.println(" * * "); Serial.print(botl); Serial.print(" ************************** "); Serial.println(botr); Serial.print(" "); Serial.print(" "); Serial.println(avgbot); Serial.println(" "); //Pętle sprawdzające różnice oświetlenia if (avgtop < avgbot) { digitalWrite(5, HIGH); digitalWrite(4, LOW); delay(10); } else if (avgbot < avgtop) { digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(10); } else { } if (avgleft > avgright) { digitalWrite(6, HIGH); digitalWrite(7, LOW); delay(10); } else if (avgright > avgleft) { digitalWrite(7, HIGH); digitalWrite(6, LOW); delay(10); } else { } delay(50); // } delay(2000); }