Как повернуть серводвигатель на определенный угол?

Я пытаюсь повернуть вершину на определенный угол каждые 1 секунду. Например: 1 градус в секунду. У меня два вопроса:

  1. Можно ли добиться этого с помощью серводвигателей?
  2. Если нет, то какой двигатель мне следует использовать?

Я знаю, что у этого вопроса очень мало описания. Я в основном программист. Я не очень разбираюсь в ардуино. На самом деле для меня это проект-хобби.

Заранее спасибо.

, 👍0


2 ответа


Лучший ответ:

1

Добрые люди, написавшие библиотеки Arduino, включают драйверы для сервоуправления. Эти драйверы отделяют аппаратное обеспечение от программиста программного обеспечения скетча (скетч — это прикладное программное обеспечение, которое вы пишете на C или C++). Подробно разбираться в драйвере не нужно. Однако программное обеспечение сервопривода (вероятно, написанное на C++) можно изучить здесь.

Чтобы переместить обычный сервопривод в определенное положение, вызовите драйвер сервопривода Arduino с помощью функции write(angle) передача значения угла от 0 до 180. Значение представляет собой приблизительное значение в градусах, а тип значения — целое число.

В приведенных выше ссылках вы найдете этот пример перемещения серводвигателя по всему диапазону:

/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#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 мс, пока сервопривод не достигнет позиции
  }
}

Перейдите на эту страницу для получения более подробной информации, включая схему (схему) подключения сервопривода к плате Arduino Uno.

,

Еще один вопрос: могу ли я использовать маленькие ардуино, такие как нано, вместо мега/уно?, @O_o

Сделка с использованием разных платформ обычно может быть сведена к двум проблемам. Во-первых, чтобы убедиться, что аппаратное обеспечение работает с приложением. В этом случае библиотеки сервоприводов Arduino используют аппаратное обеспечение ШИМ внутри процессора. И в Uno, и в Nano используется процессор ATmega328P. Так что это должно работать. Во-вторых, библиотека была перенесена на другой процессор и другую плату. В данном случае процессор тот же. Так что вполне вероятно, что вы можете использовать Nano вместо Uno., @st2000

Если не ясно, @PotatoMan верен. Обычные сервоприводы имеют ограниченное вращение (менее одного полного оборота). Как вы сказали, ваша конечная цель не ясна. Так что помочь в подборе альтернативного мотора мы не можем., @st2000

Спасибо чувак. Я буду работать над этим и узнаю больше. У меня есть отправная точка. Спасибо, что прояснили ситуацию. Хорошего дня :), @O_o


0

Вы можете вращать серводвигатель на градус, но у него есть свои ограничения, он может вращаться только от 0 до 180 градусов. Если вам нужно вращаться сверх этого, я бы рекомендовал использовать шаговые двигатели, они могут быть очень точными, но у них нет потенциометра, как у сервопривода, поэтому после сброса системы двигатель не вернется в исходное положение. начальная позиция.

,

Спасибо чувак. Однако @st2000 привел гораздо более подробный пример., @O_o