Home - Schulleben - Projekte 2009/10Regeln mit dem arduino

Projekte am MLG im Schuljahr 2009/2010
 

Regeln mit dem arduino in der Klasse 10b (NwT)

 
Die 10 Schülerprojekte:
  1. Ein Spannungsregler für eine Solarzelle
  2. Der Wasserfahrstuhl
  3. Lautstärkeregelung
  4. Der Rollladen
  5. Abstand-Regulierung auf schiefer Ebene
  6. Temperaturregelung einer Platte
  7. Waagrechte Ebene
  8. Das Papiersegel-Balancier-Fahrzeug
  9. Heizungsregelung
  10. Wasserstandsregelung
Zum Projekt allgemein:

Das Mikrocontroller-Board arduino duemilanove ermöglicht durch 6 analoge Eingänge und 14 digitale Ein-/Ausgänge den Aufbau einer Regelung. Sowohl Software als auch Hardware sind im Sinne von "Open Source" quelloffen. Weltweit wird mit dem arduino experimentiert. Bei Youtube findet man etwa 6000 Videos zu arduino-Projekten  (Stand Sept./2010). Die Programmiersprache ist der Programmiersprache C sehr ähnlich. Ein solches Board kostet etwa 25 Euro. Die Software ist natürlich kostenlos. Das Nachfolger-Board arduino uno ist praktisch identisch mit arduino duemilanove und kostet etwa das Gleiche.
arduino board
Das Board wird mit einem USB-Kabel an einen Computer angeschlossen. Über dieses USB-Kabel erfolgt die Programmierung des Mikrocontrollers und die Energieversorgung des Boards. Alternativ kann das Board auch aus einer 9-Volt-Batterie mit Energie versorgt werden und funktioniert autonom ohne Computer. Alle Informationen hierzu findet man unter http://www.arduino.cc/. Mit dem arduino-Programmier-Handbuch kann man sich einen guten Überblick verschaffen.





Beispiel einer Regelung: Der Rolladen

Lichtregelung
Im Inneren des „Gebäudes“ soll die Helligkeit geregelt werden. Dazu kann ein Rollladen (= schwarze Platte) auf- und abgefahren werden. Ein LDR, der an der Decke im Inneren angebracht ist, misst ständig die Helligkeit. Der gewünschte Bereich der Helligkeit heißt bei uns „Wohlfühlbereich“ (=Sollwertbereich). Ist es zu hell, so fährt die Platte nach unten, ist es zu dunkel, so fährt die Platte nach oben. Zwei Endschalter schalten den Motor in der kritischen Richtung ab, wenn die Platte am oberen oder am unteren Ende angelangt ist. Mit einem Potentiometer kann der Wohlfühlbereich vorgegeben werden. Das LCD-Display zeigt die aktuelle Helligkeit (=Ist) und die gewünschte Helligkeit (=Soll) an.
Die Helligkeit wird geeicht: Dazu wird für verschiedene Beleuchtungssituationen jeweils der analogRead-Wert und der von einem Helligkeitsmessgerät angezeigte Wert in Lux ermittelt. Die Werte werden in einer Tabelle dargestellt. Im Tabellenkalkulationsprogramm Excel wird dann mit „Trendlinie“ eine Näherungsfunktion ermittelt, die in den sketch kopiert wird.
Alternativ kann mit dem Mathematikprogramm Maple mit dem Assistent „Curve Fitting“ eine Näherungsfunktion ermittelt werden.



Hier der sketch (=Programm):

/* Rollladenprojekt   Juli 2010, Klasse 10b  */

int LDR_Wert;          // LDR an AnalogPin3
int WunschHelligkeit;  // Poti an AnalogPin1
boolean EndSchalter1;  // DigitalPin3
boolean EndSchalter2;  // DigitalPin4
int Helligkeit;        // berechnet

void setup()
{
    pinMode(3,INPUT);   // Endschalter 1
    pinMode(4,INPUT);   // Endschalter 2
    pinMode(5,OUTPUT);  // für Motortreiber
    pinMode(6,OUTPUT);  // für Motortreiber
    Serial.begin(9600);
    Serial.print(22,BYTE);   // Einschalten des LCD-Displays
    Serial.print(12,BYTE);   // Löschen des Displays
    delay(5);
    Serial.print(17,BYTE);   // Hintergrundbeleuchtung an
    Serial.print(128,BYTE);  // Cursor auf 0,0  (erste Zeile)
    Serial.print("Ist :  ");
    Serial.print(148,BYTE);  // Cursor auf 1,0  (zweite Zeile)
    Serial.print("Soll:  ");  
}

void loop()
{
    EndSchalter1 = digitalRead(4);
    EndSchalter2 = digitalRead(3);
    LDR_Wert = analogRead(3);
    WunschHelligkeit = 2*analogRead(1); // Poti: Helligkeit bis 2046 Lux!
    Helligkeit = 3036.096-28.034*LDR_Wert+0.0935*LDR_Wert*LDR_Wert-
        0.000132*LDR_Wert*LDR_Wert*LDR_Wert+
        6.90e-8*LDR_Wert*LDR_Wert*LDR_Wert*LDR_Wert;
                       // Eichung der Helligkeit mit Maple Curve Fitting
    Serial.print(136,BYTE);       // Cursor auf 0,8
    Serial.print("        ");
    Serial.print(136,BYTE);       // Cursor auf 0,8
    Serial.print(Helligkeit,DEC);
    Serial.print(156,BYTE);       // Cursor auf 1,8
    Serial.print("        ");
    Serial.print(156,BYTE);       // Cursor auf 1,8
    Serial.print(WunschHelligkeit,DEC);
    if (Helligkeit < WunschHelligkeit*0.95)        // zu dunkel !
    {
        digitalWrite(6,LOW); 
        if (EndSchalter1==0) digitalWrite(5,HIGH); // Motor dreht links
        else digitalWrite(5,LOW);                  // Motor steht
    }
    if (Helligkeit > WunschHelligkeit*1.05)        // zu hell !
    {
        digitalWrite(5,LOW); 
        if (EndSchalter2==0) digitalWrite(6,HIGH); // Motor dreht rechts
        else digitalWrite(6,LOW);                  // Motor steht
    }
    if (Helligkeit >= WunschHelligkeit*0.95  && 
                      Helligkeit <= WunschHelligkeit*1.05 ) // Wohlfühlbereich !
    {
        digitalWrite(5,LOW);                                // Motor steht
        digitalWrite(6,LOW);
    }  
    delay(60);
}

     



Hier der Schaltplan:

Schaltplan






verantwortlich für die Seite: Max Manfred Piendl

oben