Servo connecté

Un servo-moteur est un dispositif permettant le maintien de la position angulaire de l'axe de rotation. Il dispose de 3 broches :

  • 2 broches pour l'alimentation (0V et 5V)

  • 1 broche pour la commande numérique

La broche de commande doit générer un signal périodique. C'est la durée à l'état haut (5V) de l'impulsion qui détermine la position angulaire de l'axe du servomoteur.

L'utilisation de la librairie arduino "Servo.h"rend l'utilisation de tels dispositifs très simple :

1
/*
2
 * Le Servo est positionne a 30 degre
3
 */
4
#include <Servo.h>
5
6
Servo myservo;        // Declaration de l'Objet servo 
7
8
void setup() 
9
{
10
  myservo.attach(9);  // Le servo est sur la broche 9
11
}
12
void loop() 
13
{
14
  myservo.write(30);   // Le servo est positionne a 30 degre
15
}
16

DESIGNER

L'écran est similaire à la précédente application. La position"slider" nous permettra de contrôler la position du servomoteur. Attention a paramétrer celui-ci pour qu'il gère des valeurs comprises entre 0 et 180.

  • Créer un nouveau projet nommé SERVO_CONNECTEE sous App inventor 2.

  • Réaliser l'interface suivante :

Au centre-droit de l'écran, il y a la liste des composants que vous devez glisser et poser de la palette vers le viewer.

À l'extrême droite de l'écran apparaissent les propriétés des composants que vous devez personnaliser.

Cliquer sur Blocks (en haut à droite) pour passer à l'écriture du « code ».

BLOCS

Réaliser le « code » suivant :

Côté Arduino

Matériel nécessaire :

  • Une carte Arduino UNO

  • Un shield GROVE

  • Un module grove Bluetooth

  • Un module grove servomoteur

Connexions :

Le Servo sur D3 et le module bluetooth sur D6.

Dans le logiciel Arduino vous devez modifier le programme suivant pour obtenir

  1. Un nom original de l'interface Bluetooth

  2. Un code plus sécurisé.

1
/*
2
 * Programme permettant le contrôle de la position angulaire  
3
 * d'un Servo-Moteur. La valeur de l'angle est recue via 
4
 * le module bluetooth connecte aux broches 6(Rx) et 7 (Tx) 
5
 * de la carte arduino UNO. 
6
 * Le Servo doit etre relie  à la broche 3.  
7
 */
8
#include <Servo.h>
9
#include <SoftwareSerial.h>   
10
11
Servo myservo;  
12
13
const int RxD    = 6;  // Broche de reception de donnees 
14
const int TxD    = 7;  // Broche de transmission de donnees
15
/* 
16
 * PARAMETRES BLUETOOTH :  
17
 */
18
String Nom_Du_Module = "SuperServo"; 
19
String PIN_Du_Module = "1234";
20
    
21
SoftwareSerial blueToothSerial(RxD,TxD); // Liaison serie du module Bluetooth
22
void setup()
23
{
24
    Serial.begin(9600);
25
    Serial.println("Bluetooth module : Servo Moteur");
26
    
27
28
    myservo.attach(3);  // Le Servo-moteur est sur la broche 3 (D3)
29
30
    setupBlueToothConnection(Nom_Du_Module, PIN_Du_Module); // Configuration du module BT
31
}
32
33
void loop()
34
{
35
    int pos = 0;
36
    myservo.write(pos);
37
    while(1)
38
    {
39
        if(blueToothSerial.available())       // SI DONNEES RECUES
40
        {
41
            pos = blueToothSerial.read();     //    Lecture des donnees
42
            Serial.println(pos);              //    Affichage au moniteur serie
43
            myservo.write(pos);               //    Change la position du servo
44
        }
45
    }
46
    
47
}
48
49
50
51
/***************************************************************************
52
 * La fonction setupBlueToothConnection() permet d'initialiser le module
53
 * Bluetooth. La confiuration est 
54
***************************************************************************/
55
void setupBlueToothConnection(String nom_du_module, String pin)
56
{  
57
  blueToothSerial.begin(9600);                     // Vitesse de transmission : 9600 bauds
58
  blueToothSerial.print("AT");                     // Reponse du module BT
59
  delay(1000); 
60
  while(blueToothSerial.available())
61
  {
62
    char recvChar = blueToothSerial.read();        // Reponse du module BT
63
    Serial.print(recvChar);
64
  }
65
  Serial.println("");
66
67
  blueToothSerial.print("AT+DEFAULT");             // Config usine (par defaut)
68
  delay(2000); 
69
  while(blueToothSerial.available()){
70
    char recvChar = blueToothSerial.read();        // Reponse du module BT
71
    Serial.print(recvChar);
72
  }
73
  Serial.println("");
74
75
  String at_command("AT+NAME"+nom_du_module);
76
  char *at_str = at_command.c_str();
77
  delay(5000);
78
  blueToothSerial.print(at_str);                    // Nom du peripherique BT  
79
                                                    // Longueure max 12 caracteres
80
  delay(5000);
81
    while(blueToothSerial.available()){
82
    char recvChar = blueToothSerial.read();        // Reponse du module BT
83
    Serial.print(recvChar);
84
  }
85
  Serial.println("");
86
  
87
88
  at_command="AT+PIN"+pin;
89
  at_str = at_command.c_str();
90
  blueToothSerial.print(at_str);             // Configuration du code PIN
91
  delay(2000);
92
  while(blueToothSerial.available()){
93
    char recvChar = blueToothSerial.read();       // Reponse du module BT
94
    Serial.print(recvChar);
95
  }
96
  Serial.println("");
97
  
98
  blueToothSerial.print("AT+AUTH1");             // 
99
  delay(2000);    
100
  while(blueToothSerial.available()){
101
    char recvChar = blueToothSerial.read();      // Reponse du module BT
102
    Serial.print(recvChar);
103
  }
104
  Serial.println("");
105
    blueToothSerial.flush();
106
107
}

Ajouter un capteur d'orientation permettant ainsi de contrôler le Servo moteur en inclinant le smartphone ou la tablette.