Aller au contenu


Juventin19

Inscrit(e) (le) 08 mars 2019
Déconnecté Dernière activité mai 20 2019 09:50
-----

Messages que j'ai postés

Dans le sujet : Projet de fin d'année Très important

20 mai 2019 - 08:31

Je vois un peu, donc je déclare ma variable i=0
Puis dans ma section void(droite) je rajoute un i++
Et je modifier le côté if(distance.. car je lui mettre une condition
Cest bien sa ?

Dans le sujet : Projet de fin d'année Très important

19 mai 2019 - 05:50

Finalement le robot tourne bien quand il y a un mur avec le capteur ultrason et même chose pour le capteur d'humidité.

Mais j'ai envie de encore améliorer, en effet j'ai remarqué que quand le robot détecte un mur il tourne (par exemple a droite) mais s'il rencontre un obstacle après avoir tourné, il retournera dans le même sens (à droite) et non dans l'autre sens (à gauche), il tournera en rond.

 

Mon professeur m'a proposé de faire une incrémentation, quand i=1 alors i+1 tourne  a gauche (je ne sais pas si c'est bon), 

 

Alors voici le code, le problème est que celui tourne a droite puis automatiquement il tourne a gauche, il avance pas (normalement  le robot doit détecte un obstacle il s’arrête il tourne à droite et avance mais la la roue de droite tourne puis la gauche puis la droite automatiquement)

#include <Ultrasonic.h>
Ultrasonic ultrasonic(7);
int sensorHum = A0;
int humidity = 0;
const byte vitesseMotAPin = 3;
const byte sensMotA1Pin = 5;
const byte sensMotA2Pin = 4;
const byte vitesseMotBPin = 11;
const byte sensMotB1Pin = 13;
const byte sensMotB2Pin = 12;
const int buttonPin = A2;
int buttonState = 0;
int i=0;
 
void setup () 
{ 
  Serial.begin(9600);
  pinMode(sensorHum,INPUT); 
  pinMode(buttonPin, INPUT);
  pinMode(vitesseMotAPin, OUTPUT);
  pinMode(sensMotA1Pin, OUTPUT);
  pinMode(sensMotA2Pin, OUTPUT); 
  pinMode(vitesseMotBPin, OUTPUT);
  pinMode(sensMotB1Pin, OUTPUT);
  pinMode(sensMotB2Pin, OUTPUT);
  stop(); 
  delay(3000);
}
 
void stop()
{
  digitalWrite(vitesseMotAPin, LOW);
  digitalWrite(vitesseMotBPin,LOW);
}
 
void avance()
{
  digitalWrite(sensMotA1Pin,LOW); 
  digitalWrite(sensMotA2Pin,HIGH);
  digitalWrite(sensMotB1Pin,LOW); 
  digitalWrite(sensMotB2Pin,HIGH); 
  analogWrite(vitesseMotBPin,30);
  analogWrite(vitesseMotAPin, 30);
}
 
void droite()
{
  digitalWrite(sensMotA1Pin,LOW); 
  digitalWrite(sensMotA2Pin,HIGH);
  digitalWrite(vitesseMotBPin,LOW);
  analogWrite(vitesseMotAPin, 40);
  delay(4500);
}
 
void gauche()
{
  digitalWrite(sensMotB1Pin,LOW); 
  digitalWrite(sensMotB2Pin,HIGH); 
  analogWrite(vitesseMotBPin,40);
  digitalWrite(vitesseMotAPin, LOW);
  delay(4500);
}
 
