מהנדס באתר בנייה איבד מד טווח לייזר יקר בין טונות של מוטות ברזל וציוד. משדר Bluetooth רגיל הראה רדיוס של 15 מטרים אך לא כיוון מדויק. הוא נאלץ לחפור בכל המחסן. לאחר יישום משדר UWB עם דיוק של 10 סנטימטרים, אובדן כלים חדל להיות בעיה. ביצענו פרויקט כזה עבור לקוח בתחום הבטיחות התעשייתית — במלואו, כולל הכל: מקושחת המשדר ועד אפליקציה ניידת ל-iOS ואנדרואיד. הניסיון מראה שאיתור UWB מקצר את זמן איתור הפריטים ב-90%.
UWB (Ultra-Wideband) משתמש בפולסים קצרים למדידת מרחק באמצעות Time of Flight (ToF) בדיוק של ננו-שניות. טלפון עם שבב U1 והמשדר מחליפים אותות, ומחשבים לא רק מרחק אלא גם זווית הגעה. זה נותן חץ המצביע על האובייקט. הבסיס הוא תקן IEEE 802.15.4z, המתואר בUltra-wideband.
כיצד פועל איתור אובייקטים מדויק ב-UWB?
סשן UWB במכשיר נייד מתחיל דרך Bluetooth Low Energy: המשדר משדר את המזהה והמפתחות שלו. לאחר מכן נוצר חיבור UWB, ומתחיל חילופי נתונים בתדירות של עד 60 הרץ. המרחק מחושב מזמן התפשטות האות; הכיוון נגזר מהפרשי פאזה בין אנטנות.
למה ליישם איתור UWB עכשיו?
משדרי Bluetooth מספקים רק מרחק משוער, בעוד UWB נותן דיוק של עד 10 ס"מ וכיוון. עבור אתרי תעשייה, בתי חולים, מחסנים, זה אומר חיסכון של עד 40% בתקציב על איתור ציוד שאבד. הלקוחות שלנו מדווחים שזמן המלאי מתקצר פי שלושה.
שני תרחישים: רשת Find My לעומת UWB עצמאי
| מאפיין | רשת Find My | UWB עצמאי |
|---|---|---|
| דרישות משדר | MFi, שבב Bluetooth עם Apple H2 | שבב UWB (DW3000, NXP) |
| מעקב גלובלי | כן, דרך רשת iPhone | לא, רק בקרבת מקום |
| רישיון MFi | נדרש | לא נדרש |
| דיוק איתור | ≤10 ס"מ (עם UWB) | ≤10 ס"מ |
| זמן עד לשוק | ארוך יותר (אישור Apple) | מהיר יותר |
גישת UWB עצמאי מהירה פי 2-3 לפריסה מאשר אינטגרציה לרשת Find My, בשל היעדר הסמכת MFi. עבור מגזרי B2B (מחסנים, בנייה, בתי חולים), זה הפתרון המועדף.
iOS: יישום באמצעות NearbyInteraction
ב-iOS, המסגרת המרכזית היא NearbyInteraction. היא מספקת אובייקטים NINearbyObject עם distance ו-direction. הנה דוגמה לסשן טיפוסי:
import NearbyInteraction
import CoreBluetooth
class ItemFinderSession: NSObject {
private var niSession: NISession?
private var currentDistance: Float = 0
private var currentDirection: SIMD3<Float>?
func startFinding(accessoryToken: Data, bluetoothId: UUID) {
niSession = NISession()
niSession?.delegate = self
niSession?.delegateQueue = .main
let config = NINearbyAccessoryConfiguration(
accessoryData: accessoryToken,
bluetoothPeerIdentifier: bluetoothId
)
niSession?.run(config)
}
}
extension ItemFinderSession: NISessionDelegate {
func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
guard let obj = nearbyObjects.first else { return }
if let distance = obj.distance {
currentDistance = distance
// Обновляем UI: расстояние до предмета
updateDistanceDisplay(meters: distance)
}
if let direction = obj.direction {
currentDirection = direction
// direction — единичный вектор в ARKit coordinate space
// direction.x: влево-вправо, direction.y: вверх-вниз, direction.z: вперёд-назад
updateDirectionalArrow(direction: direction)
}
}
func session(_ session: NISession, didUpdateAlgorithmConvergence convergence: NIAlgorithmConvergence, for object: NINearbyObject?) {
// convergence.status: .converged / .notConverged([reasons])
// При notConverged — просить пользователя повести телефоном
handleConvergence(convergence.status)
}
}היבט קריטי הוא import NearbyInteraction import CoreBluetooth class ItemFinderSession: NSObject { private var niSession: NISession? private var currentDistance: Float = 0 private var currentDirection: SIMD3<Float>? func startFinding(accessoryToken: Data, bluetoothId: UUID) { niSession = NISession() niSession?.delegate = self niSession?.delegateQueue = .main let config = NINearbyAccessoryConfiguration( accessoryData: accessoryToken, bluetoothPeerIdentifier: bluetoothId ) niSession?.run(config) } } extension ItemFinderSession: NISessionDelegate { func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) { guard let obj = nearbyObjects.first else { return } if let distance = obj.distance { currentDistance = distance // Обновляем UI: расстояние до предмета updateDistanceDisplay(meters: distance) } if let direction = obj.direction { currentDirection = direction // direction — единичный вектор в ARKit coordinate space // direction.x: влево-вправо, direction.y: вверх-вниз, direction.z: вперёд-назад updateDirectionalArrow(direction: direction) } } func session(_ session: NISession, didUpdateAlgorithmConvergence convergence: NIAlgorithmConvergence, for object: NINearbyObject?) { // convergence.status: .converged / .notConverged([reasons]) // При notConverged — просить пользователя повести телефоном handleConvergence(convergence.status) } } . אם המשתמש עומד במקום, convergence.status לא מסופק. בפרויקט שלנו, הוספנו אנימציה והנחיה קולית "הזז את הטלפון" — זה קיצר את זמן הזיהוי הראשוני ל-2 שניות.
מה מגדיר UX: התכנסות אלגוריתם ומשוב?
אלגוריתם UWB דורש תנועה כדי לקבוע זווית. יישמנו אינדיקציה משולבת: מרחק מוצג בגדול, כיוון כחץ. במרחקים מתחת ל-0.3 מ', מופעלת רטט direction. משוב הפטי הוא תקן השאול מ-AirTag.
משדר מבוסס DW3000 לפתרון עצמאי
למשדר עצמאי ללא MFi, אנו משתמשים ב-Qorvo DWM3001C — משדר UWB מוכן עם BLE. הקושחה מיישמת תפקיד Initiator של UWB, מחליפה טוקן דרך BLE, ומגיבה לבקשות TWR מהטלפון. באנדרואיד, חוויה דומה מסופקת על ידי ספריית UIImpactFeedbackGenerator(.heavy):
val rangingParams = UwbRangingParameters(
uwbConfigType = UwbRangingParameters.CONFIG_UNICAST_DS_TWR,
complexChannel = controllerScope.uwbComplexChannel,
peerDevices = listOf(UwbDevice.createForAddress(trackerUwbAddress)),
updateRateType = UwbRangingParameters.RANGING_UPDATE_RATE_FREQUENT,
sessionKeyInfo = sharedSessionKey
) מפרט טכני של המשדר
- מודול: DWM3001C (Qorvo)
- תדר: 6.5 GHz (ערוץ 5)
- טווח: עד 10 מ' (זווית עד 20 מ')
- כוח: CR2032 (חיי סוללה עד 12 חודשים)
- ממשק: BLE 5.0 + UWB
- תפקידים: Initiator/Responder
מה כולל פתרון UWB במלואו?
הצוות שלנו, עם ניסיון של 5+ שנים ויותר מ-50 פרויקטי BLE/UWB, מציע:
- ניתוח דרישות ובחירת פלטפורמת חומרה (DW3000, NXP, או מותאם אישית).
- תכנון ופיתוח קושחת משדר UWB.
- יצירת אפליקציה ניידת ל-iOS (Swift, NearbyInteraction) ולאנדרואיד (Kotlin, UWB API).
- אינטגרציה עם מערכות חשבונאות (1C, SAP, API מותאם אישית).
- עיצוב ארכיטקטורת אבטחה (הצפנת מפתחות סשן).
- בדיקות דיוק ויציבות בתנאים אמיתיים.
- תיעוד והדרכת צוות.
אנו מבטיחים דיוק של עד 10 ס"מ גם בסביבות עם הפרעות גבוהות. בדוק זאת בעצמך — הזמן פרויקט פיילוט.
| שלב | משך |
|---|---|
| ניתוח ובחירת פלטפורמה | 1-2 שבועות |
| פיתוח קושחת משדר | 2-6 שבועות |
| אפליקציה ניידת (פלטפורמה אחת) | 1-3 שבועות |
| אינטגרציה ובדיקות | 1-2 שבועות |
| תיעוד והדרכה | שבוע אחד |
קבל ייעוץ — נבחן את המשימה שלך ונציע חומרה אופטימלית.
לוחות זמנים
אפליקציה ניידת עם פונקציונליות UWB (עם משדר מוכן) — בין 1 ל-3 שבועות. מחזור מלא: קושחת משדר + אפליקציה + אינטגרציה — בין 1 ל-3 חודשים. העלות מחושבת באופן אישי לפי מספר המכשירים הנתמכים והיקף ה-API. צור קשר כדי לדון בפרטים.







