Aller au contenu


Photo
- - - - -

capteur US ( Ultrasons )


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

#1 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 22 août 2016 - 12:51

Bonjour a tous.

 

Sa fait un moment que je ne suis pas passer ici , est sa a bien changer.

 

Bon voilà mon problème , je suis actuellement en train de faire un recyclage sur un robot wall-e.

 

Je lui est installer une carte roméo , plus 2 servo-moteurs , est 3 servo ( 2 pour les bras , 1 pour le coup ).

 

Comme capteur, un capteur ultrasons ( US ) celui si --> capteur_ultrason_03.jpg

 

Est 2 LED, donc une LED bleu basique, est un petit laser rouge , le laser indique qu'il y a un obstacle devant lui grâce au capteur us,

 

est la LED bleu indique qui ya pas d'obstacle.

 

Mon souci c'est que je ne trouve pas la librairie pour se capteur , pouvez vous m'aidez ???

 

Merci a tous  



#2 Jekert

Jekert

    Auteur

  • Modérateur
  • Pip
  • 227 messages
  • Gender:Male

Posté 22 août 2016 - 01:31

Salut,

Pour les HC-SR04 j'utilise la bibliothèque NewPing.

 

Elle s'utilise très facilement :

//Bibliothèque(s) :
 #include <NewPing.h>

//Capteur US:
#define TRIG 12
#define ECHO 11
#define MAXI 200
NewPing sonar(TRIG, ECHO, MAXI);
#define PAUSE 50


void setup() {
  Serial.begin(9600);
  }

void loop() {
  Serial.print("Distance en cm : ");
  Serial.println(sonar.ping_cm());
  delay(PAUSE);
}

Mon blog  ------  101robotics.com

Ouvrage    -----  Guide pour débuter avec Arduino

Ancien Blog  --  Journal d'un Arduinaute


#3 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 22 août 2016 - 02:15

Merci Jekert

 

A cette librairie je les en faite.

 

Bon celle que je souhaite avoir , pour quelle fonctionne c'est celle si.

 

Se programme je les pris sur un des sites pour le testé , le souci c'est que j’obtiens une erreur, suite a une librairie manquante je pense.

 

Voici le code en question:

#include « Ultrasonic.h » //lib capteur HSR04
#include <Servo.h>  //lib servo moteur

const int Trig = 7; //declaration pin carte arduino mega
const int Echo = 6; //declaration pin carte arduino mega
long cm; //variable HCSR04
long cm1; //variable HCSR04
long cm2; //variable HCSR04
Ultrasonic HCSR04(Trig,Echo); //appel des fonctions

int motor1Pin1 = 8;    // MOTEUR GAUCHE
int motor1Pin2 = 9;    // MOTEUR GAUCHE
int enablePin1 = 2;     // COMMANDE GAUCHE

int motor2Pin4 = 10;    // MOTEUR DROIT
int motor2Pin3 = 11;    // MOTEUR DROIT
int enablePin2 = 3;     // COMMANDE DROITE

Servo servoexplo; //nom servo

void setup() {
Serial.begin(9600); //monitoring

// déclaration des sorties
pinMode(motor1Pin1, OUTPUT); //declaration en sortie
pinMode(motor1Pin2, OUTPUT); //declaration en sortie
pinMode(enablePin1, OUTPUT); //declaration en sortie

pinMode(motor2Pin4, OUTPUT); //declaration en sortie
pinMode(motor2Pin3, OUTPUT); //declaration en sortie
pinMode(enablePin2, OUTPUT); //declaration en sortie

servoexplo.attach(5); //declaration en sortie

// Mettre la broche Enable a high comme ca les moteurs tournent
digitalWrite(enablePin1, HIGH); //moteur en route
digitalWrite(enablePin2, HIGH); //moteur en route
}

void loop() {
Serial.println(cm); //affichage sur le monitoring

servoexplo.write(30); //angle du servo
cm2 = HCSR04.convert(HCSR04.timing(), 1); //calcul de la distance par la fonction
delay(400); // pause d’acquisition

if (cm < 20) {
digitalWrite(motor1Pin1, LOW);   // ARRIERE TOUTE
digitalWrite(motor1Pin2, HIGH); //
digitalWrite(motor2Pin4, HIGH);   //
digitalWrite(motor2Pin3, LOW);  //

delay (800); //pause de mouvement

digitalWrite(motor1Pin1, HIGH);   // DROITE TOUTE
digitalWrite(motor1Pin2, LOW); //
digitalWrite(motor2Pin4, HIGH);   //
digitalWrite(motor2Pin3, LOW);  //

delay (800); //pause de mouvement

}
else {
// Le moteur gauche AVANT
digitalWrite(motor1Pin1, HIGH);   // AVANT TOUTE
digitalWrite(motor1Pin2, LOW);  //
// Le moteur droit AVANT
digitalWrite(motor2Pin4, LOW);   //
digitalWrite(motor2Pin3, HIGH);  //
}

servoexplo.write(90);
cm1 = HCSR04.convert(HCSR04.timing(), 1);
delay(400); // pause d’acquisition

if (cm1 < 20) {

digitalWrite(motor1Pin1, LOW);   // GAUCHE TOUTE
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin4, LOW);   //
digitalWrite(motor2Pin3, HIGH);  //

delay (800); //pause de mouvement

}
else {
// Le moteur gauche AVANT
digitalWrite(motor1Pin1, HIGH);   // AVANT TOUTE
digitalWrite(motor1Pin2, LOW);  //
// Le moteur droit AVANT
digitalWrite(motor2Pin4, LOW);   //
digitalWrite(motor2Pin3, HIGH);  //
}

