التحكم فى servio-moteur

فى هذا المشروع سنتحكم فى servo-meteur عن طريق الهاتف


À propos de ce qu'est un servo. Ce moteur avec engrenage et schéma de commande dans un seul emballage. La sortie, nous obtenons un mouvement contrôlé de l'arbre de la boîte de vitesses. Pour gérer un tel mouvement, le servo dispose d'un signal de commande d'entrée dédié. Le signal consiste en une impulsion d'une certaine durée, qui doit être répétée 50 fois par seconde. La largeur d'impulsion temporelle déterminera la position de l'arbre de sortie du servo vers laquelle il tend à faire tourner le moteur. Cela demande une largeur d'impulsion spécifique et la répète 50 fois par seconde, nous pouvons nous attendre à ce que le servo de l'arbre de sortie prenne la position souhaitée.

La position moyenne de l'arbre de sortie de la durée de l'impulsion d'asservissement correspond à 1500 ms. Il 500 ms à l'extrême gauche, 2500 ms à l'extrême droite. Nous n'avons pas à générer manuellement une séquence d'impulsions pour nos servos, nous utilisons la bibliothèque Arduino "servo.h", qui fera tout le travail pour nous. Nous lui indiquons seulement la largeur d'impulsion dont nous avons besoin à un moment donné.

Il existe une caractéristique de l'utilisation de la bibliothèque "servo.h". Il ne peut pas être utilisé en conjonction avec une bibliothèque de port série logiciel "SoftwareSerial.h". Ces bibliothèques utilisent les ressources combinées du microcontrôleur. Les servos se contracteront, car le maintien d'une durée d'impulsion constante sera impossible. Pour résoudre ce problème pour communiquer avec la bibliothèque RemoteXY, configurez un port série matériel.


Cependant, le port série matériel utilisant les broches 0 et 1 est utilisé pour programmer la puce. Si ces broches permettent de connecter le module Bluetooth, la programmation serait impossible. Si vous chargez Arduino Mega, vous pouvez utiliser l'un des trois ports série matériels supplémentaires. Si vous devez toujours utiliser un seul port sur Arduino, déconnectez le module Bluetooth, puis programmez la puce.

interface de contrôle 

en va utilise Rmotxy pour réalise cette interface  



Maintenant, nous devons créer du code, qui sera l'intermédiaire entre le curseur et le servo. Les informations sur la position du curseur se trouvent dans la structure du champ RemoteXY slider_1 (si vous avez renommé votre curseur, le nom de la variable correspondra au nom du curseur).



/* this structure defines all the variables of your control interface */ 
struct { 
  
    /* input variable */
  unsigned char slider_1; /* =0..100 slider position */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY; 

Nous devons écrire une formule mathématique qui convertit la valeur de la position du curseur, allant de 0 à 100 dans la durée de l'impulsion pour contrôler les servos. La durée de l'impulsion varie de 500 à 2500 (1500 au milieu). On obtient la formule suivante:

int ms = RemoteXY.slider_1*20+500;

Dans la configuration des fonctions, nous établissons la position initiale du curseur sur 50 - la position médiane. Lors de la connexion avec le smartphone, la première chose dans l'application lit l'état de toutes les commandes. Ainsi, la position du curseur est réglée au milieu. Exemple de code simple:



///////////////////////////////////////////// 
//        RemoteXY include library         // 
///////////////////////////////////////////// 

/* RemoteXY select connection mode and include library */ 
#define REMOTEXY_MODE__SERIAL 
#include <RemoteXY.h> 

/* RemoteXY connection settings */ 
#define REMOTEXY_SERIAL Serial 
#define REMOTEXY_SERIAL_SPEED 9600 

/* RemoteXY configurate  */ 
unsigned char RemoteXY_CONF[] = 
  { 1,0,9,0,1,5,4,128,4,11
  ,90,20,2 }; 
   
/* this structure defines all the variables of your control interface */ 
struct { 

    /* input variable */
  unsigned char slider_1; /* =0..100 slider position */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY; 

///////////////////////////////////////////// 
//           END RemoteXY include          // 
///////////////////////////////////////////// 

#include <Servo.h>  

Servo myservo; 


void setup()  

  RemoteXY_Init ();  
     
  // TODO you setup code 
  myservo.attach(9); 
  RemoteXY.slider_1 = 50; 
   


void loop()  
{  
  RemoteXY_Handler (); 

  // TODO you loop code 
  // use the RemoteXY structure for data transfer 

  int ms = RemoteXY.slider_1*20+500; 
  myservo.writeMicroseconds(ms); 

}


Dans le code, nous incluons la bibliothèque servo.h et définissons un nom de servo myservo. Dans la configuration de la fonction d'initialisation est initialisée la bibliothèque RemoteXY (comme dans l'exemple), puis initialise le servo sur la broche 9, et définit la position centrale du curseur. Dans la boucle de fonction de cycle global, la première chose à exécuter le gestionnaire RemoteXY (comme dans l'exemple). Il calcule ensuite la durée de l'impulsion selon la formule. Et cette durée est passée en paramètre à la fonction writeMicrosecondes, définissant ainsi la position de l'arbre servo, correspondant à la position du curseur sur votre smartphone, à chaque cycle du programme.


الدارة
تجريبت المشروع




تعليقات

المشاركات الشائعة من هذه المدونة