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
Budget : Non défini
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.
Fonctions | I/O | Arduino Mega 2560 |
Servomoteur RC | Sorties PWM | D11, D12, D13 |
Servomoteur HerkuleX | UART | UART2 |
Servomoteur Dynamixel RS485 | UART, Sortie Numérique | D2, UART3 |
Servomoteur Dynamixel TTL | UART, Sortie Numérique | D2, UART3 |
Ecran | I2C, Sortie Numérique | A4, A5, D4 |
Clavier | Entrées Sorties numériques | D30, D32, D34, D36, D38, D40, D42 |
Potentiomètre | Entrée analogique | A0 |
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
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.
La touche * permet de valider et la touche # permet de faire un retour en arrière dans le menu
#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);
}