Занятие 23.01.2018 Сервоприводы на гироскутер

Рассмотрели проекты и рисунки декоративного оформления полноростового проморобота.

Рассмотрели рисунки суставов рук проморобота.

Совершенствуем работу с сервоприводами для установки их в гироскутер.

Рассмотрели возможность управления гироскутером дистанционно и удаленно используя для этого установленные внутри гироскутера сервоприводы для имитации наклона площадки гироскутера.

Идея такая — снимаем корпус с гироскутера, снимаем со статичных мест гироскопы управления, устанавливаем на их места вращающиеся площадки крепления гироскопов, площадки напечатаем на 3д принтере. Затем к этим площадкам крепим сервприводы, сервоприводы подключаем к микроконтроллеру ардуино и пишем программу для сервоприводов для наклона с их помощью площадки с гироскопами, что приведет к инициализации движения гироскутера.

В связи с тем, что данный гироскутер будет использован как платформа для полноростового проморобота, можно считать программу написанную для сервоприводов началом программы для большого проекта полноростового проморобота.

По мере увеличения функций программа будет расти и увеличиваться в зависимости от подключения разных возможностей.

Так же испытали манипулятор, который так же двигается на сервоприводах.

Программа движения гироскутера с помощью сервоприводов.

# include <Servo.h>  // подключаем библиотеку управления сервоприводами

Servo right; // называем сервопривод управляющий правым гироскопом

Servo left; // называем сервопривод управляющий левым гироскопом

void setup(){

right.attach(9); //  определяем контакт 9 подключения правого сервопривода

left.attach(10); //  определяем контакт 10 подключения левого сервопривода

}

void loop(){ // программу выполнения пока оставляем пустой

 

}

// определяем горизонтальное состояние гироскопов по установке сервоприводов на 90 градусов, т.к. отклонять гироскопы надо будет назад, поэтому сервоприводы в положение 0 градусов устанавливать нельзя

void forward(){  // функция движения гироскутера вперед

left.write(100);  // левый сервопривод устанавливаем на 100 градусов, больше на 10 градусов от горизонтального состояния

right.write(100); // правый сервопривод устанавливаем на 100 градусов, больше на 10 градусов от горизонтального состояния

// при таком положении 2 сервопривода наклонят правый и левый гироскоп вперед на 10 градусов и гироскутер поедет вперед

}

void back(){ // функция движения назад

left.write(80);// левый сервопривод устанавливаем на 80 градусов, меньше на 10 градусов от горизонтального состояния

right.write(80);// правый сервопривод устанавливаем на 80 градусов, меньше на 10 градусов от горизонтального состояния

}

void leftf(){ // функция поворота влево вперед

left.write(90); // левый сервопривод устанавливаем на 90 градусов, горизонтальное состояние  — левое колесо гироскутера остановлено

right.write(100);// правый сервопривод устанавливает правый гироскоп на 10 градусов ниже горизонтального состояния — правое колесо едет вперед

// левое колесо на месте, правое колесо вперед — гироскутер поворачивает налево вперед

}

void rightf(){ // функция поворота вправо вперед

left.write(100);// левый сервопривод устанавливает левый гироскоп на 10 градусов ниже горизонтального состояния — левое колесо едет вперед

right.write(90);// правый сервопривод устанавливаем на 90 градусов, горизонтальное состояние  — правое колесо гироскутера остановлено

// правое колесо на месте, левое колесо вперед — гироскутер поворачивает направо вперед

}

void rightb(){ // функция поворота вправо назад

left.write(90);// левый сервопривод устанавливаем на 90 градусов, горизонтальное состояние  — левое колесо гироскутера остановлено

right.write(80);// правый сервопривод устанавливает правый гироскоп на 10 градусов выше горизонтального состояния — правое колесо едет назад

// левое колесо на месте, правое колесо назад — гироскутер поворачивает направо назад

}

void leftb(){ // функция движения влево назад

left.write(80);// левый сервопривод устанавливает левый гироскоп на 10 градусов выше горизонтального состояния — левое колесо едет назад

right.write(90); // правый сервопривод устанавливаем на 90 градусов, горизонтальное состояние  — правое колесо гироскутера остановлено

// правое колесо на месте, левое колесо назад — гироскутер поворачивает налево назад

}

Программа работы манипулятора

Программа работы манипулятора довольно сложная.

Необходимо определить названия для 4 сервоприводов, вычислить углы состояния начального и конечного положения сервоприводов, а так же на какой угол и когда каждый сервопривод повернуть для получения определенных действий манипулятора.

После полученных данных в цифрах, пишем программу для движения манипулятором, пробная программа, будет дорабатываться.

Циклы применены для уменьшения скорости работы сервоприводов.

#include <Servo.h> // подключаем библиотеку
int i=0; // переменная счетчика
int s = 10; // переменная скорости работы
Servo vverh;  // названия сервоприводов
Servo povorot;
Servo vpered;
Servo zahvat;
void setup() {
vverh.attach(9);  // определение подключения контактов сервоприводов
povorot.attach(6);
vpered.attach(11);
zahvat.attach(3);
vverh.write(90); // начальное состояние манипулятора
vpered.write(60);
zahvat.write(170);
povorot.write(50);
delay(2000); // пауза старта

}

void loop() { // программа исполнения
delay(1000); // пауза 1с
i=60; // счетчик 60 
while(i<=90){ // цикл замедления работы
i=i+1; // изменения счетчика
delay(s); // пауза в работе
vpered.write(i); // поворот сервопривода для движения манипулятора вперед

}
delay(2000); // пауза 2с
zahvat.write(125); // захват
delay(2000); // пауза 2с
i=90;  // счетчик
while(i<=180){
i=i+1;
delay(s);
vverh.write(i); // вверх 
}

delay(1000); // пауза
i=60;
while(i<=180){
i=i+1;
delay(s);
povorot.write(i); // поворот
}
delay(2000); // пауза
i=180;
while(i>=90){
i=i-1;
delay(s);
vverh.write(i); // вниз манипулятор
}
delay(1000);// пауза
zahvat.write(170); // отпустить захват
i=100;
while(i>=60){
i=i-1;
delay(s);
vpered.write(i); // движение назад
}

i=180;
while(i>=50){
i=i-1;
delay(s-5);
povorot.write(i); // поворот в начальную точку
}
}

 

Обсуждение закрыто.