Использование Arduino для создания обратного отсчета, который разблокирует коробку

Я новичок в Arduino. Так позвольте мне, если я говорю так, как новичок.

Я хочу создать устройство обратного отсчета (часы, которые будут отсчитывать обратный отсчет или что-то в этом роде), которое разблокирует коробку, когда время истекнет.

В качестве примера, скажем, я установил часы так, чтобы они начали отсчет с 2 часов, но когда для обратного отсчета остается 5 минут, коробка разблокируется

Какие вещи необходимы для того, чтобы он работал, поскольку все примеры, которые я вижу, в основном предназначены для открытия двери или коробки при изменении температуры.

, 👍0

Обсуждение

см. пример BlinkWithoutDelay., @Juraj

Какой - то дисплей, показывающий оставшееся время. Либо жидкокристаллический дисплей, либо 4-значный 7-сегментный дисплей. Для последних существуют пробойные платы, которые уже имеют необходимую схему для их управления. Для защелки можно было использовать сервопривод. Или, в качестве альтернативы, соленоид., @Gerben


1 ответ


1

Это звучит как головоломка для побега из комнаты. С электронной точки зрения вам нужно что-то для блокировки/разблокировки коробки, например серводвигатель, шаговый двигатель или (лучший вариант) нормально закрытый соленоид. Вам могут понадобиться некоторые компоненты для управления таким запирающим механизмом, например МОП-транзистор или транзистор (возможно, дарлингтон), в зависимости от того, какое устройство вы выберете и какое напряжение ему требуется для работы. Самое простое решение-серводвигатель, который ничего не требует, но имеет низкий крутящий момент, а это значит, что коробку можно легко форсировать. Самое надежное и надежное решение-это соленоид с ЧПУ, распространенные из них-12 В, так что вам понадобится усиленный МОП-транзистор p-канала и пара резисторов, чтобы управлять им от Arduino.

Для отображения времени вам, вероятно, захочется использовать жидкокристаллический дисплей, распространенные из них-16 рядов col x 2, большинство из них имеют встроенный чип для управления ими с помощью всего нескольких проводов.

Кроме того, вам нужен аккумулятор (напряжение и мощность зависят от выбранной вами схемы блокировки) и может быть кнопка (для безопасной разблокировки).

С точки зрения программного обеспечения вы хотите создать цикл, который начинается с блокировки коробки, а затем отсчитывает время: когда оставшееся время составляет менее 5 минут, он активирует схему механизма разблокировки.

int current = 0;
const int max = 2 * 60 * 60; // 2 часа в сек
const int grant = 5 * 60; // 5 минут в сек
bool unlocked = false;

void setup() {
    lock();
}

// executed once every second
void loop() {
    // любая открытая проверка безопасности должна быть выполнена здесь...
    // если все еще заблокировано и менее 5 минут до конца
    if (!unlocked && current > max - grant) {
        unlock();
    }
    
    display(current++);
    wait(1000);
}

// делает то, что необходимо для разблокировки, и устанавливает разблокированную переменную в 
void unlock() { ... }

// делает то, что необходимо для блокировки, и устанавливает разблокированную переменную в false
void lock() { ... }

void display(int secs) {
    int h = secs / (60 * 60);
    int m = (secs / 60) % 60;
    int s = secs % 60;
    // отображение на ЖК-дисплее приведенных выше значений с соответствующим форматированием
}
    

Пара заметок:

  • если вы выберете нормально закрытый соленоид то обязательно найдете способ проникнуть внутрь коробки если что то пойдет не так с вашей схемой или если батареи разрядятся
  • возможно, вам захочется иметь скрытую кнопку или другой способ принудительной разблокировки, особенно для отладки и тестирования
,

Вы, вероятно, должны иметь "current = (millis() - startMillis) / 1000;" в "loop () и не" current++., @Edgar Bonet

Я пытался сделать это проще, чтобы понять, но вы правы: я не принимаю во внимание время, потраченное на цикл. Также учтите, что потери почти всегда будут в порядке 10-20мс... но вы определенно правы: моя “часовая” реализация наверняка будет дрейфовать, @Roberto Lo Giacco