• Post category:Fort
  • Commentaires de la publication :2 commentaires
  • Dernière modification de la publication :mai 25, 2022
  • Temps de lecture :5 min de lecture

Piloter des servos indépendamment grâce à des boutons avec une carte PCA9685 et Arduino

Niveau APPRENTISSAGE :   Fort

 

    Prérequis :

Matériel :

Version IDE :

Bibliothèque :

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

#include "Wire.h"
#include "Adafruit_PWMServoDriver.h"
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);

#define MIN_PULSE_WIDTH 600
#define MAX_PULSE_WIDTH 2600
#define FREQUENCY 50

int BtBlanc = 2;
int BtJaune = 3;
int BtRouge = 4;
int BtVert = 5;

bool EtatBtBlanc;
bool EtatBtJaune;
bool EtatBtRouge;
bool EtatBtVert;


void setup() {
pwm.begin();
pwm.setPWMFreq(FREQUENCY);
pinMode(BtBlanc, INPUT_PULLUP);
pinMode(BtJaune, INPUT_PULLUP);
pinMode(BtRouge, INPUT_PULLUP);
pinMode(BtVert, INPUT_PULLUP);
}

int pulseWidth(int angle) {
int pulse_wide, analog_value;
pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
return analog_value;
}

void loop() {
EtatBtBlanc = digitalRead(BtBlanc);
if (EtatBtBlanc == HIGH) {
pwm.setPWM(0, 0, pulseWidth(90));
}
else {
pwm.setPWM(0, 0, pulseWidth(0));
}

EtatBtJaune = digitalRead(BtJaune);
if (EtatBtJaune == HIGH) {
pwm.setPWM(1, 0, pulseWidth(90));
}
else {
pwm.setPWM(1, 0, pulseWidth(0));
}

EtatBtRouge = digitalRead(BtRouge);
if (EtatBtRouge == HIGH) {
pwm.setPWM(2, 0, pulseWidth(90));
}
else {
pwm.setPWM(2, 0, pulseWidth(0));
}

EtatBtVert = digitalRead(BtVert);
if (EtatBtVert == HIGH) {
pwm.setPWM(3, 0, pulseWidth(90));
}
else {
pwm.setPWM(3, 0, pulseWidth(0));
}
}

 

 


+ Infos sur le langage utilisé :

1. Fonctions
2. Variables
3. Stucture

 

Cet article a 2 commentaires

  1. Jozefowiez

    Beaucoup d’intérêt quant à cet exemple ! Féru de modélisme ferroviaire, je cherche à piloter 18 servo motorisant des aiguillages.
    Mon réseau est commandé une commande DCC ( digital command control ) qui sert à piloter locomotive et accessoire via les 2 rails (un peu comme un CPL)
    Une librairie est disponible : DCC_Decoder.h . Mais je n’ai pas réussi à l’intégrer correctement dans les sketch que j’ai pu recenser ( sur le site Locoduino par exemple).
    Peut être , vous serait il possible de faire cet exemple commander par une entrée DCC au lieu des 4 boutons poussoir ?
    Encore bravo pour la qualité pédagogique de vos supports.

    1. steven

      Bonjour,
      Malheureusement, je n’ai pas de central DCC pour faire un exemple.
      Essayer de me contacter par Facebook on peut essayer par teamviewer de résoudre votre problème

      Cordialement,

Répondre à steven Annuler la réponse