Практическое занятие 2. Подключение одного серво захвата и движение по циклу
Подключите питание серво к проводам, которыми мерили напряжение. Таблица и схема включения серво:
Назначение |
Серво |
Схема |
Gnd |
Коричневый провод |
Черный или синий провод к земле |
+5 В |
Красный провод |
Красный провод к выходу (третьей ножке) стабилизатора напряжения L2805 |
Сигнал |
Желтый, оранжевый или белый провод |
К любому цифровому пину Arduino |
Откройте пример работы с серво: Файл / Примеры / 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)
Загрузите программу в контроллер, включите тумблер питания и убедитесь, что серво захвата двигается. Если серво при повороте начинает упираться в элементы конструкции захвата – немедленно отключите питание, так как это может привести к поломке серво
Отключите серво первого захвата, подключите вместо него серво второго захвата и проверьте его
Практическое занятие 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); // задержка, чтобы не забивать канал связи } |
Загрузите программу в контроллер, откройте Монитор порта и попробуйте задавать углы командами наподобие r075, клавиша Enter. Определите максимум и минимум угла для захвата и запишите их (понадобится далее)
Подключите второй серво к стабилизатору напряжения по схеме ниже и испытайте его. Если захват двигается несимметрично – попробуйте уменьшить или увеличить число 180 в строке claw_2.write(180-angle);
