Bonjour à tous
Je me présente, je suis un élève de terminale S en section SI dans laquelle j'ai un projet à rendre pour le bac.
J'ai des petites bases en programmation et algorithmie, c'est pourquoi il est probable que j'ai fais des erreurs dans mon code.
Mon projet est une brosse à tableau automatique.
J'utilise:
-Une Arduino Uno avec un motor shield arduino
-Capteur Ultrason HC-SR04
Le problème est qu'avec mon programme je n'arrive pas à utiliser mon capteur dans son plein potentiel, car seule la première valeur donne une indication sur la bonne distance du capteur, les autres valeurs sont des 0.
Voilà le programme :
// Setup
// Pins moteur: Chan B
const int M = 13; // Branchement du moteur
const int Brake_M = 8; // Frein
const int Speed_M = 11; // Vitesse
// Pins Pompe: Chan A
const int P = 12; // Branchement de la pompe ( sens )
const int Brake_P = 9; // Frein
const int Speed_P = 3; // Vitesse
// Pins capteur:
const int trig = 12;
const int echo = 11;
long lecture_echo;
// Les Constantes
const int dcd =30 ; // valeurs en cm
const int dcf =10 ;
const int vm = 255; //
const int vp = 100;
// Les Variables
long cm; //valeur récupérée par le capteur
int i = 1;
int f = 1;
int g = 1;
void setup()
{ // Moteurs
pinMode(M, OUTPUT);
pinMode(Brake_M, OUTPUT);
pinMode(P, OUTPUT);
pinMode(Brake_P, OUTPUT);
// Capteur
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
}
void loop()
{
distance_capteur();
while(f==true) // Boucle qui le fait revenir s'il n'est pas à la position de départ
{
if(cm<dcd)
{
reculer();
distance_capteur();
}
else
{
f=0;
}
}
digitalWrite(Brake_M, HIGH);
delay(10000);
imbiber();
digitalWrite(Brake_P, HIGH);
while(g==true) // Avance au bout du tableau ( jusquà dcf )
{
if(cm>dcf)
{
avancer();
distance_capteur();
}
else
{
g=0;
}
}
digitalWrite(Brake_M, HIGH);
delay(5000); // Pause de 5sec avant de revenir à la position initiale
f=1;
}
void reculer() // Fonction reculer
{
digitalWrite(M,LOW);
digitalWrite(Brake_M, LOW); //Disengage the Brake for Channel A
analogWrite(Speed_M,vm);
}
void avancer() // Fonction avancer
{
digitalWrite(M,HIGH);
digitalWrite(Brake_M, LOW); //Disengage the Brake for Channel A
analogWrite(Speed_M,vm);
}
void imbiber() // Fonction imbiber
{
while(i<20)
{
digitalWrite(M,HIGH);
digitalWrite(Brake_M, LOW); //Disengage the Brake for Channel A
analogWrite(Speed_M,vp);
i++;
}
}
void distance_capteur() // Fonction Relever la distance
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print("Distancem : ");
Serial.println(cm);
delay(20);
}
Voilà ce que j'ai dans la console(je fais des reset de la carte arduino pour avoir 1 seule valeur):
Distancem : 42
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 0
Distancem : 19
Alors qu'avec le programme seul du capteur, j’obtiens plusieurs valeurs par exemple:
Distancem : 40
Distancem : 39
Distancem : 39
Distancem : 37
Distancem : 35
Distancem : 34
Distancem : 30
Distancem : 28
Distancem : 28
Distancem : 26
Programme du capteur seul :
/* Utilisation du capteur Ultrason HC-SR04 */
// définition des broches utilisées
int trig = 12;
int echo = 11;
long lecture_echo;
long cm;
void setup()
{
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print("Distancem : ");
Serial.println(cm);
delay(20);
}
Du coup je vous demande votre aide, merci d'avance et bonne année !