Title: Musterlösung - Arduino-Programm für 'iSolar'
Course: iMINT Akademie Unterrichtsmodul intelligente Solarzelle (iSolar) > Section: Informationen für Lehrer

Kalibrierung der intelligenten Solarzelle 'iSolar'

// --------------------------------------------------------
// Kalibrierung der intelligenten Solarzelle 'iSolar'
//       Ein Programm für den Arduino Nano.
// Autoren: iMINT-Akademie Berlin (Fachset Informatik) 2018
// --------------------------------------------------------

#include <Servo.h>

Servo servo_horizontal;
Servo servo_vertikal;

int winkel = 0;
const int analogInPin = A0;
int       sensorwert = 0;
int       maximum = 0;
int       optimaler_horizontalwinkel = 0;
int       optimaler_vertikalwinkel = 0;
String    ausgabe;

void setup() {
  servo_horizontal.attach(9);
  servo_vertikal.attach(8);
  Serial.begin(9600);
}

void loop() {
  for(winkel = 90; winkel < 180; winkel += 10) {
    sensorwert = analogRead(analogInPin);
    sensorwert = map(sensorwert, 0, 1023, 0, 500);
    if (sensorwert > maximum){
      maximum = sensorwert;
      optimaler_horizontalwinkel = winkel;
    }
    ausgabe = " Spannung der Solarzelle = " + sensorwert/100;
    ausgabe += ",";
    ausgabe += sensorwert%100;
    ausgabe += " V bei Winkelstellung: ";
    ausgabe += winkel;
    Serial.println(ausgabe);
    servo_horizontal.write(winkel);
    delay(1000);
  }
  ausgabe = "Beste horizontale Position bei: " + optimaler_horizontalwinkel;
  ausgabe += " bei V: ";
  ausgabe += maximum/100;
  ausgabe += ",";
  ausgabe += maximum%100;
  Serial.print(ausgabe);
  servo_horizontal.write(optimaler_horizontalwinkel);
  maximum = 0;
  for(winkel = 0; winkel < 180; winkel += 10) {
    sensorwert = analogRead(analogInPin);
    sensorwert = map(sensorwert, 0, 1023, 0, 500);
    if (sensorwert > maximum){
      maximum = sensorwert;
      optimaler_vertikalwinkel = winkel;
    }
    ausgabe = " Spannung der Solarzelle = " + sensorwert/100;
    ausgabe += ",";
    ausgabe += sensorwert%100;
    ausgabe += " V bei Winkelstellung: ";
    ausgabe += winkel;
    Serial.println(ausgabe);
    servo_vertikal.write(winkel);
    delay(1000);
  }
  ausgabe = "Beste vertikale Position bei: " + optimaler_horizontalwinkel;
  ausgabe += " bei V: ";
  ausgabe += maximum/100;
  ausgabe += ",";
  ausgabe += maximum%100;
  Serial.println(ausgabe);
  servo_vertikal.write(optimaler_vertikalwinkel);
  maximum = 0;
  delay(1000);
  sensorwert = analogRead(analogInPin);
  sensorwert = map(sensorwert, 0, 1023, 0, 500);
  ausgabe = " Ende der Kalibrierung: Spannung der Solarzelle= " + sensorwert/100;
  ausgabe += ",";
  ausgabe += sensorwert%100;
  ausgabe += " V";
  Serial.println(ausgabe);
  delay(10000);                 // Nach 10 Sekunden eine erneuete Kalibrierung starten oder hier das Programm aendern.
}