מודינג של מחשבים הוא תחום שמעולם לא משך אותי, אבל איזה מייקר יכול לעמוד בפיתוי ולא לנסות להתממשק עם מאווררים שכוללים לדים Addressable? הנה מיפוי הפינים והדברים האחרים שצריך לדעת כדי לעשות זאת, כולל בונוס – איך יוצרים ספקטרום "טבעי" בעזרת RGB.
מה לי ול-Case fans
לא מזמן הגיע אליי סט iCUE משומש (בקר Commander Core XT וארבעה מאווררי SP140 RGB Pro) של חברת Corsair, שמייצרת כל מיני מוצרי גיימינג*. שיהיה ברור, אני ממש לא מבין בדברים האלה – לקח לי מלא זמן רק למצוא את הקודים הנכונים של החלקים באינטרנט ולהבין מי ומה. בתור אדם שמשתמש רק במחשב נייד מאז 2007, גם אין לי חומרת מחשב לחבר אליה את העסק ולבדוק אותו בסביבתו ה"טבעית". אבל דבר אחד קלטתי מייד: מאווררים עם לדים זה מגניב ואני צריך לגלות איך לתפעל אותם בעצמי.
*זו לא פרסומת – אין לי מושג אם הגאדג'טים האלה נחשבים טובים בכלל. כתבתי את הפרטים רק כדי שמי שמחפש מידע באינטרנט ימצא… ואולי מישהו ירצה לקנות אותם ממני אחרי שאגמור לשחק איתם 🙂
מכל מאוורר יוצאים שני כבלים נפרדים אל הבקר: אחד לשליטה בסיבוב הפיזי, והשני לשליטה בתאורת הלדים. לכל סוג יש קונקטור אחר, אך בשניהם יש ארבעה פינים בריווח 2.54 מ"מ, מה שמקל מאוד על ניסויים בעזרת הציוד והחוטים שיש לכל מייקר במגירה. על המאווררים כתוב שהם 12VDC ו-0.3A; לגבי הלדים אין שום מידע. יצאתי למסע של חיפושים בגוגל ושל ניסויים בבית, והנה התוצאות:
שליטה בלדים
בכל מאוורר מהדגם הזה טמונים שמונה לדים מסוג WS2812B – כן, הסוג שעובד ב-5V ושיש לארדואינו אחלה ספריות בשבילו. ה-pinout של הקונקטור, מצד המאוורר, הוא זה:
את הפין שסימנתי Data out לא חייבים לחבר למשהו – אם הבנתי נכון, זהו בעצם הפין Dout של הלד האחרון, והוא מיועד לשרשור אופציונלי של אורות מאווררים נוספים. אפשר לחבר את שלושת הפינים האחרים לארדואינו רגיל (זהירות – 5V צריך להגיע ממקום שיכול לספק די זרם) ולהריץ קוד רגיל של Neopixel:
שליטה בסיבוב
כבל הסיבוב מעביר 12V ואדמה קבועים, ומקבל סיגנל PWM נפרד ב-5V לשליטה במהירות. הנה ה-Pinout שלו:
היציאה שסימנתי כ-Speed מחוברת לחיישן מגנטי בתוך המאוורר, והיא מוציאה סיגנל שמאפשר למדוד את מהירות הסיבוב בפועל. שימו לב שזו יציאת Open drain: צריך נגד pull up חיצוני כדי לקבל אות ברור. אגב, גם עם נגד כזה האות די רועש וקופץ לערכים מסוכנים – לא הייתי מחבר אותו לפין קלט של ארדואינו בלי הגנות מתאימות. הנה מה שהסקופ ראה בעת סיבוב מהיר (קרוב למהירות המקסימלית), עם pull up של 10K ל-5V:
אני לא יודע מה תדר ה-PWM המדויק שהמאוורר מצפה לו, אך נראה שהוא הסתדר מצוין עם תדר 980Hz לערך – ברירת המחדל בפין 6 של ארדואינו Nano Every שאיתו ביצעתי את הבדיקה. תדר הגל שהתקבל מהמאוורר, בתמונה למעלה, הוא כ-39Hz. לפי המפרטים ברשת, מהירות הסיבוב המרבית של מאווררים כאלה היא כ-1200RPM, מה שאומר שהחיישן הפנימי מפיק שני פולסים לכל סיבוב.
מספקטרום ל-RGB
כל אחד יכול להגריל ערכי אדום, ירוק וכחול באקראי ולקבל המוני צבעים שונים על הלדים. אבל איך מדמים משהו טבעי וסטנדרטי יותר, לצורך העניין את ספקטרום האור הנראה לעין? ה"תרומה" של כל אחד מהצבעים אדום, ירוק וכחול על פני הספקטרום היא לא לינארית ולא מובנת מאליה. למשל, חישבו על אורכי הגל הארוכים (אדום) והקצרים (סגול): בשני המקרים יש לנו רכיב אדום בצבע, ואילו בתדר ביניים ירוק אין שום רכיב אדום.
למזלנו, אנשים טובים וחרוצים פירקו את הספקטרום לגרפים נפרדים של רכיבי אדום, ירוק וכחול, ואף התאימו אותם למאפייני RGB של מסכים. הסתכלו, למשל, על התשובה המובילה (נכון לכתיבת שורות אלה) לשאלה ב-Stackoverflow, שכוללת הסברים, גרפים ואפילו קוד לחישוב הערכים.
את הקוד הזה עם כל המספרים העשרוניים ממש לא מומלץ להריץ בזמן אמת על ארדואינו, אבל אנחנו יכולים להריץ אותו במחשב ולשמור את התוצאות (מעוגלות לערכים שלמים בסקאלה נוחה) בטבלת חיפוש, שנעביר אחר כך לקוד שלנו בארדואינו. אם נצמצם את הסקאלה של אורכי הגל ל-256 ערכים, נקבל טבלה יפה עם 256 שורות, כשבכל אחת מהן 3 בייטים בלבד (אחד לכל צבע כמובן), סה"כ 768 בייטים – לא נורא בכלל.
על בסיס קוד הדגמה פשוט של Neopixel לארדואינו כתבתי לולאה שעוברת על טבלת הספקטרום שיצרתי וצובעת את כל הפיקסלים במאוורר כל פעם בצבע אחר, לפי הסדר. בעין קצת קשה ליהנות ממלוא האפקט, אז צילמתי אותו בחושך בחשיפה ארוכה תוך כדי הסטת הטלפון מצד לצד – זו התמונה שמופיעה בראש הפוסט.
מה אתם הייתם עושים עם מאווררים כאלה?