Использование Arduino для создания обратного отсчета, который разблокирует коробку
Я новичок в Arduino. Так позвольте мне, если я говорю так, как новичок.
Я хочу создать устройство обратного отсчета (часы, которые будут отсчитывать обратный отсчет или что-то в этом роде), которое разблокирует коробку, когда время истекнет.
В качестве примера, скажем, я установил часы так, чтобы они начали отсчет с 2 часов, но когда для обратного отсчета остается 5 минут, коробка разблокируется
Какие вещи необходимы для того, чтобы он работал, поскольку все примеры, которые я вижу, в основном предназначены для открытия двери или коробки при изменении температуры.
@gbenga wale, 👍0
Обсуждение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
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
см. пример BlinkWithoutDelay., @Juraj
Какой - то дисплей, показывающий оставшееся время. Либо жидкокристаллический дисплей, либо 4-значный 7-сегментный дисплей. Для последних существуют пробойные платы, которые уже имеют необходимую схему для их управления. Для защелки можно было использовать сервопривод. Или, в качестве альтернативы, соленоид., @Gerben