void loop()
{  
  long distance;
  distance = ultrasonic.MeasureInCentimeters();
  Serial.print("La distance est de: ");
  Serial.print(distance);
  Serial.println(" cm");
  humidity = analogRead(sensorHum);
  Serial.print("Le sable mouillé est de: " );
  Serial.println(humidity);
 
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) 
  {
    analogWrite(vitesseMotBPin,30);
    analogWrite(vitesseMotAPin, 30);
  if(humidity <= 100)
  {
    avance();      
  }
  else
  {
    stop();
    delay(1000);
    droite();
  }
  
  if(distance >= 55)
  {
   i=i+1;
    if (i>1)
    {
      avance(); 
      stop();
      delay(1000);
      droite();
    }     
  }
  else
  {
    avance(); 
    stop();
    delay(1000);
    gauche();
  } 
   }
    else 
    {
      digitalWrite(vitesseMotAPin, LOW);
      digitalWrite(vitesseMotBPin, LOW);
    }
}
 
voici la vidéo finale avec comme condition une plage parfaite sans obstacle 
 
ps: je tiens a vous remercier pour l'aide que vous m'avez a porté

Dans le sujet : Projet de fin d'année Très important

30 avril 2019 - 02:48

Vous validez ?:)

Dans le sujet : Projet de fin d'année Très important

26 avril 2019 - 10:57

Je vois mais quand si tu regarde la vidéo, pour quil tourne à droite jai bloqué les roues de gauche et il fait un démon tout mais ne revient pas sur ses pas, il attaque une autre ligne

Dans le sujet : Projet de fin d'année Très important

26 avril 2019 - 02:50

Malheureusement je n'ai plus le temps d’utilisé un capteur, je fais quelque mesure pour un tour.

Le robot doit faire un parcours sur le sable plat avec un capteur ultrason pour le mur et le capteur d'humidité pour le sable mouillé.

voici le code entier:

#include "Ultrasonic.h"
Ultrasonic ultrasonic(7);
int sensorPin = A0;
int humidity = 0;
const byte vitesseMotAPin = 3;
const byte sensMotA1Pin = 5;
const byte sensMotA2Pin = 4;
const byte vitesseMotBPin = 11;
const byte sensMotB1Pin = 13;
const byte sensMotB2Pin = 12;
 
 
void setup () 
{ 
  Serial.begin(9600);
  pinMode(vitesseMotAPin, OUTPUT);
  pinMode(sensMotA1Pin, OUTPUT);
  pinMode(sensMotA2Pin, OUTPUT); 
  pinMode(vitesseMotBPin, OUTPUT);
  pinMode(sensMotB1Pin, OUTPUT);
  pinMode(sensMotB2Pin, OUTPUT);
  stop(); 
  delay(3000);
}
 
void stop()
{
  digitalWrite(vitesseMotAPin, LOW);
  digitalWrite(vitesseMotBPin,LOW);
}
 
void avance()
{
  digitalWrite(sensMotA1Pin,LOW); 
  digitalWrite(sensMotA2Pin,HIGH);
  digitalWrite(sensMotB1Pin,LOW); 
  digitalWrite(sensMotB2Pin,HIGH); 
  analogWrite(vitesseMotBPin,50);
  analogWrite(vitesseMotAPin, 50);
}
 
void droite()
{
  digitalWrite(sensMotA1Pin,LOW); 
  digitalWrite(sensMotA2Pin,HIGH);
  digitalWrite(vitesseMotBPin,LOW);
  analogWrite(vitesseMotAPin, 40);
  delay(2000);
}
 
void gauche()
{
  digitalWrite(sensMotB1Pin,LOW); 
  digitalWrite(sensMotB2Pin,HIGH); 
  analogWrite(vitesseMotBPin,40);
  digitalWrite(vitesseMotAPin, LOW);
  delay(2000);
}
 
void loop()
{
  long distance;
  distance = ultrasonic.MeasureInCentimeters();
  Serial.print("La distance est de: ");
  Serial.print(distance);
  Serial.println(" cm");
  humidity = analogRead(sensorPin);
  Serial.print("Moisture = " );
  Serial.println(humidity);
 
  if(humidity <= 100)
  {
    avance();      
  }
  else
  {
    stop();
    delay(1000);
    droite();
  }
  if(distance >= 20)
  {
    avance();      
  }
  else
  {
    stop();
    delay(1000);
    droite();
    
  } 
}

 

le parcours ainsi que la vidéo du robot en pièces jointes