Arduino-Countdown
Arduino Projekte

Ein einfacher Arduino-Countdown mit Retro-Optik

In diesem Projekt baust du dir einen Arduino-Countdown, der auf Knopfdruck einen Timer startet und die Sekunden auf einem Display herunterzählt.

Für das gewisse Etwas sorgt eine 7-Segment-Anzeige und der Umstand, dass du z.B. dein Ei nicht in 7 Minuten kochst, sondern in 420 Sekunden.

Das haben wir für dieses Projekt verwendet (Mengen siehe unten):

Angebot
ARDUINO UNO REV 3 [A000066]
Arduino Uno ist weltweit die am häufigsten verwendete und dokumentierte Platine
17,40 EUR
AZDelivery MAX7219 Led Modul 8 Bit 7-Segmentanzeige LED Display für Arduino und Raspberry Pi
✔️ Versorgungsspannung: 5V; ✔️ 0.5" 7-Segmentanzeige; ✔️ Driver IC: MAX7219;...
4,79 EUR
AZDelivery KY-006 Passives Piezo Buzzer Alarm Modul für Arduino inklusive eBook!
✔️ Piezoelektrischer Buzzer (passiv); ✔️ Betriebsspannung 5 V
4,79 EUR
Tactile Switch 25pcs Tactile Push Button Switch 4 Pins SMD PCB Micro Momentary Tact Assortment Kit 12x12x7.3mm with 5 Colors Round Cap and Box for Arduino
25pcs Tactile Push Button Switch with 25pcs 5 Colors Round Cap.; Knopffarbe: Schwarz und...
9,99 EUR
SODIAL(R) 100 x 1/ 4W 250V 10K Ohm Axiale Fuehrung Kohleschichtwiderstaende
Produktname: Widerstand; Widerstand-Typ: Kohleschicht; Nennleistung: 1/4 W;...
3,84 EUR

Der Aufbau

Für den Countdown benötigst du drei Bauteile: eine 7-Segment-Anzeige*, einen passiven Piezo-Summer und einen Button, den du mit einem Pull-down-Widerstand mit deinem Arduino verbindest.

In diesem Projekt verwenden wir einen Arduino Uno*, aber du kannst natürlich so gut wie jedes andere Board verwenden. Außerdem benötigst du noch ein Breadboard und ein paar Kabel.

Die 7-Segment-Anzeige anschließen

Los geht es mit dem Display, auf dem der Countdown läuft. Daran befinden sich fünf Pins, die du wie folgt an deinem Arduino anschließt:

7-Segment-AnzeigeArduino
VCC5V oder 3,3V
GNDGND
DIN12
CS10
CLK11

Wir verwenden ein Display mit 8 Ziffern, das dir ermöglichen würde, die Sekunden von gut drei Jahren herunterzuzählen. Du kannst aber natürlich auch ein kleineres verwenden – der später vorgestellte Sketch funktioniert mit jeder Anzeige, die per MAX7219- oder 7221-Chip und der Bibliothek LedControl.h gesteuert wird.

Der Startbutton samt Pull-down-Widerstand

Jeder gute Countdown benötigt natürlich einen Button, der ihn startet. Setze ihn über die Brücke deines Breadboards, sodass zwei Pins darüber und zwei darunter stecken.

Verbinde anschließend den linken Pin mit Plus. Den rechten Pin verbindest du einmal mit einem 10kOhm-Widerstand mit Minus – und außerdem mit einem Kabel mit dem Digitalpin 2 an deinem Arduino. Diesen sogenannten Pull-down-Widerstand benötigst du, damit dein Arduino zuverlässig eine 0 empfängt, solange du den Button nicht drückst. Sobald du ihn drückst, springt das Singal auf 1.

Hier erfährst du mehr über Pull-up- und Pull-down-Widerstände.

Anschluss des Buttons mit Pull-up-Widerstand

Der Piezo-Buzzer für den Alarm

Was, wenn die Zeit abgelaufen ist? Richtig, dann schlägt ein Piezo-Buzzer Alarm. Setze deinen Piezo auf das Breadboard und verbinde einen Pin mit Minus und den anderen mit dem Digitalpin 3.

Anschluss des Piezo-Buzzers

Und das war es auch schon. Schauen wir uns den Code an

Der Sketch für den Arduino-Timer

Die meisten Zeilen im Code benötigst du für den Countdown auf dem Display. In diesem Tutorial auf pollux labs lernst du, wie du eine 7-Segment-Anzeige steuerst, weshalb wir uns hier auf andere Aspekte des Sketchs konzentrieren.

Zu Beginn des Sketchs legst du die Pins für den Button und den Piezo-Summer fest:

const byte buttonPin = 2;
const byte buzzerPin = 3;

Anschließend erstellst du eine Variable, in der du die Sekunden festlegen kannst, die dein Arduino-Countdown herunterzählen soll:

