Arduino Motor Shield туториал по управлению одним двигателем, двумя или шаговым двигателем
Arduino Motor Shield туториал по управлению одним двигателем, двумя или шаговым двигателем
 
Arduino Motor Shield позволяет Вам легко управлять направлением и скоростью двигателя с помощью Arduino. Позволяя просто обращаться к контактам Arduino, очень просто использовать двигатель в вашем проекте. Он также позволяет вам управлять двигателем с отдельным источником питания до 12В.

Шаг 1: Установка
 
Пины официального Arduino Motor Shield будут соответствовать только Arduino Uno Rev. 3.

Чтобы заставить его работать с более старыми версиями Arduino, вам нужно обрезать несколько пинов с шилда двигателя. Однако этоне обьязательно.

Вставьте пины Arduino Motor Shield в гнезда Arduino Uno.

Шаг 2: Особенности шилда
 
Arduino Motor Shield имеет 2 канала, что позволяет управлять двумя двигателями постоянного тока или 1 шаговым двигателем.

Он также имеет 6 пинов для подключения входов, выходов и линий связи Tinkerkit. Использование этих контактов несколько ограничено, и поэтому в этой статье не рассматривается.

При внешнем источнике питания Arduino Motor Shield может безопасно подавать до 12 В и 2 А на каждый канал двигателя (или 4А на один канал).

На Ардуине есть пины, которые всегда используются Arduino Motor Shield. Обращаясь к этим контактам, вы можете выбрать канал двигателя для запуска, указать направление (полярность) двигателя, установить скорость двигателя (PWM), остановить и запустить двигатель и контролировать текущее поглощение каждого канала.

Разрыв штыря выглядит следующим образом:
FunctionChannel AChannel B
НаправлениеDigital 12Digital 13
Скорость (PWM)Digital 3Digital 11
СтопDigital 9Digital 8
Текущий датчикAnalog 0Analog 1

Для получения дополнительной информации о технических характеристиках ознакомьтесь с официальной страницей Arduino Motor Shield на сайте Arduino.

Шаг 3: Программа

 
Подключите Arduino к USB-порту вашего компьютера и откройте среду разработки Arduino.

Чтобы заставить плату делать что-либо, вам необходимо инициализировать канал двигателя, переключив три параметра:
Сначала вам необходимо установить направление вращения двигателя (полярность источника питания), установив его как HIGH, так и LOW.
Затем вам необходимо отключить пин тормоза для канала двигателя, установив его в положение LOW.
Наконец, чтобы заставить двигатель начать движение, вам нужно установить скорость, отправив команду PWM (analogWrite) на соответствующий вывод.

Если вы не выполните все три эти вещи, двигатель не включится.

На следующих этапах приведены некоторые общие примеры общих настроек двигателя.

Шаг 4: Один двигатель

 
Для управления двигателем с помощью  Arduino Motor Shield  сначала подключите положительный (красный) провод двигателя к клемме + A канала A на экране двигателя, а провод заземления двигателя (черный) подключите к клемме канала A на щите.

Внешний источник питания не всегда необходим, но он значительно улучшает работу двигателя. Рекомендуется, чтобы вы всегда использовали его.

Для подключения внешнего источника питания подключите положительный (красный) провод от источника питания к клемме «Vin» и заземляющий (черный) провод к клемме «GND».

Наконец, загрузите код для управления двигательным щитом в Arduino.

Вот код для управления одним двигателем:

/*************************************************************
Motor Shield 1-Channel DC Motor Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

void setup() {
 
  //Setup Channel A
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin

}

void loop(){
 
  //forward @ full speed
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed
 
  delay(3000);
 
  digitalWrite(9, HIGH); //Eengage the Brake for Channel A

  delay(1000);
 
  //backward @ half speed
  digitalWrite(12, LOW); //Establishes backward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 123);   //Spins the motor on Channel A at half speed
 
  delay(3000);
 
  digitalWrite(9, HIGH); //Eengage the Brake for Channel A
 
  delay(1000);
 
}


Шаг 5: Два двигателя

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

Единственным разным кодом является то, что вам нужно задействовать второй канал для управления вторым двигателем.

Вот код для управления двумя моторами:

/*************************************************************
Motor Shield 2-Channel DC Motor Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

void setup() {
 
  //Setup Channel A
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin

  //Setup Channel B
  pinMode(13, OUTPUT); //Initiates Motor Channel A pin
  pinMode(8, OUTPUT);  //Initiates Brake Channel A pin
 
}

void loop(){

 
  //Motor A forward @ full speed
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed

  //Motor B backward @ half speed
  digitalWrite(13, LOW);  //Establishes backward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 123);    //Spins the motor on Channel B at half speed

 
  delay(3000);

 
  digitalWrite(9, HIGH);  //Engage the Brake for Channel A
  digitalWrite(9, HIGH);  //Engage the Brake for Channel B


  delay(1000);
 
 
  //Motor A forward @ full speed
  digitalWrite(12, LOW);  //Establishes backward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 123);    //Spins the motor on Channel A at half speed
 
  //Motor B forward @ full speed
  digitalWrite(13, HIGH); //Establishes forward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 255);   //Spins the motor on Channel B at full speed
 
 
  delay(3000);
 
 
  digitalWrite(9, HIGH);  //Engage the Brake for Channel A
  digitalWrite(9, HIGH);  //Engage the Brake for Channel B
 
 
  delay(1000);
 
}

Шаг 6: Шаговый двигатель




 
Существует несколько различных типов шаговых двигателей, но в этом руководстве мы будем конкретно рассматривать биполярные шаговые двигатели. Биполярные шаговые двигатели обычно имеют 4 контакта, которые соответствуют двум катушкам. Чтобы использовать шаговый двигатель, вам необходимо включить эти две катушки к фазе с чередующейся полярностью.

Чтобы выяснить, какие два пина составляют одну катушку, вставьте светодиод в любые два штыря на гнездо и поверните вал двигателя. Если светодиод загорается, вы обнаружили одну катушку. Остальные два штыря должны составлять другую катушку.

Чтобы вращать биполярный двигатель:
Включите первую катушку.
Затем включите вторую катушку с обратной полярностью.
Затем включите первую катушку с обратной полярностью.
Наконец, включите вторую катушку.
Чтобы изменить направление движения биполярного шагового двигателя, просто измените полярность второй катушки.

Вот код, чтобы заставить шаговый двигатель вращаться в одном направлении:

/*************************************************************
Motor Shield Stepper Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

int delaylegnth = 30;

void setup() {
 
  //establish motor direction toggle pins
  pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
  pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
 
  //establish motor brake pins
  pinMode(9, OUTPUT); //brake (disable) CH A
  pinMode(8, OUTPUT); //brake (disable) CH B


 
 
}

void loop(){
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
 
  delay(delaylegnth);
 
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 
  delay(delaylegnth);
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
 
  delay(delaylegnth);
   
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 
  delay(delaylegnth);

}

Вот код, чтобы заставить шаговый вращение в противоположном направлении:

/*************************************************************
Motor Shield Stepper Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

int delaylegnth = 30;

void setup() {
 
  //establish motor direction toggle pins
  pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
  pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
 
  //establish motor brake pins
  pinMode(9, OUTPUT); //brake (disable) CH A
  pinMode(8, OUTPUT); //brake (disable) CH B

 
}

void loop(){
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
 
  delay(delaylegnth);
 
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 
  delay(delaylegnth);
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
 
  delay(delaylegnth);
   
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
 
  delay(delaylegnth);

}

710