דמו חי — סימולציה בדפדפן, בלי חומרה מחוברת.
SmartMount היא הדגמת קונספט חומרה לפריט תיק עבודות: קושחת ESP32 + דפים סטטיים בעברית (RTL). הרעיון — שני חיישני BH1750 מודדים יחס אור, ומנוע צעד מטה את המסך כשיש בוהק.
זה לא מוצר, לא תושבת שנבדקה על הקיר, ולא שירות. הקושחה ב־firmware/smart_mount.ino נכתבה ללוח אמיתי אך טרם רצה מול חומרה. אלגוריתם הבוהק לא כויל מול מדידה. אין ענן, אין חשבונות ואין סליקה.
SmartMount is a portfolio piece, not a product (market verdict: PARK). It is ESP32 firmware (firmware/smart_mount.ino) that reads two BH1750 light sensors and tilts a screen with a stepper when their ratio suggests glare, plus a static Hebrew site that runs the same control law in the browser.
- What is measured: the firmware compiles for ESP32 (arduino-cli, esp32 core 3.3.12 and 2.0.17, 27.9.2026). Before that fix it did not compile at all. 140+ host tests pin the control law, the HTTP contract and every cell of the state machine.
- What is not: it has never been flashed to a board. The glare threshold is not calibrated. There is no homing switch, so position zero is a guess. The 12-case bench plan (HIL) has not run.
- Start here (90 seconds): https://swissystem7.github.io/SmartMount/case/ (Hebrew).
- Contact: a public GitHub issue form, https://github.com/Swissystem7/SmartMount/issues/new?template=recruiter.yml. Please do not post a phone number or email there.
| עמוד | מה יש בו |
|---|---|
| בית | 30 שניות: מה זה, PARK, מה לא נבדק |
| מקרה הנדסי | תיק למגייסים: באגי בטיחות, FSM, פשרות. הקושחה לא רצה על לוח |
| מעבדה הנדסית | חדר וירטואלי + קונסולת תקלות (חיישן / WiFi / גבול פאנל) על חוק smart_mount.ino |
| מפרט בנייה | BOM כנה, מחשבון מומנט מול NEMA17, חיווט SVG |
| גאומטריית בוהק | חוק ההחזרה + למה יחס lux אינו בהירות לצופה |
| חוזה API | חמישה נתיבי HTTP + Serial 115200 — בדיוק מה שבקושחה |
| מכונת מצבים | מה שה־.ino עושה (auto + moveTo) מול FSM בטוח מוצע — 32 + 176 תאים מ־step() |
| תזמון והספק | פרופיל AccelStepper, גנט של loop(), הבזק שמש שמתפספס בין דגימות |
| תוכנית HIL | שלושה-עשר מקרים על השולחן. אפס רצו. HIL-10 אוסר טלוויזיה |
הוצאו מהניווט ב-28.9.2026 (נשארים באוויר לקישור ישיר; התוכן המרכזי עבר לעמוד אחר, כדי שהתיק ייקרא ב-90 שניות):
| עמוד | מה יש בו | איפה התוכן המרכזי |
|---|---|---|
| תקציב הספק | זרם idle / תנועה / WiFi וחישוב סוללה — דפי נתונים, לא מד-זרם | תזמון והספק |
| חלופות | צעד מול סרבו מול מפעיל קווי; יחס lux מול מוחלט; למה המסגרת | מקרה הנדסי |
| לוח בקרה | סליידרי lux על control.js — בלי Cloud ובלי חשבון |
מעבדה |
קוד: Swissystem7/SmartMount.
בדיקות יחידה רצות על המחשב בלי תלויות (node --test): חוק ההטיה, חוזה ה־HTTP, מומנט המנוע, הפער בין lux לבהירות, כל תא במכונת המצבים (2×15 + 11×15), תקציב תזמון/הספק/סוללה, תוכנית HIL שמוגדרת כ־never-run, וחלופות שנדחו. פירוט מה נבדק ומה אי אפשר לבדוק בלי לוח: docs/TESTING.md. תוכנית השולחן: docs/HIL.md.
בקושחה ובדשבורד תוקנו באגים שהיו מסוכנים או מטעים:
- קריאת חיישן כושלת (BH1750 מחזיר ערך שלילי) מחזיקה זווית — לא מטה למקסימום.
- מנוע:
stepper.moveToממיקום מוחלט;currentAngleלא מתעדכן לפני שהמנוע מגיע.targetAngleהוא הצעד המעוגל חלקיSTEPS_PER_DEGREE(כמוcurrentAngle), כך ש־/statusמראהangle == targetבדיוק כשהתנועה נגמרת. המראה ב־JS מעגלת כמו הלוח: מכפלת float32 ואזlroundf(חצי מתרחק מאפס), לאMath.roundעל double. - API:
set-angle/set-modeדוחים ארגומנט חסר/לא תקין; סוג פאנל נפרס ב־strtolעם צריכה מלאה, כמוdeg:type=foo→ 400, לא OLED.set-panelמצמיד את היעד לגבול החדש, לא את הזווית הנוכחית — תנועה באמצע ממשיכה.POST /stopמכבה אוטו ומאט עד עצירה (stepper.stop()), לא קופץ למיקום הנוכחי. ב־/statusקריאת BH1750 כושלת יוצאת כ־lux_top: null/lux_bot: null, לא כ־-1lux. נתיב לא מוכר או מתודה שגויה (GET /stop) מקבלים 404 בעטיפת ה־JSON של כל שגיאה,{"ok":false,"error":"not found"}, לאNot foundבטקסט. - WiFi: timeout — המצב האוטומטי המקומי ממשיך גם בלי רשת.
- דשבורד: סימולציית חוק בקרה בלבד (
control.js). אין Cloud, אין התחברות, אין לוח זמנים — אלה לא קיימים בקושחה. - גבולות צפייה: OLED 40° (הרחב ביותר), QLED 30°, LED/VA 20°.
הידור: הקושחה מתקמפלת ל־ESP32 (core 3.3.12 ו־2.0.17, נמדד 27.9.2026). לפני כן היא לא התקמפלה בגלל min(float, double). זה הידור בלבד, לא ריצה על לוח. פירוט: docs/TESTING.md.
מה לא עובד: אין ESP32 מחובר לדמו, אין מדידת בוהק אמיתית, ואין הרכבה מכנית שנשאה מסך. הומינג, מפעיל נעילה עצמית וגאומטריית הכתם — פתוחים (ראו מפרט). מכונת המצבים ה«בטוחה», מספרי התזמון/הספק/הסוללה ותוכנית ה-HIL הם מודלים ומסמכים על המחשב, לא קושחה שרצה ולא מדידת מעבדה.
פסק דין שוק: PARK — לא לבנות חומרה מסחרית סביב הסיפור הזה. הפירוט: RESEARCH.md.
פסק דין הכנסה: אין נתיב הכנסה. לא רישוי, לא ערכת מייקרים, לא ספונסרשיפ. זה פריט תיק עבודות. הפירוט עם מחירים וקישורים: MONETIZATION.md. הדף למגייסים: מקרה הנדסי.
- אף תושבת ממונעת מסחרית לא עושה הטיה אוטומטית לפי חיישן אור. Vogel's MotionMount TVM 7675 מסתובב בהדלקה ובמדריך כתוב במפורש שאין הטיה. הקרוב ביותר היה Sanus LMT15 (2009) והוא הופסק.
- השוק פתר בוהק בציפוי הפאנל, לא בזרוע. Samsung Glare Free OLED ודירוגי RTINGS לחדר בהיר.
- מה היה פותח את זה מחדש: ראיון עם 10 בעלי MantelMount או MotionMount — «האם היית משלם עוד $150–$300 על הטיה אוטומטית לפי חיישן אור?» אם פחות משניים אומרים כן בלי היסוס — לגנוז סופית.
מקור האמת: config/control-params.json. אחרי עריכה:
node scripts/sync-control-params.js
הסקריפט ממלא בלוק מסומן ב־firmware/smart_mount.ino ומייצר את src/lib/control-params.js. הדשבורד והמעבדה טוענים את אותו קובץ JS (בלי bundler). הבדיקות נכשלות אם ה־JSON והקוד שנוצר מתפצלים.
- Sentry: מוגדר דרך
<meta name="sentry-dsn" content="__SENTRY_DSN__">ב־index.htmlומודולsrc/lib/sentryLoader.js. ללא DSN תקף (סודSENTRY_DSN), Sentry אינו מופעל ואינו שולח דבר. - Codecov: צעד העלאת כיסוי בדיקות ב־CI (
.github/workflows/validate.yml) ופקודתnpm run coverage(tools/codecov.js). בהיעדרCODECOV_TOKEN, ההעלאה מדולגת בשקט והבדיקות מצליחות.
- הדמו מציג נתוני סימולציה. הבאנר בדשבורד אומר את זה במפורש.
- BOM של ₪35–50 שהופיע בהאקתון הוא ESP32 + חיישן + מנוע בסיסי — בלי פלדה, בלמים, UL/TÜV או אחריות לנפילת מסך. הטווח הכנה במפרט: אלקטרוניקה ≈₪110–220; תושבת שנשאת מסך הרבה יותר.
- אין מנוי, אין אחריות יצרן, אין סליקה. מסמך ההאקתון שדיבר על Cloud ₪9.90 הועבר ל־docs/archive/.