- •Курс «Основы робототехники. Базовый уровень». Занятие 3 Подключение моторов робота через драйвер двигателя на микросхеме l298n
- •Программы управления драйвером
- •Практическое занятие 1. Подключение драйвера и представление в программе
- •Практическое занятие 2. Управление одним колесом робота
- •Практическое занятие 2. Робот едет вперед
- •Практическое занятие 3. Робот едет вперед и назад
- •Практическое занятие 5. Развороты робота
- •Практическое занятие 7. Задание скорости робота
- •Практическое занятие 8. Выравнивание скоростей моторов для движения по прямой
- •Практическое занятие 9. Движение по кругу
- •Практическое занятие 10. Движение по спирали
- •Практическое занятие 11. Движение по квадрату или другому многоугольнику
- •Практическое занятие 12. Произвольные движения
Практическое занятие 5. Развороты робота
Для разворота направо левый мотор должен ехать вперед, правый назад:
digitalWrite(LF, HIGH); digitalWrite(LB, LOW); digitalWrite(RF, LOW); digitalWrite(RB, HIGH); |
Для разворота налево левый мотор должен ехать назад, правый вперед:
digitalWrite(LF, LOW); digitalWrite(LB, HIGH); digitalWrite(RG, HIGH); digitalWrite(RB, LOW); |
На основе приведенного выше кода напишите программу, реализующую следующий алгоритм:
Включение езды робота вперед
Ожидание 1 секунда
Включение разворота направо
Ожидание 0,5 секунды
Включение езды робота назад
Ожидание 1 секунда
Включение разворота налево
Ожидание 0,5 секунды
Примечание: для облегчения отладки программы можно задать задержки в виде переменных в начале программы:
int drive_time = 1000; // время задержки при езде вперед или назад - 1 секунда int turn_time = 500; // время задержки при поворотах - 0,5 секунды … delay (drive_time); // пример использования в программе |
На будущее, рекомендуется, если значение повторяется в программе, задавать его в виде переменной. Чтобы при необходимости изменения этого значения изменять его только в одном месте
Загрузите программу в робота, поставьте его на пол, включите его и убедитесь, что он выполняет заданный алгоритм
Практическое занятие 7. Задание скорости робота
Как можно было убедиться при испытаниях робота, управляемого командами digitalWrite, робот едет слишком быстро, что затрудняет управление и на гладкой поверхности колеса проскальзывают. Для обеспечения медленной езды проведите в Вашей программе следующие замены:
Исходная программа |
Конечная программа |
|
int speed = 150; // переменная скорости робота |
digitalWrite(LF, HIGH); |
analogWrite(LF, speed); |
digitalWrite(LF, LOW); |
analogWrite(LF, 0); |
digitalWrite(RF, HIGH); |
analogWrite(RF, speed); |
digitalWrite(RF, LOW); |
analogWrite(RF, 0); |
Примечание: для быстроты замены можно воспользоваться автоматической заменой – команда Правка / Найти (сочетание клавиш Ctrl+F), в поле Найти – исходный вариант, в поле Заменить – конечный вариант, Заменить все.
Загрузите получившуюся программу в робота и убедитесь, что скорость его уменьшилась. Попробуйте изменить значение speed и убедиться в изменении скорости движения
Примечание 1: максимальная скорость робота 255, при этом команда analogWrite(LF, 255) действует аналогично команде digitalWrite(LF, HIGH)
Примечание 2: если подать на драйвер слишком малое число, например, analogWrite(LF, 20) – скорее всего, робот не поедет, так как напряжения на моторе не хватит для его вращения
Практическое занятие 8. Выравнивание скоростей моторов для движения по прямой
Из-за разных параметров моторов при одном и том же напряжении моторы крутятся с разной скоростью. Это проявляется тем, что робот не едет по прямой, что затрудняет управление. Подбором значений, подаваемых на моторы в программе командой analogWrite, можно выровнять скорости моторов на реальном роботе. Например, если робот забирает вправо – значит, левый мотор едет быстрее правого и на него нужно подавать в программе меньшую скорость
Создайте новую программу и сохраните ее, например, под именем Calibration_motor (она может понадобиться позже)
Добавьте в программу номера пинов управления драйвером и прописывание их как выходных (см. практическое занятие 1)
Добавьте две переменные – speed_left и speed_right – скорости на левом и правом моторе. Пусть робот едет только вперед:
int speed_left = 150; int speed_right= 150; … analogWrite(LF, speed_left); analogWrite(LB, 0); analogWrite(RF, speed_right); analogWrite(RB, 0); |
Загрузите программу в робота, поставьте его на пол, включите и понаблюдайте за его движением. Рекомендуется ставить робота вдоль какой-то прямой линии на полу, чтобы было легче определять, прямо ли едет робот
Если робот при езде забирает влево – уменьшите значение speed_right и увеличьте speed_left. Если забирает вправо – наоборот
Повторяйте пункты 2, 3 до тех пор, пока робот не будет ехать прямо
Примечание: рекомендуется записать найденные значения для своего робота. Например, на бумажку и положить ее в коробку для хранения робота
Практические занятия ниже можно проводить с установленным на робота маркером, карандашом или ручкой, если собран держатель для них и есть на чем рисовать |
