AdaFruit PWM Driver

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

Voici un contrôleur PWM/Servo 16 canaux (12 bits) utilisant une interface de communication I2C interface.

Si vous avez un jour rêver de créer un robot qui marche à l'aide d'un Arduino (ou autre micro contrôleur), ce breakout sera la solution de mise en oeuvre idéale.


Note: ce produit est aussi connu sous son appellation d'origine "Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685"

Détail en image

Raccordement Servo Moteur

Faite attention lors du raccordement de vos servo moteurs.

Inverser le sens de raccordement du servo reviendrait à appliquer +5v sur la broche de commande du PCA9685 (par l'intermédiaire du moteur)... GLOUPS!

TODO - Montage servo moteur ... attention couleur Graupner

Mise en Oeuvre

Voici un exemple de mise en oeuvre ayant pour but de prendre le contrôle de deux servo-moteurs.

L'un deux est placé sur la sortie 1 du breakout tandis que l'autre est placé sur la sortie 9.

Montage

TODO

Résultat

Voici un petit exemple du résultat en vidéo :-)

TODO

Code

 /*************************************************** 
  Voici un exemple qui utilise breakout PWM Driver d'AdaFruit 
  (nom: Adafruit 16-channel PWM & Servo driver)
  
  Ce programme de démonstration commande deux servo moteurs
  (Un TowerPro Micro Servo SG90 et un TowerPro SG 5010).
  
  Disponible sur le WebShop de MCHobby!
  ------> http://www.mchobby.be/

  Cet exemple utilise la communication I2C pour communiquer avec le 
  breakout. 2 broches sont nécessaire pour réaliser cet interfaçage.
  Pour Arduino UNOs, SCL -> Analogique 5, SDA -> Analogique 4

  Basé sur l'exemple orginal de la librairie Adafuit_PWMServoDriver/Servo.uno
 
  ****************************************************
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  AdaFruit products!

  Original demo written by Limor Fried/Ladyada for Adafruit Industries.
  This sample and translation by MC Hobby (www.mchobby.be)  
  BSD license, all text above must be included in any redistribution
  Cet exemple et traduction par MC Hobby (www.mchobby.be)
  Licence BSD, tout le texte ci-dessus doit etre inclus dans toutes les redistributions.
 ****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// Utilisation de l'adresse par défaut 0x40 du Breakout.
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver( 0x40 );

// Suivant le type de servo utilisé, la largeur d'impulsion minimale et Maximale 
// peut changer. L'idéal est de sélectionner des valeurs aussi petites et aussi
// grande que possible sans jamais atteindre la butée de blocage du servo-moteur. 
// Vous aurrez peut-etre besoin de modifier ces valeurs pour les faire correspondrent 
// à votre type de servo!
#define SERVOMIN  150 // La longueur d'impulsion 'minimale' (valeur du compteur, max 4096)
#define SERVOMAX  600 // La longueur d'impulsion 'maximale' (valeur du compteur, max 4096)

// Servos Commandés - Numéro de sorties sur le breakout
uint8_t servo1 = 1;
uint8_t servo9 = 9;

void setup() {
  Serial.begin(9600);
  Serial.println("Controle des Servo Moteur #1 et #9!");

  pwm.begin();
  
  pwm.setPWMFreq(60);  // Les servo sont mis-à-jour à ~60 Hz
  Serial.println("Fin de setup()");
}

void loop() {
  //--- Controle du Premier Servo (no 1) ---
  Serial.println("Servo #1 à 45 degrés");
  // Transformation de degré (0 à 180) en pulse (SERVOMIN à SERVOMAX)
  int pulseLen = map( 45, 0, 180, SERVOMIN, SERVOMAX );
  pwm.setPWM(servo1, 0, pulseLen);
  
  delay(1000);
  
  //--- Controle du Deuxieme Servo (no 9) ---
  Serial.println("Servo #9 à 30 degrés");
  pulseLen = map( 30, 0, 180, SERVOMIN, SERVOMAX );
  pwm.setPWM(servo9, 0, pulseLen);
  
  delay(1000);

  //--- Controle du Premier Servo (no 1) ---
  Serial.println("Servo #1 à 120 degrés");
  // Transformation de degré (0 à 180) en pulse (SERVOMIN à SERVOMAX)
  pulseLen = map( 120, 0, 180, SERVOMIN, SERVOMAX );
  pwm.setPWM(servo1, 0, pulseLen);
  
  delay(1000);

  //--- Controle du Deuxieme Servo (no 9) ---
  Serial.println("Servo #9 à 150 degrés");
  pulseLen = map( 150, 0, 180, SERVOMIN, SERVOMAX );
  pwm.setPWM(servo9, 0, pulseLen);
  
  delay(1000);
  
  //--- Les deux servo à 0 ---
  Serial.println("Servo #1 et #9 à 150 degrés");
  pulseLen = map( 0, 0, 180, SERVOMIN, SERVOMAX );
  pwm.setPWM(servo1, 0, pulseLen);
  pwm.setPWM(servo9, 0, pulseLen);
  
  delay(3000); 
}

Où Acheter

Ce produit est disponible chez MCHobby.

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com