Всем привет, мне нужна помощь по роботу

sergey1243

✩✩✩✩✩✩✩
8 Окт 2023
7
0
Заголовок темы должен отражать содержимое. Исправь или тема будет удалена
Всем привет, я начинающий ардуинщик и у мекя такая проблема, я делаю робота 6dof работающий на потенциометрах (они 20ком) серво MG996R, так вот, когда я поворачиваю ручку, то серво начинают дергаться или вообще не работают, а ещё они могут вообще отключится все либо пару штук, помогите пожалуйста
:pray:

вот код:
C++:
// Управление 6 серво с помощью 6 потенциометров 10-22 ком



#include <Servo.h>



Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

Servo myservo6;



int potpin1 = 1; // подключаем потенциометры к выводам А1,А2,А3,А4,А5,А6

int potpin2 = 2;

int potpin3 = 3;

int potpin4 = 4;

int potpin5 = 5;

int potpin6 = 6;



int val1;

int val2;

int val3;

int val4;

int val5;

int val6;



void setup()

{

myservo1.attach(3); // подключаем серво к выводам D3,D5,D6,D9,D10,D11

myservo2.attach(5);

myservo3.attach(6);

myservo4.attach(9);

myservo5.attach(10);

myservo6.attach(11);

}



void loop()

{

val1 = analogRead(potpin1);

val2 = analogRead(potpin2);

val3 = analogRead(potpin3);

val4 = analogRead(potpin4);

val5 = analogRead(potpin5);

val6 = analogRead(potpin6);



val1 = map(val1, 0, 1023, 0, 179);

val2 = map(val2, 0, 1023, 0, 179);

val3 = map(val3, 0, 1023, 0, 179);

val4 = map(val4, 0, 1023, 0, 179);

val5 = map(val5, 0, 1023, 0, 179);

val6 = map(val6, 0, 1023, 0, 179);



myservo1.write(val1);

myservo2.write(val2);

myservo3.write(val3);

myservo4.write(val4);

myservo5.write(val5);

myservo6.write(val6);



delay(15);

}
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,967
632
44
Как и от чего запитаны сервы?
Уверен, что у вас проблемы с питанием.
Отключите все сервы кроме одной и погоняйте.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
Оформи код соответствующим образом. Когда серво дёргается обычно не подсоеденён корпус. Схему в студию.
 

sergey1243

✩✩✩✩✩✩✩
8 Окт 2023
7
0
@VictorArx, да там все просто, все как в коде, нету ничего лишнего, нет никаких транзисторов и конденсаторов, а вот про корпус Я не понял
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,967
632
44
Когда серво дёргается обычно не подсоеденён корпус.
В данном случае не хватает питания сервам. У MG996R судя по даташиту максимальный ток 2.5 А, все 6 серв одновременно начинают работу и в это время пиковый ток достигает 15А.
 

sergey1243

✩✩✩✩✩✩✩
8 Окт 2023
7
0
@Геннадий П, а для этого нужен мощный адаптер, или какой то другой источник? И ещё, Я использовал 2А и 5А все равно так было, если что нибудь найду с 15А, проверю и напишу. Спасибо большое.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,967
632
44
@sergey1243, Вы так и не написали и не нарисовали как подключаете питание к сервам и контроллеру. Если неправильно развести питание, то и 15А не хватит тока, будут помехи.

Отключите все сервы кроме одной и погоняйте.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
Согласен, для начала попробовать с одним серво. У меня была схожая проблема. Ардуино питается от одного источника, а серво от другого был плохой контакт с корпусом. Опять мне оформлять код. :)
 

poty

★★★★★★✩
19 Фев 2020
3,228
939
@sergey1243, читайте, пожалуйста, что Вам пишут, а не зацикливайтесь на своих мыслях. На этом форуме, если вставляете код, нужно его оформлять правильно. @VictorArx, за Вас два раза это уже сделал, но Вы упорно ищете отличия.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Товарищи, а никого не смущает, что
C++:
int potpin1 = 1; // подключаем потенциометры к выводам А1,А2,А3,А4,А5,А6
int potpin2 = 2;
int potpin3 = 3;
int potpin4 = 4;
int potpin5 = 5;
int potpin6 = 6;
1, 2, 3, 4, 5, 6 цифровые пины и с них не получится считать аналоговое значение. Раз на то пошло, то либо
C++:
int potpin1 = 15; // подключаем потенциометры к выводам А1,А2,А3,А4,А5,А6
int potpin2 = 16;
int potpin3 = 17;
int potpin4 = 18;
int potpin5 = 19;
int potpin6 = 20;
либо через
C++:
#define potpin1 A1
#define potpin2 A2
и т. д.
 
Изменено:

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Хорошо, допустим. Но конфигурировать пины на вход, на выход нужно всё равно.
 

poty

★★★★★★✩
19 Фев 2020
3,228
939
@viktor1703, при включении пины всегда сконфигурированы на вход (в Нано и им подобных), поэтому для аналоговых входов делать ничего не нужно.
Я с этой библиотекой серво не работал и не видел ее, обычно режим пина задаётся в одном из методов инициализации класса.
 

sergey1243

✩✩✩✩✩✩✩
8 Окт 2023
7
0
@viktor1703, понял, я хочу заказать сегодня нано, и попробовать, но у меня Уно. А вот кстати что происходит с роботом, если я подключаю 2 серво, то они работают от одного потенциометра а если отключу один серво, то все нормально работает. Вот видео: Ссылка
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Нано отличается от уно только тем, что нано есть А6 и А7. Ну и размером
 
  • Лойс +1
Реакции: sergey1243

sergey1243

✩✩✩✩✩✩✩
8 Окт 2023
7
0
@viktor1703, посмотрите мое видео, может сможете помочь, я прикрепил в прошлом сообщении