top of page

Août 2017 , par Techno_fabrik

Projet : Bras robotisé commandé par smartphone

LE PROJET  

Commander un bras robotisé construit à partir de carton et de servo-moteurs.

Le bras sera constitué d'une pince qui doit pouvoir prendre et poser un objet.

On commandera le bras par smartphone qui communiquera en bluetooth à l'arduino.

Mode bonus : Un bouton nous permettra de sauvegarder une position du bras. Lorsque l'on le souhaitera, nous pourrons retourner à la position sauvegardée.

                      Matériel

1 module Arduino Uno

4 servo-moteurs SG90 9g (couple : 1kg.cm)

1 moteur pas-à-pas 5V (39mN.m) 24BYJ48 

1 driver moteur pap DRV8825

1 alimentation 9V pour l'arduino et 6V pour les moteurs

1 module Bluetooth HC-06

Pistolet à colle, carton, fils connection, élastique

PRÉREQUIS :

Connaissance des risques électriques. Montage réalisable par tous. Notion d'électronique et bases en programmation.

RÉALISATION

ETAPE 1: Module Bluetooth

Le module bluetooth (HC-06) est connecté de la manière suivante:

Rx --> Tx

Tx --> Rx

GND --> GND

VCC --> +5V

Il va permettre d'établir la communication entre l'Arduino et le smartphone, via la voie Série (9600) .

ETAPE 2 : Le moteur pas à pas 24BYJ48

Nous avons connecté le moteur bipolaire pas à pas 24BYJ48 à son driver associé contenant le circuit ULN2003.

Il suffit de connecter les inputs INx (x = 1,2,3,4) aux sorties digitales de l'arduino.

On alimentera le driver en +5V.

Pour coder, nous utiliserons la bibliothèque Stepper.h , ce qui nous permet de commander facilement le moteur en lui donnant la vitesse : nom.setSpeed(vitesse), ainsi que le pas désiré : nom.step(+ou- pas)

ETAPE 3 : Les servo-moteurs SG90

Les servos moteurs se commandent facilement. Il suffit de brancher le fil rouge au +5V, le noir à la masse et le fil restant à une sortie PWM de l'arduino. On choisira ensuite l'angle du servo via la PWM ( 0 à 255).

Nous utiliserons la bibliothèque servo.h pour commander facilement le servo.

Tout d'abord, on initialera le servo par son nom : Servo nom_servo, puis on lui rattachera la commande PWM : nom_servo.attach(pin choisi).

Enfin, on commandera l'angle voulu : nom_servo.write(angle de 0 à 180).

ETAPE 4 : Fabriquer le support 

Le support à été fabriqué en carton. Après avoir réalisé la base sur laquelle va tourner le bras et ou sera mis le moteur pas à pas, nous avons collé les servos moteurs à du carton pour donner la forme finale. 

La pince à été créée à partir de bâton de glace et fonctionne avec un élastique.

Programme (codé en C)

// 24/02/2017 - Programme C - Commande de plusieurs servo moteurs dynamiques par smartphone, via bluetooth - App inventor 2 utilisé - Carte Arduino ( ici UNO) , module Bluetooth
// Ce programme a pour objectif de : 
//                                     -  Connecter le Servo moteur + module bluetooth au module arduino 
//                                     -  Envoyer un mot/phrase/nombre au smartphone
//                                     -  Recevoir une commande via smartphone 
// Programme réalisé par Techno_Fabrik

//********************BIBLIOTHEQUES****************************
#include <Servo.h> 
#include<Stepper.h>/
/ bibliothèque permettant d'utiliser les commandes pour servomoteurs facilement #include <Stepper.h>


  //Le moteur (fils 1 2 3 4) est branché sur les sorties 8  12 10 11 de l'Arduino (et sur GND, +V)
  Stepper small_stepper(STEPS, 8, 10, 12, 11);     
//********************DECLARATIONS****************************
word rep;  
// mot envoyé du module Arduino au smartphone
int cmd = 3; // variable commande du servo moteur ( troisième fil ( orange, jaune ))
Servo moteur; //on définit notre servomoteur
int cmd1 = 5;
Servo moteur1;
Servo moteur2;Servo moteur3;
int cmd2=9;
int cmd3=6;
int angle2,angle3;
int angle;
int angle1;
int pas;
int r,r1,r2,r3;
int enregistrer;
word w;
// variable envoyé du smartphone au module Arduino
int angle; // angle de rotation ( 0 a 180)
//********************SETUP***********************************
void setup() {
  moteur.attach(cmd);
// on relie l'objet au pin de commande
  moteur1.attach(cmd1);
  moteur2.attach(cmd2);
  moteur3.attach(cmd3);
  moteur.write(12);
  moteur1.write(23);
  Serial.begin(9600);
// permettra de communiquer au module Bluetooth
}
//********************BOUCLE***********************************
void loop() {
recevoir();    
// on va recevoir une information du smartphone , la variable w
if (w==206)reproduire();// va nous permettre de reproduire la position enregistrée
if(w==205)enregistrer=1;// va nous permettre d'enregistrer la valeur des servos moteurs lorsque l'on apuiera sur un bouton
if (w==204)enregistrer=0;
  for (int k=100;k<151;k++)
    {
      if ( w == k)
      {
        angle2 = map(k,100,150,0,180);
        moteur2.write(angle2);
        if (enregistrer==1)r2=angle2;
      }
    }
      for (int j=151;j<201;j++)
    {
      if ( w == j)
      {
        angle3 = map(j,151,200,0,150);
        moteur3.write(angle3);
       if (enregistrer==1) r3=angle3;
      }
    }
    for (int i=0;i<34;i++)
    {
      if ( w == i)
      {
        angle = map(i,0,34,0,70);
        moteur.write(angle);
        if (enregistrer==1)r=angle;
      }
    }
    for (int l=34;l<=66;l++)
    {
      if ( w == l)
      {
        angle1 = map(l,34,66,90,0);
        moteur1.write(angle1);
        if (enregistrer==1)r1=angle1;
      }
    }
    for (int m=67;m<=99;m++)
    {
      if ( w == m)
      {
        
        if (w<79){small_stepper.setSpeed(80);small_stepper.step(5);}
        if (w>86){ small_stepper.setSpeed(80);small_stepper.step(-5);}
        else small_stepper.step(0);
      }
    }
}
//****************************FONCTIONS************************************
void reproduire()
// fonction permettant de reproduire la position sauvegardée
{
  moteur2.write(r2);moteur.write(r);moteur1.write(r1);moteur3.write(r3);
}
void recevoir() {
// fonction permettant de recevoir l'information du smartphone
if (Serial.available()) {
 
w = Serial.read();

Serial.flush();   }}

APPLICATION SMARTPHONE
VIDEO REALISATION
Bras robotisé commandé par smartphone
Lire la vidéo
bottom of page