servoexplo.write(140);
cm = HCSR04.convert(HCSR04.timing(), 1);
delay(400); // pause d’acquisition

if (cm2 < 20) {

digitalWrite(motor1Pin1, HIGH);   // DROITE TOUTE
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin4, HIGH);   //
digitalWrite(motor2Pin3, LOW);  //

delay (800); //pause de mouvement

}
else {
// Le moteur gauche AVANT
digitalWrite(motor1Pin1, HIGH);   // AVANT TOUTE
digitalWrite(motor1Pin2, LOW);  //
// Le moteur droit AVANT
digitalWrite(motor2Pin4, LOW);   //
digitalWrite(motor2Pin3, HIGH);  //
}

}

Et voici le message d'erreur:

 

sans_t10.png

 

Le bute de cela, c'est de ne pas prendre son code juste voir comment cela fonctionne , points de vue de sa déclaration de son capteur,

 

est celle la me plais bien, du comme vous avez pus le voir se programme me bloque a causse d'une erreur sans doute banale. 



#4 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp
  • Interests:https://t.me/pump_upp

Posté 22 août 2016 - 11:31

Alors je viens de faire mon programme il fonctionne bien, mais j'ai l’impression qu'il y a des raté au niveau du capteur US , ya t'il moyen d'amélioré cela.

 

Voici mon programme:

#include <Servo.h>
 // Définition des broches utilisées par le capteur HC-SR04 
 int trig = 13; 
 int echo = 12;
 //Les LED
 int LEDYeux = 2;   // Broche pour la LED les yeux
 int LEDLaserRouge = 3; // Broche pour LED Laser ( prévient quant ya un obstacle )
 int LEDBleu = 4; // Broche pour LED Bleu ( prévient quand ya pas d'obstacle )
 // définition des broches utilisées sur le shield contrôle moteur DRI0001 
 int direction_moteur_droite = 7; 
 int controle_moteur_droite = 6; 
 int direction_moteur_gauche = 4; 
 int controle_moteur_gauche = 5;
 long lecture_echo; 
 long cm, cm_gauche, cm_droite; 
 // crée l’objet pour contrôler le servomoteur
 Servo monservo;
//=========================================================================================================//
 void moteur (int moteur_gauche, boolean sens_moteur_gauche, int moteur_droite, boolean sens_moteur_droite) 
{ 
 // définition sens moteur LOW avance, HIGH recule 
 digitalWrite(direction_moteur_gauche, sens_moteur_gauche); 
 analogWrite(controle_moteur_gauche, moteur_gauche); 
 digitalWrite(direction_moteur_droite, sens_moteur_droite); 
 analogWrite(controle_moteur_droite, moteur_droite); 
}
 void virage_90 (boolean sens) 
{ 
  // Garder la valeur PWM à 255 
  // Jouer sur la durée en ms pour effectuer un virage souhaité 
  // sens à HIGH pour gauche, LOW pour droite 
  digitalWrite(direction_moteur_gauche, sens); 
  digitalWrite(direction_moteur_droite, !sens); 
  analogWrite(controle_moteur_gauche, 255); 
  analogWrite(controle_moteur_droite, 255); 
  delay(480); 
  analogWrite(controle_moteur_gauche, 0); 
  analogWrite(controle_moteur_droite, 0);        
}
 void calcul_distance() 
{ 
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = lecture_echo / 58; 
}
void setup() 
{ 
  pinMode(LEDYeux, OUTPUT);
  pinMode(LEDBleu, OUTPUT);
  pinMode(LEDLaserRouge, OUTPUT);
  int i; 
  for (i=4;i<=7;i++) 
  pinMode(i, OUTPUT); //définit les port 4 à 7 en sortie 
  analogWrite(controle_moteur_gauche, 0); // arrêt moteur gauche 
  analogWrite(controle_moteur_droite, 0); // arrêt moteur droite 
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur 
  monservo.write(70); // positionne le servomoteur en fait à 90° 
}
void loop() 
{ 
  digitalWrite(LEDYeux, HIGH);
  digitalWrite(LEDBleu,HIGH); //LED Bleu éclairé quand pas d'obstacle
  digitalWrite(LEDLaserRouge,LOW); // LED Laser rouge éclaire quand ya un obstacle 
  monservo.write(70); 
  delay(1000); 
  calcul_distance(); 
  if (cm >= 90) 
  { 
   // Robot avance tout droit 
   moteur(255, LOW, 255, LOW); 
  } 
  else 
  { 
  digitalWrite(LEDBleu,LOW);
  digitalWrite(LEDLaserRouge,HIGH);
  // Robot stop 
  moteur(0, LOW, 0, LOW); 
  monservo.write(30); 
  delay(1000); 
  calcul_distance(); 
  cm_droite = cm; 
  monservo.write(120); 
  delay(1000); 
  calcul_distance(); 
  cm_gauche = cm; 
  if (cm_droite < cm_gauche) 
  { 
  // Robot tourne 90° à gauche 
  virage_90(HIGH); 
  } 
  if (cm_droite > cm_gauche) 
  { 
  // Robot tourne 90° à droite 
  virage_90(LOW); 
  } 
  if (cm_droite == cm_gauche) 
  { 
  // Robot demi-tour 
  virage_90(HIGH); 
  virage_90(HIGH); 
  } 
 } 
}
 

A oui j'ai trouvais la librairie en question que me fessai défaut.

 

Si vous avez des idée sur l'amélioration du capteur cela serrer sympas.

 

Je vais creuser de mon coter , est aussi finaliser le codage des moteurs de chaque bras de wall-e que je n'est pas mis au poins.






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

0 members, 0 guests, 0 anonymous users