Bingomaschine


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Bingo

An alle Spieler werden jeweils eine oder mehrere Spielkarten verteilt. Jede Karte enthält mehrere aufgedruckte Zahlen, die in Reihen angeordnet sind. In regelmäßigen Zeitabständen werden während des Spiels nach dem Zufallsprinzip Zahlen gezogen. Die Spieler suchen auf ihren Karten die Zahlen und decken sie ggf. ab. Ist eine Zahlen-Reihe komplett abgedeckt, heißt es dann: Bingo!

Das Ziehen der Zahlen kann auf unterschiedliche Art und Weise geschehen. Die Aufgabe kann z. B. einer der Spieler oder eine Lotto-Trommel erledigen.
Sobald sich jedoch der Spielgemeinschaft ein Hobby-Elektroniker anschließt, wird diese Aufgabe verständlicherweise von einer elektronischen Schaltung, die er natürlich selbst konstruiert hat, übernommen. Hier ein Lösungsbeispiel für diese Aufgabe.

5101AH

Die Pin-Belegung der 7-Segment-Anzeige 5101AH (gemeinsame Kathode).

In unserer Schaltung sind zwei 7-Segment-Anzeigen vorhanden, die Zufallszahlen von 1 bis 75 anzeigen. Mit einem Taster (S1) wird eine neue Zufallszahl angefordert. Für Zufallszahlen ist der kleine Microcontroller Arduino zuständig. Um die Anzahl der Ausgänge zu reduzieren wird nur ein BCD-Decoder eingesetzt, an dem beide 7-Segment-Anzeigen angeschlossen sind. Die Displays werden jeweils mit einem Transistor ein- und ausgeschaltet. Die Ansteuerung der beiden Anzeigen erfolgt in Multiplex-Verfahren. Sie werden in kurzen Zeitabständen abwechselnd ein- und ausgeschaltet, wodurch der Eindruck entsteht, dass sie dauerhaft leuchten.

74HC4511

Pin-Belegung 74HC4511.

Beide Displays werden an den BCD-Decoder 74HC4511 angeschlossen. Er bekommt die gerade generierte Zahl (BCD-codiert) über die vier Leitungen D0...D3 von Arduino. Genau genommen sendet Arduino über D0 bis D3 abwechselnd die Ziffern, aus welchen die gezogene Zahl besteht. Das Umschalten zwischen beiden Displays erfolgt dabei so schnell, dass der Mensch dies nicht wahrnehmen kann.

Bingo Schaltplan

Bingo Schaltplan

Bingo Testschaltung

Bingo Testschaltung

Das Programm

