Работа Льва над проектом "Робоняша". Часть 2

25 октября 2016
Моторы

Здравствуйте!

Это снова Лев и его подопытная Мышь (#Робоняша).

Я уже писал о том, что для движения нужно два мотора. Теперь я объясню поподробнее.

Мотор – вещь сильная, потому потребляющая много тока. С одним мотором плата ещё может справиться, но с двумя работать трудно. Для этого на Arduino установлен Motor Shield. Его не очень видно, потому что поверх него ещё стоит Troyka Shield. Но о нём в следующих статьях, сейчас у нас колёсные моторы.

Обычно мотор крепят на два пина с ШИМ. На один из них подаём переменный ток нужной частоты, второй заземляем. На Motor Shield используются только 2 пина с ШИМ, ещё 2 – простые. Подавая ток на «простой» пин, мы даём соответствующему мотору указание направления, а с другого пина подаём скорость.

На фотографиях в предыдущей статье шилд видно. Проводов от моторов не хватало, провёл по-хитрому. Замыкая выключатель, мы подаём питание на Motor Shield, от него ток идёт к другим платам. Жёлтые светодиоды на Motor Shield показывают мощность тока на каждом моторе, красно-зелёные – направление. Распиновка такова:

  • 4 — направление, правый
  • 5 — скорость (ШИМ), правый
  • 6 — скорость (ШИМ), левый
  • 7 — направление, левый

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

Больше технической информации здесь.

С помощью этой платы со специальной микросхемой управлять моторами очень легко: плата почти не загружена (только подача сигналов), саму работу делает шилд.

Я тестировал моторы, в ходе этого выяснил, какую мощность подавать, чтобы Мышь ехала прямо (пусть чуть неровно, это особенности сборки). Вот мой скетч: мышь 2 секунды едет вперёд, 5 секунд стоит, 2 секунды едет назад, 5 секунд стоит.

  int direction1=4;
int speed1=5;
int speed2=6;
int direction2=7;

void setup() {
pinMode(direction1, OUTPUT);
pinMode(speed1, OUTPUT);
pinMode(speed2, OUTPUT);
pinMode(direction2, OUTPUT);
}

void loop() {
digitalWrite(direction1, HIGH);
digitalWrite(direction2, LOW);
analogWrite(speed1, 47);
analogWrite(speed2, 50);
delay(2000);
analogWrite(speed1, 0);
analogWrite(speed2, 0);
delay(5000);
digitalWrite(direction1, LOW);
digitalWrite(direction2, HIGH);
analogWrite(speed1, 48);
analogWrite(speed2, 50);
delay(2000);
analogWrite(speed1, 0);
analogWrite(speed2, 0);
delay(5000);
}

И видео веселья

Комментарии

(0) Добавить комментарий