Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Temporizador cuenta atrás ajustable con Arduino y display 7 segmentos 4 dígitos

Componentes y materiales

ComponenteCantidadNotas
Arduino Mega 2560 (cualquier Arduino sirve)1
Display 7 segmentos 4 dígitos (ánodo común)1
Pulsadores4Inicio/Parar, Reset, +, -
Buzzer1
Cables jumper~21
Protoboard tamaño completo1

Sobre el proyecto

Temporizador cuenta atrás standalone, ajustable mediante botones físicos (sin reprogramar). Incluye función PrintNumber() reutilizable para mostrar cualquier número (0-9999) en el display multiplexado durante un tiempo dado. Ideal para cocina, laboratorio, juegos, etc.

Funcionamiento

Código completo

#include <math.h>

int digit_pin[] = {6, 9, 10, 11}; // Pines PWM dígitos (izq a der)
int speakerPin = 15;
#define DIGIT_ON LOW
#define DIGIT_OFF HIGH

// Pines segmentos A-G
int segA = 2, segB = 3, segC = 4, segD = 5, segE = A0, segF = 7, segG = 8;

int button1=13, button2=12, button3=16, button4=17;
int countdown_time = 60; // Valor inicial (segundos)

struct Digits { int d[4]; };

void setup() {
  pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT); pinMode(segG, OUTPUT);
  for (int i=0; i<4; i++) pinMode(digit_pin[i], OUTPUT);
  pinMode(speakerPin, OUTPUT);
  pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP); pinMode(button4, INPUT_PULLUP);
}

void playTone(int tone, int duration) {
  for (long k=0; k < duration*1000L; k += tone*2) {
    digitalWrite(speakerPin, HIGH); delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);  delayMicroseconds(tone);
  }
}

void lightNumber(int n) {
  #define SEG_ON HIGH
  #define SEG_OFF LOW
  switch(n) {
    case 0: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_ON); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_OFF); break;
    case 1: digitalWrite(segA,SEG_OFF); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_OFF); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_OFF); digitalWrite(segG,SEG_OFF); break;
    case 2: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_OFF); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_ON); digitalWrite(segF,SEG_OFF); digitalWrite(segG,SEG_ON); break;
    case 3: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_OFF); digitalWrite(segG,SEG_ON); break;
    case 4: digitalWrite(segA,SEG_OFF); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_OFF); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_ON); break;
    case 5: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_OFF); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_ON); break;
    case 6: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_OFF); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_ON); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_ON); break;
    case 7: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_OFF); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_OFF); digitalWrite(segG,SEG_OFF); break;
    case 8: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_ON); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_ON); break;
    case 9: digitalWrite(segA,SEG_ON); digitalWrite(segB,SEG_ON); digitalWrite(segC,SEG_ON); digitalWrite(segD,SEG_ON); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_ON); digitalWrite(segG,SEG_ON); break;
    case 10: digitalWrite(segA,SEG_OFF); digitalWrite(segB,SEG_OFF); digitalWrite(segC,SEG_OFF); digitalWrite(segD,SEG_OFF); digitalWrite(segE,SEG_OFF); digitalWrite(segF,SEG_OFF); digitalWrite(segG,SEG_OFF); break;
  }
}

void SwitchDigit(int d) {
  for (int i=0; i<4; i++) digitalWrite(digit_pin[i], (i==d)?DIGIT_ON:DIGIT_OFF);
}

Digits IntToDigits(int n) {
  Digits dig; int zeros=0, d;
  for (int i=0; i<4; i++) {
    d = n / (int)pow(10, 3-i);
    zeros += d;
    n -= d * (int)pow(10, 3-i);
    dig.d[i] = (zeros!=0 || i==3) ? d : 10; // 10 = apagado (leading zero blank)
  }
  return dig;
}

void PrintNumber(int n, int timeMs) {
  Digits dig = IntToDigits(n);
  for (int i=0; i<= timeMs/20; i++) {
    if (digitalRead(button2)==LOW) return; // Reset aborta
    for (int j=0; j<4; j++) { SwitchDigit(j); lightNumber(dig.d[j]); delay(5); }
  }
}

bool Countdown(int n, int tickMs) {
  for (int q=n; q>0; q--) {
    PrintNumber(q, tickMs);
    if (digitalRead(button2)==LOW) return false; // Reset pulsado
  }
  PrintNumber(0,0);
  playTone(1519, 1000); // Tono final
  return true;
}

void resetMode() {
  int pressed3=0, pressed4=0;
  Digits dig = IntToDigits(countdown_time);
  while (digitalRead(button1)==HIGH) { // Espera Inicio
    for (int j=0; j<4; j++) { SwitchDigit(j); lightNumber(dig.d[j]); delay(5); }
    if (digitalRead(button3)==LOW) { // Decrementar
      if (pressed3==0 || pressed3>30) { if (countdown_time>0) countdown_time--; dig = IntToDigits(countdown_time); }
      pressed3++;
    } else if (digitalRead(button4)==LOW) { // Incrementar
      if (pressed4==0 || pressed4>30) { if (countdown_time<9999) countdown_time++; dig = IntToDigits(countdown_time); }
      pressed4++;
    }
    if (digitalRead(button3)==HIGH) pressed3=0;
    if (digitalRead(button4)==HIGH) pressed4=0;
  }
}

void loop() {
  resetMode();
  while (!Countdown(countdown_time, 962)) { resetMode(); }
  while (digitalRead(button2)==HIGH); // Espera soltar Reset
}

Esquemático

Conexiones: segmentos A-G a pines 2-5,7,8,A0; dígitos 1-4 a pines PWM 6,9,10,11; botones con pull-up interno a pines 12,13,16,17; buzzer a pin 15. Ver imagen esquemática adjunta.

Proceso de manufactura

  1. Pantalla de Cristal Líquido (LCD): Tecnología, Fabricación y Perspectivas Futuras
  2. Primal Display: construye monitor temperatura LCD con Raspberry Pi
  3. Cómo Instalar la Pantalla TFT 3.5″ Kuman en RetroPie – Guía Paso a Paso
  4. Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
  5. Entender el Watchdog Timer: Cómo evita bloqueos del microcontrolador
  6. Kit de máquina tragaperras alienígena ATmega328P
  7. Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
  8. Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
  9. Amortiguadores ajustables: mejorando altura de marcha y rendimiento
  10. Dominando la Sobrecarga de Métodos en C#: Conceptos, Ejemplos y Buenas Prácticas
  11. Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso