Glücks­rad mit Schritt­mo­tor

Lese­zeit: 6 Minu­ten

Glücks­rad mit Seri­el­lem Moni­tor

Navi­ga­ti­on

In einem Schritt­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. Die Dreh­be­we­gung ent­steht also durch geziel­tes Ein- und Aus­schal­ten ein­zel­ner Spu­len.

Quel­le: Bear­bei­te­ter Bild­schirm­schnapp­schuss aus:
Total phä­no­me­nal - Strom aus Strö­mung SWR 2005

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 abge­bil­det:

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

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 Schrit­te.

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 ange­zeigt.

So sieht es aus:

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 befin­det.

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

Benö­tig­te Bau­tei­le:

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

Benö­tig­te Biblio­the­ken:
Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

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 Kom­men­ta­re.

# 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 setup-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 Kom­men­ta­re.

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);
    }
  }
}


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 19:46