Ускорение и торможение движения робота

Ускорение и торможение движения робота

В предыдущем задании мы рассматривали сигналы широтно-импульсной модуляции (ШИМ, PWM). С помощью сигналов ШИМ мы можем плавно увеличивать и уменьшать скорость движения робота.

Описание команды analogWrite

Команда analogWrite (pin, value) записывает значение, используя схему с широтно-импульсной модуляцией (ШИМ,  PWM), на выходной вывод, помеченный как PWM. Смотрите карту выводов.
69d5dd

На модуле Arduino с микропроцессором ATmega168 (328) эта функция работает на выводах 3, 5, 6, 9, 10 и 11. Значение может быть задано как переменная или константа в диапазоне 0–255. Значение 0 генерирует устойчивое напряжение 0 вольт на выходе заданного вывода; значение 255 генерирует 5 вольт на выходе заданного вывода. Для значений между 0 и 255 вывод быстро переходит от 0 к 5 вольтам: чем больше значение, тем чаще вывод в состоянии HIGH (5 вольт).


шим

Например, на диаграмме действующих значений, представленной здесь выше, при значении 64 вывод будет в 0 три четверти времени, а в состоянии 5 вольт – одну четверть; при значении 128 половину времени будет вывод будет в 0, а половину – в 5 вольт; при значении 192 четверть времени вывод будет в 0 и три четверти – в 5 вольт.

 Описание конструкции for

Для организации ветвления необходимо воспользоваться оператором for:

1
2
3
4
for (инициализация; условие; выражение) 
 {
 действия (тело цикла);
 }

Конструкция команды используется для повторения блока выражений, заключённых в фигурные скобки заданное число раз.

Наращиваемый счётчик часто используется для увеличения и прекращения цикла. Есть три части, разделённые точкой с запятой, в заголовке цикла for: «инициализация» локальной переменной, или счётчика, имеет место в самом начале и происходит только один раз. При каждом проходе цикла проверяется «условие». Если условие остаётся истинным, то следующее выражение и блок выполняются, а условие проверяется вновь. Когда условие становится ложным, цикл завершается. 

Конструкция, позволяющая нам последовательно увеличивать или уменьшать значение ШИМ, включает цикл for (инициализация; условие; приращение) и блок операторов, заключенный в скобки.

1
2
3
4
5
6
for (int i = 40; i < 255; i++)
  {
    analogWrite  (SPEED_R, i);
    analogWrite  (SPEED_L, i);
    delay(50);
  }

Эта запись означает следующее:
К целочисленной переменной i, которая вначале равна 40 прибавляется единичка 1 (i++), пока её значение меньше либо равно 255. При каждом значении переменной i будут выполняться операции, записанные в фигурных скобках (тело цикла). Значение ШИМ, читай напряжение на моторе, каждый цикл продолжительностью 50 миллисекунд от значения 40 будет возрастать до значения 255. Каждый раз в цикле проверяется условие i<255. Если условие верно, то выполняется блок операторов и приращение значения i. Затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается. В результате наш робот начинает двигаться с постоянной максимальной скоростью.

Торможение робота

Точно так же будет происходить и уменьшение скорости.

for (inti = 255; i > 0; i--)

Цикл for мы можем использовать так же и для записи однотипных команд. В блоке setup нам необходимо пины 2,3,4,5  определить как выходы (OUTPUT). И вместо команды для каждого пина (pin), как мы делали ранее,

1
2
3
4
5
6
7
void setup()
{
 pinMode (DIR_R, OUTPUT);
 pinMode (SPEED_R, OUTPUT);
 pinMode (DIR_L, OUTPUT);
 pinMode (SPEED_L, OUTPUT);
}

пишем цикл, в котором в качестве переменной i указываем номера пинов.

1
2
3
4
5
voidsetup () {
for (inti=2; i<=5; i++) {
pinMode (i, OUTPUT);
}
}

Переходим к практической части задания.

Листинг кода

Скопируйте текст программы и вставьте его в скетч Arduino IDE. После проверки загрузите код в контроллер и включите питание на роботе. Итак, код программы готов, сравните его с тем, что получилось у вас.


Тэги: arduino



comments powered by Disqus