long countdown = 10;

Als Typ verwendest du hier long, um große Zahlen speichern zu können, die eine 7-Segment-Anzeige voll ausschöpfen. Der Typ int reicht auf dem Arduino Uno nur für Zahlen im Bereich -32.768 bis 32.767, auf größeren Boards auch für mehr. Hier erfährst du mehr über dieses Thema.

Der Loop

In der Funktion void loop() geschieht eigentlich nicht viel. Hier wartet dein Sketch nur darauf, dass du den Button drückst und den Countdown startest:

void loop() {
  Serial.println(digitalRead(buttonPin));
  if (digitalRead(buttonPin) == 1) {
    timer();
  }
}

Hierfür liest du mit der Funktion digitalRead() den Button-Pin. Wenn du diesen drückst, springt der Wert auf 1, was die Funktion timer() startet, die wir uns jetzt genauer anschauen.

void timer() {
  number = countdown;
  Serial.println("Timer started!");
  while (number > 0) {
    numberIntoDigits();
    displayNumber();
    delay(1000);
    lc.clearDisplay(0);
    number--;
  }
  if (number == 0) {
    tone(buzzerPin, 440, 1000);
  }
}

Zunächst weist du den Wert der Variable countdown, den du zu Beginn festgelegt hast, einer Variablen number zu. Diese Variable verwenden und verändern wir während des Countdowns, sodass die ursprünglich von dir bestimmte Zeit in der Variablen countdown unberührt bleibt.

Warum? Nun, somit kannst du deinen Arduino-Countdown immer wieder starten, da nur die “Hilfsvariable” number verändert wird. 🙂

Im While-Loop startest du die beiden Funktionen numberIntoDigits() und displayNumber(), über die du in diesem Tutorial mehr erfährst. Anschließend wartest du eine Sekunde, löschst das Display und ziehst von der Zahl in der Variablen number eins ab. Dann beginnt der nächste Durchgang.

Sobald der Countdown bei der Null angekommen ist, ertönt dein Piezo:

  if (number == 0) {
    tone(buzzerPin, 440, 1000);
  }

Der Einfachheit halber spielt er im obigen Beispiel nur für eine Sekunde den Ton A (mit 440Hz). In diesem Tutorial erfährst du mehr darüber, wie du einen Piezo verwendest und damit Melodien spielst.

Hier nun der gesamte Sketch zum Herauskopieren und Hochladen:

#include "LedControl.h"

const byte buttonPin = 2;
const byte buzzerPin = 3;
long number;

//Trage hier die Sekunden ein, die heruntergezählt werden sollen
long countdown = 10;

//Ziffern
int a,b,c,d,e,f,g,h;

LedControl lc = LedControl(12, 11, 10, 1);

void numberIntoDigits() {

  h = number % 10;

  if (number > 9) {
    g = (number / 10) % 10;
  }
  if (number > 99) {
    f = (number / 100) % 10;
  }
  if (number > 999) {
    e = (number / 1000) % 10;
  }
  if (number > 9999) {
    d = (number / 10000) % 10;
  }
  if (number > 99999) {
    c = (number / 100000) % 10;
  }
  if (number > 999999) {
    b = (number / 1000000) % 10;
  }
  if (number > 9999999) {
    a = (number / 10000000) % 10;
  }
}

void displayNumber() {

  lc.setDigit(0, 0, h, false);

  if (number > 9) {
    lc.setDigit(0, 1, g, false);
  }
  if (number > 99) {
    lc.setDigit(0, 2, f, false);
  }
  if (number > 999) {
    lc.setDigit(0, 3, e, false);
  }
  if (number > 9999) {
    lc.setDigit(0, 4, d, false);
  }
  if (number > 99999) {
    lc.setDigit(0, 5, c, false);
  }
  if (number > 999999) {
    lc.setDigit(0, 6, b, false);
  }
  if (number > 9999999) {
    lc.setDigit(0, 7, a, false);
  }
}

void timer() {
  number = countdown;
  Serial.println("Timer started!");
  while (number > 0) {
    numberIntoDigits();
    displayNumber();
    delay(1000);
    lc.clearDisplay(0);
    number--;
  }
  if (number == 0) {
    tone(buzzerPin, 440, 1000);
  }
}

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(115200);
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
}

void loop() {
  Serial.println(digitalRead(buttonPin));
  if (digitalRead(buttonPin) == 1) {
    timer();
  }
}

Wie geht es weiter?

Mögliche Verbesserungen für deinen Arduino-Countdown könnte eine Alarm-Melodie sein. Oder du versuchst dich an der Möglichkeit, die Zeit nicht im Sketch, sondern über Buttons auf dem Breadboard einstellen zu können.

Letzte Aktualisierung am 28.09.2020 / Affiliate Links / Bilder von der Amazon Product Advertising API

Vielleicht interessiert dich das auch

Kommentare sind nicht verfügbar