Park Sensörü: Bip Sesleri
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 11 / 24.
Bir park sensörü hem ses çıkarır hem de gösterir: duvar yaklaştıkça bip sesi daha sıklaşır, ta ki durmanız gerektiğini belirten kesintisiz bir ton çalana kadar. Buzzer 8 numaralı pine bağlıdır.
Bip sesleri arasındaki süre mesafeye bağlıdır: mesafe çarpı 10, milisaniye cinsinden. 70 cm'de her 700 ms'de bir, 20 cm'de her 200 ms'de bir bip sesi duyulur. Bir millis() zamanlayıcısı bir sonraki bip sesinin ne zaman çalınacağını belirler:
if (millis() - lastBeep >= cm * 10) {
lastBeep = millis();
tone(buzzerPin, 1000, 50); // 50 ms'lik bir bip sesi
}İki durum daha vardır. 10 cm'nin altında, süresiz olarak tone(buzzerPin, 1000) çalın: bir şey durdurana kadar ses çıkarır. 100 cm veya daha fazlasında sessiz kalın ve önceden kalmış kesintisiz bir tonun da durdurulması için noTone(buzzerPin) çağırın.
Görev
OrtaBip seslerini ekle:
- 100 cm veya daha fazla: ses yok (
noTone()çağır) - 10 ile 99 cm arası: her
cm * 10ms'de bir,millis()ile zamanlanan 1000 Hz'de 50 ms'lik bir bip - 10 cm'den az: kesintisiz 1000 Hz tonu
Işıkları ve yazdırmayı koru. Run'a bas, nesneyi yaklaştır, ardından Check'e bas.
Kendin dene
// Mesafe sensörü
const int trigPin = 9;
const int echoPin = 10;
// Uyarı ışıkları
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Bir ping gönder ve mesafeyi cm cinsinden döndür.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// Uzaksa yeşil, yakınsa sarı, çok yakınsa kırmızı.
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);
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Arduino playground