Ligne 1 : |
Ligne 1 : |
| {{tmbox | text = En cours de traduction}} | | {{tmbox | text = En cours de traduction}} |
| | | |
− | === Introduction ===
| + | == Introduction == |
| Voici un contrôleur PWM/Servo 16 canaux (12 bits) utilisant une interface de communication I2C interface. | | Voici un contrôleur PWM/Servo 16 canaux (12 bits) utilisant une interface de communication I2C interface. |
| | | |
Ligne 9 : |
Ligne 9 : |
| | | |
| Note: ce produit est aussi connu sous son appellation d'origine "''Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685''" | | 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 === |
| + | <nowiki>/*************************************************** |
| + | 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); |
| + | } |
| + | </nowiki> |
| | | |
| === Où Acheter === | | === Où Acheter === |