Вопрос для новичка: когда что-то происходит, устанавливать сервопривод на определенные градусы.
Я пытаюсь установить сервопривод на угол около 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);
}
}
1 ответ
Из вашего утверждения pinMode(D6, OUTPUT);
, похоже, вы используете pin6 для сервопривода - ? Если да, то вместо этого вам нужно: myservo.attach(6);
подготовить сервообъект для использования этого вывода для управления сервоприводом. Невыполнение этого требования является причиной того, что ваш сервопривод не двигался. На сайте Arduino есть пример программы для управления сервоприводом с использованием библиотеки сервоприводов.
Ваш код будет работать очень быстро, но поскольку влажность почвы не может меняться быстро, значение, считываемое с датчика почвы, тоже не должно меняться - если только нет электрических помех (а они всегда будут; это вопрос сколько). Ваши распечатки должны показать вам, насколько последовательны показания.
Есть несколько вещей, которые вы можете с этим поделать:
Задержка примерно на секунду в нижней части функции цикла(), чтобы обновления сервопривода приходили реже и у сервопривода было время отслеживать их. Однако это действительно не помогает при зашумленном сигнале, и вы, вероятно, не хотите, чтобы он отслеживал шум. Кроме того, я обычно не предлагаю использовать задержки, но в такой несложной программе, как эта, это действительно самый простой подход.
Рассчитайте положение сервопривода на основе среднего значения нескольких показаний датчика, а не используя только один. Это поможет с шумом, поэтому сервоприводу придется отслеживать только реальные данные, а не данные + шум.
Делайте и то, и другое. Обновляйте реже и усредняйте несколько показаний с интервалом в несколько десятков миллисекунд. Это позволит снизить шум и сохранить обновления сервопривода в пределах возможностей отслеживания.
- Попытка связаться с ESP8266
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
Вам следует позвонить по адресу https://www.arduino.cc/en/Reference/ServoAttach, указав контакт, к которому вы хотите подключиться. И каков вывод отладки на последовательном мониторе? А как сервер подключен к ардуино?, @Maximilian Gerhardt
Вы пытались запустить демо-скетч сервопривода?, @jsotola