Пповорот сервопривода на 90 градусов
#include <Servo.h>
Servo myservo; // создаем сервообъект для управления сервоприводом
// на большинстве плат можно создать двенадцать сервообъектов
int pos = 0; // переменная для хранения положения сервопривода
void setup() {
myservo.attach(9); // присоединяем сервопривод к контакту 9 к объекту сервопривода
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // переход от 0 градусов к 180 градусам
// с шагом в 1 градус
myservo.write(pos); // сообщаем сервоприводу перейти в позицию в переменной 'pos'
delay(15); // ждем 15 мс, пока сервопривод не достигнет позиции
}
for (pos = 180; pos >= 0; pos -= 1) { // переход от 180 градусов к 0 градусам
myservo.write(pos); // сообщаем сервоприводу перейти в позицию в переменной 'pos'
delay(15); // ждем 15 мс, пока сервопривод не достигнет позиции
}
}
Я нашел этот код, который заставляет сервопривод поворачиваться на 180 градусов и обратно, но когда я переключаю 180 градусов на 90, что мне и нужно, мой сервопривод этого не делает (я пробовал код в симуляторе Arduino).
Нужно ли мне изменить что-то еще в коде (например, время задержки), чтобы оно увеличивалось на 90 градусов вверх, а затем на 90 градусов вниз?
Вот ссылка на схему:
https://circuits.io/circuits/3597808-servo-90-grades
@hehexd, 👍3
Обсуждение3 ответа
Лучший ответ:
Нет, вам не нужно изменять временную задержку, чтобы заставить ее вращаться на 90 градусов, задержка просто изменит скорость вращения сервопривода. Ошибка используемого вами симулятора, так как скетч с 180 замененным на 90 работает безупречно.
#include <Servo.h>
Servo myservo; // создаем сервообъект для управления сервоприводом
// можно создать максимум восемь сервообъектов
int pos = 0; // переменная для хранения положения сервопривода
void setup()
{
myservo.attach(9); // присоединяем сервопривод к контакту 9 к объекту сервопривода
}
void loop()
{
for(pos = 0; pos < 90; pos += 1) // изменяется от 0 градусов до 180 градусов
{ // с шагом в 1 градус
myservo.write(pos); // сообщаем сервоприводу перейти в позицию в переменной 'pos'
delay(15); // ждем 15 мс, пока сервопривод не достигнет позиции
}
for(pos = 90; pos>=1; pos-=1) // переходит от 180 градусов к 0 градусам
{
myservo.write(pos); // сообщаем сервоприводу перейти в позицию в переменной 'pos'
delay(15); // ждем 15 мс, пока сервопривод не достигнет позиции
}
}
УБЕДИТЕСЬ, ЧТО ВЫ ЗАМЕНИЛИ ОБЕИ 180 НА 90.
Я так и сделал, и ничего.., @hehexd
Я только что создал симуляцию на симуляторе Wokwi Arduino на основе вашего кода, и она отлично работает. Вот постоянная ссылка
Когда вы впервые нажимаете «кнопку воспроизведения», анимация сервопривода дико прыгает. Почему это происходит?, @VE7JRO
Эта строка кода правильно настроит таймеры ШИМ для вывода правильного сигнала для перемещения сервопривода на значение, установленное в «pos»
myservo.write(pos);
К скорости это не имеет никакого отношения. Сервопривод попытается достичь позиции как можно быстрее.
Задержка(15) в вашем коде — это время задержки между каждым "myservo.write(pos);"
Цикл for работает следующим образом:
myservo.write(0); // Перейти к 0 градусам
delay(15); // Подождите 15 мс
myservo.write(1); // Переходим на 1 градус
delay(15); // Подождите 15 мс
myservo.write(2); // Переходим на 2 градуса
delay(15); // Подождите 15 мс
myservo.write(3); // Переходим на 3 градуса
delay(15); // Подождите 15 мс
и т. д.
Время в секундах, необходимое для поворота, равно (диапазон_в_градусах x 15)/1000
например, 180 градусов x 15 мс/1000 = 2,7 секунды 90 градусов x 15 мс/1000 = 1,35 секунды
Увеличение задержки на 15 мс замедлит вращение сервопривода.
Кроме того, убедитесь, что вы изменили угол 180 градусов на 90 в ОБОИХ циклах for. Если вы измените значение на единицу, сервопривод будет медленно перемещаться от 0 до 90, затем прыгать до 180 и медленно возвращаться к 0 и повторять действия. (или наоборот, в зависимости от того, какой из них вы забыли изменить)
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
- 9 сервоприводов на Arduino Nano?
«Когда я переключаю 180 градусов на 90 градусов, это то, что мне нужно, мой сервопривод этого не делает» - Так что * делает * он делает? ...
(Я попробовал код в симуляторе Arduino)
- Что происходит с *настоящим* Arduino и *настоящим* сервоприводом? Симуляторы - это всего лишь приближение. Они никогда не могут быть такими же хорошими, как настоящие., @Majenko@Majenko Что он делает, так это поднимается на 180 градусов и начинает подметать между 180 и 90 градусами. На самом деле это действительно странно, потому что я вообще не развернул код на 180 градусов. Вы думаете, что симулятор Arduino не точен с сервоприводами?, @hehexd
Симулятор, похоже, хреновый. Получите настоящий сервопривод для вашего Arduino. Они очень дешевые., @Majenko
Либо так, либо вы неправильно интерпретируете выходной сигнал сервопривода, и то, что вы считаете 180 °, на самом деле 0 °., @Majenko
@Majenko Я попробую с настоящим сервоприводом, но странно то, что этот первый код, который я опубликовал, работает только на 180 градусов и обратно, для любого другого числа сервопривод поворачивается в диапазоне от 90 до 180 градусов. Симулятор BDW создан компанией Autodesk., @hehexd
Сними видео результата и потом выложи., @Dat Ha
@DatHa Я отредактировал вопрос., @hehexd