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

בקרת כניסה, עזרה בחניה, ניטור ביטחוני.
הידע שצריך
איך זה עובד

מודדים → מציגים → משווים לסף → מתריעים
מתחת ל-15 ס"מ: נורית, זמזם, ו-WARNING על המסך.
למה זה שיעור מסכם טוב
תסתכלו מה נדרש: אולטרסוני (13), LCD (17), זמזם (8), נורית (1), תנאים (19). חמישה שיעורים בפרויקט אחד — וזו מערכת שנמכרת בחנויות.
הניסוי
המטרה: מרחק על המסך, ומתחת ל-15 ס"מ — אזעקה.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| מסך LCD1602 | 1 |
| חיישן אולטרסוני | 1 |
| זמזם אקטיבי | 1 |
| נורית LED | 1 |
| נגד 220Ω | 1 |
התרשים החשמלי

החיבור

הקוד
from machine import Pin, time_pulse_us
import time
from libs.Acebott import i2c
from libs.ACB_LCD1602 import ACB_LCD1602
lcd = ACB_LCD1602(i2c)
lcd.set_backlight(True)
trig = Pin(5, Pin.OUT)
echo = Pin(16, Pin.IN)
buzzer = Pin(17, Pin.OUT)
led = Pin(18, Pin.OUT)
def read_distance():
trig.value(0); time.sleep_us(2)
trig.value(1); time.sleep_us(10)
trig.value(0)
duration = time_pulse_us(echo, 1, 26000)
if duration < 0:
return -1 # אין הד
return (duration * 0.034) / 2
while True:
dist = read_distance()
if dist > 0:
lcd.display_text_at_position(0, 0, "Dist:{:.1f}cm ".format(dist))
if dist < 15:
led.value(1); buzzer.value(1)
lcd.display_text_at_position(0, 1, "** WARNING ** ")
else:
led.value(0); buzzer.value(0)
lcd.display_text_at_position(0, 1, " ")
time.sleep(0.2)
שתי נקודות חשובות:
1. if duration < 0: return -1 — time_pulse_us מחזירה ערך שלילי כשפג פסק הזמן. מחזירים -1 כערך שגיאה מוסכם, ו-if dist > 0 בלולאה מסננת אותו.
בלי הבדיקה הזו, המערכת הייתה מצפצפת דווקא כשאין אף אחד.
2. "{:.1f}".format(dist) — מעצב את המספר לספרה אחת אחרי הנקודה. בלעדיו תראו 14.28999999 על המסך.
מה אמור לקרות

נסו בעצמכם
- הפכו את הזמזם למצפצף מהר יותר ככל שקרובים — חיישן חניה אמיתי.
- הוסיפו שלוש רמות עם נורית RGB.
- הוסיפו מונה של הפעלות האזעקה.
- הסירו את
if dist > 0וכוונו לחלל ריק. מה קורה? - שלבו עם שיעור 11: סרוו שמסובב את החיישן — סריקת ראדאר.


