Przeszukaj forum
Pokazywanie wyników dla tagów 'PCA9685'.
Znaleziono 1 wynik
-
Drodzy koledzy chciałbym prosić o pomoc: Hobbistycznie buduje robota na wzór: W zasadzie interesuje mnie samo podwozie. Wydrukowałem i złożyłem wszystko w całość. Całość waży: 910g (podwozie, okablowanie, arduino uno, PCA9685, kabel do programowania) Zastosowałem: 1. Źródło energii ogniwa 3x 18650 4,2V DC 1200mA (waga: 150g - na tą chwile jest poza podwoziem) 2. 18x Servo MG-90S specyfikacja: 3. Płyta Arduino UNO 4. Kontroler PCA9685 nakładka na Arduino uno 5. Redukcja dla serv: 300W 20A DC-DC Buck Converter Step Down Module 6. Całość złożona: Na potrzeby startu: Arduino zasilone bateria 9V PCA9685 zasilone poprzez step down ustawiony na 5,5V Program: #include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // I2C 0x40 #define SERVOMIN 100 // 0 stopni #define SERVOMAX 600 // 180 stopni 400 - 90 stopni #define SERVO_1 0 #define SERVO_2 1 #define SERVO_3 2 #define SERVO_4 3 #define SERVO_5 4 #define SERVO_6 5 #define SERVO_7 6 #define SERVO_8 7 #define SERVO_9 8 #define SERVO_10 9 #define SERVO_11 10 #define SERVO_12 11 #define SERVO_13 12 #define SERVO_14 13 #define SERVO_15 14 #define SERVO_16 15 void setup() { pwm.begin(); pwm.setPWMFreq(60); delay(10); // pozycja startowa Noga 1 pwm.setPWM(SERVO_11, 0, 120); delay(250); pwm.setPWM(SERVO_12, 0, 490); delay(250); pwm.setPWM(SERVO_13, 0, 400); delay(250); // pozycja startowa Noga 3 pwm.setPWM(SERVO_1, 0, 350); delay(250); pwm.setPWM(SERVO_2, 0, 100); delay(250); pwm.setPWM(SERVO_3, 0, 150); delay(250); // pozycja startowa Noga 6 pwm.setPWM(SERVO_14, 0, 315); delay(250); pwm.setPWM(SERVO_15, 0, 600); delay(250); pwm.setPWM(SERVO_16, 0, 600); delay(250); // pozycja startowa Noga 4 pwm.setPWM(SERVO_4, 0, 370); delay(250); pwm.setPWM(SERVO_5, 0, 600); delay(250); pwm.setPWM(SERVO_6, 0, 575); delay(250); // pozycja startowa Noga 2 // pwm.setPWM(SERVO_4, 0, 370); // brak wolnego slota // delay(250); pwm.setPWM(SERVO_7, 0, 150); delay(250); pwm.setPWM(SERVO_8, 0, 100); delay(250); // pozycja startowa Noga 5 // pwm.setPWM(SERVO_4, 0, 370); // brak wolnego slota // delay(250); pwm.setPWM(SERVO_9, 0, 550); delay(250); pwm.setPWM(SERVO_10, 0, 450); delay(250); } Mój problem: Robot podczas zasilenia nie wstaje do końca mimo małej masy Teraz pytanie czy źle zasilam shield? Czy dałem za małe opóźnienie pomiędzy serwami podczas podnoszenia się do pozycji startowej i za dużo serw naraz pracuje? Kod działa poprawnie gdy nie ma obciążenia Proszę o sugestie z góry dziękuje