Вопрос для новичка: когда что-то происходит, устанавливать сервопривод на определенные градусы.

Я пытаюсь установить сервопривод на угол около 90 градусов, когда дружественное значение датчика почвы равно < 50%. Сервопривод вообще не движется. Это потому, что код выполняется слишком быстро, и сервопривод не успевает сменить положение? Я пробовал ставить задержки, но это не сработало, как это исправить? Я новичок в Arduino и буду признателен за любую помощь.

#include <Servo.h>
Servo myservo;


int dryValue = 1024; // Макс
int wetValue = 0; // мин

int friendlyDryValue = 0; // %
int friendlyWetValue = 100;

int sensor = A0;
int sensorValue;

void setup() {

  Serial.begin(115200);

  pinMode(A0, INPUT);
  pinMode(D6, OUTPUT);
}

void loop() {

  int rawValue = analogRead(A0); // датчик почвы

 Serial.print("Raw: ");
  Serial.print(rawValue);
  Serial.print (" | ");

   int friendlyValue = map(rawValue, dryValue, wetValue,     friendlyDryValue, friendlyWetValue);


  Serial.print("Friendly: ");
  Serial.print(friendlyValue);
  Serial.println("%");


if (friendlyValue <50)
{
  myservo.write(9);
  }
  else
  {
    myservo.write(90);
    }
  }

, 👍0

Обсуждение

Вам следует позвонить по адресу https://www.arduino.cc/en/Reference/ServoAttach, указав контакт, к которому вы хотите подключиться. И каков вывод отладки на последовательном мониторе? А как сервер подключен к ардуино?, @Maximilian Gerhardt

Вы пытались запустить демо-скетч сервопривода?, @jsotola


1 ответ


1

Из вашего утверждения pinMode(D6, OUTPUT);, похоже, вы используете pin6 для сервопривода - ? Если да, то вместо этого вам нужно: myservo.attach(6); подготовить сервообъект для использования этого вывода для управления сервоприводом. Невыполнение этого требования является причиной того, что ваш сервопривод не двигался. На сайте Arduino есть пример программы для управления сервоприводом с использованием библиотеки сервоприводов.

Ваш код будет работать очень быстро, но поскольку влажность почвы не может меняться быстро, значение, считываемое с датчика почвы, тоже не должно меняться - если только нет электрических помех (а они всегда будут; это вопрос сколько). Ваши распечатки должны показать вам, насколько последовательны показания.

Есть несколько вещей, которые вы можете с этим поделать:

  1. Задержка примерно на секунду в нижней части функции цикла(), чтобы обновления сервопривода приходили реже и у сервопривода было время отслеживать их. Однако это действительно не помогает при зашумленном сигнале, и вы, вероятно, не хотите, чтобы он отслеживал шум. Кроме того, я обычно не предлагаю использовать задержки, но в такой несложной программе, как эта, это действительно самый простой подход.

  2. Рассчитайте положение сервопривода на основе среднего значения нескольких показаний датчика, а не используя только один. Это поможет с шумом, поэтому сервоприводу придется отслеживать только реальные данные, а не данные + шум.

  3. Делайте и то, и другое. Обновляйте реже и усредняйте несколько показаний с интервалом в несколько десятков миллисекунд. Это позволит снизить шум и сохранить обновления сервопривода в пределах возможностей отслеживания.

,