Aller au contenu


Photo
- - - - -

besoin d'aide


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 merlin

merlin

    Nouveau membre

  • Membres
  • 5 messages

Posté 15 mai 2013 - 06:00

Image IPB

Voici le robot que j'ai réaliser en achètent un kit pour me familiariser, avec la technologie arduino.

voici le programme que j'ai réaliser:


// declaration des objets

int E1 = 5;//M1 Vitesse
int E2 = 6;//M2 Vitesse
int M1 = 4;//M1 Direction
int M2 = 7;//M2 Direction
// pin analog 0
const int capteur_IR= 0; // pin analog 0
const int capteur_IRG= 1;// pin analog 1
const int capteur_IRD= 2;// pin analog 2
const int vitesse =105;// valeur vitesses

// fonction motorisation

void Marche_moteur()
{
  analogWrite (E2, vitesse);
  digitalWrite (M2,LOW);
  analogWrite (E1, vitesse);
  digitalWrite (M1,LOW);
}
void stop_moteur()
{
  analogWrite (E1,0);
  analogWrite (E2,0);
}
void tourner_gauche()
{
  analogWrite (E1,0);
  digitalWrite (M1,HIGH);
  analogWrite (E2,vitesse);
  digitalWrite (M2,LOW);
}
void tourner_droite ()
{
  analogWrite (E1,vitesse);
  digitalWrite (M1,LOW);
  analogWrite (E2,0);
  digitalWrite (M2,HIGH);
}
void marche_arriere ()
{
  analogWrite (E1, vitesse);
  digitalWrite (M1, HIGH);
  analogWrite (E2, vitesse);
  digitalWrite (M2, HIGH);
}
//capteur infrarouge
boolean centrale (int IR)
{
  if (analogRead(IR)>= 400)
  return true;
  return false;
}

boolean gauche (int IRG)
{
  if (analogRead(IRG) >= 400)
  return true;
  return false;
}
boolean droite (int IRD)
{
  if (analogRead(IRD) >= 400)
  return true;
  return false;
}
void setup(void)
{
  pinMode(E1, OUTPUT);
  pinMode(E2, OUTPUT);
  pinMode (capteur_IRG, INPUT);
  pinMode (capteur_IRD, INPUT),
  pinMode (capteur_IR, INPUT),
  
  Serial.begin(19200);
}
void loop(void)
{
  //DETECTION A GAUCHE
 if (gauche (capteur_IRG) == false)
 {
 Marche_moteur();
 }
 else
 {
  marche_arriere();
 }
}
// DETECTION A DROITE


// DETECTION CENTRALE



J'ai besoin d'aide! je n'arrive pas a programmer les 3 capteurs infrarouge.
le but de ces 3 capteur est de permettre au robot d’éviter les obstacle.

#2 seb03000

seb03000

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 193 messages
  • Gender:Male

Posté 15 mai 2013 - 06:17

Bonjour Merlin:

Je possédé le même chassie avants , avec les même module.

Voici le code que je te propose, donc aisé le est dis si cela te conviens , ou se qui ne vas pas.

 

 	int capteur = 0;	// broche analogique utilisé pour connecter le capteur infrarouge SHARP sur la broche 0 droite
 	int capteur2 = 1;  // broche analogique utilisé pour connecter le capteur2 infrarouge SHARP sur la broche 1 gauche
 	int capteur3 = 2; // broche analogique utilisé pour connecter le capteur3 infrarouge SHARP sur la broche 2 gauche
 	int val; 		// Variable pour lire la valeur du capteur de la broche analogique 0
 	int val2;   	// Variable pour lire la valeur du capteur1 de la broche analogique 1
 	int val3;  	//Variable pour lire la valeur du capteur2 de la broche analogique 2

 	
 	// Moteur
 	int EN1 = 6;
 	int EN2 = 5; 
 	int IN1 = 7;
 	int IN2 = 4;

	void Moteur1(int pwm, boolean reverse)
	{
 	analogWrite(EN1,pwm); //définir le contrôle PWM, 0 pour l'arrêt, et 255 pour une vitesse maximale
 	if(reverse)
	{
 	digitalWrite(IN1,HIGH); 
	}
 	else
	{
 	digitalWrite(IN1,LOW); 
	}
	}
	void Moteur2(int pwm, boolean reverse)
	{
 	analogWrite(EN2,pwm);
 	if(reverse)
	{
 	digitalWrite(IN2,HIGH); 
	}
 	else
	{
 	digitalWrite(IN2,LOW); 
	}
 	}
	void setup()
	{
 	int i;
 	for(int i=3;i<=8;i++)      	// Shield Moteur
 	pinMode(i, OUTPUT);   		//met les pin 4,5,6,7 en mode sortie
	}
	void loop()
	{
 	val = analogRead(capteur); 	// lit la valeur du capteur SHARP
 	val2 = analogRead(capteur2);  // lit la valeur du capteur 2 SHARP
 	val3 = analogRead(capteur3); // lit la valeur du capteur 3 SHARP
 	delay(100);
 	if ((val >= 255) || (val2 >= 255) || (val3 >= 255)) // si on est à quelque cm d'un obstacle pour les 3 capteurs
	{
 	Moteur1(0,true);   		//j’arrête le moteur 1
 	Moteur2(0,true);      	// j’arrête le moteur 2
 	delay(200);          	//j’attends 2 seconde
 	Moteur1(100,true);  	//J'avance tout droit
 	Moteur2(0,true);   	// j’arrête le moteur 2
 	delay(200);   		//la valeur à mettre reste à définir en fonction de la vitesse du robot
 	Moteur1(100,true);   //J'avance tout droit en mettant les 1 moteurs
 	Moteur2(105,false); //J'avance tout droit en mettant les 2 moteurs ( Moteur2 un peux faible donc valeur 105 )
	}
 	else
	{
 	Moteur1(100,false); //J'avance tout droit en mettant les 1 moteurs
 	Moteur2(105,true); //J'avance tout droit en mettant les 2 moteurs ( Moteur2 un peux faible donc valeur 105 )

  	}
  	}


Mon code est fonctionnel ^^ il détectera les obstacle a droite a gauche est au centre

#3 merlin

merlin

    Nouveau membre

  • Membres
  • 5 messages

Posté 15 mai 2013 - 06:32

merci de ton aide je vais étudier se code source! sa va m'aider a comprendre d'aventage le code c.

#4 merlin

merlin

    Nouveau membre

  • Membres
  • 5 messages

Posté 15 mai 2013 - 06:35

car je débute dans le milieu! et je trouve que j'ai fait des progrès considérable!en tous cas merci.

#5 seb03000

seb03000

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 193 messages
  • Gender:Male

Posté 15 mai 2013 - 06:37

De rien Merlin , de plus je voie que tu a mis un servo qui lui a un capteur infrarouge sharp , faut t'il que ton servo soi en mouvement , donc qu'il face une rotation de mouvement de gauche a droite , pour qu'il détecte un obstacle ???

Dis moi sur quel pin digitale est connecté ton servo sur ta carte arduino , pour que je te re-face le programme




1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users