Pages: [1]   Go Down
Author Topic: Faire bouger des servo-moteurs par php.  (Read 894 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, Bonsoirs,

Je vous présente mon projet , je souhaite pouvoir bouger Deux servo-moteurs brancher sur ma Arduino-UNO32 (pins 8 et 9 ) grace a un code Php donc d'une page web.



J'ai regardé plusieurs code sur internet pour mes servos-moteurs mais je vous avoue que je ne le comprend pas beaucoup , j'ai compris que en fessant :
@X$  > le moteur de la broche 8 tourne vers la droite.
@Y$ > le moteur de la broche 9 tourne vers la droite.
@X2600T$ > le moteur de la broche 8 tourne vers la gauche.
@Y2600P$ > le moteur de la broche 9 tourne vers la gauche.

Si quelqu'un pourrais m'aider pour que je comprenne un peux le code ? Surtout pour le faire tourner par exemple d'un quart de tours au lieu de 180° direct ?

Code:
// --- Programme Arduino ---
// par X. HINAULT - 01/2010

// --- Que fait ce programme ? ---
/* Test de la position d'un servomoteur par saisie directe de la largeur d'impulsion dans le Terminal côté PC*/

// --- Fonctionnalités utilisées ---
// Utilise la connexion série vers le PC
// Utilise un servomoteur

// --- Circuit à réaliser ---
// Connexion série entre la carte Arduino et le PC (utilise les broches 0 et 1)  
// Connecter Broche de commande d'un Servomoteur sur la broche 2 (configurée en sortie)

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <Servo.h> // librairie pour servomoteur

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int SERVOP=9; //declaration constante de broche
const int SERVOT=8;

// --- Déclaration des variables globales ---

int ReceptionOctet=0; // variable de stockage des octets reçus par port série
int ReceptionNombre=0; // variable de calcul du nombre reçu par port série
int impulsion=1500; // variable pour impulsion - valeur médiane initiale
int mouv = 0;
int cpt = 0;
int i;
int recmsg[16];


// --- Initialisation des fonctionnalités utilisées ---

Servo mon_servoP;// crée un objet servo pour contrôler le servomoteur
Servo mon_servoT;

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

mon_servoP.attach(SERVOP);// attache l'objet servo à la broche de commande du servomoteur
mon_servoT.attach(SERVOT);

Serial.end();
Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission
//Serial.println("Ready!!!");


pinMode(SERVOP, OUTPUT); //met la broche en sortie

mon_servoP.writeMicroseconds(impulsion); // génère l'impulsion de la durée voulue en µs pour le servomoteur

pinMode(SERVOT, OUTPUT);

mon_servoT.writeMicroseconds(impulsion);
} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal ---


//--- lecture d'un nombre reçu par le Terminal et positionnement du servomoteur ---
if (Serial.available()>0) { // si caractère dans la file d'attente

  if(Serial.peek() == '&'){
    Serial.flush();
    Serial.end();
    Serial.begin(115200); // initialise connexion série à 115200 bauds
    delay(200);
  }
  cpt=0;
  //---- lecture du nombre reçu
  while (Serial.read() != '@') ; // cherche debut trame
  while (Serial.peek() != '$') { // cherche fin trame
    i = Serial.read();
    if((i != -1) && (i != '$')) {
      //Serial.write(i);
      recmsg[cpt++] = i;
    }
    if(i == '$') break;
  }
  recmsg[cpt]=0;
  //delay(1);
  Serial.flush();
  
  //Serial.println();
  //Serial.println((String)&recmsg[0]);
  
  if(recmsg[0] == 'Y') mouv = 'P';
    else if(recmsg[0] == 'X') mouv = 'T';
  
  for(i=2; i<cpt; i++){
    ReceptionNombre = (ReceptionNombre*10)+(recmsg[i]-48);
  }
  

   //Serial.print ("Nombre recu= ");
   //Serial.println(ReceptionNombre); // affiche valeur numerique entière ou à virgule au format décimal


   //----- positionnement du servomoteur en fonction de la largeur d'impulsion demandée
   if(impulsion != 0) impulsion=ReceptionNombre;
       else impulsion = 1500;

    if (impulsion>2600)impulsion=2600; // pour éviter valeur supérieure à 2600 = position maxi possible servomoteur
    if (impulsion<300)impulsion=300; // pour éviter valeur inférieure à 300 = position maxi possible servomoteur

    if(mouv == 'P') mon_servoP.writeMicroseconds(impulsion); // génère l'impulsion de la durée voulue en µs pour le servomoteur
     //Serial.print ("Impulsion servomoteur = ");
    //Serial.print(impulsion); // affiche valeur numerique entière
    //Serial.println (" microsecondes ");
if(mouv == 'T') mon_servoT.writeMicroseconds(impulsion);
    delay (2); //entre chaque changement de position

    ReceptionNombre=0; // réinitialisation de la variable de calcul du nombre reçu

} // end if


} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---
 

Ensuite j'ai donc voulu essayer de les faire bouger via un serveur ( tournant sous Ubuntu ) , et la pas de soucis , tout marche niquel:
Code:
<?php

   shell_exec
('stty -F /dev/ttyUSB0 speed 115200 cs8 -parity cread clocal -crtscts -hup -echo -cstopb ');


for(
$i=0$i $i++)
  {
shell_exec('echo "@X$" > /dev/ttyUSB0');
shell_exec('echo "@Y$" > /dev/ttyUSB0');
sleep(1);
shell_exec('echo "@X2600T$" > /dev/ttyUSB0');
shell_exec('echo "@Y2600P$" > /dev/ttyUSB0');
   
sleep(1);
  }
header('Location: clignote.php');
?>

Le problème c'est que je voudrais faire la même chose mais sur un serveur Windows (ou en localhost ) mais je ne trouve pas sur internet comment faire pour windows pour changer les " /dev/ttyUSB0".

Si des personnes auraient des solutions à mes problèmes , je suis preneur .
Merci beaucoup d'avance .
« Last Edit: February 23, 2013, 01:26:18 pm by Psit » Logged

Rennes
Offline Offline
Sr. Member
****
Karma: 0
Posts: 273
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca n'est pas la seule chose à faire pour faire l'équivalent sous Windows.
Il faut ré-écrire le script en utilisant par exemple cette librairie php:
http://code.google.com/p/php-serial/

Le port COM à utiliser est celui utilisé par l'IDE Arduino (chez moi c'est COM10 par exemple).

Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et du coup je les met ou tes codes ? Je change quoi ?
Logged

Pages: [1]   Go Up
Jump to: