Проблема начинающего с двигателем постоянного тока
Я новичок в электронике, и у меня возникла проблема при создании проекта. Я создал марсоход, управляемый через Bluetooth, используя HC-06, драйвер двигателя с двойным H-мостом и 4 двигателя постоянного тока. Однако только два двигателя постоянного тока движутся, а два других остаются неподвижными.
Не могли бы вы подсказать, что произошло?
Прилагается схема подключения двигателей и код.
char t;
void setup() {
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available()) {
t = Serial.read();
Serial.println(t);
}
if(t == '1') {
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
}
else if(t == '2') {
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
}
else if(t == '3') {
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
}
else if(t == '4'){
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
else if(t == '5') {
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
delay(100);
}
1 ответ
Чтобы проанализировать вашу проблему:
- Переключите два провода между двумя двигателями (и повторите это, чтобы получить все комбинации), чтобы выяснить, неправильный ли код/проводка до двигателей или возникла проблема с двигателями.
- Распечатайте значения контактов 9, 10, 11 и 12, а также значение t/input, чтобы проверить, управляются ли контакты так, как вы ожидаете.
- Удалите все двигатели, кроме одного, по одному, чтобы проверить, нет ли между ними влияния.
Ниже не является ответом на ваш вопрос, но я могу только привести код в соответствие с ответом.
Лучше использовать следующую форму кодирования:
void loop() {
if(Serial.available()){
t = Serial.read();
Serial.println(t);
}
if ((t >= '1') && (t <= '5'))
{
int input = (int) t - (int)'0';
digitalWrite( 9, (input == 1) || (input == 4) ? HIGH : LOW);
digitalWrite(10, (input == 2) ? HIGH : LOW);
digitalWrite(11, (input == 1) || (input == 3) ? HIGH : LOW);
digitalWrite(12, (input == 2) ? HIGH : LOW);
}
delay(100);
}
Примечание: ? : – это тернарный оператор, который означает: a ? b : c => если a, то b else c.
Вместо использования 9, 10, 11, 12 определите номера контактов (например, PIN_MOTOR_X), а для номеров ввода 1, 2, 3, 4, 5 определите ВЛЕВО, ВПРАВО, ВВЕРХ/ВПЕРЕД, ВНИЗ/НАЗАД, СТОП.< /п>
Я не знаю, согласен ли я с тем, что код — лучший стиль кодирования, но он определенно намного компактнее. Я немного не согласен с тем, что это «лучше», потому что менее очевидно, что делает код. Часть хорошего стиля кода — сделать его читабельным. Это неплохой код, просто неочевидный. Я определенно согласен, что присвоение названия двигателям значительно улучшит ситуацию., @computercarguy
@computercarguy На самом деле, возможно, было бы лучше написать отдельный digitalWrite, в котором есть параметр для «логического значения», чтобы тройной оператор не требовался (четыре раза). (при условии, что вас беспокоит тернарный оператор, и я это понимаю)., @Michel Keijzers
Да, есть много разных способов написать это. Мне бы не хотелось поддерживать то, как вы это сделали, и это только из-за умственной нагрузки, связанной с выяснением того, что происходит. Я склонен писать вещи более ясно/просто, поэтому мне не нужно особо думать об этом, когда мне придется читать это позже. Абстрагирование digitalWrite, вероятно, было бы одним из лучших способов упростить эту задачу. И да, когда в блоке кода более одного троичного кода, у меня покрывается холодным потом. :-) Я знаю, как легко ими злоупотреблять., @computercarguy
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- L298N, HC-05 Простой автомобиль с дистанционным управлением через Bluetooth, не работающий в Arduino
- L298N издает звуковые сигналы и дает сбой при получении определенных значений AnalogWrite
- Как использовать отдельный источник питания для Arduino и двигателей
- Могу ли я проверить, почему мой двигатель не работает?
- Как узнать состояние двигателя постоянного тока включен он или выключен
- 4 батареи типа АА (6 В) питают мой Arduino
- Драйвер L298n с Arduino с 2 моторами работает
Я видел этот вопрос несколько раз. Что вы сделали для исследования проблемы? Вы тестировали каждую вещь отдельно: плату Arduino, модуль драйвера и двигатели., @Jot
Почему вы публикуете новый вопрос, а не редактируете свой? Дубликат https://arduinoprosto.ru/q/56995/basic-question-on-dc-motors, @chrisl