Управление сервомоторами
Примечание. Этот и последующие тесты следует проводить при отсоединённых от конструкции сервомоторах.
Поворот сервомотора на заданный угол
Для управления сервомоторами следует подключить библиотеку Servo.h. Внутри функции setup инициализируем сервомотор функцией attach, в качестве аргумента которой будет номер контакта, к которому подключен мотор.
Для поворота сервомотора вокруг оси используется функция write. Единственный аргумент это функции — угол поворота в градусах. Сервомоторы, применяемые в данном конструкторе, могут поворачиваться на угол от 0 до 180 градусов.
В данном примере сервомотор, подключенный к контакту контроллера №5 будет поворачиваться сначала на угол 45 градусов, затем на 135.
#include "Servo.h"
byte servoPin = 5;
Servo srv;
void setup() {
srv.attach(servoPin);
}
void loop() {
srv.write(45);
delay(1000);
srv.write(135);
delay(1000);
}
Сброс сервомоторов в начальное положение
Перед окончательной установкой сервомоторов на конструкцию манипулятора, необходимо убедиться, что они находятся в начальном положении — 90 градусов. Для этого, можно использовать следующую программу.
После подачи питания на контроллер, данная программа повернет валы сервомоторов на 90 градусов.
#include "Servo.h"
byte servoPins[4] = {2,3,4,5};
Servo srv[4];
void setup() {
for(byte i=0; i<4; i++){
srv[i].attach(servoPins[i]);
}
// сброс сервомоторов в центральное положение
for(byte i=0; i<4; i++){
srv[i].write(90);
}
delay(3000);
// отключение сервомоторов
for(byte i=0; i<4; i++){
srv[i].detach();
}
}
void loop() {
}
Включение и выключение вакуумного насоса
Драйвер вакуумного насоса подключен к контактам 6 и 7. Инициализируем эти контакты на контроллере. Один из них оставим на низком уровне, а состояние второго будем меня в цикле.
Таким образом, насос будет включаться и выключаться с периодом в 1 секунду.
byte in1Pin = 6;
byte in2Pin = 7;
void setup() {
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
digitalWrite(in2Pin, LOW);
}
void loop() {
digitalWrite(in1Pin, HIGH);
delay(1000);
digitalWrite(in1Pin, LOW);
delay(1000);
}