Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun

Компоненты и материалы

Программное обеспечение

Описание проекта

Этот проект был создан из-за отсутствия под рукой таймера. Использование крайне простое: загрузите код в Arduino (подойдет любая плата), и обратный отсчет запустится автоматически.

Для изменения общего времени отсчета измените значение переменной n в коде. Важно: 1000 = 1 секунда. Таким образом, 60000 = 60 секунд. Формула: SEК × 1000 даст нужное число для замены 60000. При нажатии кнопки Reset счетчик автоматически перезапускается.

long n = 60000; // начальное время — МОЖНО ИЗМЕНИТЬ НА ЛЮБОЕ ЖЕЛАЕМОЕ

Код

Код управляет 4-разрядным 7-сегментным дисплеем без использования специализированных библиотек, реализуя мультиплексировку вручную.

// Распиновка 7-сегментного дисплея -> Arduino
// pin 11 - A = 12
// pin 7  - B = 10
// pin 4  - C = 8
// pin 2  - D = 7
// pin 1  - E = 6
// pin 10 - F = 11
// pin 5  - G = 9
// pin 3  - Decimal point

const int a = 12, b = 10, c = 8, d = 7, e = 6, f = 11, g = 9;
int p = 0; // decimal point pin
int startStopReset = 13; // кнопка сброса
const int d1 = 1, d2 = 2, d3 = 3, d4 = 4; // управляющие пины разрядов
long n = 60000; // начальное время (мс)
int x = 100;
int del = 55; // задержка мультиплексировки (мкс)

void setup() {
  pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT);
  pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT);
  pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(p, OUTPUT);
  pinMode(startStopReset, INPUT_PULLUP); // используем встроенный подтягивающий резистор
}

void loop() {
  digitalWrite(p, HIGH);
  clearLEDs();
  pickDigit(1); pickNumber((n/x/1000)%10); delayMicroseconds(del);
  clearLEDs();
  pickDigit(2); pickNumber((n/x/100)%10); delayMicroseconds(del);
  clearLEDs();
  pickDigit(3); dispDec(3); pickNumber((n/x/10)%10); delayMicroseconds(del);
  clearLEDs();
  pickDigit(4); pickNumber(n/x%10); delayMicroseconds(del);
  
  n--; // для секундомера используйте n++
  
  if (digitalRead(startStopReset) == LOW) { // нажатие кнопки сброса
    n = 60000; // восстановить исходное время (ИЗМЕНИТЕ НА СВОЁ ЗНАЧЕНИЕ)
  }
}

// Активация нужного разряда (общий анод -> LOW включает)
void pickDigit(int x) {
  digitalWrite(d1, HIGH); digitalWrite(d2, HIGH); digitalWrite(d3, HIGH); digitalWrite(d4, HIGH);
  switch(x) {
    case 1: digitalWrite(d1, LOW); break;
    case 2: digitalWrite(d2, LOW); break;
    case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break; // точка на 3-м разряде
    default: digitalWrite(d4, LOW); break;
  }
}

// Отображение цифры на активном разряде
void pickNumber(int x) {
  switch(x) {
    default: zero(); break;
    case 1: one(); break; case 2: two(); break; case 3: three(); break;
    case 4: four(); break; case 5: five(); break; case 6: six(); break;
    case 7: seven(); break; case 8: eight(); break; case 9: nine(); break;
  }
}

void dispDec(int x) { digitalWrite(p, LOW); } // включить точку

void clearLEDs() {
  digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW);
  digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p, LOW);
}

// Функции для каждой цифры (сегменты a-g)
void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); }
void one()  { digitalWrite(a, LOW);  digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW);  digitalWrite(e, LOW);  digitalWrite(f, LOW);  digitalWrite(g, LOW); }
void two()  { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW);  digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW);  digitalWrite(g, HIGH); }
void three(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW);  digitalWrite(f, LOW);  digitalWrite(g, HIGH); }
void four() { digitalWrite(a, LOW);  digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW);  digitalWrite(e, LOW);  digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW);  digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW);  digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void six()  { digitalWrite(a, HIGH); digitalWrite(b, LOW);  digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void seven(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW);  digitalWrite(e, LOW);  digitalWrite(f, LOW);  digitalWrite(g, LOW); }
void eight(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW);  digitalWrite(f, HIGH); digitalWrite(g, HIGH); }

Схема подключения

Используйте приведенную схему для подключения 4-разрядного дисплея к Arduino.

Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun

Производственный процесс

  1. Создание потрясающей системы Ambilight для монитора на Arduino
  2. Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
  3. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  4. Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
  5. Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
  6. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  7. Умный водяной пистолет с датчиком движения на Arduino Nano
  8. Arduino-таймер для мытья рук: простое DIY-устройство для борьбы с COVID‑19
  9. Arduino Sunflower: электронный подсолнух, следящий за солнцем
  10. Самодельный RC Porsche на Arduino: Пошаговое руководство