Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Zufallszahlen in Arduino generieren: Eine Einführung

Posted on 23. Oktober 202323. Oktober 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du ganz einfach Zufallszahlen am Arduino mit Basisfunktionen der Arduino IDE generieren kannst. Du benötigst also keine zusätzliche Bibliothek dafür! Die generierten Zahlen kannst du dann zum Beispiel für Sound und Lichteffekte verwenden.

Inhaltsverzeichnis

  • Wie werden Zufallszahlen am Computer erstellt?
  • Wie erstellt man Zufallszahlen am Arduino?
  • Verwenden von Sensoren für die Generierung von Zufallszahlen am Arduino
  • Ein Beispiel wie man Zufallszahlen am Arduino generiert
    • Code zum Generieren einer Zufallszahl in der Arduino IDE
    • Erzeugen einer Zufallszahl per Tastendruck und darstellen auf LEDs

Wie werden Zufallszahlen am Computer erstellt?

Zufallszahlen am Computer werden eigentlich nicht wirklich „zufällig“ generiert. Stattdessen verwendet der Computer spezielle mathematische Tricks, um Zahlen zu erzeugen, die wie Zufallszahlen aussehen. Es beginnt mit einer Startzahl (wie eine geheime Zahl), und dann führt der Computer bestimmte Rechenoperationen aus, um die nächste Zahl zu erstellen. Das geschieht so schnell, dass es wie Zufallszahlen aussieht. Aber wenn wir denselben Startwert verwenden, bekommen wir die gleiche Zahlenfolge – das ist der Grund, warum sie „Pseudozufallszahlen“ heißen. Es ist wie Magie, aber eigentlich steckt Mathematik dahinter!

Wie erstellt man Zufallszahlen am Arduino?

Am Arduino werden Zufallszahlen auf ähnliche Weise wie am Computer erzeugt, mit dem Unterschied, dass der Arduino aufgrund seiner begrenzten Ressourcen Pseudozufallszahlen verwendet. Hier ist eine vereinfachte Erklärung:

Der Arduino verwendet einen Startwert (genannt „Seed“), um eine Zahlenfolge zu generieren. Diese Zahlenfolge sieht zufällig aus, obwohl sie es nicht wirklich ist. Der Arduino verwendet einen speziellen mathematischen Trick, um die nächste Zufallszahl in der Folge zu berechnen. Dieser Trick basiert auf einfachen Rechenoperationen wie Multiplikation und Addition.

Der Startwert ist entscheidend, weil er die gesamte Zahlenfolge bestimmt. Wenn du denselben Startwert verwendest, erhältst du die gleiche Zahlenfolge. Das bedeutet, dass die erzeugten Zufallszahlen vorhersehbar sind, solange du denselben Startwert verwendest.

Der Arduino ermöglicht es dir auch, den Startwert mithilfe von Sensoren oder Eingabewerten zu ändern, um die Zufallszahlen unvorhersehbarer zu gestalten.

Insgesamt verwendet der Arduino also auch Pseudozufallszahlen, die auf Mathematik basieren, um den Eindruck von Zufälligkeit zu erzeugen, während sie in Wirklichkeit deterministisch sind.

Verwenden von Sensoren für die Generierung von Zufallszahlen am Arduino

Im letzten Absatz habe ich dir erläutert, wie man die Zufallszahlen am Arduino generieren kann, hier wurde ebenso erwähnt, dass man analoge Sensoren dafür einsetzen kann. Eigentlich benötigt man keinen speziellen analogen Sensor, wir werden hier lediglich den Umstand nutzen, dass die analogen Sensoren nicht so Werte stabil sind und daher eine Schwankung im Bereich von 0 bis 1023 vorkommt.

Wir könnten ebenso auch einen unbestückten analogen Pin verwenden und somit ebenso diesen für die Generierung von Zufallszahlen verwenden.

Ein Beispiel wie man Zufallszahlen am Arduino generiert

Im Nachfolgenden verwende ich den Arduino UNO R4 Minima, du kannst aber auch den Vorgänger UNO R3 verwenden.

Arduino UNO R3
Arduino UNO R3
Arduino UNO R4 Minima
Arduino UNO R4 Minima

Code zum Generieren einer Zufallszahl in der Arduino IDE

Nachfolgend der Code zum Generieren einer Zufallszahl in der Arduino IDE:

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
}

void loop() {
  //erzeugen einer Startzahl aus dem aktuellen Wert,
  //des analogen Pins A0
  int analogValue = analogRead(A0);
  randomSeed(analogValue);
  //erzeugen einer Zufallszahl von 0 bis 5
  int zufallszahl = random(6);
  //ausgeben der generierten Zufallszahl auf 
  //der seriellen Schnittstelle
  Serial.print("Zufallszahl: ");
  Serial.print(zufallszahl);
  Serial.print("[analogValue: ");
  Serial.print(analogValue);
  Serial.print("]");
  Serial.println();
  //einlegen einer Pause von 1500 Millisekunden (1,5 Sekunden)
  delay(1500);
}

Der obige Code gibt im Intervall von 1,5 Sekunden eine neue Zufallszahl auf der seriellen Schnittstelle aus.

Ausgabe von Zufallszahlen in der Arduino IDE inkl. Startwert
Ausgabe von Zufallszahlen in der Arduino IDE inkl. Startwert

Zusätzlich wird auch der ermittelte Wert vom analogen Pin ausgegeben, dieser Wert wird genutzt, um einen Startwert für die Ermittlung einer Zufallszahl zu haben. Du siehst in der Grafik, dass wenn der Startwert gleich ist, ist auch die Zufallszahl gleich.

Erzeugen einer Zufallszahl per Tastendruck und darstellen auf LEDs

Für die Generierung der Zufallszahlen verwende ich einen Taster und zur Darstellung LEDs. Mit diesen LEDs kann ich die Zahlen von 1 bis 6 darstellen.

Schaltung - Arduino UNO R3 mit LEDs & Taster
Schaltung – Arduino UNO R3 mit LEDs & Taster

Wenn man jedoch zum binären System wechselt, kann man sogar noch größere Zahlen darstellen. Jedoch würde dieses hier zu weit gehen.

#include <Bounce2.h>

int taster = 7;

const int NUM_LEDS = 6;
int leds[6] = { 13, 12, 11, 10, 9, 8 };

Bounce2::Button button = Bounce2::Button();

void setup() {
  Serial.begin(9600);

  for (int led = 0; led < NUM_LEDS; led++) {
    pinMode(leds[led], OUTPUT);
  }

  button.attach(taster, INPUT_PULLUP);  // USE EXTERNAL PULL-UP
  button.interval(5);
  button.setPressedState(LOW);
}

void resetLEDs() {
  for (int led = 0; led < NUM_LEDS; led++) {
    digitalWrite(leds[led], LOW);
  }
}

void loop() {
  button.update();
  if (button.pressed()) {
    randomSeed(analogRead(A0));
    int zufallszahl = random(6);
    Serial.println(zufallszahl);
    resetLEDs();
    digitalWrite(leds[zufallszahl], HIGH);
    delay(125);
  }
}

Wenn man nun den Code auf dem Arduino ausführt, dann kann man per Tastendruck eine Zufallszahl generieren, welche dann über die LEDs visualisiert wird.

Arduino UNO R4 Minima & Zufallszahlen
Dieses Video auf YouTube ansehen.

Diese Werte könnte man jetzt nutzen um die Augen eines Würfels (1 bis 6) darzustellen, natürlich sollte man dann auch die LEDs dementsprechend anordnen.

Wie du einen Würfel mit Zufallszahlen programmierst, habe ich dir im Beitrag Arduino Workshop #1 2019: LED Würfel gezeigt.

Fertige Platine mit den Bauelementen für den LED Würfel
Fertige Platine mit den Bauelementen für den LED-Würfel

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}