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 .