Menu
CoddyTech

Capteur de stationnement : Bips

Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 11 sur 24.

Un capteur de stationnement parle autant qu’il indique la distance : plus le mur est proche, plus les bips sont rapides, jusqu’à produire une tonalité continue qui signifie qu’il faut s’arrêter. Le buzzer est connecté à la broche 8.

L’intervalle entre les bips dépend de la distance : la distance multipliée par 10, en millisecondes. À 70 cm, un bip toutes les 700 ms ; à 20 cm, toutes les 200 ms. Un minuteur millis() détermine quand le prochain bip doit retentir :

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // un bip de 50 ms
}

Il y a deux autres cas. À moins de 10 cm, lance tone(buzzerPin, 1000) sans durée : le son continue jusqu’à ce que quelque chose l’arrête. À 100 cm ou plus, reste silencieux et appelle noTone(buzzerPin) afin d’arrêter également toute tonalité continue qui aurait commencé auparavant.

challenge icon

Défi

Moyen

Ajoute les bips :

  • 100 cm ou plus : aucun son (appelle noTone())
  • De 10 à 99 cm : un bip de 50 ms à 1000 Hz toutes les cm * 10 ms, chronométré avec millis()
  • Moins de 10 cm : une tonalité continue de 1000 Hz

Conserve les lumières et l’affichage. Appuie sur Run, rapproche l’objet, puis appuie sur Check.

Essayez vous-même

// Le capteur de distance
const int trigPin = 9;
const int echoPin = 10;
// Les voyants d’alerte
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Envoie une impulsion et renvoie la distance en cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Vert quand la voie est libre, jaune quand un obstacle est proche, rouge quand il est trop proche.
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  delay(100);
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Projets

Entraînez-vous par vous-même : Playground Arduino