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

Простой секундомер на Arduino с кнопкой и EEPROM

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

Arduino UNO (или совместимая плата) 1
Кнопка (не фиксирующаяся) с подтягивающим резистором 1 кОм 1
Резистор 10 кОм 1

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

О проекте

Простой хронометр, который засекает время нажатия кнопки и сохраняет результат в EEPROM (невиолатильная память). Используются прерывания для точного фиксирования моментов нажатия и отпускания.

EEPROM

Встроенная память Arduino, сохраняющая данные при отключении питания. Используется библиотека EEPROM.h (входит в стандартную поставку). Адрес 0 выбран для хранения 4-байтового float.

Прерывания

Функция attachInterrupt() вызывает обработчик при смене уровня на пине 2 (CHANGE). Это позволяет зафиксировать начало и конец нажатия. Подтягивающий резистор держит пин в LOW до нажатия.

Код проекта

Подключения и определения

#include <EEPROM.h>
#define interruptPin 2
#define eeAddress 0
float starttime = 0;
float endtime = 0;
float resulttime = 0, oldresulttime = 0;

setup()

void setup() {
  Serial.begin(9600);
  while (!Serial) { ; }
  Serial.println("Serial comms are ready sir!:.. bip bip");
  attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);
}

loop()

void loop() {
  // основной цикл пуст, вся работа в прерывании
}

Обработчик прерывания refreshTime()

void refreshTime() {
  if (digitalRead(interruptPin)) { // нажатие (HIGH)
    starttime = millis();
    Serial.print("Start time: "); Serial.println(starttime);
  } else { // отпускание (LOW)
    endtime = millis();
    resulttime = endtime - starttime;
    Serial.print("End time: "); Serial.println(endtime);
    Serial.print("Result time: "); Serial.println(resulttime);
    WhatsNewEeprom();
  }
}

Запись в EEPROM

void WhatsNewEeprom() {
  Serial.println("-----------checking eeprom");
  EEPROM.get(eeAddress, oldresulttime);
  Serial.print("oldresulttime"); Serial.println(oldresulttime);
  Serial.print("resulttime"); Serial.println(resulttime);
  if (resulttime != oldresulttime) {
    EEPROM.put(eeAddress, resulttime);
    Serial.print("-----Ding! New time recorded in eeprom: "); Serial.println(resulttime);
  } else {
    Serial.println("No new time found, eeprom was not disturbed");
  }
}

Подавление дребезга контактов

Механические кнопки дают многократные переключения при нажатии. Можно устранить программно (задержка/фильтр) или аппаратно — конденсатором 220 нФ параллельно кнопке (от пина к GND). Конденсатор сглаживает быстрые скачки напряжения.

Схемы

Простая схема: кнопка с подтягивающим резистором к GND, пин 2 — вход прерывания.

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

  1. Стильные настенные часы на четырех кольцах Adafruit Neopixel 60 LED и Arduino
  2. Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
  3. Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
  4. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  5. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  6. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  7. Создание пользовательских LED-часов с будильником — видно с 12 метров
  8. Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
  9. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  10. Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код