Как заставить сервопривод замедлить движение

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

Это код, который я сейчас использую для своего сервопривода на 180 градусов. Я также хочу, чтобы это работало на моем сервоприводе на 360 градусов, но поскольку я новичок, я не могу в этом разобраться...

#include <Servo.h>

Servo s;

void setup() {
  // put your setup code here, to run once:
  //pinMode(9,OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
  s.attach(9);
}

void loop() {
   float l = analogRead(A0);
   Serial.print(l);
   Serial.print(" ");
   int v = map(l,0,1024,0,179);
   s.write(v);
   Serial.println(v);

}

, 👍-1

Обсуждение

1. Не публикуйте код как картинку. Скопируйте и вставьте его в свой вопрос и используйте правильное форматирование (выделите код и нажмите Control + K, чтобы отформатировать его как блочный код). 2. Не публикуйте просто изображения вашей схемы. Мы не можем многого на них увидеть. Вместо этого нарисуйте схему. Вы можете использовать внутренний редактор схем этого сайта, когда редактируете свой вопрос. Или, если вы не понимаете схемы на данном этапе обучения, используйте что-то более простое, например Fritzing. 3. Лучше опишите, почему вы не можете использовать сервопривод на 360° с вашим кодом. Что происходит, если вы попробуете?, @chrisl

Я не совсем понимаю, какова ваша точная цель, но вам нужно быть осторожным при использовании сервопривода на 360°. Некоторые из них на самом деле являются сервоприводами непрерывного вращения, где вы не устанавливаете угол с помощью функции Servo.write(), а устанавливаете скорость вращения (поэтому значение 90 будет означать отсутствие движения), @chrisl

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

Я теперь правильно добавил код и картинки из своей схемы. Надеюсь, что теперь вы будете лучше понимать и помогать., @Iris


1 ответ


2

Скорость вращения сервопривода контролируется его внутренней схемой. Как только вы отправляете ему новое целевое положение, он движется к этому положению с максимальной скоростью и замедляется по мере приближения.

Лучшее, что вы можете сделать, чтобы замедлить его, — это менять его цель пошагово, пока не достигнете целевого положения, вместо того, чтобы устанавливать конечную цель сразу. Если вы перемещаете его несколькими большими шагами, движение будет прерывистым; если вы отправляете меньшие шаги с более короткими интервалами (чтобы общее время перемещения было таким же), движение станет более плавным.

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

,