Faire bouger des servo-moteurs par php.

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 ?

// --- 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() != '

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

<?php

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


for($i=0; $i < 5 ; $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 .) { // cherche fin trame
   i = Serial.read();
   if((i != -1) && (i != '


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

§DISCOURSE_HOISTED_CODE_1§


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 .)) {
      //Serial.write(i);
      recmsg[cpt++] = i;
    }
    if(i == '

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

§_DISCOURSE_HOISTED_CODE_1_§

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 .) 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:

§DISCOURSE_HOISTED_CODE_1§


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 .

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).

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