Как заставить мотор вращаться каждые 10 минут?
Я новичок в Arduino, пожалуйста, не будьте суровы. Я хочу, чтобы двигатель вращался каждые x промежутков времени (скажем, 10 минут). Как только программа запущена, я хочу, чтобы она запускала двигатель (останавливалась через 10 секунд) и каждые 10 минут продолжала процесс. Возможно ли это сделать?,
@New at Arduino, 👍2
Обсуждение2 ответа
Да, конечно, это возможно. Функция loop() может выглядеть примерно так:
loop(){
turn_motor_on();
wait_seconds(10);
turn_motor_off();
wait_minutes(10);
}
Теперь все, что вам нужно сделать, это написать свои функции turn_motor_on() и off, а также wait_seconds() и wait_minutes(). Я оставлю управление двигателем на ваше усмотрение, поскольку вы не предоставили никаких подробностей о том, как подключается двигатель.
Вы могли бы использовать функцию Arduino delay ():
void wait_seconds(int num_seconds){
for(int i=0; i<num_seconds; i++){
delay(1000);
}
}
void wait_minutes(int num_minutes){
for(int i=0; i<num_minutes; i++){
delay_seconds(60);
}
}
Конечно, есть много других способов сделать это, но этот метод прост и понятен, и вы легко начнете работу.
Самый простой вариант - использовать delay()
для реализации ожидания:
void loop() {
turn_motor_on();
delay(10000); // 10 секунд
turn_motor_off();
delay(600000); // 10 минут
}
Поскольку эти длинные числа могут быть трудночитаемыми, вы можете сделать их более удобочитаемыми, определив некоторые единицы измерения:
const unsigned long second = 1000;
const unsigned long minute = 60000;
Затем вы можете, например, отложить (10 * минут);
Остерегайтесь ловушки, если вы попытаетесь выполнить арифметику с целочисленными литералами. Следующее:
delay(10 * 60 * 1000); // BUG!
не будет работать на большинстве Arduino, так как умножение будет
выполняться для типа данных int, который может содержать только числа до
32 767. Безопаснее использовать либо явно типизированные константы (
unsigned long
- подходящий тип для задержек), либо целочисленные литералы, набранные с
суффиксом UL
(что означает “unsigned long”).
Обратите внимание, что Arduino не будет выполнять никакой полезной работы во время задержки. Если вы хотите выполнить какую-либо работу во время задержки, см. раздел “Мигание без задержки”. Пример Arduino.
Чувак! Научить новичка использовать задержку? Этот путь быстро ведет к безумию! (Для ОП: все в порядке, пока вы не захотите проверить нажатие кнопки, считывание показаний датчика или сделать ** что-нибудь еще ** во время этой задержки. Arduino со скрежетом останавливается с задержкой.), @Duncan C
Я бы посоветовал научиться использовать millis ()
, чтобы сделать то же самое, прямо сейчас. Если вы используете delay ()
, то в конечном итоге вам придется переписывать свой код только позже., @Duncan C
@DuncanC: Да, когда новичок находится на уровне 0, я думаю, что лучше начать с самого простого возможного подхода. И delay ()
проще, чем millis ()
: вот почему Blink находится в разделе 1 примеров Arduino, а BlinkWithoutDelay - в разделе 2. Кроме того, “необходимость переписать свой код позже” на самом деле хороша для новичка. Вот как ты учишься! Но обратите внимание, что я предупредил оператора, что в какой-то момент ему, возможно, придется использовать подход BlinkWithoutDelay., @Edgar Bonet
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Вопрос о различных способах подключения платы драйвера двигателя L298N к Arduino и двигателям и их питания.
- Обратное вращение шагового двигателя
- Неиспользуемые контакты в Arduino L293D motor shield?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как заставить сервопривод вращаться на угол больше 180°
- Остановка/запуск двигателя постоянного тока с концевыми выключателями и кнопкой включения/выключения
Да, возможно и хорошее начало для новичка. Посмотрите на пример BlinkWithoutDelay. Попробуйте несколько руководств по
millis ()
. Это даст вам представление о том, как вы можете выполнять временные действия с помощью Arduino. Если у вас возникнут какие-либо конкретные проблемы с этим, вы всегда можете вернуться сюда и спросить об этом :), @chrisl