Prérequis :
Matériel :
- 1 x Carte Arduino Nano
- 1 x L298N
- 2 x TT Moteur 130
- 1 x HC-SR04 capteur à Ultrason
- 1 x Alimentation 9v
- Fils de connexion
- 1 x Breadboard
Vidéo de démonstration :
Schéma de câblage :
Code :
#define borneEN1 6 // On branche "EN1" du L298N à la pin D6 de l'arduino
#define borneIN1 7 // On branche "IN1" du L298N à la pin D7 de l'arduino
#define borneIN2 8 // On branche "IN2" du L298N à la pin D8 de l'arduino
#define borneIN3 9 // On branche "IN3" du L298N à la pin D9 de l'arduino
#define borneIN4 10 // On branche "IN4" du L298N à la pin D10 de l'arduino
#define borneEN2 11 // On branche "EN2" du L298N à la pin D10 de l'arduino
const int trigPin = 2;
const int echoPin = 3;
float duration;
float distance;
unsigned long currentTime = 0; //Servira à stocker la valeur du temps écoulé millis();
unsigned long previousTime = 0; //Servira à stocker la valeur du temps actuelle
unsigned long tpsAcceleration = 5; //Defini le temps acceleration
unsigned long tpsDeceleration = 1; //Defini le temps deceleration
int vitesse = 0; //Variable pour stocker la vitesse (Entre 0 et 255 max).
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(borneEN1, OUTPUT);
pinMode(borneIN1, OUTPUT);
pinMode(borneIN2, OUTPUT);
pinMode(borneIN3, OUTPUT);
pinMode(borneIN4, OUTPUT);
pinMode(borneEN2, OUTPUT);
}
void loop() {
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
currentTime = millis();
if (distance < 10) {
Deceleration();
MarcheAV();
if (vitesse == 0) {
delay(500);
Rotation();
delay(500);
Acceleration();
MarcheAV();
}
}
else {
Acceleration();
MarcheAV();
}
}
void Acceleration() {
//On augmente la vitesse de +1 si la valeur du temps écoulé - valeur du temps actuelle
//et plus grande que notre temps d'acceleration
if ((currentTime - previousTime) > tpsAcceleration) {
//On met à jour notre valeur du temps actuelle
previousTime = currentTime;
vitesse++;
vitesse = min(vitesse, 255); //Le code garantit qu'il ne dépasse jamais 255.
}
analogWrite(borneEN1, vitesse);
analogWrite(borneEN2, vitesse);
}
void Deceleration() {
//On diminue la vitesse de -1 si la valeur du temps écoulé - valeur du temps actuelle
//et plus grande que notre temps deceleration
if ((currentTime - previousTime) > tpsDeceleration) {
//On met à jour notre valeur du temps actuelle
previousTime = currentTime;
vitesse--;
vitesse = max(vitesse, 0); //Le code garantit qu'il ne sera jamais en dessous de 0.
}
analogWrite(borneEN1, vitesse);
analogWrite(borneEN2, vitesse);
}
void MarcheAV() {
// Configuration du L298N en "marche avant"
digitalWrite(borneIN1, HIGH);
digitalWrite(borneIN2, LOW);
digitalWrite(borneIN3, HIGH);
digitalWrite(borneIN4, LOW);
}
void Arret() {
// Configuration du L298N en "Arret"
digitalWrite(borneIN1, LOW);
digitalWrite(borneIN2, LOW);
digitalWrite(borneIN3, LOW);
digitalWrite(borneIN4, LOW);
}
void Rotation() {
// Configuration du L298N en "marche arrière"
digitalWrite(borneIN1, LOW);
digitalWrite(borneIN2, HIGH);
digitalWrite(borneIN3, LOW);
digitalWrite(borneIN4, LOW);
analogWrite(borneEN1, 200);
analogWrite(borneEN2, 200);
}
Nombre de vues: 1 050