Практическое занятие 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);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: