Как запустить несколько двигателей постоянного тока по разным схемам?
Я полный новичок в программировании и надеюсь, что кто - то сможет помочь мне здесь. Я занимаюсь тактильным исследовательским проектом, где 8 монетных вибрирующих двигателей постоянного тока будут установлены на пальцах испытуемых (исключая большие пальцы), и испытуемый должен ответить на количество пальцев, на которых он чувствует вибрации.
Каждое испытание должно иметь различную схему выходов, скажем: в первом испытании активируются 4 двигателя-двигатель 1, двигатель 5, двигатель 8 и двигатель 3. В одном испытании двигатели должны иметь общую задержку в 150 мс и перерыв в 4 секунды после следующего запуска.
Мой вопрос заключается в том, что в 8 двигателях возможны 255 различных паттернов активации. Как определить все эти 255 паттернов и рандомизировать их последовательность? Я использую мега-плату и подключаю каждый двигатель к ШИМ-контакту, и все они имеют общую землю.
Вот пример кода с 3 такими комбинациями (здесь подключено только семь двигателей):
#define viboutpin 2
#define viboutpin1 3
#define viboutpin2 4
#define viboutpin3 5
#define viboutpin4 6
#define viboutpin5 7
#define viboutpin6 8
void setup() {
pinMode(viboutpin,OUTPUT);// определить контакт как выход
pinMode(viboutpin1,OUTPUT);
pinMode(viboutpin2,OUTPUT);
pinMode(viboutpin3,OUTPUT);
pinMode(viboutpin4,OUTPUT);// определить контакт как выход
pinMode(viboutpin5,OUTPUT);
pinMode(viboutpin6,OUTPUT);
}
void loop() {
digitalWrite(viboutpin,HIGH);
digitalWrite(viboutpin1,HIGH);
digitalWrite(viboutpin2,HIGH);
digitalWrite(viboutpin3,HIGH);
digitalWrite(viboutpin4,HIGH);
digitalWrite(viboutpin5,HIGH);
digitalWrite(viboutpin6,HIGH);
delay(150);
digitalWrite(viboutpin, LOW);
digitalWrite(viboutpin1,LOW);
digitalWrite(viboutpin2,LOW);
digitalWrite(viboutpin3,LOW);
digitalWrite(viboutpin4,LOW);
digitalWrite(viboutpin5,LOW);
digitalWrite(viboutpin6,LOW);
delay(2000);
digitalWrite(viboutpin2,HIGH);
digitalWrite(viboutpin6,HIGH);
delay(150);
digitalWrite(viboutpin2,LOW);
digitalWrite(viboutpin6,LOW);
delay(2000);
digitalWrite(viboutpin4,HIGH);
delay(150);
digitalWrite(viboutpin4,LOW);
delay(2000);
}
@PALAK sharma, 👍1
1 ответ
Почему бы не сгенерировать случайное число psuedo от 0 до 255 и не использовать его в качестве кода, для которого должны быть активированы двигатели - бит 0 == viboutputpin0 и т. Д.? Затем одна функция может посмотреть на каждый бит по очереди и активировать этот двигатель, если бит установлен, задержать и остановить двигатели.
Вы, вероятно, захотите проверить свой код с помощью нескольких заранее определенных тестовых шаблонов вместо случайных, и как только вы убедитесь, что он работает, случайным образом посеять генератор случайных чисел, так что ваш проект будет генерировать другой шаблон каждый раз. Один из способов сделать это-попросить оператора через терминал нажать кнопку "Отправить" (или нажать пробел, если вы используете отдельный эмулятор терминала, который отправляет ключ за ключом). Измерьте время от запроса до ответа в микросекундах, отбросьте 2 или 3 наименее значимых бита результата и сохраните следующие 8. Разрешение функции micros() составляет 4 usec при 16 МГц, что является причиной отбрасывания этих 2 нижних бита.
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как управлять 4 двигателями постоянного тока с помощью Arduino?
- Измерение скорости двигателя постоянного тока с помощью поворотного энкодера
- Почему Arduino сбрасывается во время управления двигателями?
- Запуск нескольких двигателей одновременно
- Переменная скорость разгона для двигателей, управляемых джойстиком
- Как заставить двигатели постоянного тока работать одновременно?
- Нужна помощь в создании кода, который перемещает двигатель постоянного тока CW или CCW с помощью двух разных кнопок