Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

SilverCount [Countdown mit Farbverlauf]

12. November 2010

Die Aufgabe war, irgend ein Countdown zu erstellen. Er musste nichts mit Zeit zu tun haben. Wir entschlossen uns, ein Rad mit einem Farbverlauf von rot zu grün als Countdown zu erstellen. Als Antrieb wählten wir einen Servo. Um das ganze möglichst stabil zu bauen, gingen wir in die Werkstatt und erstellten aus Holz, Karton und Styropor unser Gebilde.

Zuschneiden der Grundplatte

Ankleben des Servos an unser Styroporrad

Anbringen des Rades an das Grundgerüst aus Holz

Die hälfte der Konstruktion steht

Die gesamte Elektronik wird im Innern verstaut

Anlöten der Druckknöpfe

Anfang des Countdowns (rot)

Ende des Countdowns (grün)

#define BUT1 5 // Button 1 #define BUT2 3 // Button 2 #define LED 13 // Licht für Rad #define LEDSLEEP 11 // Licht für Schlafzustand #include Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created boolean button1 = LOW; boolean button2 = LOW; int pos = 0; // variable to store the servo position int zaehler = 1; boolean up = 1; void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object Serial.begin( 9600 ); pinMode(BUT1, INPUT); pinMode(BUT2, INPUT); pinMode(LED, OUTPUT); pinMode(LEDSLEEP, OUTPUT); digitalWrite(LED, HIGH); digitalWrite(BUT1, HIGH); // Activate internal Pullups digitalWrite(BUT2, HIGH); // Activate internal Pullups } void loop() { button1 = digitalRead(BUT1); // read a button connected to pin 4 button2 = digitalRead(BUT2); // read a button connected to pin 3 Serial.print("button1"); Serial.println(button1, DEC); Serial.print("button2"); Serial.println(button2, DEC); if (button1 == LOW){ // in order to decide in which direction digitalWrite(LED, HIGH); analogWrite(LEDSLEEP, 0); myservo.write(180); // tell servo to go to position in variable 'pos' for(pos = 180; pos>=0; pos-=18) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(1000); if (pos == 0){ for (int i = 1; i < 6; i++){ digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); delay(200); } } //ende if // waits 15ms for the servo to reach the position } //ende for } //ende if else if (button2 == LOW){ // in order to decide in which direction digitalWrite(LED, HIGH); analogWrite(LEDSLEEP, 0); myservo.write(180); // tell servo to go to position in variable 'pos' for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees { Serial.println(pos, DEC); myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); if (pos == 0){ for (int i = 1; i < 6; i++){ digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); delay(200); } } //ende if // waits 15ms for the servo to reach the position } //ende for } //ende if else if (button1 == HIGH && button2 == HIGH ){ sleep(); } } void sleep(){ if (zaehler > 254){ up = 0; } // wenn unten zähl rauf if(zaehler < 10){ up = 1; } if (up == 1){ zaehler += 1; } if (up == 0){ zaehler -= 1; } digitalWrite(LED, LOW); analogWrite (LEDSLEEP, zaehler); } [/sourcecode]