Сервопривод начинает вращаться на 360 градусов через несколько минут

Я использую свой ESP8266 в качестве веб-сервера для наклона камеры с помощью servo Tower Pro Micro Servo 9G.

#include <Servo.h>
#include <ESP8266WiFi.h>

const char* ssid     = "SSID";
const char* password = "password";

Servo tilt;

WiFiServer server(8082);

void setup() {
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
  server.begin();
  Serial.println("Server started");
  tilt.attach(2);
  tilt.write(100);
}

void loop() {
  WiFiClient client = server.available();
  if (!client)
  {
    return;
  }
  Serial.println("Waiting for new client");
  while(!client.available())
  {
    delay(1);
  }
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  
  int value = LOW;
  
  if(request.indexOf("/SERVO=UP") != -1){
        int t = tilt.read();
        if(t <= 125) {
          delay(10);
          tilt.write(t+8);
        }
  }
  if(request.indexOf("/SERVO=DOWN") != -1){
        int t1 = tilt.read();
        if(t1 >= 75) {
          delay(10);
          tilt.write(t1-8);
        }
    }   

  client.println("HTTP/1.1 200 OK"); //
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.print(" CONTROL Servo: ");

  if(value == HIGH)
  {
    client.print("ON");
  }
  else
  {
    client.print("OFF");
  }
  client.println("<br><br>");
  client.println("<a href=\"/SERVO=UP\"\"><button>ON</button></a>");
  client.println("<a href=\"/SERVO=DOWN\"\"><button>OFF</button></a><br />");
  client.println("</html>");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

Первые минуты он работает нормально, но через несколько минут начинает вращаться на 360° без остановки. Хотя, вы не можете повернуть этот сервопривод на 180°?! Кто - нибудь из вас знает, что здесь происходит? Спасибо!

, 👍2

Обсуждение

Отредактировал вашу ссылку в вопросе. Вы можете избавиться от этого сообщения. Итак, это было изменено для непрерывного вращения или нет?, @timemage

Нет, я его не модифицировал., @hornymonkey

Без того, чтобы он был изменен, я не могу понять, что "он начинает безостановочно поворачиваться на 360°"., @timemage

Вот почему я в замешательстве ^^ Может быть, это какая-нибудь дешевая китайская штучка ^^ Но знаете ли вы, почему он начинает вращаться случайным образом?, @hornymonkey

Вы могли бы удалить два вызова "tilt.write" в "цикле", чтобы исключить базовую логику программы из рассмотрения. Если он все еще ведет себя странно, подумайте об удалении всего кода, связанного с Wi-Fi, даже заголовка, и посмотрите, изменит ли это поведение. Если ваш сервомотор все еще ведет себя странно, не имея ничего, кроме практически пустого скетча, с немногим большим, чем вызов "tilt.write" (и предварительных условий) в " setup ()", если ничего другого, это создает более чистый вопрос., @timemage

tilt.attach(2); Вы подключили вывод сервосигнала к GPIO #2 или к выводу "D2" (который, вероятно, является GPIO #4)?, @timemage

Зачем использовать client.flush() во время получения? сбросить блок до тех пор, пока все данные не будут отправлены. Это не имеет никакого отношения к буферу приема., @Delta_G


1 ответ


0

Если это работает, а потом нет, это похоже на механическую проблему.

Чтобы проверить, напишите простую программу, которая просто перемещает сервопривод. Оставьте весь дополнительный веб-код. Подождите, чтобы увидеть, не начнет ли он вести себя хаотично, и вы сможете избавить себя от головной боли, связанной с поиском несуществующих проблем в вашем коде.

,