|

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

Prérequis :

  • 1 x Carte Arduino Uno
  • 1 x Carte PCA9685
  • 3 x Servo (SG90)
  • 3 x Bouton
  • Fils de connexion

Version IDE :

  • Arduino IDE 2.3.5

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();

#define MIN_PULSE_WIDTH 600
#define MAX_PULSE_WIDTH 2600
#define SERVO_FREQ 50

int BtJaune = 2;
int BtBleue = 3;
int BtVert = 4;

bool EtatBtJaune;
bool EtatBtBleue;
bool EtatBtVert;


uint8_t servonum = 1;

void setup() {
  Serial.begin(9600);
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);  
  delay(10);

  pinMode(BtJaune, INPUT_PULLUP);
  pinMode(BtBleue, INPUT_PULLUP);
  pinMode(BtVert, INPUT_PULLUP);
}

void loop() {
  EtatBtJaune = digitalRead(BtJaune);
  if (EtatBtJaune == HIGH) {
    pwm.setPWM(2, 0, setServoPulse(90));
  }
  else {
    pwm.setPWM(2, 0, setServoPulse(0));
  }

  EtatBtBleue = digitalRead(BtBleue);
  if (EtatBtBleue == HIGH) {
    pwm.setPWM(1, 0, setServoPulse(90));
  }
  else {
    pwm.setPWM(1, 0, setServoPulse(0));
  }

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

}

int setServoPulse(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 * SERVO_FREQ * 4096);
  return analog_value;
}

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *