Академический Документы
Профессиональный Документы
Культура Документы
на Arduino
Урок № 11
Рисующий робот
Содержание
Рисующий робот............................................................. 3
Сервопривод....................................................................... 6
Двигатель постоянного тока......................................... 10
Потенциометр.................................................................. 19
2
Рисующий робот
Рисующий робот
С помощью микроконтроллера Arduino можно создавать
не только небольшие программы, а и программировать
роботов из большого числа компонентов. К примеру, ма-
шина на радиоуправлении, робот-помощник, сортировщик
мусора и многое другое. Сегодня мы сделаем рисующего
робота, который, двигаясь по определенной траектории,
будет рисовать разнообразные фигуры (рис. 1).
Рисунок 1
Именно для таких задач необходимы различные мо-
торы. Для машинки будем использовать много различных
компонентов, и даже шилд для управления моторами!
Сначала нужно подготовить корпус для нашей ма-
шинки (рис. 2-3).
3
Урок № 11
Рисунок 2
Рисунок 3
Он может быть выполнен из пластика, дерева или обыч-
ного картона. Стоит лишь убедиться, что конструкция
достаточно крепкая, и выдержит большое количество
компонентов, которые будут расположены на платформе
(рис. 4-5).
4
Рисующий робот
Рисунок 4
Рисунок 5
5
Урок № 11
Сервопривод
Начнем с того, что познакомимся с сервоприводом.
Серво — это устройство, которое может поворачивать-
ся в заданное положение. Такие компоненты позволя-
ют роботу двигать конечностями, поднимать предметы
или фиксировать определенные элементы (рис. 6).
Рисунок 6
Главная задача сервопривода — поворот на заданный
угол и удерживание определенного положения. Устрой-
ство может поворачиваться на 180˚, а управлять им и по-
ворачивать его в нужную позицию можно с помощью
Arduino (рис. 7).
В сервомотор встроено все: двигатель, цепь обратной
связи и, самое главное, драйвер двигателя. Для работы
ему нужны напряжение, заземление и один управляющий
контакт. Определить, где какой пин, можно по цвету со-
6
Рисующий робот
Рисунок 7
Рисунок 8
Подключаем библиотеку для управления сервопри-
водом:
#include <Servo.h>
7
Урок № 11
8
Рисующий робот
startDraw();
break;
//case 1:
// break;
}
}
void drawLeft() {
for (int i = 0; i <= 90; i += 1) {
if (i <= 45) {
servoAngle += 1;
}
else {
servoAngle -= 1;
}
myservo.write(servoAngle);
delay(15);
}
}
void drawRight() {
for (int i = 0; i <= 90; i += 1) {
if (i <= 45) {
servoAngle -= 1;
}
else {
servoAngle += 1;
}
myservo.write(servoAngle);
9
Урок № 11
delay(15);
}
}
void startDraw() {
Serial.print("Angle: ");
Serial.println(servoAngle);
drawLeft();
drawRight();
// gameStatus = 1;
}
10
Рисующий робот
Рисунок 9
Рисунок 10
На микроконтроллере L293D расположено 16 пинов.
Нумерация выводов производится строго против часо-
вой стрелки, а первый элемент находится возле выемки
на микроконтроллере (рис. 11).
11
Урок № 11
Рисунок 11
Подключим два двигателя постоянного тока, драйвер
мотора и аккумуляторную батарею 9V (рис. 12).
Рисунок 12
Мы подключили к пинам Output 1, Output 2 выхо-
ды одного двигателя, а к Output 3 и Output 4 — выходы
другого (рис. 13).
12
Рисующий робот
Рисунок 13
На реальной схеме нужно будет еще присоединить
колесо к двигателю (рис. 14).
Рисунок 14
13
Урок № 11
#define PIN_ENA 6
#define PIN_IN1 7
#define PIN_IN2 8
#define PIN_IN3 9
#define PIN_IN4 10
#define PIN_ENB 11
void setup() {
...
...
14
Рисующий робот
pinMode(PIN_IN1, OUTPUT);
pinMode(PIN_IN2, OUTPUT);
pinMode(PIN_ENA, OUTPUT);
pinMode(PIN_IN3, OUTPUT);
pinMode(PIN_IN4, OUTPUT);
pinMode(PIN_ENB, OUTPUT);
delay(1000);
}
void loop() {
switch (gameStatus) {
case 0:
startDraw();
break;
case 1:
moveRobot();
break;
}
}
15
Урок № 11
void moveRobot() {
Serial.print("F ");
moveForward(pinMotorA, speed);
moveForward(pinMotorB, speed);
delay(waitTime);
Serial.print("R ");
moveForward(pinMotorA, speed); // move right
moveForward(pinMotorB, (speed / 2));
delay(waitTime);
Serial.print("B ");
moveBackward(pinMotorA, speed);
moveBackward(pinMotorB, speed);
delay(waitTime);
Serial.print("L ");
16
Рисующий робот
Рисунок 15
17
Урок № 11
Рисунок 16
Чтобы программа работала правильно, раскоммен-
тируем строку gameStatus:
void startDraw() {
...
...
gameStatus = 1;
}
18
Рисующий робот
Потенциометр
Потенциометр — устройство, с помощью которого
можно регулировать сопротивление. Потенциометры
часто используют в устройствах, регулирующих яркость,
громкость, скорость движения (рис. 17).
Рисунок 17
Давайте ознакомимся с работой потенциометра и будем
использовать его для управления скоростью вращения
двигателей. При повороте вала (управляющего элемен-
та) на потенциометре меняется сопротивление. То есть
в результате сигнал передается с измененным значением.
Плата Arduino оснащена конвектором, который мо-
жет преобразовывать аналоговое значение в цифровое.
В результате потенциометр вернет значение от 0 до 1023.
Если вал полностью повернуть в одну сторону, на пин по-
ступит значение равное 0, то есть напряжение, равное 0V.
Если вал полностью повернуть в другую сторону, на пин
поступит значение равное 1023 или напряжение в 5V.
19
Урок № 11
Рисунок 18
Добавим в программу код для управления потенци-
ометром. Сначала определим константу:
#define PIN_POT A0
20
Рисующий робот
void setup() {
...
...
pinMode(PIN_POT, INPUT);
delay(1000);
}
void loop() {
int value = analogRead(PIN_POT);
Serial.print("Value: ");
Serial.println(value);
if (value > 0) {
speed = map(value, 0, 1023, 0, 255);
Serial.print("Speed: ");
Serial.println(speed);
switch (gameStatus) {
case 0:
...
case 1:
...
}
}
}
21
Урок № 11
Рисунок 19
Каким в результате будет ваш робот, зависит только
от фантазии и комплектации. Это может быть необычный
механизм или удивительная конструкция. Более того,
мы с помощью кода мы самостоятельно задаем рисунок,
который воссоздаст робот (рис. 20-21).
22
Рисующий робот
Рисунок 20
Рисунок 21
23
Урок № 11
Рисующий робот