bras robot plus pince
#21
Posté 02 mai 2012 - 10:57
#22
Posté 03 mai 2012 - 04:24
Acheter un oscillo pour un premier projet c'est un peu hard quand même (à oins que tu ai vraiment les moyens auquel cas vas-y ça vaut le coup ) pour la prog je veux bien t'aider (mais si tu me pose des questions, pas faire le code à ta place )
Je suis bien d'accord ^^ ça ne vaut pas le coup si tu ne t'en sert pas après ...
Commander un servo en annalogique ça relève plus d'un petit challenge surmontable pour moins cher qu'une carte programmable. Mais ce n'est pas aisément reproductible, faut refaire les réglages à chaque fois ! donc c'est bon pour un moteur si tu dois vraiment faire du low cost (genre possible pour une valeur totale de composant inférieur à 5 euros ) et si tu as déjà un oscillo à disposition.
Dans ton cas il me semblerait plus simple de passer par une carte programmable mais donc un peu plus cher à cause du prix de cette carte mais c'est inférieur à 50 euros ^^
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#23
Posté 03 mai 2012 - 08:54
Bon pour la prog je ne sais pas du tout par ou commencer car je ne trouve aucune explication de comment piloter un servo avec un potentiometre ... Si déja swolf tu pourrai un peu me donner des conseil ou des site je te serai vraiment reconnaissant.
Cordialement Maxou
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#24
Posté 03 mai 2012 - 09:34
Pour controler ton servo il y a une librairie qui s'appelle Servo : Site Arduino
Et pour les entrées analogiques : Site Arduino
#25
Posté 03 mai 2012 - 04:23
Merci lestephanoi^^ c'est encore mieux que se que je demander j'ai trouver un code tout pret pour controller 3 servo avec 3 potentiometre je devrais l'essayer apres le week end car je ne suis pas cher moiVoici un site ou tu as plein d'exemple de programme pour Arduino : Mon Club Elec
Pour controler ton servo il y a une librairie qui s'appelle Servo : Site Arduino
Et pour les entrées analogiques : Site Arduino
cordialement Maxou
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#26
Posté 04 mai 2012 - 02:02
j'ai un probleme car j'ai trouver le code pour mon bras mes il va falloir que je le met 2 fois et rajoute le code pour controller mon robot ..
Si quelqun sait comment fusionner plusieurs code et m'aider a le faire pour mon code je lui serai vraiment reconnaissant
cordialement Maxou
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#27
Posté 04 mai 2012 - 02:23
salut
j'ai un probleme car j'ai trouver le code pour mon bras mes il va falloir que je le met 2 fois et rajoute le code pour controller mon robot ..
Si quelqun sait comment fusionner plusieurs code et m'aider a le faire pour mon code je lui serai vraiment reconnaissant
cordialement Maxou
Tu as le code il ne te reste plus qu'à le comprendre.( Mais il te faut les base de la programmation). Une fois que tu l'auras compris tu pourras faire ce que tu veux avec : le doubler etc ... Mais on ne va pas faire le travail pour toi et puis ça ne te serais pas instructif !
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#28
Posté 04 mai 2012 - 02:43
#31
Posté 04 mai 2012 - 03:03
mon code :Met ton code et celui que tu as trouvé pour voir.
#include <Servo.h>
int vitesse1 = 6;
int vitesse2 = 5;
int direction1 = 7;
int direction2 = 4;
Servo myservo;
int potpin = 0;
int val;
void Moteur1(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction1,HIGH);
}
else
{
digitalWrite(direction1,LOW);
}
}
void Moteur2(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction2,HIGH);
}
else
{
digitalWrite(direction2,LOW);
}
}
void setup()
{
myservo.attach(3);
int i;
for(i=5;i<=8;i++)
pinMode(i, OUTPUT);
}
void loop()
{
val = analogRead(capteur);
val = map(val, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300)
myservo.write(val); // définit la position d'asservissement en fonction de la valeur à l'échelle
delay(400);
if (val >= 180) // si je suis à moins de 10 cm d'un obstacle avec mon robot
{
Moteur1(0,true); //j'arrete le moteur 1
Moteur2(0,true); // j'arrete le moteur 2
delay(200); //j'attend 2 seconde
Moteur1(255,true); //J'avance tout droit
Moteur2(0,true); // j'arrete le moteur 2
delay(400);
Moteur1(255,true); //J'avance tout droit en metant les 2 moteurs à fond
Moteur2(255,false); //J'avance tout droit en metant les 2 moteurs à fond
}
else
{
Moteur1(255,false);
Moteur2(255,true);
}
}
Le code que j'ai trouver :
// par X. HINAULT - Le 28/02/2010
// www.mon-club-elec.fr
// --- Que fait ce programme ? ---
/* contrôler 3 servomoteurs à l'aide de 3 résistances variables*/
// --- Fonctionnalités utilisées ---
// Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0, analog 1, analog 2,
// Utilise les servomoteurs
// --- Circuit à réaliser ---
// Connecter sur la broche 2 (configurée en sortie) broche de commande du servomoteur 0 alimenté par alim externe
// Connecter sur la broche 3 (configurée en sortie) broche de commande du servomoteur 1 alimenté par alim externe
// Connecter sur la broche 4 (configurée en sortie) broche de commande du servomoteur 2 alimenté par alim externe
// Broche Analog 0 (=broche 14) en entrée Analogique
// Broche Analog 1 (=broche 15) en entrée Analogique
// Broche Analog 2 (=broche 16) en entrée Analogique
// IMPORTANT : IL EST IMPERATIF D'UTILISER UNE ALIMENTATION EXTERNE DE 6V POUR ALIMENTER LES SERVOMOTEURS
//**************** 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 ---
const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur
// POS_MIN=550 pour futaba S3003
const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur
// POS_MAS=2330 pour futaba s3003
// --- constantes des broches ---
const int SERVO_0=2; //declaration constante de broche
const int SERVO_1=3; //declaration constante de broche
const int SERVO_2=4; //declaration constante de broche
const int Voie_0=0; //declaration constante de broche analogique
const int Voie_1=1; //declaration constante de broche analogique
const int Voie_2=2; //declaration constante de broche analogique
// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique
int angle_servo_0=0; // variable pour angle du servomoteur
int angle_servo_1=0; // variable pour angle du servomoteur
int angle_servo_2=0; // variable pour angle du servomoteur
// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
Servo mon_servo_0; // crée un objet servo pour contrôler le servomoteur
Servo mon_servo_1; // crée un objet servo pour contrôler le servomoteur
Servo mon_servo_2; // crée un objet servo pour contrôler le servomoteur
//**************** 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_servo_0.attach(SERVO_0, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur
mon_servo_1.attach(SERVO_1, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur
mon_servo_2.attach(SERVO_2, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur
// ------- Broches en sortie -------
pinMode(SERVO_0, OUTPUT); //met la broche en sortie
pinMode(SERVO_1, OUTPUT); //met la broche en sortie
pinMode(SERVO_2, OUTPUT); //met la broche en sortie
// ------- Broches en entrée -------
// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------
} // 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 ---
//========== SERVO_0 ===============
// acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_0);
angle_servo_0=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180
// map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié
mon_servo_0.write(angle_servo_0); // positionne le servo à l'angle voulu
//========== SERVO_1 ===============
// acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_1);
angle_servo_1=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180
// map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié
mon_servo_1.write(angle_servo_1); // positionne le servo à l'angle voulu
//========== SERVO_2 ===============
// acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023)
mesure_brute=analogRead(Voie_2);
angle_servo_2=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180
// map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié
mon_servo_2.write(angle_servo_2); // positionne le servo à l'angle voulu
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
//*************** Autres Fonctions du programme *************
// --- Fin programme ---
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#34
Posté 04 mai 2012 - 03:15
#35
Posté 04 mai 2012 - 03:22
je ne dois pas avoir la meme version car je n'ai pas de smiley ni de truc pour mettre en gras mais un bouton pour vérifier ...Quand tu écris ton message il y a des petites icônes au dessus de la zone de texte (il y a pour souligner, mettre en gras, un smiley, une enveloppe, des chevrons (<>), ...), ben tu click sur les chevrons (<>) (c'est marqué "Insérer un extrait de code" quand tu passe dessus) et tu met ton code entre ce qui apparait
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#36
Posté 04 mai 2012 - 03:26
#include <Servo.h> int vitesse1 = 6; int vitesse2 = 5; int direction1 = 7; int direction2 = 4; Servo myservo; int potpin = 0; int val; void Moteur1(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction1,HIGH); } else { digitalWrite(direction1,LOW); } } void Moteur2(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction2,HIGH); } else { digitalWrite(direction2,LOW); } } void setup() { myservo.attach(3); int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); } void loop() { val = analogRead(capteur); val = map(val, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300) myservo.write(val); // définit la position d'asservissement en fonction de la valeur à l'échelle delay(400); if (val >= 180) // si je suis à moins de 10 cm d'un obstacle avec mon robot { Moteur1(0,true); //j'arrete le moteur 1 Moteur2(0,true); // j'arrete le moteur 2 delay(200); //j'attend 2 seconde Moteur1(255,true); //J'avance tout droit Moteur2(0,true); // j'arrete le moteur 2 delay(400); Moteur1(255,true); //J'avance tout droit en metant les 2 moteurs à fond Moteur2(255,false); //J'avance tout droit en metant les 2 moteurs à fond } else { Moteur1(255,false); Moteur2(255,true); } } Le code que j'ai trouver : // par X. HINAULT - Le 28/02/2010 // www.mon-club-elec.fr // --- Que fait ce programme ? --- /* contrôler 3 servomoteurs à l'aide de 3 résistances variables*/ // --- Fonctionnalités utilisées --- // Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0, analog 1, analog 2, // Utilise les servomoteurs // --- Circuit à réaliser --- // Connecter sur la broche 2 (configurée en sortie) broche de commande du servomoteur 0 alimenté par alim externe // Connecter sur la broche 3 (configurée en sortie) broche de commande du servomoteur 1 alimenté par alim externe // Connecter sur la broche 4 (configurée en sortie) broche de commande du servomoteur 2 alimenté par alim externe // Broche Analog 0 (=broche 14) en entrée Analogique // Broche Analog 1 (=broche 15) en entrée Analogique // Broche Analog 2 (=broche 16) en entrée Analogique // IMPORTANT : IL EST IMPERATIF D'UTILISER UNE ALIMENTATION EXTERNE DE 6V POUR ALIMENTER LES SERVOMOTEURS //**************** 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 --- const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur // POS_MIN=550 pour futaba S3003 const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur // POS_MAS=2330 pour futaba s3003 // --- constantes des broches --- const int SERVO_0=2; //declaration constante de broche const int SERVO_1=3; //declaration constante de broche const int SERVO_2=4; //declaration constante de broche const int Voie_0=0; //declaration constante de broche analogique const int Voie_1=1; //declaration constante de broche analogique const int Voie_2=2; //declaration constante de broche analogique // --- Déclaration des variables globales --- int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique int angle_servo_0=0; // variable pour angle du servomoteur int angle_servo_1=0; // variable pour angle du servomoteur int angle_servo_2=0; // variable pour angle du servomoteur // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- Servo mon_servo_0; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_1; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_2; // crée un objet servo pour contrôler le servomoteur //**************** 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_servo_0.attach(SERVO_0, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_1.attach(SERVO_1, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_2.attach(SERVO_2, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur // ------- Broches en sortie ------- pinMode(SERVO_0, OUTPUT); //met la broche en sortie pinMode(SERVO_1, OUTPUT); //met la broche en sortie pinMode(SERVO_2, OUTPUT); //met la broche en sortie // ------- Broches en entrée ------- // ------- Activation du rappel au + interne des broches en entrée si nécessaire ------- } // 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 --- //========== SERVO_0 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_0); angle_servo_0=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_0.write(angle_servo_0); // positionne le servo à l'angle voulu //========== SERVO_1 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_1); angle_servo_1=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_1.write(angle_servo_1); // positionne le servo à l'angle voulu //========== SERVO_2 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_2); angle_servo_2=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_2.write(angle_servo_2); // positionne le servo à l'angle voulu } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // ******************************************************************************** //*************** Autres Fonctions du programme ************* // --- Fin programme ---
la prochaine fois encadre ton code par "[code ]" au début et "[/code ]" à la fin sans les espaces entre le le e de code et le crochet "] "
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#37
Posté 04 mai 2012 - 03:33
vraiment merci mike 118ton code :
#include <Servo.h> int vitesse1 = 6; int vitesse2 = 5; int direction1 = 7; int direction2 = 4; Servo myservo; int potpin = 0; int val; void Moteur1(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction1,HIGH); } else { digitalWrite(direction1,LOW); } } void Moteur2(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction2,HIGH); } else { digitalWrite(direction2,LOW); } } void setup() { myservo.attach(3); int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); } void loop() { val = analogRead(capteur); val = map(val, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300) myservo.write(val); // définit la position d'asservissement en fonction de la valeur à l'échelle delay(400); if (val >= 180) // si je suis à moins de 10 cm d'un obstacle avec mon robot { Moteur1(0,true); //j'arrete le moteur 1 Moteur2(0,true); // j'arrete le moteur 2 delay(200); //j'attend 2 seconde Moteur1(255,true); //J'avance tout droit Moteur2(0,true); // j'arrete le moteur 2 delay(400); Moteur1(255,true); //J'avance tout droit en metant les 2 moteurs à fond Moteur2(255,false); //J'avance tout droit en metant les 2 moteurs à fond } else { Moteur1(255,false); Moteur2(255,true); } } Le code que j'ai trouver : // par X. HINAULT - Le 28/02/2010 // www.mon-club-elec.fr // --- Que fait ce programme ? --- /* contrôler 3 servomoteurs à l'aide de 3 résistances variables*/ // --- Fonctionnalités utilisées --- // Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0, analog 1, analog 2, // Utilise les servomoteurs // --- Circuit à réaliser --- // Connecter sur la broche 2 (configurée en sortie) broche de commande du servomoteur 0 alimenté par alim externe // Connecter sur la broche 3 (configurée en sortie) broche de commande du servomoteur 1 alimenté par alim externe // Connecter sur la broche 4 (configurée en sortie) broche de commande du servomoteur 2 alimenté par alim externe // Broche Analog 0 (=broche 14) en entrée Analogique // Broche Analog 1 (=broche 15) en entrée Analogique // Broche Analog 2 (=broche 16) en entrée Analogique // IMPORTANT : IL EST IMPERATIF D'UTILISER UNE ALIMENTATION EXTERNE DE 6V POUR ALIMENTER LES SERVOMOTEURS //**************** 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 --- const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur // POS_MIN=550 pour futaba S3003 const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur // POS_MAS=2330 pour futaba s3003 // --- constantes des broches --- const int SERVO_0=2; //declaration constante de broche const int SERVO_1=3; //declaration constante de broche const int SERVO_2=4; //declaration constante de broche const int Voie_0=0; //declaration constante de broche analogique const int Voie_1=1; //declaration constante de broche analogique const int Voie_2=2; //declaration constante de broche analogique // --- Déclaration des variables globales --- int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique int angle_servo_0=0; // variable pour angle du servomoteur int angle_servo_1=0; // variable pour angle du servomoteur int angle_servo_2=0; // variable pour angle du servomoteur // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- Servo mon_servo_0; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_1; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_2; // crée un objet servo pour contrôler le servomoteur //**************** 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_servo_0.attach(SERVO_0, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_1.attach(SERVO_1, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_2.attach(SERVO_2, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur // ------- Broches en sortie ------- pinMode(SERVO_0, OUTPUT); //met la broche en sortie pinMode(SERVO_1, OUTPUT); //met la broche en sortie pinMode(SERVO_2, OUTPUT); //met la broche en sortie // ------- Broches en entrée ------- // ------- Activation du rappel au + interne des broches en entrée si nécessaire ------- } // 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 --- //========== SERVO_0 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_0); angle_servo_0=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_0.write(angle_servo_0); // positionne le servo à l'angle voulu //========== SERVO_1 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_1); angle_servo_1=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_1.write(angle_servo_1); // positionne le servo à l'angle voulu //========== SERVO_2 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_2); angle_servo_2=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_2.write(angle_servo_2); // positionne le servo à l'angle voulu } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // ******************************************************************************** //*************** Autres Fonctions du programme ************* // --- Fin programme ---
la prochaine fois encadre ton code par "[code ]" au début et "[/code ]" à la fin sans les espaces entre le le e de code et le crochet "] "
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#38
Posté 04 mai 2012 - 03:36
// par X. HINAULT - Le 28/02/2010 // www.mon-club-elec.fr // --- Que fait ce programme ? --- /* contrôler 3 servomoteurs à l'aide de 3 résistances variables*/ // --- Fonctionnalités utilisées --- // Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0, analog 1, analog 2, // Utilise les servomoteurs // --- Circuit à réaliser --- // Connecter sur la broche 2 (configurée en sortie) broche de commande du servomoteur 0 alimenté par alim externe // Connecter sur la broche 3 (configurée en sortie) broche de commande du servomoteur 1 alimenté par alim externe // Connecter sur la broche 4 (configurée en sortie) broche de commande du servomoteur 2 alimenté par alim externe // Broche Analog 0 (=broche 14) en entrée Analogique // Broche Analog 1 (=broche 15) en entrée Analogique // Broche Analog 2 (=broche 16) en entrée Analogique // IMPORTANT : IL EST IMPERATIF D'UTILISER UNE ALIMENTATION EXTERNE DE 6V POUR ALIMENTER LES SERVOMOTEURS //**************** 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 --- const int POS_MIN=550; // largeur impulsion pour position 0° servomoteur // POS_MIN=550 pour futaba S3003 const int POS_MAX=2330; // largeur impulsion pour position 180° servomoteur // POS_MAS=2330 pour futaba s3003 // --- constantes des broches --- const int SERVO_0=2; //declaration constante de broche const int SERVO_1=3; //declaration constante de broche const int SERVO_2=4; //declaration constante de broche const int Voie_0=0; //declaration constante de broche analogique const int Voie_1=1; //declaration constante de broche analogique const int Voie_2=2; //declaration constante de broche analogique // --- Déclaration des variables globales --- int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique int angle_servo_0=0; // variable pour angle du servomoteur int angle_servo_1=0; // variable pour angle du servomoteur int angle_servo_2=0; // variable pour angle du servomoteur // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- Servo mon_servo_0; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_1; // crée un objet servo pour contrôler le servomoteur Servo mon_servo_2; // crée un objet servo pour contrôler le servomoteur //**************** 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_servo_0.attach(SERVO_0, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_1.attach(SERVO_1, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur mon_servo_2.attach(SERVO_2, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur // ------- Broches en sortie ------- pinMode(SERVO_0, OUTPUT); //met la broche en sortie pinMode(SERVO_1, OUTPUT); //met la broche en sortie pinMode(SERVO_2, OUTPUT); //met la broche en sortie // ------- Broches en entrée ------- // ------- Activation du rappel au + interne des broches en entrée si nécessaire ------- } // 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 --- //========== SERVO_0 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_0); angle_servo_0=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_0.write(angle_servo_0); // positionne le servo à l'angle voulu //========== SERVO_1 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_1); angle_servo_1=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_1.write(angle_servo_1); // positionne le servo à l'angle voulu //========== SERVO_2 =============== // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée - résultat 10bits (0-1023) mesure_brute=analogRead(Voie_2); angle_servo_2=map(mesure_brute,0,1023,0,180); // convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180 // map(value, fromLow, fromHigh, toLow, toHigh); // permet changement d'échelle simplifié mon_servo_2.write(angle_servo_2); // positionne le servo à l'angle voulu } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // ******************************************************************************** //*************** Autres Fonctions du programme ************* // --- Fin programme ---
A.R.M.I
Autonomous Robotics Mechanics Intelligent
#39
Posté 04 mai 2012 - 03:40
#include <Servo.h> int vitesse1 = 6; int vitesse2 = 5; int direction1 = 7; int direction2 = 4; Servo myservo; int potpin = 0; int val; void Moteur1(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction1,HIGH); } else { digitalWrite(direction1,LOW); } } void Moteur2(int valeur_vitesse, boolean sens_avant) { analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum if(sens_avant) { digitalWrite(direction2,HIGH); } else { digitalWrite(direction2,LOW); } } void setup() { myservo.attach(3); int i; for(i=5;i<=8;i++) pinMode(i, OUTPUT); } void loop() { val = analogRead(capteur); // lit la valeur du capteur val = map(val, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300) myservo.write(val); // définit la position d'asservissement en fonction de la valeur à l'échelle delay(400); if (val >= 180) // si je suis à moins de 10 cm d'un obstacle avec mon robot { Moteur1(0,true); //j'arrete le moteur 1 Moteur2(0,true); // j'arrete le moteur 2 delay(200); //j'attend 2 seconde Moteur1(255,true); //J'avance tout droit Moteur2(0,true); // j'arrete le moteur 2 delay(400); Moteur1(255,true); //J'avance tout droit en metant les 2 moteurs à fond Moteur2(255,false); //J'avance tout droit en metant les 2 moteurs à fond } else { Moteur1(255,false); Moteur2(255,true); } }
A.R.M.I
Autonomous Robotics Mechanics Intelligent
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users