Проблемы с серводвигателем

Вот проводка Изображение настолько четкое, насколько я могу его сделать.

Вот суть моей проблемы. Моя программа предназначена для последовательного включения и выключения 6 красных светодиодов, включения и выключения 5 белых светодиодов с помощью кнопки и поворота сервопривода от 90 до 15 градусов при нажатии кнопки и возврата к 0 градусов при нажатии кнопки. кнопка больше не нажата.

Весь мой код скомпилирован правильно, светодиоды работают так, как должны, но сервопривод ведет себя странно. Сначала он двигался нормально, но затем, после нескольких нажатий кнопок, он как бы останавливался и возвращался на место, а не плавно двигался, что не сработает для моих целей. Спустя еще какое-то время сервопривод вообще перестал работать. Я осмотрелся и нашел несколько ответов, говорящих о том, чтобы подключить его к альтернативному источнику питания, но я сделал это с модулем питания, который шел в комплекте, и он все еще отказывается двигаться. Я заменил его другим сервоприводом, и тот тоже не будет работать, что заставляет меня задуматься, неправильная ли моя проводка — и все же двигатель включен и создает вибрации, а не движется, поэтому я знаю, что питание проходит. Кроме того, встроенные светодиоды на mega2560 включаются и выключаются в ответ на нажатие моей кнопки, так что я знаю, что они подключены правильно! Так почему же сервопривод не двигается и не реагирует на нажатия кнопок?

В принципе, используя модуль питания Elegoo 3,3–5,0 В, как мне правильно подключить сервопривод, чтобы получать питание только от 9-вольтовой батареи, которую я подключаю к указанному модулю? Я видел, как люди говорили что-то о соединении основания платы и модуля, но я не знаю, как это сделать, и я расстраиваюсь, просматривая Интернет, пытаясь выяснить, как это сделать, поэтому я решил, что просто задать вопрос.

Детали проводки:

5 белых светодиодов соединены параллельно, а красные светодиоды последовательно; все они питаются от источника питания 5 В Arduino и подключаются к контакту GND Arduino. Сервопривод подключен к контакту 10, а земля и питание проходят через модуль питания 5 В, который подключен к батарее 9 В. Индикатор на модуле горит, и я использовал прилагаемые перемычки, чтобы убедиться, что я использую источник 5 В, а не 3,3 В.

Вот мой код:

#include <Servo.h>
Servo servo1;
//---------------------------------------
// Белые светодиоды:
int wL1 = 3;
int wL2 = 4;
int wL3 = 5;
int wL4 = 6;
int wL5 = 7;
//---------------------------------------
// Красные светодиоды:
int rL1 = 8;
//---------------------------------------
// Кнопки:
int wLbutton = 2;
int wLreading;
int wL1state = HIGH;
int wL2state = HIGH;
int wL3state = HIGH;
int wL4state = HIGH;
int wL5state = HIGH;
int wLprevious = LOW;

int servoButton = 1;
int servoState = false;
int servoReading;
int servoPrevious = LOW;
//-----------------------------------------
// Затухание:
int brightness = 0;
int fade = 1;
//-----------------------------------------
// Задержки:
long time = 0;
long time2 = 0;
long debounce = 100;

unsigned long previousMillis = 0;
const long interval = 1000;
//-----------------------------------------



// Настройка ============================================= ================================================== ======================================

void setup() 
{
  pinMode(wL1,OUTPUT);          // Белые светодиоды
  pinMode(wL2,OUTPUT);
  pinMode(wL3,OUTPUT);
  pinMode(wL4,OUTPUT);
  pinMode(wL5,OUTPUT);

  pinMode(rL1,OUTPUT);          // Красные светодиоды

  pinMode(wLbutton, INPUT);     // Кнопки
  pinMode(servoButton, INPUT);  

  servo1.attach(10);
  servo1.write(90);             // Сервопривод

  if (wL1state = HIGH)
{
  wL1state = LOW;                                                              // Установите состояние всех белых светодиодных кнопок на низкий уровень в начале схемы (это не запускается после первого раза).
  wL2state = LOW;
  wL3state = LOW;
  wL4state = LOW;
  wL5state = LOW;
}
}




