Помогите новичку разобраться с разновидностью плат и правкой кода

Добрый день. Начал заниматься ардуино и сразу с практики. Цель была создать два вращающихся в разные стороны шаговых двигателя, а управление ими осуществлялось бы с помощью кнопок. Нашел идеальное для себя видео, где мужик показал как собрать то, что мне нужно: https://www.youtube.com/watch?v=-e9nUEuuTyU&t=15s&ab_channel=MasterKolotushkinArduino. Однако я столкнулся с проблемой что на моей плате Arduino UNO нет таких контактов подключения питания от драйвера к плате, как на его Uno. Прилагаю схему подключения по его видосу и мою плату.



А также код, представленный челом с видео:

const int buttonPin1 = 15; //15 контакт он же А1 мотор 1 вправо
const int buttonPin2 = 16; //16 контакт он же А2 мотор 1 влево
const int buttonPin3 = 17; //17 контакт он же А3 мотор 2 вправо
const int buttonPin4 = 18; //18 контакт он же А4 мотор 2 влево

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;

int i1 = 0;
int i2 = 0;
int i3 = 0;
int i4 = 0;
int t1 = 4; //НАСТРОЙКА!!!//
int t2 = 4; //НАСТРОЙКА!!!//

void setup() {
  //4, 5, 6, 7 контакты для 1 двигателя
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  // 12, 13, 10, 11 контакты для 2 двигателя
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  // контакты для кнопок
  pinMode(15, INPUT_PULLUP); //А1
  pinMode(16, INPUT_PULLUP); //А2
  pinMode(17, INPUT_PULLUP); //А3
  pinMode(18, INPUT_PULLUP); //А4
}

void prodlit() { //функция для продления цикла
  buttonState1 = digitalRead( buttonPin1); buttonState2 = digitalRead( buttonPin2);
  buttonState3 = digitalRead( buttonPin3); buttonState4 = digitalRead( buttonPin4);
  if (buttonState1 == LOW) {
    i1--;
  } if (buttonState2 == LOW) {
    i2--;
  }
  if (buttonState3 == LOW) {
    i3--;
  } if (buttonState4 == LOW) {
    i4--;
  }
}

void stopPins() {
  digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW);
  digitalWrite(7, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW);
  digitalWrite(12, LOW); digitalWrite(13, LOW); delay(500);
}

void loop() {
  buttonState1 = digitalRead( buttonPin1);
  if (buttonState1 == LOW) {
    while (i1 < 1) { //цикл для вращения мотора 1 вправо
      digitalWrite(7, HIGH); digitalWrite(5, LOW); delay(t1);
      digitalWrite(6, HIGH); digitalWrite(4, LOW); delay(t1);
      digitalWrite(5, HIGH); digitalWrite(7, LOW); delay(t1);
      digitalWrite(4, HIGH); digitalWrite(6, LOW); delay(t1);
      i1++; prodlit();
    } i1 = 0; stopPins();
  }
  buttonState2 = digitalRead( buttonPin2);
  if (buttonState2 == LOW) {
    while (i2 < 1) { //цикл для вращения мотора 1 влево
      digitalWrite(4, HIGH); digitalWrite(6, LOW); delay(t1);
      digitalWrite(5, HIGH); digitalWrite(7, LOW); delay(t1);
      digitalWrite(6, HIGH); digitalWrite(4, LOW); delay(t1);
      digitalWrite(7, HIGH); digitalWrite(5, LOW); delay(t1);
      i2++; prodlit();
    } i2 = 0; stopPins();
  }
  buttonState3 = digitalRead( buttonPin3);
  if (buttonState3 == LOW) {
    while (i3 < 1) { //цикл для вращения мотора 2 вправо
      digitalWrite(13, HIGH); digitalWrite(11, LOW); delay(t2);
      digitalWrite(12, HIGH); digitalWrite(10, LOW); delay(t2);
      digitalWrite(11, HIGH); digitalWrite(13, LOW); delay(t2);
      digitalWrite(10, HIGH); digitalWrite(12, LOW); delay(t2);
      i3++; prodlit();
    } i3 = 0; stopPins();
  }
  buttonState4 = digitalRead( buttonPin4);
  if (buttonState4 == LOW) {
    while (i4 < 1) { //цикл для вращения мотора 2 влево
      digitalWrite(10, HIGH); digitalWrite(12, LOW); delay(t2);
      digitalWrite(10, HIGH); digitalWrite(12, LOW); delay(t2);
      digitalWrite(11, HIGH); digitalWrite(13, LOW); delay(t2);
      digitalWrite(12, HIGH); digitalWrite(10, LOW); delay(t2);
      digitalWrite(13, HIGH); digitalWrite(11, LOW); delay(t2);
      i4++; prodlit();
    } i4 = 0; stopPins();
  }
}

