Работа Льва над проектом "Робоняша". Часть 2
Здравствуйте!
Это снова Лев и его подопытная Мышь (#Робоняша).
Я уже писал о том, что для движения нужно два мотора. Теперь я объясню поподробнее.
Мотор – вещь сильная, потому потребляющая много тока. С одним мотором плата ещё может справиться, но с двумя работать трудно. Для этого на 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) Добавить комментарий