Menu
CoddyTech

חיישן חניה: צפצופים

חלק מהיחידה פרויקטים במסלול ה-Arduino של Coddy. שיעור 11 מתוך 24.

חיישן חניה גם מדבר וגם מציג: ככל שהקיר קרוב יותר, כך הוא מצפצף מהר יותר, עד שהוא משמיע צליל רציף אחד שמשמעותו לעצור. הזמזם מחובר לפין 8.

המרווח בין הצפצופים נקבע לפי המרחק: המרחק כפול 10, במילישניות. במרחק 70 ס"מ צפצוף כל 700 ms, ובמרחק 20 ס"מ צפצוף כל 200 ms. טיימר millis() קובע מתי הצפצוף הבא אמור להישמע:

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // צפצוף של 50 ms
}

יש עוד שני מקרים. במרחק קטן מ־10 ס"מ, השמע tone(buzzerPin, 1000) ללא משך: הצליל יימשך עד שמשהו יעצור אותו. במרחק של 100 ס"מ או יותר, שמור על שקט וקרא ל־noTone(buzzerPin) כדי לעצור גם צליל רציף שנותר מפעולה קודמת.

challenge icon

אתגר

בינוני

הוסיפו את הצפצופים:

  • 100 ס״מ או יותר: ללא צליל (קראו ל־noTone())
  • 10 עד 99 ס״מ: צפצוף של 50 ms בתדירות 1000 Hz בכל cm * 10 ms, בתזמון באמצעות millis()
  • פחות מ־10 ס״מ: צליל רציף בתדירות 1000 Hz

השאירו את האורות ואת ההדפסה. לחצו על Run, קרבו את העצם, ואז לחצו על Check.

נסו בעצמכם

// חיישן המרחק
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);
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Arduino אונליין