Вопрос: можно ли как-то исправить ситуацию или только покупать плату как на видео? мб по-другому подключить что-то или изменить код?
Буду рад вашей помощи!

А использовать другие питающие контакты запрещает религия? И лучше питать отдельно, а не через плату, если спросят, скажи, я разрешил.

Пробовал, не работает.

Чем запитать отдельно? Есть только крона 9В и всё.

ну дак нарисуй схему, как ты подключал. Не наскальный рисунок, а схему прям

плату ты тоже от кроны питаешь?

Подключал всё так, как на наскальном рисунке, за исключением проводов питания - их подключил к контактам 5V и GND ± соответственно. Плату питал от USB

А, ну забей тогда, ничего у тебя не получится.

А как сделать чтобы получилось? Вот моя сборка.

А она сможет в драйверы/моторчики то …


Отредактировал то, как подключено у меня. К слову - одна кнопка работает и один двигатель крутится, но только в одну сторону. На рисунке есть “5V” - это разъём которого не видно, но на моей плате он присутствует

Мне откуда знать? От того и спрашиваю как решить такую проблему. Что надо сделать чтобы оно заработало?

Крона - плохой источник, слабосильный. На будущее заведите какой-нибудь более приличный источник питания.
Но подозреваю, что проблема скорее всего в сборке. Что-то забыто или перепутано, не туда воткнуто, кнопки не теми контактами подключены, хз что ещё - проверяйте и перепроверяйте. Не работать тут практически нечему.
Код какой-то мутноватый, но если у того товарища работает, то чего бы ему и у Вас не работать? Кстати, а что значит не работает?

На данный момент питания от кроны нет - только usb, всё как у товарища на видео.
По поводу не работает - при нажатии одной из четырех кнопок двигатель вращается. При нажатии других трёх загорается диод “L” на плате и, на этом всё.
Если при нажатии первой кнопки загораются все диоды на драйвере, то при нажатии других кнопок драйвера “молчат”.

Работает только кнопка, подключенная к А2

Так, я понял. У меня были не верно подключены аналоговые пины… Теперь один двигатель работает прям как надо. Но нет питания на втором двигателе. В чем может быть проблема?

Короче, вопрос решен. Спасибо что ткнули носом в мою невнимательность. Однако проблема благодаря вам решилось и на том спасибо!

Ну и хорошо! Я так и думал, что дело в ерунде какой.
Но про питание не забывайте! Схемы с прожорливыми потребителями, типа всяких моторов, от ардуины лучше не питать. Нужен отдельный источник питания.

Причём “лучше не питать” надо читать как “есть риск спалить нафиг” и ардуину и USB-порт ПК и т.п.
Типовой USB-порт может выдавать до 500мА - если нагрузка берет больше, то можно спалить. То же самое касается преобразователя напряжения ардуинки - тоже есть лимиты.
Развязывать питание несложно - земля должна быть общей и у логики и у питания (соединить минус отдельного питания моторов с GND платы), а плюсы врозь.
Драйвера моторов по большому счёту для того и существуют чтобы развязать питание логики от питания моторов.

1 лайк

Тебе удалось хоть раз спалить? Мне нет. У него защита. В худшем случае он отрубится до следующей перезагрузки, а так просто просадит напряжение и после снятия нагрузки восстановит. Это в настоящих портах, а не хобийных подделках.

3 лайка