דלגו לתוכן המרכזי
KitLab
שיעור קודם
מנורת אווירה — מיפוי טווחים ופריקת ערכים· 25 / 41
מנורת אווירה — מיפוי טווחים ופריקת ערכים
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

מנורת אווירה — מיפוי טווחים ופריקת ערכים

מה בשיעור?

  • לחבר קלט אנלוגי לפלט צבעוני
  • מיפוי טווחים בחילוק שלמים
  • לכתוב map בעצמכם בשלוש שורות
  • רשימת שלשות במקום שבעה if
  • פריקת ערכים: r, g, b = color

מה נלמד כאן

  • לשלב קלט אנלוגי עם פלט צבעוני
  • מיפוי טווחים בפייתון
  • לבנות מנורת אווירה

מנורת אווירה

מנורת אווירה

תאורת חדר שינה, נורות ברמקולים, רצועות מאחורי מסך.


הידע שצריך

הרעיון

שיעור 3 נתן את נורית ה-RGB. שיעור 7 את הפוטנציומטר. עכשיו נחבר: הידית קובעת את הצבע.

עקרון הפעולה

הבעיה: הפוטנציומטר מחזיר 0-4095, ואנחנו רוצים 7 צבעים.

מיפוי טווחים

ב-Arduino הייתה פקודה מוכנה בשם map(). בפייתון אין — אבל זו רק שורת חשבון:

level = value * 7 // 4096

// הוא חילוק שלמים — הוא זורק את השארית. ערך 0 → רמה 0, ערך 4095 → רמה 6.

ואם תרצו פונקציה כללית, זה שלוש שורות:

def map_range(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

וזה בדיוק מה ש-map() של Arduino עושה מאחורי הקלעים. לפעמים שווה לכתוב בעצמכם כדי להבין.

שבעת הצבעים

רמה הצבע R G B
0 כבוי 0 0 0
1 אדום 1023 0 0
2 ירוק 0 1023 0
3 כחול 0 0 1023
4 סגול 512 0 512
5 צהוב 1023 1023 0
6 לבן 1023 1023 1023

הניסוי

המטרה: סיבוב הידית מחליף בין שבעה צבעים.

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 1
פוטנציומטר 1
נורית RGB 1
נגד 220Ω 3

התרשים החשמלי

התרשים החשמלי

החיבור

חיבור הרכיבים


הקוד

from machine import Pin, PWM, ADC
import time

pot = ADC(Pin(32))
pot.atten(ADC.ATTN_11DB)

red   = PWM(Pin(16))
green = PWM(Pin(17))
blue  = PWM(Pin(18))

# רשימת הצבעים — כל איבר הוא שלשה
colors = [
    (0, 0, 0),                 # כבוי
    (1023, 0, 0),              # אדום
    (0, 1023, 0),              # ירוק
    (0, 0, 1023),              # כחול
    (512, 0, 512),             # סגול
    (1023, 1023, 0),           # צהוב
    (1023, 1023, 1023),        # לבן
]

while True:
    value = pot.read()
    level = value * 7 // 4096          # ממפים ל-0..6
    r, g, b = colors[level]            # פריקה לשלושה משתנים

    red.duty(r)
    green.duty(g)
    blue.duty(b)

    time.sleep(0.1)

שימו לב לשתי תכונות של פייתון שחוסכות המון קוד:

1. רשימת שלשות — במקום שבע שרשראות if, טבלה אחת.

2. r, g, b = colors[level]פריקת ערכים (unpacking). שורה אחת שמפרקת שלשה לשלושה משתנים.

ב-Arduino השיעור הזה דרש שבעה בלוקי elif ו-21 השמות. כאן — טבלה ושלוש שורות. זה ההבדל.

מה אמור לקרות

הצבע משתנה


נסו בעצמכם

  • הוסיפו צבע שמיני. מה צריך לשנות בנוסחת המיפוי?
  • כתבו את הפונקציה map_range והשתמשו בה.
  • בנו מעבר רציף במקום שבע רמות.
  • שלבו עם שיעור 6: הפוטו-רזיסטור קובע בהירות, הפוטנציומטר צבע.
  • הסירו את sleep(0.1). מה קורה?

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

נשלח למייל את קובצי הקוד, החומרים ועדכונים על שיעורים חדשים. בלי ספאם.