BMO : Controleur de servomoteurs

image principale BMO : Controleur de servomoteurs

Difficulté:

La BMO permet de tester et configurer plusieurs types de servomoteurs (RC, HerkuleX de marque DONGBU, Dynamixel de marque ROBOTIS)


Types de servomoteurs :

3 x Servomoteur RC (5V)

Dynamixel en TTL (12V)

Dynamixel en RS485 (12V)

Herkulex (12V) 

Herkulex (7,5V)


Modes :

Contrôle manuel grâce au potentiomètre

Contrôle automatique grâce au clavier

Mise en position zéro automatique

Scan des identifiants des servomoteurs

Configuration de l'Identifiant des servomoteurs

Configuration de la vitesse de communication des servomoteurs

Nettoyage des erreurs

Matériel :

Budget : Non défini

Etape 1 : Alimentation

Pour alimenter la BMO, il faut une alimentation 12V à brancher sur la carte Arduino. 

Un régulateur 5V (LM1084IT-5.0) va permettre d'alimenter les servomoteurs RadioCommandés et les composants MAX485 et 74LS241.

Un régulateur 7,5V (Pololu D24V25F7) permet d'alimenter le servomoteur de type HerkuleX (DRS-0101 et DRS-0201)

Les autres types de servomoteurs sont alimentés directement en 12V.

Etape 2 : Entrées/Sorties Arduino

FonctionsI/OArduino Mega 2560
Servomoteur RCSorties PWMD11, D12, D13
Servomoteur HerkuleXUARTUART2
Servomoteur Dynamixel RS485UART, Sortie NumériqueD2, UART3
Servomoteur Dynamixel TTLUART, Sortie NumériqueD2, UART3
EcranI2C, Sortie NumériqueA4, A5, D4
ClavierEntrées Sorties numériquesD30, D32, D34, D36, D38, D40, D42
PotentiomètreEntrée analogiqueA0
Etape 3 : Communication Dynamixel

Le composant MAX485 permet de communiquer avec les servomoteurs de types RS485 (MX-28R, MX-64R...). D'un coté on y connecte les broches Tx et Rx de l'arduino et de l'autre coté les broches D- et D+ du servomoteur. Une broche de commande (D2) permet de sélectionner la transmission ou la réception des données

Le composant 74LS241 permet de communiquer avec les servomoteurs de types TTL (AX-12, MX-28T, MX-64T...). D'un coté on y connecte les broches Tx et Rx de l'arduino et de l'autre coté la broche Data du servomoteur. Une broche de commande (D2) permet de sélectionner la transmission ou la réception des données

Etape 4 : Ecran I2C

L'écran est alimenté grâce à la broche 3,3V de la carte Arduino.

La communication se fait par I2C (D4 : SDA, D5 : SCL).

Le signal RST doit être connecté à la broche D4 de la carte Arduino pour une meilleure utilisation des fonctionnalités de l'écran.

Etape 5 : Branchement du Keypad

La touche * permet de valider et la touche # permet de faire un retour en arrière dans le menu

Etape 6 : Menu principal

Etape 7 : Libraire arduino et initialisation


#include <Wire.h>
#include <Servo.h>   // librairie pour les servomoteurs RC
#include <Herkulex.h> // librairie pour les servomoteurs herkulex
#include <LiquidCrystal.h> //ajout de la librairie pour l'afficheur
#include <Dynamixel_Serial.h> // librairie pour les servomoteurs dynamixel
#include <Keypad.h> // librairie pour le clavier 3x4
#include <Adafruit_GFX.h> // librairie pour l'afficheur
#include <Adafruit_SSD1306.h> // librairie pour l'afficheur

// Afficheur //
#define OLED_RESET 4  // Broche D4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

// Potentiometre //
byte POTAR = 0;   // Broche A0

// Clavier //
const byte ROWS = 4; // 4 lignes
const byte COLS = 3; // 3 colonnes
char keys[ROWS][COLS] = {{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};
byte rowPins[ROWS] = {30, 32, 34, 36};
byte colPins[COLS] = {38, 40, 42};
Keypad keypad ( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


// Servomoteurs RC //
Servo myservo[3];  // Création de 3 objets pour les servomoteurs
               
void setup()
{

// Liaison des servomoteurs RC avec les broches D11, D12, D13
  myservo[1].attach(11); myservo[2].attach(12); myservo[3].attach(13);  
 
  keypad.begin( makeKeymap(keys) );  // Init keypad
  keypad.addEventListener(keypadEvent); // Add an event listener for this keypad
 

// Liaison de la broche de commande D2 pour la communication des servomoteurs Dynamixel
    Dynamixel.setDirectionPin(2);  
 

// Init Ecran I2C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  display.clearDisplay();
  display.setTextSize(2);  // Taille du texte
  display.setTextColor(WHITE); //Couleur du texte
  display.setCursor(0,0);  display.println("Menu :");
  display.setCursor(0,17); display.println("Press *");
  display.display();
  delay(500);
}

Etape 8 : A l'intérieur du boitier 3D

Etape 9 : Petite démo

Sources :

BMO GitHub Project


Ces tutoriels devraient vous plaire

vignette Construire son Bartop Arcade de A à Z
Construire son Bartop Arcade de A à Z
vignette Écran Tactile et Raspberry Pi
Écran Tactile et Raspberry Pi
vignette Arduino Uno - Capteur d'humidité au sol.
Arduino Uno - Capteur d'humidité au sol.
avaatar Ningel85

Ningel85

Suivre

Vues: 221
Mis en favoris: 7

Découvrez d'autres tutoriels de

Ningel85

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers