Сервопривод начинает вращаться на 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°?! Кто - нибудь из вас знает, что здесь происходит? Спасибо!
@hornymonkey, 👍2
Обсуждение1 ответ
▲ 0
Если это работает, а потом нет, это похоже на механическую проблему.
Чтобы проверить, напишите простую программу, которая просто перемещает сервопривод. Оставьте весь дополнительный веб-код. Подождите, чтобы увидеть, не начнет ли он вести себя хаотично, и вы сможете избавить себя от головной боли, связанной с поиском несуществующих проблем в вашем коде.
,
@Andrew Cline
Смотрите также:
- Не могу остановить вращение SG90
- Wemos mini pro переключатель питания от сервопривода с mosfet bs170
- NodeMCU V3 ПЕРЕГРЕВАЛСЯ И УМЕР
- Попытка связаться с ESP8266
- Вопрос для новичка: когда что-то происходит, устанавливать сервопривод на определенные градусы.
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
Отредактировал вашу ссылку в вопросе. Вы можете избавиться от этого сообщения. Итак, это было изменено для непрерывного вращения или нет?, @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