泊车传感器:蜂鸣声
本课属于 Coddy Arduino 学习旅程的“项目”单元。第 11 课,共 24 课。
停车传感器既会发声,也会显示信息:离墙越近,蜂鸣声越快,直到变成持续的单音,表示停车。蜂鸣器连接在引脚 8 上。
蜂鸣间隔由距离决定:距离乘以 10,单位是毫秒。距离为 70 cm 时,每隔 700 ms 蜂鸣一次;距离为 20 cm 时,每隔 200 ms 蜂鸣一次。millis() 计时器会判断下一次蜂鸣的时间:
if (millis() - lastBeep >= cm * 10) {
lastBeep = millis();
tone(buzzerPin, 1000, 50); // 持续 50 ms 的蜂鸣声
}还有两种情况。距离小于 10 cm 时,不指定时长,播放 tone(buzzerPin, 1000):它会持续发声,直到有东西将其停止。距离达到或超过 100 cm 时,保持静音,并调用 noTone(buzzerPin),这样也会停止之前遗留的持续音。
挑战
中等添加蜂鸣声:
- 100 cm 或更远:不发声(调用
noTone()) - 10 到 99 cm:每隔
cm * 10ms 发出一次 1000 Hz、持续 50 ms 的蜂鸣声,使用millis()计时 - 小于 10 cm:持续发出 1000 Hz 的音调
保留灯光和输出。按下运行,将物体移近,然后检查。
亲手试试
// 距离传感器
const int trigPin = 9;
const int echoPin = 10;
// 警示灯
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// 发送一次超声波脉冲,返回以 cm 为单位的距离。
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// 距离足够远时亮绿灯,接近时亮黄灯,太近时亮红灯。
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);
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
项目中的所有课
自己练习: Arduino 在线编辑器