Почему не работает серво MG996R?

Coder8
Offline
Зарегистрирован: 29.08.2020

Плата Arduino Uno. Серво SG90 нормально работает.

А вот MG996R - нет. Внутри вроде что-то крутится (шумит), но сам серво - нет.

Что может быть не так?

Сам серво неисправный?

Или скетч не подходит для него?

Использую вот такой скетч:

 

Coder8
Offline
Зарегистрирован: 29.08.2020
#include

Servo myservo;

void setup(){
myservo.attach(9);
myservo.write(0);
delay(1000);
}

void loop(){
int position;
for(position = 0; position < 180; position += 2)
{
myservo.write(position); // Перемещаемся на следующую позицию
delay(20); // Короткая пауза
}
}

Вот схема http://arduino.ru/sites/default/files/u56884/shema_0.png

sadman41
Offline
Зарегистрирован: 19.10.2016

MGxxR жрёт больше электронов так-то. А на схеме её вовсе нет.

sadman41
Offline
Зарегистрирован: 19.10.2016

Сделайте простой луп: write (max); delay(1000):write(min);delay(1000);

Тогда и узнаете что к чему.
На нормальной UNO 996 крутится - только вчера проверял.

Coder8
Offline
Зарегистрирован: 29.08.2020

sadman41 пишет:
Сделайте простой луп: write (max); delay(1000):write(min);delay(1000); Тогда и узнаете что к чему. На нормальной UNO 996 крутится - только вчера проверял.

Поменял скетч. Шумит просто, но не крутится.. От com порта же 5V? Может напряжение чуть больше подать от батареек? Хотя 5V для 996 должно хватать. Там же от 3 до 7.2V.

#include <Servo.h>

Servo myservo;

void setup(){
myservo.attach(9);
myservo.write(0);
delay(1000);
}

void loop(){
  int position;
  
    myservo.write(360);  // Перемещаемся на следующую позицию
    delay(20);               // Короткая пауза

    myservo.write(0);  // Перемещаемся на следующую позицию
    delay(20);               // Короткая пауза
  }

 

sadman41
Offline
Зарегистрирован: 19.10.2016

С такими задержками и не будет.

lilik
Offline
Зарегистрирован: 19.10.2017

Coder8 пишет:

 От com порта же 5V? Может напряжение чуть больше подать от батареек? Хотя 5V для 996 должно хватать. Там же от 3 до 7.2V.

У меня компорт 2 sg90 может только - дальше перезагрузка платы и всё. А тут такой конь.

rkit
Offline
Зарегистрирован: 23.11.2016

Coder8 пишет:

От com порта же 5V?

В ком порте питания вообще нет.

Coder8
Offline
Зарегистрирован: 29.08.2020

Подключил сервомотор MG996R по схеме http://arduino.ru/sites/default/files/u56884/photo1642945879.jpeg

Питание 6V

Использовал код из этого ролика https://youtu.be/HnlKAwn6GG8

//This code is to demonstrate the use of a continuous rotation servo motor with its different functions
//Refer to surtrtech.com to understand further

#include <Servo.h> //Servo library

Servo myservo;  //Servo name is myservo
  
void setup() {
  Serial.begin(9600);
  myservo.attach(6);  // attaches the servo signal pin on pin D6

}

void loop() {
  Serial.println("0");// You can display on the serial the signal value
  myservo.write(0); //Turn clockwise at high speed
  delay(3000);
  myservo.detach();//Stop. You can use deatch function or use write(x), as x is the middle of 0-180 which is 90, but some lack of precision may change this value
  delay(2000);
  myservo.attach(6);//Always use attach function after detach to re-connect your servo with the board
  Serial.println("0");//Turn left high speed
  myservo.write(180);
  delay(3000);
  myservo.detach();//Stop
  delay(2000);
  myservo.attach(6);

//myservo.write(92); //Used in the tutorial video, 92 was my stop value 
      
}

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

lilik
Offline
Зарегистрирован: 19.10.2017

А 6 вольт от мизинчиковых солевых батареек разве хватит для такой сервы и платы через стабилизатор?

b707
Offline
Зарегистрирован: 26.05.2017

да дело даже не в батарейках.

сервы питать через ардуину НЕЛЬЗЯ. работать не будут.

Кодер, питайтее свою серву от этих же батареек напрямую

 

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

сервы питать через ардуину НЕЛЬЗЯ. работать не будут.


У меня крутило на столе без нагрузки. Самый простой скетч с лупом в 4 строчки вполне работал. А у гражданина не работает. Явно - демоны лени вселились в серву. Или шестеренки сошли с мест.

Coder8
Offline
Зарегистрирован: 29.08.2020

b707 пишет:

Кодер, питайтее свою серву от этих же батареек напрямую

Попробовал. Немного пошумела серва и все. Не крутится.

Coder8
Offline
Зарегистрирован: 29.08.2020

sadman41 пишет:
b707 пишет:

сервы питать через ардуину НЕЛЬЗЯ. работать не будут.

У меня крутило на столе без нагрузки. Самый простой скетч с лупом в 4 строчки вполне работал. А у гражданина не работает. Явно - демоны лени вселились в серву. Или шестеренки сошли с мест.

Разобрал серву. Вроде все шестеренки на месте. Что может быть не так?

http://arduino.ru/sites/default/files/u56884/msg-644754610-5944.jpg

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Coder8 пишет:

sadman41 пишет:
b707 пишет:

сервы питать через ардуину НЕЛЬЗЯ. работать не будут.

У меня крутило на столе без нагрузки. Самый простой скетч с лупом в 4 строчки вполне работал. А у гражданина не работает. Явно - демоны лени вселились в серву. Или шестеренки сошли с мест.

Разобрал серву. Вроде все шестеренки на месте. Что может быть не так?

http://arduino.ru/sites/default/files/u56884/msg-644754610-5944.jpg

взять новую

lilik
Offline
Зарегистрирован: 19.10.2017

lilik
Offline
Зарегистрирован: 19.10.2017
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(2);  // attaches the servo on pin 2 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

 

lilik
Offline
Зарегистрирован: 19.10.2017

Где красная стрелка соединить с ПК и скетч залить.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если внутри что-то крутится, а вал не двигается - по-любому проблема в механике.

Coder8
Offline
Зарегистрирован: 29.08.2020

sadman41 пишет:
Если внутри что-то крутится, а вал не двигается - по-любому проблема в механике.

Так и оказалось. Разобрал основательно. Брак. Шестеренки плохо находили одна на другую. Заказал новый серво. Все норм.