// Цикл ============================================= ================================================== ========================================

void loop() {

// Кнопка с белым светодиодом ------------------------------------------------------------ -------------------------------------------------- ------------------------------


wLreading = digitalRead(wLbutton);                                             // Чтение состояния кнопки с белым светодиодом

if (wLreading == HIGH && wLprevious == LOW && millis() - time > debounce)      // Если состояние кнопки отличается от последнего чтения и игнорирует шум
{
  if (wL1state == HIGH)                                                        // Если текущее состояние кнопки белого светодиода высокое
  {                                                                           
  wL1state = LOW;                                                              // Установите состояние всех белых светодиодных кнопок на низкое
  wL2state = LOW;
  wL3state = LOW;
  wL4state = LOW;
  wL5state = LOW;
  }
  else {
    wL1state = HIGH;                                                           // В противном случае установите состояние кнопки белого светодиода в высокое
  }
  time = millis();                                                             // Установить время последнего нажатия кнопки на текущее время
}

digitalWrite(wL1,wL1state);
digitalWrite(wL2,wL1state);
digitalWrite(wL3,wL1state);
digitalWrite(wL4,wL1state);
digitalWrite(wL5,wL1state);

wLprevious = wLreading;                                                        // Установить предыдущее значение кнопки белого светодиода на текущее значение

// Кнопка сервопривода ------------------------------------------------------------- -------------------------------------------------- ----------------------------------

servoState = digitalRead(servoButton);

if (servoState == HIGH) 
  {
    servo1.write(75);
  } 
  else 
  {
    servo1.write(0);
  }

// Дыхание красного светодиода ------------------------------------------------------------ -------------------------------------------------- -----------------------------

 analogWrite(rL1,brightness);                                                 // Записываем установленную яркость в красный светодиод
 brightness = brightness + fade;                                              // Установите новую яркость на значение яркости + значение затухания

 if (brightness <= 0 || brightness >=255)                                     // Если яркость меньше 0 или больше 255
  {                                                  
  fade = -fade;                                                               // Отменить значение затухания, изменив направление затухания на противоположное
  }
  delay(10);                                                                  // Подождите немного, чтобы увидеть затухание
}```



, 👍2

Обсуждение

Когда вы говорите о батарее 9 В, вы имеете в виду одну из тех прямоугольных щелочных батарей с двумя клеммами сверху? Они не очень хороши для питания двигателей или сервоприводов. Они не могут производить большой ток. Они эквивалентны батареям 6AAAA. Я не знаю, является ли это всей вашей проблемой, но вы должны использовать немного АА или ААА, и вам будет лучше., @Delta_G

Покажи нам свою схему. Это должно показаться очевидным, поскольку вы сказали, что, по вашему мнению, неисправность может быть в проводке. Есть ли подтягивающий резистор для кнопок? Почему бы вам не подключить их обычным способом для чтения НИЗКОГО уровня при нажатии, чтобы вы могли использовать внутренние подтяжки и не иметь дополнительных резисторов?, @Delta_G

проблема с сервоприводом повторяется? ... сервопривод работает правильно после сброса, а затем ухудшается после нескольких нажатий кнопок?, @jsotola

@Delta_G Спасибо за информацию о батарее 9 В, да, я использую именно ее. Придется покупать батарейку АА или ААА. Сколько из них мне нужно для питания сервопривода? Что касается вашего второго комментария, причина того, что мои белые светодиоды имеют несколько резисторов, заключается в том, что в будущем я хочу, чтобы они включались последовательно с коротким периодом времени между каждым последовательным светом, а не все сразу, но я просто не сделал придумал еще как это сделать. Я оставлю это для отдельного вопроса. Прикреплю фото к сообщению, если поможет., @Koen Zimmerman

@jsotola нет, сейчас это вообще не работает, даже после сброса., @Koen Zimmerman

Почему вы говорите о резисторах на светодиодах? Я не об этом спрашивал. Я спросил, есть ли у вас подтягивающий резистор для вашей кнопки или ваша кнопка плавает, когда она не нажата? Если это так, то это может быть шум чтения и регистрация нажатий, когда вы на самом деле не нажимаете их. Вопрос был в том, почему вы не подключили свою кнопку обычным способом, чтобы при нажатии она читалась как НИЗКАЯ, чтобы вам не нужны были дополнительные резисторы для кнопок. При правильном подключении резисторы для кнопок вообще не нужны. . Пожалуйста, прочитайте внимательно. Я никогда не упоминал резисторы на светодиодах., @Delta_G

@Delta_G Хорошо, расслабься. Я неправильно понял, это не конец света. У меня есть подтягивающий резистор, как вы можете видеть на изображении. Я не знаю, что вы подразумеваете под «дополнительными резисторами», если вы не говорите о светодиодах, у меня есть только один для кнопки., @Koen Zimmerman

@Delta_G Я уже исправил проблему, поэтому закрываю вопрос. Пожалуйста, не будьте столь прямолинейны в своих комментариях. Я новичок, и я делаю все возможное., @Koen Zimmerman

Извини, я не хотел быть хладнокровным. Просто чтобы указать, что вы неправильно поняли. Дополнительные резисторы, о которых я говорю, это те, которые должны быть на кнопках. Когда я спросил сначала, я не знал, были ли они там. Если бы вы правильно подключили кнопки, они бы вам не понадобились. Но с кнопками, подключенными к ВЫСОКОМУ уровню при нажатии, у вас должны быть подтягивающие резисторы, иначе вы получите случайные шумовые нажатия вашей кнопки, когда ее никто не нажимает., @Delta_G

Я думаю, вы прочитали мой комментарий с каким-то ударением в голове и ответили, что ЭТО не холодно. Я ничего там не читаю, кроме попытки сказать вам, что вы меня неправильно поняли, и попытки прояснить, о чем я говорил. В интернете при разговоре в тексте не слышно чьей-то интонации, поэтому важно не думать, что написали тем же голосом, который вы слышите в своей голове., @Delta_G

Независимо от того, как это передано, фраза вроде «Пожалуйста, прочитайте внимательно» всегда вызовет у людей защиту. Попробуйте изменить способ общения, чтобы этого не произошло. Вместо этого вы можете сказать что-то вроде «Я думаю, вы неправильно поняли, позвольте мне уточнить». вместо этого вы согласились на «почему вы говорите о х» и «читай внимательнее, я никогда не упоминал х». Одинокое чувство, что путь, если вы сказали кому-то еще., @Koen Zimmerman


1 ответ


Лучший ответ:

2

Я видел, как люди говорили что-то о соединении основания платы и модуля

Да, я считаю, что это то, что вам нужно сделать.

Сервопривод подключен к контакту 10, а заземление и питание проходят через модуль питания 5 В, который подключен к батарее 9 В.

Насколько я понимаю, вы подключаетесь вот так

Серводвигатель 5В – модуль питания 5 В

Заземление сервопривода — заземление модуля питания

Сервосигнал — контакт 10 Arduino

Если это так, вам нужно сделать Y-соединение следующим образом:

Сервопривод GND — GND модуля питания — Arduino GND (эти 3 контакта должны быть соединены вместе)

,

Я соединил три вместе и до сих пор ничего. Я заметил, что как только я подключаю сервопривод к силовому модулю, зеленый индикатор гаснет. Это результат того, что мощности 9В не хватает?, @Koen Zimmerman

Вы можете видеть на фотографии, которую я прикрепил к посту слева, соединение Y, о котором вы упомянули., @Koen Zimmerman

Хм, прежде всего я вижу странную вещь в вашем изображении. В вашем Y-соединении вы подключаете желтый провод от сервопривода. Вы уверены, что это провод GND?, @duk3

И я также рекомендую вам сделать это таким образом. Во-первых, удалите все светодиоды и попробуйте заставить сервопривод работать. Затем можно добавить светодиоды. Таким образом, вы можете легко понять, где проблема. Просто разделите на шаги, не пытайтесь совместить все сразу., @duk3

В этом была проблема. Это сработало и снова начало отвечать, когда я исправил соединение. Затем я получил свою вилку постоянного тока 9 В, и с ее помощью сервопривод начал работать. Большое спасибо., @Koen Zimmerman

Пожалуйста!, @duk3