Sobald der Taster S1 betätigt wird, wird eine neue Zufallszahl generiert. Die gerade zur Verfügung stehende Zahlen (Die Bingo-Zahlen dürfen sich nicht wiederholen) stehen im "Elementenfeld". Anschließend wird die Zahl in zwei Ziffern zerlegt. Die Ziffern werden dann abwechselnd zum BCD-Decoder geschickt. Gleichzeitig wird mit dem zuständigem Transistor die gewünschte 7-Segment-Anzeige aktiviert. So wird zuerst für 10ms die erste Anzeige mit der ersten Ziffer, anschließend dann die Zweite mit der zweiten Ziffer beschrieben.


  // ----------------------------------------------------------
  // Bingo - Zahlen ziehen
  // ----------------------------------------------------------


  byte bcd_D0 = 44;
  byte bcd_D1 = 40;
  byte bcd_D2 = 42;
  byte bcd_D3 = 46;
  byte DIGIT_1 = 48;
  byte DIGIT_2 = 50;
  byte NEXT = 52;
  byte BCD_Pin [] = { 46, 42, 40, 44 };
  byte Ziffer_1;
  byte Ziffer_2;
  byte i;
  byte Elementenfeld [76];
  byte Element_Nr;
  byte Freie_Elemente = 75;
  byte Bingo_Zahl;
  bool Flanke;

  void setup() {
    pinMode (bcd_D0, OUTPUT);
    pinMode (bcd_D1, OUTPUT);
    pinMode (bcd_D2, OUTPUT);
    pinMode (bcd_D3, OUTPUT);
    pinMode (DIGIT_1, OUTPUT);
    pinMode (DIGIT_2, OUTPUT);
    pinMode (NEXT, INPUT_PULLUP);
    for (i=0; i<76; i++) { Elementenfeld [i] = i; }
  }

  // Hauptprogramm
  // ++++++++++++++++++++++++++++++++++++++++++++++++++++
  void loop() {

    // NEXT (nächste Bingo-Zahl generieren) .............
    if (digitalRead(NEXT) == HIGH) { Flanke = 0; }
    if (digitalRead(NEXT) == LOW && Flanke == 0) {
      delay (10);
      Element_Nr = random(1,Freie_Elemente);
      Bingo_Zahl = Elementenfeld [Element_Nr];
      for (i=Element_Nr; i<Freie_Elemente; i++) {
        Elementenfeld [i] = Elementenfeld [i + 1];
      }
      Freie_Elemente = --Freie_Elemente;
      Flanke = 1;
    }

    // Ziffern ..........................................
    if (Bingo_Zahl < 10) {
      Ziffer_1 = 0;
      Ziffer_2 = Bingo_Zahl; }
    if (Bingo_Zahl > 9) {
      Ziffer_1 = Bingo_Zahl / 10;
      Ziffer_2 = Bingo_Zahl - (Ziffer_1 * 10); }

    // DIGIT 1 ..........................................
    digitalWrite(DIGIT_2, LOW);
    digitalWrite(DIGIT_1, HIGH);
    Anzeige (Ziffer_1);
    delay (10);

    // DIGIT 2 ..........................................
    digitalWrite(DIGIT_1, LOW);
    digitalWrite(DIGIT_2, HIGH);
    Anzeige (Ziffer_2);
    delay (10);
  }

  // Unterprogramm Ziffern bcd-kodieren
  // ++++++++++++++++++++++++++++++++++++++++++++++++++++
  void Anzeige (int Wert) {
    switch (Wert) {
      case 1 : {
        byte BCD_Wert [] = { 0, 0, 0, 1 };
        Ausgabe (BCD_Wert);
        break; }
      case 2 : {
        byte BCD_Wert [] = { 0, 0, 1, 0 };
        Ausgabe (BCD_Wert);
        break; }
      case 3 : {
        byte BCD_Wert [] = { 0, 0, 1, 1 };
        Ausgabe (BCD_Wert);
        break; }
      case 4 : {
        byte BCD_Wert [] = { 0, 1, 0, 0 };
        Ausgabe (BCD_Wert);
        break; }
      case 5 : {
        byte BCD_Wert [] = { 0, 1, 0, 1 };
        Ausgabe (BCD_Wert);
        break; }
      case 6 : {
        byte BCD_Wert [] = { 0, 1, 1, 0 };
        Ausgabe (BCD_Wert);
        break; }
      case 7 : {
        byte BCD_Wert [] = { 0, 1, 1, 1 };
        Ausgabe (BCD_Wert);
        break; }
      case 8 : {
        byte BCD_Wert [] = { 1, 0, 0, 0 };
        Ausgabe (BCD_Wert);
        break; }
      case 9 : {
        byte BCD_Wert [] = {1, 0, 0, 1 };
        Ausgabe (BCD_Wert);
        break; }
      case 0: {
        byte BCD_Wert [] = { 0, 0, 0, 0 };
        Ausgabe (BCD_Wert);
        break; }
    }
  }

  // Unterprogramm Ziffern anzeigen
  // ++++++++++++++++++++++++++++++++++++++++++++++++++++
  void Ausgabe (byte BCD_Wert []) {
    for (i=0; i<4; i++) {
      digitalWrite (BCD_Pin [i], BCD_Wert [i]);
    }
  }
  // ----------------------------------------------------------

Kurzvideo


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz