bonjours à tous et à toutes,
Mon projet avance, lentement, mais surmement ^^. Je n'est malheuresement pas les temps de mis métre à fond, je fait ça en retrant des cours, où le week end. Fin bréf assez parler de ma vie.
Je posterais des photo du chassit ce soire, en attendant, je vais parler de l'avancement du projet

/>/>/>/>/>/>
Partie chassit : il faut encore que je j'assemble tout les composant, pas facile de métre en place ce que je voudrait faire avec la tourelle, néanmois, les moteurs de déplacments sont installer et branchés, j'ai tout tester hier, le robot fait des allez et retours.
Partie électronique : je n'est pas du tout commencer... je voudrait faire, une allimentation séparer entre la carte et les moteurs (pour une débugage plus simple), donc une alim 6V avec un intérupteur pour les moteur, et une alim 9V, toujours avec un interupteur, pour la carte arduino. Je me cantonerais à ça pour la partie électronique, je risque de modifier pas mal de truck, au niveau de l'alimentation (de la carte et des moteurs) par la suite.
Partie programmation : c'est du code arduino, donc rien de bien compliqué pour l'instant, je ne gére que le déplacement et l'évitement d'obstacle, je met le code à la suite :
/********************************************************************************************
represente la partie "main()" du programme
********************************************************************************************/
// define du déplacement
//*******************************************************************************************
#define PIN_SERVO_GAUCHE 10
#define PIN_SERVO_DROITE 11
#define SERVO_GAUCHE 0 // permet de dissocié les deux servo
#define SERVVO_DROITE 1
#define NEUTRE_SERVO_GAUCHE 45 // représente l'angle pour arréter le servo
#define NEUTRE_SERVO_DROITE 75
#define REGULATION_VITESSE_GAUCHE 11 // plus ce chiffre sera faible, plus la vitesse
#define REGULATION_VITESSE_DROITE 11 // des servo sera faible (et inversement)
#define AVANT 0
#define GAUCHE 1
#define DROITE 2
#define ARRIERE 3
#define ARRET 4
//*******************************************************************************************
//define du capteur de distance
//*******************************************************************************************
#define PIN_IN_CAPTEUR_DISTANCE 8 // ATTENTION : on écrit dessus, donc pour le µc c'est un latch
#define PIN_OUT_CAPTEUR_DISTANCE 9 // ATTENTION : on lit dessus, donc pour le µc c'est un port
#define DISTANCE_DETECTION 15
//*******************************************************************************************
//define de la tourelle
//*******************************************************************************************
#define PIN_SERVO_TOURELLE 12
#define VISION_GAUCHE 20 // représente l'angle qu'il faut pour tourné le capteur a gauche
#define VISION_DROITE 160// représente l'angle qu'il faut pour tourné le capteur a gauche
#define VISION_MILIEU 70 // représente l'angle qu'il faut pour que le capteur soit centré
//*******************************************************************************************
#include <deplacement.h>
#include <capteur_distance.h>
#include <Servo.h>
Servo servogauche;
Servo servodroite;
Servo servotourelle;
int distance;
void setup()
{
servogauche.attach(PIN_SERVO_GAUCHE);
servodroite.attach(PIN_SERVO_DROITE);
servotourelle.attach(PIN_SERVO_TOURELLE);
pinMode (PIN_IN_CAPTEUR_DISTANCE, OUTPUT);
pinMode (PIN_OUT_CAPTEUR_DISTANCE, INPUT);
servotourelle.write(VISION_MILIEU) // on le fait regarder devant
Move(AVANT); // reprend la même fonction que roby, car trés intéressant à mon avis
}
void loop()
{
capteurDistanceSetup();
distance = calculDistance();
if (distance > DISTANCE_DETECTION)
Move(AVANT);
else
manoeuvreDevitement();
}
/********************************************************************************************
represente mon onglet déplacement dans le programme
********************************************************************************************/
#include <Servo.h>
Servo servogauche;
Servo servodroite;
Servo servotourelle;
// récuperation du neutre de chaque servo moteur
//********************************************************************************************
int getNeutral(int servo)
{
if (servo == SERVO_GAUCHE)
return NEUTRE_SERVO_GAUCHE;
else
return NEUTRE_SERVO_DROITE;
}
//********************************************************************************************
// traitement du déplacement, permet de choisir la vitesse des moteur
//********************************************************************************************
void controleServo(int vitesse, int servo)
{
int position = getNeutral(servo);
if (servo == SERVO_GAUCHE)
{
position = position + vitesse;
servogauche.write(position);
}
else
{
position = position - vitesse;
servogauche.write(position);
}
}
//********************************************************************************************
// fonction générique pour le déplacement
//********************************************************************************************
void Move(int mouvement)
{
int A,B; // A sera assigné au servogauche, B sera assigné à celui de droite
switch(mouvement)
{
case AVANT: A = 1; B = 1; break;
case DROITE: A = 1; B = -1; break;
case GAUCHE: A = -1; B = 1; break;
case ARRIERE: A = -1; B = -1; break;
case ARRET: A = 0; B = 0; break;
default : A = 0; B = 0; break; // un grand homme ma dit un jours, "on ne sais jamais !!" xD
}
controleServo(A*REGULATION_VITESSE_GAUCHE, SERVO_GAUCHE);
controleServo(B*REGULATION_VITESSE_DROITE, SERVO_DROITE);
}
//********************************************************************************************
//gestion de l'evitement
//********************************************************************************************
void manoeuvreDevitement(void)
{
int distanceDroite;
int distanceGauche;
servotourelle.write(VISION_DROITE);// on regarde si il à quelque chose à droite
delay(5); // permet d'être, largement, sur que la tourelle soit en place
capteurDistanceSetup();
distanceDroite = calculDistance();
servotourelle.write(VISION_GAUCHE)// on regarde si il à quelque chose à gauche
delay(5);
capteurDistanceSetup();
distanceGauche = calculDistance();
if(distanceDroite<distanceGauche)
{
Move(GAUCHE);
delay(300);
}
else if(distanceGauche<distanceDroite)
{
Move(DROITE);
delay(300);
}
else if(distanceGauche == distanceDroite) // ça risque d'être mais on ne sait jamais
{
Move(DROITE);
delay(300);
}
}
//********************************************************************************************
/********************************************************************************************
represente mon onglet capteur de distance dans le programme
********************************************************************************************/
// géneration de l'impultion de 50µs pour commencer la détéction
//********************************************************************************************
void capteurDistanceSetup(void)
{
digitalWrite(PIN_IN_CAPTEUR_DISTANCE, LOW); // on est sur de démarer à l'état bas
digitalWrite(PIN_IN_CAPTEUR_DISTANCE, HIGH);
delayMicroseconds(50);
digitalWrite(PIN_IN_CAPTEUR_DISTANCE, LOW);
}
//********************************************************************************************
//traitement de la sortie du capteur
//********************************************************************************************
int calculDistance(void)
{
long dureeImpultion = pulsIN(PIN_OUT_CAPTEUR_DISTANCE, HIGH, 30000);
// 30000 sert à quiter l'attente au bout de 30000µs (30ms) si il n'y a pas d'impultion
return dureeImpultion / 58; // permet d'avoir la distance en CM
}
//********************************************************************************************
alors, explication du code :
Si vous êtes actif sur ce forum (et donc ce site) vous avez dû remarquer que j'ai unpeu pomper le code de roby, mais j'ai essailler de le modifier, un peu quand même. Je trouve vraiment que ce code (celui fait par robotcop) est trés bien construit et ce comprend facilement.
Pour la partie capteur de distance, je pense que ceux qui utilise les capteurs de distance infrarouge (et ne savent utiliser que ça) non pas dû bien comprendre... en faite mon capteur est un SFR 05, et pour le faire fonctionne, il faut :
- Sur la pin IN (je ne sais plus le numéro) ou autrement appeler TRIG, il faut envoyer une impulssion (supérieur à 10µs) pour commencer une détéction d'obstacle. En gros dès que le capteur recevra ce TRIG en entrée, il va commencer à entreprendre la détéction d'obstacle, il va faire ceci :
- l'émetteur va envoyer un signal sonnor (à 40khz il me semble) et le récépteur va attendre de récupérer ce même signal. Pendant ce temps, le capteur "compte" le temps mis pour recevoir le signal sonnor. Le capteur envéra en sortie une durée d'impulsion qui d'épendra de ce temps, et donc qui dépendra de la distance !
- Donc sur la pin OUT nous allons récuperer l'impulsion générer par le capteur, sachant que :
la vitesse du son est de 340m/s, donc 1m /(1/314)s, donc 1cm/29µs
et que le son effectue un allez et retour, (donc /2) on aura : distance(en cm) = duréeImpulssion(en µs) / 29(en µs/cm) / 2
Voila pour l'explication (peut être laborieuse) de l'utilisation du capteur. et du code... je pense que le code parle de lui même, pas besoin de déblatérer trop longtemps à son sujet.
Donc il ne me réste plus qu'a assembler tout ça, ça me prend du temps parce que je veux faire les choses proprement, mais j'arrive bientôt à la fin de ma premiére partie ! à savoir évitement d'obstacle.
Je vais revenir sur ce que j'avais poster la derniére fois, je fait faire la commande à distance avant le module suiveur de ligne. Je pense que je vais me tourner vers un shield wifi, et j'aimerais bien savoir comment cela fonctionne ... Si quelqu'un pouvais me faire un petit cours accéléré dessus, (je profite des utilisateur de ce forum plutôt que d'aller chercher des info sur google, mais on est la pour s'endraider, er j'ai pas forcemement le temps, mon chassit me bouffe tout le temps dont je dispose mdr), ça serais sympa

/>/>
En attendant, j'attend vos commentaire ( et réponses ) j'en est pas encore eu j'étais déçus

/>/> ...
voila voila, bon bricolage à tous et à bientôt. (ce soire pour les photo du chassit xD)