Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 14 Серво, захват.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Практическое занятие 2. Подключение одного серво захвата и движение по циклу

  1. Подключите питание серво к проводам, которыми мерили напряжение. Таблица и схема включения серво:

Назначение

Серво

Схема

Gnd

Коричневый провод

Черный или синий провод к земле

+5 В

Красный провод

Красный провод к выходу (третьей ножке) стабилизатора напряжения L2805

Сигнал

Желтый, оранжевый или белый провод

К любому цифровому пину Arduino

  1. Откройте пример работы с серво: Файл / Примеры / Servo / Sweep. Так как используемый захват не должен двигаться в пределах 0…180° (такое движение может привести к его поломке), изменим диапазоны углов движения серво:

    for(pos = 0; pos < 180; pos += 1)

    for(pos = 50; pos < 80; pos += 1)

    for(pos = 180; pos>=1; pos-=1)

    for(pos = 80; pos>=51; pos-=1)

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

  3. Отключите серво первого захвата, подключите вместо него серво второго захвата и проверьте его

Практическое занятие 3. Управление углами серво

Так как не всегда можно угадать, какие углы относятся к рабочему диапазону той или иной конструкции, а каждый раз прошивать контроллер с программой с новыми углами долго и не всегда эффективно. Поэтому напишем программу, позволяющую управлять углом поворота серво через Монитор порта компьютера. Для простоты программы ограничимся следующим: контроллер читает символ «r» (робот) и следующие три цифры, и собирает из них угол. Например:

r105 – повернуть серво на угол 105

r050 – повернуть серво на угол 50

#include <Servo.h> // подключение библиотеки Servo

Servo claw_1; // первый серво захвата

Servo claw_2; // второй серво захвата

int angle; // угол поворота серво

int angle_1; // первая цифра угла

int angle_2; // вторая цифра угла

int angle_3; // третья цифра угла

int claw_1_pin = 7; // пин Arduino, к которому подключен первый серво

int claw_2_pin = 8; // пин Arduino, к которому подключен второй серво

char symbol; // переменная для хранения пришедшего из Монитора порта символа

void setup() {

claw_1.attach(claw_1_pin); // подключить первый серво

claw_2.attach(claw_2_pin); // подключить второй серво

Serial.begin(9600); // подключиться к компьютеру

}

void loop() {

// считываем символ, пришедший с Монитора порта

if (Serial.available()) { //если есть принятый символ,

symbol = Serial.read(); // то читаем его и сохраняем в symbol

}

else {

symbol = 'n'; // если ничего не принято, записываем "нет команды" (чтобы робот не выполнял постоянно последнюю принятую команду)

}

if (symbol == 'r') // если принят симовол 'r'

{

// считываем цифры, пришедшие с Монитора порта

if (Serial.available()) { // если есть первый принятый символ,

angle_1 = Serial.read() - 48; // то читаем его и сохраняем в angle_1, преобразовав а цифру

}

if (Serial.available()) { // если есть второй принятый символ,

angle_2 = Serial.read() - 48; // то читаем его и сохраняем в angle_2, преобразовав а цифру

}

if (Serial.available()) { // если есть третий принятый символ,

angle_3 = Serial.read() - 48; // то читаем его и сохраняем в angle_3, преобразовав а цифру

}

}

// собираем число из трех принятых цифр

angle = 100 * angle_1 + 10 * angle_2 + angle_3;

// проводим проверку на максимумы минимумы углов и корректируем при необходимости

if (angle > 170 ) {

angle = 170;

}

if (angle < 10 ) {

angle = 10;

}

// выводим получившееся число в Монитор порта и на серво

Serial.print("angle = ");

Serial.println(angle);

claw_1.write(angle);

claw_2.write(180-angle); // для второго серво – обратный угол, чтобы он двигался навстречу

delay(5); // задержка, чтобы не забивать канал связи

}

  1. Загрузите программу в контроллер, откройте Монитор порта и попробуйте задавать углы командами наподобие r075, клавиша Enter. Определите максимум и минимум угла для захвата и запишите их (понадобится далее)

  2. Подключите второй серво к стабилизатору напряжения по схеме ниже и испытайте его. Если захват двигается несимметрично – попробуйте уменьшить или увеличить число 180 в строке claw_2.write(180-angle);