Title: Programmieraufgabe Arduino-IDE
Course: iMINT Akademie Unterrichtsmodul intelligente Solarzelle (iSolar) > Section: Experiment 5: Die intelligente Solarzelle bauen

Programmiere die intelligente Solarzelle

Aufgabe

Nun sollst Du die intelligente Solarzelle programmieren. Die beiden Servos sollen die Solarzelle entlang der horizontalen und vertikalen Achsen so ausrichten, dass sie im optimalen Winkel zur Sonne steht.

Überlege zunächst wie vorgegangen werden sollte um die optimale Position zu finden. Versuche dann Deine Idee in ein Programm umzusetzen. Verwende dabei die Lösung des letzten Experimentes als Ausgangsbasis.

Zum Testen deiner Solarzelle verwendest du am besten eine Tischlampe oder einen Lampenspot, der ca. einen halben Meter rechts oder links von der Solarzelle steht und aus einem Winkel von ca. 45 Grad auf die Solarzelle leuchet. Nach Abschlus deines Programmes müsste sich die Solarzelle so ausgerichtet haben, dass ihre Oberfläche sich senkrecht (90 Grad Winkel) zur Lichtquelle ausgerichtet hat. Falls Du über eine mobile Spannungsquelle, wie z.B. eine Powerbank, für den Arduino verfügst, kannst Du die Test natürlich auch draußen machen, wenn die Sonne scheint.

Hinweise zur Lösung findest Du auf der nächsten Seiten.

Lösungshinweise (1)

Um den zweiten Servo zu steuern, musst Du diesen zunächst in Dein Programm einbinden. Verwende hierfür die Befehle, die Du in den vorangegangenen Experimenten kennengelernt hast.

Dies sind:

Servo servo_vert;

und

servo_vert.attach(3);

Überlege nun, wie Du die optimale Position für beide Achsen finden kannst. Grundsätzlich benötigst Du für die zweite Achse auch eine weitere Schleife.

for(pos2 = 0; pos2 < 180; pos2 += 5)  {
    ...
}

Beachte, dass der zweite Servo die volle Bewegungsfreiheit von 180 Grad hat.

Lösungshinweise (2)

Grundsätzlich gibt es zwei Ansätze um die optimale Position zu finden:

Erster Ansatz

for(pos = 0; pos < 90; pos += 5) {
    // Finde die optimale horizontale Position.
}

for(pos2 = 0; pos2 < 180; pos2 += 5) {
  // Behalte die zuvor ermittelte horizontale Position bei.
  // und finde die optimale vertikale Position.
}

Zweiter Ansatz

for(pos = 0; pos < 90; pos += 5) {
    for(pos2 = 0; pos2 < 180; pos2 += 5) {
      // Ermittle die optimale Position für alle möglichen Positionen
    }
}

Überlege Dir welche Vor- und Nachteile die beiden Vorgehensweisen haben und versuche einen der beiden Ansätze zu programmieren.