Outils pour utilisateurs

Outils du site


start:arduino:pca9685

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:arduino:pca9685 [2022/04/12 09:17] – [exemple avec un esp32] gerardadminstart:arduino:pca9685 [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 17: Ligne 17:
  
 [[https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library|Adafruit PCA9685 PWM Servo Driver Library ]] [[https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library|Adafruit PCA9685 PWM Servo Driver Library ]]
 +
 +<markdown>
 +[Control 32 Servo motor using PCA9685 Module and ESP32 V4 EN](http://robojax.com/node/1193)
 +</markdown>
  
  
Ligne 42: Ligne 46:
  
 Pour une alimentation, j'ai utilisé un porte-piles avec quatre piles de type AA. N'importe quelle alimentation 5 ou 6 volts devrait suffire, surtout si vous utilisez de petits servomoteurs SG90  Pour une alimentation, j'ai utilisé un porte-piles avec quatre piles de type AA. N'importe quelle alimentation 5 ou 6 volts devrait suffire, surtout si vous utilisez de petits servomoteurs SG90 
 +
 +
 +===Code ESP32 PCA9685===
 +
 +Adafruit est une excellente source pour obtenir des modules PCA9685, et si vous connaissez Adafruit, vous saurez qu'ils ne vendent rien sans créer une documentation complète, des articles, des exemples de code et des bibliothèques. Le PCA9685 n'est pas différent, nous utiliserons donc une bibliothèque Adafruit qui fonctionne à la fois avec l'Arduino et l'ESP32.
 +
 +Voici le croquis utilisé pour contrôler les deux servomoteurs à l'aide de l'ESP32 et du PCA9685.
 +
 +
 +<code c PCA9685_ESP32.ino>
 +/*
 +  ESP32 PCA9685 Servo Control
 +  esp32-pca9685.ino
 +  Driving multiple servo motors with ESP32 and PCA9685 PWM module
 +  Use I2C Bus
 +
 +  DroneBot Workshop 2020
 +  https://dronebotworkshop.com
 +*/
 +
 +// Include Wire Library for I2C
 +#include <Wire.h>
 +
 +// Include Adafruit PCA9685 Servo Library
 +#include <Adafruit_PWMServoDriver.h>
 +
 +// Creat object to represent PCA9685 at default I2C address
 +Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver(0x40);
 +
 +// Define maximum and minimum number of "ticks" for the servo motors
 +// Range from 0 to 4095
 +// This determines the pulse width
 +
 +#define SERVOMIN  80  // Minimum value
 +#define SERVOMAX  600  // Maximum value
 +
 +// Define servo motor connections (expand as required)
 +#define SER0  0   //Servo Motor 0 on connector 0
 +#define SER1  12  //Servo Motor 1 on connector 12
 +
 +// Variables for Servo Motor positions (expand as required)
 +int pwm0;
 +int pwm1;
 +
 +void setup() {
 +
 +  // Serial monitor setup
 +  Serial.begin(115200);
 +
 +  // Print to monitor
 +  Serial.println("PCA9685 Servo Test");
 +
 +  // Initialize PCA9685
 +  pca9685.begin();
 +
 +  // Set PWM Frequency to 50Hz
 +  pca9685.setPWMFreq(50);
 +
 +}
 +
 +void loop() {
 +
 +  // Move Motor 0 from 0 to 180 degrees
 +  for (int posDegrees = 0; posDegrees <= 180; posDegrees++) {
 +
 +    // Determine PWM pulse width
 +    pwm0 = map(posDegrees, 0, 180, SERVOMIN, SERVOMAX);
 +    // Write to PCA9685
 +    pca9685.setPWM(SER0, 0, pwm0);
 +    // Print to serial monitor
 +    Serial.print("Motor 0 = ");
 +    Serial.println(posDegrees);
 +    delay(30);
 +  }
 +
 +  // Move Motor 1 from 180 to 0 degrees
 +  for (int posDegrees = 180; posDegrees >= 0; posDegrees--) {
 +
 +    // Determine PWM pulse width
 +    pwm1 = map(posDegrees, 0, 180, SERVOMIN, SERVOMAX);
 +    // Write to PCA9685
 +    pca9685.setPWM(SER1, 0, pwm1);
 +    // Print to serial monitor
 +    Serial.print("Motor 1 = ");
 +    Serial.println(posDegrees);
 +    delay(30);
 +  }
 +
 +  // Move Motor 0 from 180 to 0 degrees
 +  for (int posDegrees = 180; posDegrees >= 0; posDegrees--) {
 +
 +    // Determine PWM pulse width
 +    pwm0 = map(posDegrees, 0, 180, SERVOMIN, SERVOMAX);
 +    // Write to PCA9685
 +    pca9685.setPWM(SER0, 0, pwm0);
 +    // Print to serial monitor
 +    Serial.print("Motor 0 = ");
 +    Serial.println(posDegrees);
 +    delay(30);
 +  }
 +
 +
 +  // Move Motor 1 from 0 to 180 degrees
 +  for (int posDegrees = 0; posDegrees <= 180; posDegrees++) {
 +
 +    // Determine PWM pulse width
 +    pwm1 = map(posDegrees, 0, 180, SERVOMIN, SERVOMAX);
 +    // Write to PCA9685
 +    pca9685.setPWM(SER1, 0, pwm1);
 +    // Print to serial monitor
 +    Serial.print("Motor 1 = ");
 +    Serial.println(posDegrees);
 +    delay(30);
 +  }
 +
 +
 +}
 +</code>
 +
/home/chanteri/www/fablab37110/data/pages/start/arduino/pca9685.txt · Dernière modification : 2023/01/27 16:08 de 127.0.0.1