Люди помогите , я подключил 11 серв к общему минусу и плюсу. минус-GND плюс - VIN . Аккумулятор , который я использую ,мощностью 12в. Вопрос: как мне повысить мощность выходного тока ?
12 вольт это напряжение, а не мощность. Мощность это произведение напряжения на ток. Другими словами 12 вольт умножим на 10 ампер получим 120 ватт. Если отвечать на Ваш вопрос, возьмите самый большой, какой сможете, по габаритам аккумулятор.
Тогда, подсчитайте суммарный ток ( в амперах ) Ваших сервомоторов и сравните с током, который может отдавать Ваш аккумулятор. Второе число должно быть не меньше первого.
Сервоприводы-http://shop.zelectro.cc/servo-9g-sg90 аккумулятор -http://ru.aliexpress.com/item/Super-Rechargeable-Protable-Lithium-ion-Battery-EU-Plug-for-DC-12V-1800mAh/32342434387.html
По описанию, Ваш аккумулятор отдаёт ток от 1 ампера до 2,4 ампера, а вот сервомоторы при таком напряжении могут вполне потребовать ток, который превысит возможности Вашего аккумулятора. Напряжение им нужно в два раза меньше. Попробуйте сначала скажем, 4 мотора подключить к аккумулятору и попробуйте. Потом добавляйте Ваши моторы, пока аккумулятор не начнёт протестовать...
Ну, как минимум, Вы узнаете, на что способен Ваш аккумулятор или не допустили ли Вы сами ошибку в монтаже.
сервам нужно 5 вольт, то есть вам нежно понизить напряжение, например при помощи dc-dc step down преобразователя
Здравствуйте! Помогите мне в решении моей проблемы, пожалуйста! Я неправильно написал программ, и теперь не понимаю, как это исправить. По моей идее, платформа должна сначала встать с согнутых лап на прямые. НО происходит то , что показано на видео . Вот на него ссылка https://yadi.sk/i/rVNxOdIDsRrYY Помогите решить проблему с кодом ,пожалуйста ! Вот код: #include <Servo.h> // Пины ультразвукового дальномера #define trigPin 22 #define echoPin 24 long duration, distance; // Название сервоприводов Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; Servo servo7; Servo servo8; Servo myservoH; // Горизонтальная серва углы от 25 до 145 (центровка 85) Servo myservoV; // Вертикальная серва углы от 0 до 35 const int H_SERVO_PIN = 11; // Горизонтальная серва подключена к пину 11 const int V_SERVO_PIN = 10; //Пин вертикального сервопривода const float H_L_ANGLE = 145; // Максимальные угл поворота башни налево const float H_R_ANGLE = 25; // Максимальные угл поворота башни направо const float H_DEF_ANGLE = 85; // Дефолтный угол (центровка) const float V_U_ANGLE = 55; // Максимальные угл поворота башни вверх const float V_D_ANGLE = 0; // Максимальные угл поворота башни вниз const float V_DEF_ANGLE = 25; // Дефолтный угол (центровка) //Размер шага V_STEP и H_STEP побираем экспериментально для достижения нужной скорости поворота серв const float V_STEP = 0.007; // Шаг - знаение отвечающее за скорость вращения по вертикали. const float H_STEP = 0.012; // Шаг - знаение отвечающее за скорость вращения по горизонтали float curVAngle = V_DEF_ANGLE; //Переменная текущего угла верт. сервы float curHAngle = H_DEF_ANGLE; //Переменная текущего угла гор. сервы bool moveServoVUp = false; //Флаг движения верт. сервы вверх bool moveServoVDown = false; //Флаг движения верт. сервы вниз bool moveServoHLeft = false; //Флаг движения гор. сервы влево bool moveServoHRight = false; //Флаг движения гор. сервы вправо // Переменные 1 = вкл. 0 = откл. int gozforward = 1 ; // идти вперед int gozstop = 0 ; // Стоп int go = 1 ; // Для удобства тестирования дополнений //int val ; // Переменные скорости int movespeed = 100; // Скорость подъема в стойку int stepspeed = 220; // скорость передвижения // Крайние точки углов при которых нужно устанавливать лапы int zs1 = 0; int zs2 = 180; int zs3 = 180; int zs4 = 0; int zs5 = 0; int zs6 = 180; int zs7 = 180; int zs8 = 0; int LED = 13; // Основная стойка. Можете написать отдельное число. // например int s1 = 130; // Я использовал такой способ для подгонки каждой лапы. Измените если нужно. int s1 = zs1 + 130; int s2 = zs2 - 130; int s3 = zs3 - 130; int s4 = zs4 + 130; int s5 = zs5 + 130; int s6 = zs6 - 130; int s7 = zs7 - 130; int s8 = zs8 + 130; // Основная стойка используется для остановки int pos_stop[1][8]={s1,s2, s3,s4, s5,s6, s7,s8}; // откройте при настройке исходного положения лап //int pos_stop[1][8]={zs1,zs2, zs3,zs4, zs5,zs6, zs7,zs8}; // Переменные для массива шагов int zgos1 = 0; int zgos2 = 0; int zgos3 = 0; // Массив в котором записаны все шаги int pos_steps[2][6][8]= { //---------- Часть 1 Шаг начинается с передней левой ноги ------------- { { s1,s2, s3,s4, s5+10,s6-10, s7+20,s8-20 } , { s1-100,s2+50, s3,s4, s5+10,s6-10, s7+20,s8-20 } , { s1-30,s2-40, s3-20,s4+20, s5,s6, s7,s8 } , { s1-30,s2-40, s3-20,s4+20, s5,s6, s7+40,s8-20 } , { s1-10,s2-30, s3,s4, s5,s6, s7+10,s8+30 } , { s1,s2, s3-10,s4-10, s5+10,s6+10, s7,s8 } } , //---------- Часть 2 Шаг начинается с передней правой ноги ------------- { { s1,s2, s3,s4, s5-20,s6+20, s7-10,s8+10 } , { s1,s2, s3+100,s4-50, s5-20,s6+20, s7-10,s8+10 } , { s1+20,s2-20, s3+30,s4+40, s5,s6, s7-10,s8+10 } , { s1+20,s2-20, s3+30,s4+40, s5-40,s6+20, s7-10,s8+10 } , { s1,s2, s3+10,s4+30, s5-10,s6-30, s7,s8 } , { s1+10,s2+10, s3,s4, s5,s6, s7-10,s8-10 } } }; void setup () { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //используем 13 пин как индикатор включённой ардуины pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); // Пины сервоприводов servo1.attach(2); servo2.attach(3); servo3.attach(4); servo4.attach(5); servo5.attach(6); servo6.attach(7); servo7.attach(8); servo8.attach(9); // Занимает исходное положение servo1.write(pos_stop[0][0]); delay(movespeed); servo2.write(pos_stop[0][1]); delay(movespeed); servo3.write(pos_stop[0][2]); delay(movespeed); servo4.write(pos_stop[0][3]); delay(movespeed); servo5.write(pos_stop[0][4]); delay(movespeed); servo6.write(pos_stop[0][5]); delay(movespeed); servo7.write(pos_stop[0][6]); delay(movespeed); servo8.write(pos_stop[0][7]); //gozstop = 1; delay(3000); } void loop() { char val; if (Serial.available()) { val = (char)Serial.read(); //Serial.println(val); } ! switch var; { servo1.write(pos_stop[0][0]); servo3.write(pos_stop[0][2]); servo5.write(pos_stop[0][4]); servo7.write(pos_stop[0][6]); servo2.write(pos_stop[0][1]); servo4.write(pos_stop[0][3]); servo6.write(pos_stop[0][5]); servo8.write(pos_stop[0][7]); //! Перенес из case moveServoVDown = true; case 'S': // Движение вперед // при этом условии в первую очередь работает нога 4 // данное условие возможно вам не понадобиться! // оставьте часть после else! servo7.write(pos_steps[zgos1][zgos2][6]); servo8.write(pos_steps[zgos1][zgos2][7]); servo5.write(pos_steps[zgos1][zgos2][4]); servo6.write(pos_steps[zgos1][zgos2][5]); servo1.write(pos_steps[zgos1][zgos2][0]); servo2.write(pos_steps[zgos1][zgos2][1]); servo3.write(pos_steps[zgos1][zgos2][2]); servo4.write(pos_steps[zgos1][zgos2][3]); servo1.write(pos_steps[zgos1][zgos2][0]); servo3.write(pos_steps[zgos1][zgos2][2]); servo2.write(pos_steps[zgos1][zgos2][1]); servo4.write(pos_steps[zgos1][zgos2][3]); servo5.write(pos_steps[zgos1][zgos2][4]); servo7.write(pos_steps[zgos1][zgos2][6]); servo6.write(pos_steps[zgos1][zgos2][5]); servo8.write(pos_steps[zgos1][zgos2][7]); Serial.println('S'); break; case 'I': //servoV вверх: moveServoVUp = true; Serial.println('I'); break; //case 'g': //servoV вниз // moveServoVDown = true; // break; case 'i': //servoV стоп moveServoVUp = false; moveServoVDown = false; Serial.println('i'); break; case 'L': //servoH движется к 25 moveServoHRight = true; Serial.println('L'); break; case 'J': //servoH движется к 145 moveServoHLeft = true; Serial.println('J'); break; case 'l': //servoH стоп moveServoHLeft = false; moveServoHRight = false; Serial.println('l'); break; case 'h': curVAngle = V_DEF_ANGLE; curHAngle = H_DEF_ANGLE; myservoV.write(curVAngle); myservoH.write(curHAngle); Serial.println('h'); break; } }
Код (C++): #include <Servo.h> // Пины ультразвукового дальномера #define trigPin 22 #define echoPin 24 long duration, distance; // Название сервоприводов Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; Servo servo7; Servo servo8; Servo myservoH; // Горизонтальная серва углы от 25 до 145 (центровка 85) Servo myservoV; // Вертикальная серва углы от 0 до 35 const int H_SERVO_PIN = 11; // Горизонтальная серва подключена к пину 11 const int V_SERVO_PIN = 10; //Пин вертикального сервопривода const float H_L_ANGLE = 145; // Максимальные угл поворота башни налево const float H_R_ANGLE = 25; // Максимальные угл поворота башни направо const float H_DEF_ANGLE = 85; // Дефолтный угол (центровка) const float V_U_ANGLE = 55; // Максимальные угл поворота башни вверх const float V_D_ANGLE = 0; // Максимальные угл поворота башни вниз const float V_DEF_ANGLE = 25; // Дефолтный угол (центровка) //Размер шага V_STEP и H_STEP побираем экспериментально для достижения нужной скорости поворота серв const float V_STEP = 0.007; // Шаг - знаение отвечающее за скорость вращения по вертикали. const float H_STEP = 0.012; // Шаг - знаение отвечающее за скорость вращения по горизонтали float curVAngle = V_DEF_ANGLE; //Переменная текущего угла верт. сервы float curHAngle = H_DEF_ANGLE; //Переменная текущего угла гор. сервы bool moveServoVUp = false; //Флаг движения верт. сервы вверх bool moveServoVDown = false; //Флаг движения верт. сервы вниз bool moveServoHLeft = false; //Флаг движения гор. сервы влево bool moveServoHRight = false; //Флаг движения гор. сервы вправо // Переменные 1 = вкл. 0 = откл. int gozforward = 1 ; // идти вперед int gozstop = 0 ; // Стоп int go = 1 ; // Для удобства тестирования дополнений //int val ; // Переменные скорости int movespeed = 100; // Скорость подъема в стойку int stepspeed = 220; // скорость передвижения // Крайние точки углов при которых нужно устанавливать лапы int zs1 = 0; int zs2 = 180; int zs3 = 180; int zs4 = 0; int zs5 = 0; int zs6 = 180; int zs7 = 180; int zs8 = 0; int LED = 13; // Основная стойка. Можете написать отдельное число. // например int s1 = 130; // Я использовал такой способ для подгонки каждой лапы. Измените если нужно. int s1 = zs1 + 130; int s2 = zs2 - 130; int s3 = zs3 - 130; int s4 = zs4 + 130; int s5 = zs5 + 130; int s6 = zs6 - 130; int s7 = zs7 - 130; int s8 = zs8 + 130; // Основная стойка используется для остановки int pos_stop[1][8] = {s1, s2, s3, s4, s5, s6, s7, s8}; // откройте при настройке исходного положения лап //int pos_stop[1][8]={zs1,zs2, zs3,zs4, zs5,zs6, zs7,zs8}; // Переменные для массива шагов int zgos1 = 0; int zgos2 = 0; int zgos3 = 0; // Массив в котором записаны все шаги int pos_steps[2][6][8] = { //---------- Часть 1 Шаг начинается с передней левой ноги ------------- { { s1, s2, s3, s4, s5 + 10, s6 - 10, s7 + 20, s8 - 20 } , { s1 - 100, s2 + 50, s3, s4, s5 + 10, s6 - 10, s7 + 20, s8 - 20 } , { s1 - 30, s2 - 40, s3 - 20, s4 + 20, s5, s6, s7, s8 } , { s1 - 30, s2 - 40, s3 - 20, s4 + 20, s5, s6, s7 + 40, s8 - 20 } , { s1 - 10, s2 - 30, s3, s4, s5, s6, s7 + 10, s8 + 30 } , { s1, s2, s3 - 10, s4 - 10, s5 + 10, s6 + 10, s7, s8 } } , //---------- Часть 2 Шаг начинается с передней правой ноги ------------- { { s1, s2, s3, s4, s5 - 20, s6 + 20, s7 - 10, s8 + 10 } , { s1, s2, s3 + 100, s4 - 50, s5 - 20, s6 + 20, s7 - 10, s8 + 10 } , { s1 + 20, s2 - 20, s3 + 30, s4 + 40, s5, s6, s7 - 10, s8 + 10 } , { s1 + 20, s2 - 20, s3 + 30, s4 + 40, s5 - 40, s6 + 20, s7 - 10, s8 + 10 } , { s1, s2, s3 + 10, s4 + 30, s5 - 10, s6 - 30, s7, s8 } , { s1 + 10, s2 + 10, s3, s4, s5, s6, s7 - 10, s8 - 10 } } }; void setup () { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //используем 13 пин как индикатор включённой ардуины pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); // Пины сервоприводов servo1.attach(2); servo2.attach(3); servo3.attach(4); servo4.attach(5); servo5.attach(6); servo6.attach(7); servo7.attach(8); servo8.attach(9); // Занимает исходное положение servo1.write(pos_stop[0][0]); delay(movespeed); servo2.write(pos_stop[0][1]); delay(movespeed); servo3.write(pos_stop[0][2]); delay(movespeed); servo4.write(pos_stop[0][3]); delay(movespeed); servo5.write(pos_stop[0][4]); delay(movespeed); servo6.write(pos_stop[0][5]); delay(movespeed); servo7.write(pos_stop[0][6]); delay(movespeed); servo8.write(pos_stop[0][7]); //gozstop = 1; delay(3000); } void loop() { char val; if (Serial.available()) { val = (char)Serial.read(); //Serial.println(val); } ! switch var; { servo1.write(pos_stop[0][0]); servo3.write(pos_stop[0][2]); servo5.write(pos_stop[0][4]); servo7.write(pos_stop[0][6]); servo2.write(pos_stop[0][1]); servo4.write(pos_stop[0][3]); servo6.write(pos_stop[0][5]); servo8.write(pos_stop[0][7]); //! Перенес из case moveServoVDown = true; case 'S': // Движение вперед // при этом условии в первую очередь работает нога 4 // данное условие возможно вам не понадобиться! // оставьте часть после else! servo7.write(pos_steps[zgos1][zgos2][6]); servo8.write(pos_steps[zgos1][zgos2][7]); servo5.write(pos_steps[zgos1][zgos2][4]); servo6.write(pos_steps[zgos1][zgos2][5]); servo1.write(pos_steps[zgos1][zgos2][0]); servo2.write(pos_steps[zgos1][zgos2][1]); servo3.write(pos_steps[zgos1][zgos2][2]); servo4.write(pos_steps[zgos1][zgos2][3]); servo1.write(pos_steps[zgos1][zgos2][0]); servo3.write(pos_steps[zgos1][zgos2][2]); servo2.write(pos_steps[zgos1][zgos2][1]); servo4.write(pos_steps[zgos1][zgos2][3]); servo5.write(pos_steps[zgos1][zgos2][4]); servo7.write(pos_steps[zgos1][zgos2][6]); servo6.write(pos_steps[zgos1][zgos2][5]); servo8.write(pos_steps[zgos1][zgos2][7]); Serial.println('S'); break; case 'I': //servoV вверх: moveServoVUp = true; Serial.println('I'); break; //case 'g': //servoV вниз // moveServoVDown = true; // break; case 'i': //servoV стоп moveServoVUp = false; moveServoVDown = false; Serial.println('i'); break; case 'L': //servoH движется к 25 moveServoHRight = true; Serial.println('L'); break; case 'J': //servoH движется к 145 moveServoHLeft = true; Serial.println('J'); break; case 'l': //servoH стоп moveServoHLeft = false; moveServoHRight = false; Serial.println('l'); break; case 'h': curVAngle = V_DEF_ANGLE; curHAngle = H_DEF_ANGLE; myservoV.write(curVAngle); myservoH.write(curHAngle); Serial.println('h'); break; } }