Glücks­rad mit Schrittmotor

Lese­zeit: 5 Minu­ten

    Seite als PDF
    Lösung

    Glücks­rad mit Seri­el­lem Monitor

    Navi­ga­ti­on

    Der auf einem Schritt­mo­tor befes­tig­te Zei­ger bewegt sich durch Zufall auf ein far­bi­ges Feld. Ein LCD zeigt eine Sta­tis­tik der bis­her getrof­fe­nen Fel­der an.

    In einem Elek­tro­mo­tor wird durch das Zusam­men­spiel von Sta­to­ren, fest­ste­hen­den äuße­ren magne­ti­schen Spu­len, und einem sich dar­in dre­hen­den Rotor eine Dreh­be­we­gung erzeugt. Der Strom wird durch Schleif­kon­tak­te so zuge­führt, dass genau in dem Moment, wo sich Nord-und Süd­pol ange­nä­hert haben, die Strom­rich­tung im Rotor umge­polt wird.

    Quel­le:  🔗https://​com​mons​.wiki​me​dia​.org/​w​i​k​i​/​F​i​l​e​:​G​l​e​i​c​h​s​t​r​o​m​m​a​s​c​h​i​n​e​.​svg (abge­ru­fen am 19.9.22)

    Für den Schritt­mo­tor wird eine Trei­ber­pla­ti­ne benö­tigt. In die­sem Fall ist es die ULN2003. Zwei mög­li­che Aus­füh­run­gen sind hier abgebildet: 

    Treiberplatinen Schrittmotor

    Bei der lin­ken Trei­ber­pla­ti­ne müs­sen die Steck­ver­bin­dun­gen mit Kabeln zum Ardui­no her­ge­stellt wer­den, bei der rech­ten Aus­füh­rung kann der lin­ke Teil direkt in den Ardui­no gesteckt wer­den.
    Bei bei­den Vari­an­ten wird der Ste­cker des Motors in die Trei­ber­pla­ti­ne gesteckt

    Pinbelegung Treiberplatine

    Pin­be­le­gung
    IN1 → D4
    IN2 → D5
    IN3 → D6
    IN4 → D7

    Bei dem Motor han­delt es sich um einen Motor mit der Typ­be­zeich­nung 28BYJ-48. Im Unter­schied zum Ser­vo­mo­tor kann der Schritt­mo­tor eine 360°-Drehung aus­füh­ren und kann vor­wärts und rück­wärts lau­fen.
    Ein vol­le Umdre­hung sind bei die­sem Motor 2048 Schritte. 

    Glücksrad

    Das Glücks­rad besteht aus 4 ver­schie­den­far­bi­gen Fel­dern und einem dreh­ba­ren Pfeil. Das Pro­gramm ermit­telt eine zufäl­li­ge Anzahl von Schrit­ten zwi­schen 1 und 2048. Der Motor dreht bis zur ange­ge­be­nen Posi­ti­on und stellt anhand der zurück­ge­leg­ten Schrit­te die Far­be des Fel­des fest.

    Die Far­be wird auf einem LCD ange­zeigt. Zusätz­lich wird die Anzahl der „getrof­fe­nen“ Far­ben gezählt und eben­falls angezeigt.

    So sieht es aus:

    Position Glücksrad  - Anzeige auf dem LCD
    Vorlage Glücksrad

    Befes­ti­ge das Glücks­rad und den Pfeil am Schritt­mo­tor. Ach­te dar­auf, dass sich das Glücks­rad nicht dre­hen kann, der Pfeil sich aber frei bewe­gen kann und sich in der rich­ti­gen Posi­ti­on befindet.

    Die Vor­la­ge für das Glücks­rad und den Pfeil fin­dest du ➨hier.

    Benö­tig­te Bauteile:

    • Schritt­mo­tor 28BYJ-48
    • Trei­ber­pla­ti­ne ULN2003
    • Lei­tungs­dräh­te

    Benö­tig­te Bibliotheken:

    Das „Prel­len“ des Tas­ters soll mit der Biblio­thek Bounce2 ver­hin­dert wer­den.
    Bin­de auch die übri­gen Biblio­the­ken ein und defi­nie­re die Varia­blen.
    Beach­te die Kommentare.

    # include <Stepper.h>
    # include <LiquidCrystal_I2C.h>
    # include <Bounce2.h>
    
    LiquidCrystal_I2C lcd(0x27, 20, 4);
    
    // Schritte pro Umdrehung
    int SchritteDrehung = 2048;
    
    /*
      Pinbelegung:
      entweder 4, 6, 5, 7
      oder 5, 7, 4, 6
      diejenige auswählen, bei der die Drehung
      im Uhrzeigersinn ausgeführt wird
    */
    Stepper Motor(SchritteDrehung, 5, 7, 4, 6);
    
    int TASTER = 10;
    
    // die Farben
    int Rot = 0;
    int Blau = 0;
    int Gelb = 0;
    int Gruen = 0;
    
    // Bibliothek Bounce2
    // "Prellverhinderer" für den Taster starten
    Bounce Start = Bounce();

    Der set­up-Teil:

    void setup()
    {
      // Instanz des Objekts Bounce für den Taster zuordnen
      // Zeitintervall einstellen
      Start.attach(TASTER);
      Start.interval(20);
    
      pinMode(TASTER, INPUT_PULLUP);
    
      // LCD einschalten
      lcd.init();
      lcd.backlight();
    
      // Zufallsgenerator starten
      randomSeed(analogRead(0));
    
      // Geschwindigkeit des Motors
      Motor.setSpeed(15);
    }

    Der loop-Teil. Beach­te die Kommentare.

    void loop()
    {
      // Taster gedrückt
      if (Start.update())
      {
        if (Start.read() == LOW)
        {
          int Minimum = 1;
          int Maximum = SchritteDrehung;
          int Position =  random(Minimum, Maximum);
          Motor.step(Position);
          Serial.println(Position);
    
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Position: " + String(Position));
          lcd.setCursor(0, 1);
    
          // Farbe je nach Position bestimmen
          if (Position > 0 && Position < 512)
          {
            lcd.print("Rot");
            Rot ++;
          }
    
          if (Position > 512 && Position < 1024)
          {
            lcd.print("Blau");
            Blau ++;
          }
    
          if (Position > 1024 && Position < 1536)
          {
            lcd.print("Gelb");
            Gelb ++;
          }
    
          if (Position > 1536 && Position < 2048)
          {
            lcd.print("Gr\365n");
            Gruen ++;
          }
    
          lcd.setCursor(0, 2);
          lcd.print("Rot:  " + String(Rot));
          lcd.setCursor(10, 2);
          lcd.print("Blau: " + String(Blau));
          lcd.setCursor(0, 3);
          lcd.print("Gelb: " + String(Gelb));
          lcd.setCursor(10, 3);
          lcd.print("Gr\365n: " + String(Gruen));
    
          delay(1000);
    
          // Motor an den Ausgangspunkt zurückfahren
          Motor.step(-Position);
        }
      }
    }

    Startseite
    Aufgaben A-Z
    Suchen
    Downloads
    Fehlermeldungen
    Seite als PDF

    Ver­wand­te Aufgaben:


    Letzte Aktualisierung: 13. Mrz 2023 @ 12:33