הפרויקט שלכם זקוק לתקשורת RF אמינה לטווח קצר, בעלות אנרגטית סבירה? המודול HC-11, שמבוסס על השבב CC1101 של TI, עשוי להוות פתרון נוח וזול יחסית. הנה כמה פרטים והוראות שימוש בסיסיות.
המודול הזה, שעובד בתדר 433MHz החוקי, כולל שני ג'וקים: CC1101, שהוא למעשה משדר/מקלט RF משוכלל, ומיקרו-בקר STM8S003F3P6 (אותו הצגתי בעבר במקרה) מתוכנת מראש, שמספק ממשק נוח למשתמש. בקצה המודול, שגודלו כ-12×28 מ"מ, יש חמישה חורים בריווח 2.54 מ"מ הסטנדרטי. את הפינים עבורם תצטרכו להשיג ולהלחים לבד. החורים הם:
- VCC, שמקבל 3.3V עד 5V (צריכת זרם מקסימלית כ-35mA)
- GND, אדמה
- RXD להעברת מידע UART לתוך המודול
- TXD להעברת מידע UART מהמודול החוצה
- SET לקביעת מצב המודול (שידור/קליטה או ניהול). במסמך שבקישור למעלה, פין זה נקרא CON.
בדומה ל-Serial של ארדואינו, גם כאן אנחנו יכולים לקבוע – בין השאר – את קצב העברת המידע, כפי שנראה בהמשך.
מצב שידור/קליטה
כאשר פין SET מקבל מתח שווה ל-VCC, המודול מתנהג פחות או יותר כמו קו תקשורת ישיר: המידע שנכנס לפין RX של מודול אחד יוצא בפין TX של מודול אחר. כמובן, שני המודולים צריכים להיות מתואמים ביניהם בכל הפרמטרים, והמידע לשידור צריך להגיע בקצב הנכון מה"מוח" של המערכת שלנו אל המודול המשדר. כמו כן, יכול להיות עיכוב של כמה מאיות או אפילו עשיריות שניה בהעברת המידע, כתלות בפרמטרים שהוגדרו.
אם פין SET חובר קודם ל-GND ("מצב ניהול" שמתואר למטה) והוחזר כעת ל-VCC, יש לחכות כ-50 אלפיות השנייה לפחות עד שהמודול יהיה מוכן לפעולה.
מצב ניהול
כדי להיכנס למצב ניהול יש "להוריד" את פין SET למתח שווה ל-GND, ולחכות 30 אלפיות השנייה או יותר עד שהמודול יהיה מוכן. גם במצב הניהול מעבירים מידע דרך הפינים RXD ו-TXD, אלא שהפעם אנחנו לא מדברים עם מודול מרוחק, אלא עם המודול בצד שלנו.
המודול מכיר מספר פקודות AT (פקודות טקסט שמתחילות באותיות "AT"), ובכל פעם שהוא מזהה פקודה חוקית הוא שולח משוב. למשל, אם נשלח את הפקודה הבסיסית ביותר, "AT" (ללא המרכאות), נקבל בתשובה "OK". הנה הפקודות שיאפשרו לנו ליצור מערכת עובדת:
AT+Axxx
ה-xxx הוא מספר בן שלוש ספרות בדיוק, בין 000 ל-255. זו ה"כתובת" (Address) של המודול, וכדי ששני מודולים יוכלו לדבר זה עם זה, חייבת להיות להם כתובת זהה. אחרי קליטת הפקודה הזו, המודול יענה ב-OK-Axxx. כתובת ברירת המחדל היא 000.
AT+Cxxx
גם כאן xxx הוא מספר בן 3 ספרות. הוא מייצג את ה"ערוץ" (Channel), שחייב – כמו הכתובת – להיות זהה בשני המודולים המדברים. לדברי המפרט של Elecrow בקישור למעלה, רק הערוצים 001-020 יעבדו. עוד לא הצלחתי להבין מה בדיוק ההבדל בין כתובת לבין ערוץ, אבל ייתכן שהערוץ מייצג הבדל ממשי בתדר השידור, ואילו הכתובת היא פרמטר בתוכנה. ערוץ ברירת המחדל הוא 001, והמודול יענה לפקודה ב-OK-Cxxx.
AT+B(baud rate)
עם הפקודה הזו אנחנו מגדירים את קצב קליטת ושידור הנתונים, בביטים לשנייה. הערכים החוקיים הם 1200, 2400, 4800, 9600 (ברירת המחדל), 19200, 38400, 57600 ו-115200. ככל שהקצב גבוה יותר, כך גדל הסיכוי לשגיאות ולאובדן נתונים כשהמודולים מרוחקים זה מזה, או כשיש הפרעות סביבתיות אחרות. כמו כן, חלק מתצורות הפעולה של המודול לא תומכות בכל טווח הקצבים. על פקודה כמו AT+B9600 המודול יענה ב-OK-B9600.
AT+FUx
פקודה זו קובעת את תצורת הפעולה של המודול, כאשר x יכול להיות:
- תצורה רגילה (ברירת המחדל). צריכת זרם בהאזנה כ-3.5 מיליאמפר.
- תצורה חסכונית, 80 מיקרואמפר בלבד בהאזנה. המחיר של הצריכה הנמוכה הוא זמן תגובה איטי מאוד לשידור (כ-0.4 שניות), וכן קצב שידור מוגבל עד 4800 וכמות נתונים מוגבלת בכל שידור נפרד (עד 245 בייטים).
- תצורה מהירה, עם זמן תגובה מהיר אבל גם צריכה גבוהה בהאזנה – 22 מיליאמפר.
- תצורה לטווח רחוק – קצב שידור מוגבל עד 9600, זמן תגובה איטי יחסית, צריכה בהאזנה 22 מיליאמפר.
כמו הכתובת והערוץ, גם תצורת הפעולה צריכה להיות זהה בשני המודולים המדברים, והמודול עונה לפקודה ב-OK-FUx.
AT+SLEEP
זו הפקודה שמעבירה את המודול למצב שינה עם צריכה של 20 מיקרואמפר. במצב זה המודול לא יהיה מסוגל כמובן לשדר או לקלוט. השינה תתחיל כשפין SET יוחזר למתח VCC, וכדי לצאת ממנה צריך להוריד אותו שוב ל-GND.
אלה הן הפקודות הבסיסיות שדרושות בשביל שימוש רגיל במודולים האלה. יש עוד פקודות שהם מזהים, שמשמשות לקריאה של פרמטרים, בחירת עוצמת שידור, איפוס, תכנות מודול מרוחק, או תפקוד כ"שלט רחוק" פשטני עם 3 כניסות/יציאות. לא ניכנס לכל זה כאן – אתם מוזמנים לנסות להבין את האנגלית העילגת שבמסמך…
חשוב לזכור: כל פקודה שאנחנו מעבירים במצב ניהול נכנסת לתוקף רק כשהמודול מוחזר למצב שידור (SET למתח VCC). ההגדרות שאנחנו בוחרים נשמרות בזיכרון בלתי-נדיף, כך שהן יישמרו גם אם ננתק את המודול מהחשמל ונפעיל אותו מחדש.
AT+Ry
זוהי פקודת קריאה (Read), שמאפשרת לנו לקרוא ערכים שהגדרנו בעבר. y היא האות הראשונה של ההגדרה המבוקשת, כפי שהשתמשנו בפקודות הקודמות. למשל, המודול ישיב לפקודה AT+RB במחרוזת שמתארת את קצב השידור הנוכחי שלו, כגון "B4800" (ללא המרכאות), ולפקודה AT+RA יענה בכתובת, למשל "A128".
שתי מלכודות
ברוב המודולים והג'וקים הייעודיים, פין כמו SET יכול לעבוד עם נגד Pull-down בעל ערך גדול. לא במקרה שלנו: משהו במודול קובע שמתח ברירת המחדל של הפין SET הוא VCC, וכדי להוריד אותו ל-GND צריך נגד קטן מ-10K אוהם. לא בדקתי עדיין מה הסף המדויק, אבל ראיתי ש-10K אוהם זה כבר יותר מדי, ואילו 1K אוהם זה בסדר.
המלכודת השנייה קשורה לשאלה מתבקשת: נגיד שהגדרתי מודול ל-baud rate מסוים, ושכחתי מהו. איך אוכל ליצור שוב קשר עם המודול? האם אצטרך לעבור על כל האפשרויות עד שאקבל תשובה? ובכן, אם מחברים את המודול לחשמל כשפין SET כבול מראש ל-GND, המודול ידבר איתנו ב-9600 baud אפילו אם הגדרנו אותו אחרת – עד שנעלה את SET ל-VCC, ומאותו רגע המודול ידבר בקצב שהגדרנו לו בעבר, גם אם SET יחזור ל-GND. הטריק הזה לא הופיע בחומרים שמצאתי ברשת, ונאלצתי לגלות אותו לבד בדרך הקשה – אז תלמדו מהניסיון שלי.
וזה עובד?
נכון להיום השתמשתי במודולים רק לפרויקט אחד – הפעמון האלחוטי – ועם הגדרות שמותאמות לטווח ארוך (תצורה 4, קצב שידור 2400 באוד). לא ביצעתי מדידות טווח מסודרות, אבל נראה שהשידור חוצה בקלות שניים או שלושה קירות, וסביר להניח שיוכל "לכסות" כל פינה בדירה טיפוסית.
המפרט מציע מרחק מינימלי של חצי מטר בין מודולים בעוצמת שידור גבוהה, אחרת הסיגנל החזק-מדי ישבש את הקליטה.
מה באמת כיום, אחרי כמעט שלוש שנים, ההמלצה שלך בשביל ששלט יוכל לשלוח "מידע" לבקר? IR או RF? אני חושב שה IR קצת יותר פופולרים היום, אבל לדעתי החיסרון שלהם הוא שהרסיבר קולט את האותות מכל המכשירים שמשדרים ולא רק מהשלט הספציפי שלך, מה שיכול מאוד לבלבל ולגרום לבזבוז משאבים של הבקר על פיענוח ולפעמים תיקון שגיאות רק כדי לגלות שהקוד שהתקבל בכלל לא תואם לקוד שהוא מצפה לו…
ההבדלים בין IR ל-RF גדולים מדי בשביל השוואה כזו. ב-IR משתמשים בדרך כלל כשקצב הנתונים הדרוש נמוך וכשיש קו ראיה בין המשדר למקלט (או לפחות החזר משמעותי), הרכיבים לזה זולים יחסית והמכס לא דורש עבורם אישורים של משרד התקשורת… ב-RF צריך להסתמך על מודולים שלמים מוכנים – קשה לתכנן מערכת יעילה לבד – וזה יקר, גדול יותר פיזית וצורך יותר זרם, אבל מאפשר תקשורת מהירה, מעבר לקירות, ובתנאים מסוימים גם למרחקים גדולים. לכל מצב יתאים פתרון אחר.
אגב, במערכת ראויה לשמה תמיד צריך בדיקת/תיקון שגיאות, גם אם המודול של המקלט עושה את זה בשבילך…
האם ניתן בערת רכיב אחד HC11 לתקשר עם שניים אחרים? כלומר , בעזרת רכיב אחד לשדר מידע זהה לשני רכיבים במקביל?
בוודאי, כל עוד מוגדרים לכולם אותה כתובת ואותו ערוץ, אין בכלל דרך לדעת כמה מאזינים לשידור. כמובן, אם רוצים גם אפשרות לשדר מכמה מודולים שונים, אז המצב מתחיל להסתבך.
אפשר להשתמש בזה בשביל לתרוב למיקרו בקר מרחוק? אפשר אולי לחבר ארדואינו למחשב ולקווי תקשורת שלו לחבור את המשדר והמקלט יחובר לקווי תקשורת של ארדואינו אחר ואז אחד מהם יכול להיות אלחוטי
לארדואינו זה לא יעבוד (בכל אופן לא "מהקופסה") כי צריך קו Reset, ויכול להיות שהמודולים האלה לא יעמדו בקצב הנתונים. אבל בתיאוריה כן, כל מיקרו-בקר שמסוגל להחזיק Bootloader אפשר לתכנת כך שיקבל קוד חדש דרך ערוץ כזה.