Dans le cadre de mes études je dois faire une plateforme motorisée capable de détecter des obstacles et les éviter (capteur à ultrasons qui détecte les obstacles à une certaine distance). Ainsi lorsque qu'elle rencontre un obstacle à 10 cm, le moteur (qui tourne à 100 rpm) est censé s'arrêter jusqu'à 5 cm de l'obstacle. J'ai pu réussir à coder le principal mais je n'arrive pas à écrire le fait que la vitesse du moteur diminue linéairement jusqu'à 5 cm de l'obstacle. Est ce que vous pourriez me guider et m'aider s'il vous plait ?
const int motor_enablePin = 11; // pont en H
const int motor_in1 = 13; // avance
const int motor_in2 = 12; // recule
const int speed = 255; // vitesse du moteur
const byte triggerPin = 4;
const byte echoPin = 5;
const unsigned long measure_timeout = 25000UL; // temps nécessaire avant de considérer qu'il n'y a pas d'obstacle
const float sound_speed = 340.0 / 1000; // vitesse du son dans l'air
void setup()
{
pinMode(motor_enablePin, OUTPUT); // initialisation du moteur
pinMode(motor_in1, OUTPUT);
pinMode(motor_in2, OUTPUT);
pinMode(triggerPin, OUTPUT); // initialisation du capteur
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
Serial.begin(115200);
}
void loop()
{
digitalWrite(motor_enablePin, HIGH);
analogWrite(motor_in1, speed);
analogWrite(motor_in2, 0);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
long measure = pulseIn(echoPin, HIGH, measure_timeout);
float distance_mm = measure / 2.0 * sound_speed;
/*
if(distance_mm <= 1000 && distance_mm > 500)
{
for(int slowdown=100; slowdown>=0; slowdown-=25)
{
int value = map(slowdown, 100, 0, 255, 0);
analogWrite(motor_enablePin, value);
Serial.print(F("Distance: "));
Serial.print(distance_mm /10.0, 2);
Serial.print(F(" cm,"));
Serial.print(" Vitesse: +");
Serial.print(value);
Serial.println(" rpm");
}
}
*/
/*
if(distance_mm <= 1000)
{
do
{
slowdown(100);
Serial.print(F("Distance: "));
Serial.print(distance_mm /10.0, 2);
Serial.print(F(" cm,"));
Serial.print(" Vitesse: +");
Serial.print(speed*100/255);
Serial.println(" rpm");
}
while (distance_mm > 500);
}
*/
Serial.print(F("Distance: "));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F(" cm,"));
if (distance_mm <= 100)
{
analogWrite(motor_in1, 0);
analogWrite(motor_in2, speed);
Serial.print(" Vitesse: -");
}
else
Serial.print(" Vitesse: +");
Serial.print(speed * 100 / 255);
Serial.println(" rpm");
delay(1000);
}
/*
void slowdown(int percentage)
{
int power = map(percentage, 0, 100, 0, 255);
analogWrite(motor_enablePin, power);
}
*/
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.