תוכן עניינים:

מפענח חיישן RF Arduino: 5 שלבים
מפענח חיישן RF Arduino: 5 שלבים

וִידֵאוֹ: מפענח חיישן RF Arduino: 5 שלבים

וִידֵאוֹ: מפענח חיישן RF Arduino: 5 שלבים
וִידֵאוֹ: blynk- ארדואינו. פרוייקט דוגמא ראשון 2024, נוֹבֶמבֶּר
Anonim
מפענח חיישן RF Arduino
מפענח חיישן RF Arduino

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

מהר קדימה להיום והאזעקה האלחוטית הזו יושבת בקופסה במרתף שלי. לאחר רכישת מקלט RF זול החלטתי לבדוק אם אוכל לפענח את ההודעות המועברות על ידי מגוון חיישני אזעקה ושלטים שיש לי. הבנתי שמכיוון שכולם עבדו עם תיבת האזעקה הזולה, כולם חייבים להשתמש באותו פורמט הודעות עם מזהה אחר בלבד. עד מהרה גיליתי שהם דומים רק במבנה הכללי של המסרים. אז הפרוייקט עבר מהר מאוד מטריוויאלי למעניין מאוד.

שלב 1: מודולי חיישן

מודולי חיישן
מודולי חיישן
מודולי חיישן
מודולי חיישן
מודולי חיישן
מודולי חיישן
מודולי חיישן
מודולי חיישן

כפי שניתן לראות בתמונות למעלה המשדרים כוללים חיישנים פתוחים לדלתות, גלאי תנועה, שלטי חימוש ומקלדת אלחוטית המשמשת לתכנות תיבת האזעקה. כפי שמתברר, אין שניים מהמכשירים הללו המשתמשים באותו אורך סנכרון או משך סיביות. המשותף היחיד, מלבד אורך ההודעה, הוא הפורמט הבסיסי של הביטים. כל ביט תופס פרק זמן קבוע כשההבדל בין אפס לאחד הוא מחזור העבודה של המנות הגבוהות/הנמוכות.

צורת הגל היפה המוצגת למעלה היא לא מה שקיבלתי לראשונה. מכיוון שיש כל כך הרבה תעבורה בפס התדרים של 433 מגה-הרץ, הייתי צריך לוודא להפעיל את החיישן ממש לפני שהגדרתי את ההיקף לביצוע טריגר יחיד. למרבה המזל החיישנים הוציאו כמה עותקים של הודעת הנתונים כאשר הם מופעלים והשלדים ולוח המקשים ממשיכים להוציא הודעות כל עוד לוחצים על מקש. באמצעות היקף הצלחתי לקבוע את אורך הסנכרון ואת משך סיביות הנתונים עבור כל פריט. כפי שצוין קודם לכן, זמני הסנכרון שונים וזמני הסיביות שונים אך לכל פורמטי ההודעות יש סנכרון ברמה נמוכה ואחריו 24 סיביות נתונים וביט עצירה אחד. זה הספיק לי בכדי לבנות מפענח גנרי בתוכנה מבלי לקודד את כל הפרטים השונים עבור כל מכשיר.

שלב 2: חומרה

חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה

בניתי במקור מפענח חיישן באמצעות מיקרו -בקר PIC ושפת הרכבה. שיחקתי לאחרונה עם גרסאות Arduino אז חשבתי שאראה אם אוכל לשכפל אותו. הסכימה הפשוטה מוצגת למעלה וישנה גם תמונה של אב הטיפוס שלי. כל מה שעשיתי היה להשתמש בשלושה חוטי מגשר נפוצים כדי לעבור מהארדואינו ננו ללוח מקלט ה- RF. חשמל וקו נתונים יחיד הם כל מה שצריך.

אם תקרא את ההנחיה שלי על "תצוגת זמן ומזג אוויר 3-in-1" תראה שאני משתמש במקלט רגיל RXB6, 433 מגה-הרץ. ייתכן שתוכל לגרום למקלטים הזולים באמת לעבוד בטווח הקצר הדרוש לפרויקט זה, אך אני עדיין ממליץ להשתמש במקלט סופר הטרודיני.

שלב 3: תוכנה

התוכנה ממירה את הסיביות שהתקבלו לתווי ASCII הניתנים להצגה. הוא מוציא את ערך אורך הסנכרון ואת אורכי סיביות 1 ו- 0. מכיוון שכבר ידעתי את אורכי הסינכרון ואת פורמטי הסיביות, יכולתי לכתוב את התוכנה במיוחד עבורם. במקום זאת, החלטתי לבדוק אם אוכל לכתוב אותו כדי למיין את אורכי הסנכרון ולברר באופן אוטומטי את נתוני הנתונים. זה אמור להקל על השינוי במקרה שאני רוצה לנסות לזהות פורמטים אחרים בזמן כלשהו. חשוב לציין שהתוכנה לא יודעת אם החלק הראשון של ההודעה הוא 1 או 0. היא מניחה שזו 1 אבל אם היא תבין שהיא הייתה צריכה להיות אפס, היא תהפוך את סיביות בהודעה שהושלמה לפני שליחתה מהיציאה הטורית.

הזמנים של דופק הסנכרון וסיבי הנתונים נקבעים על ידי שימוש בקלט ההפסקה החיצוני INT0 כדי להפעיל מטפל להפרעה. INT0 יכול להפעיל עלייה, ירידה או שני הקצוות, או ברמה נמוכה ויציבה. התוכנה נקטעת משני הקצוות ומודדת את משך הזמן שהדופק נשאר נמוך. זה מפשט את העניינים מכיוון שההתחלה/סנכרון ההודעה היא דופק ברמה נמוכה וניתן לקבוע את הביטים על סמך הזמן הנמוך שלהם.

מטפל ההפרעה קובע תחילה אם הספירה שנלכדה ארוכה מספיק כדי להיות דופק התחלה/סנכרון. המכשירים השונים שיש לי משתמשים בפולסי סנכרון של 4, 9, 10 ו -14 אלפיות השנייה. הצהרות ההגדרה לערכי הסנכרון המותרות מינימום/מקסימום נמצאות מראש בתוכנה ומוגדרות כעת ל -3 ו -16 אלפיות השנייה. זמני הסיביות משתנים גם בין החיישנים ולכן האלגוריתם לפענוח סיביות צריך לקחת זאת בחשבון. זמן הסיביות של הסיביה הראשונה נשמר וכך גם הזמן של הסיביות הבאות שיש להן הבדל משמעותי מהסיביה הראשונה. השוואה ישירה של זמני הסיביות שלאחר מכן אינה אפשרית ולכן משתמשים בהגדרת "גורם פאדג '" ("וריאציה"). פענוח הסיביות מתחיל בהנחה שסיבי הנתונים הראשונים תמיד נרשמים כהגיון 1. ערך זה נשמר ולאחר מכן משמש לבדיקת סיביות עוקבות. אם ספירת סיביות הנתונים הבאות נמצאת בתוך חלון השונות של הערך השמור אז הוא נרשם גם כהגיון 1. אם הוא מחוץ לחלון השונות של הערך השמור אז הוא נרשם כהגיון 0. אם ההיגיון 0 זמן הסיביות קצר יותר מזמן הסיביות הראשון ואז נקבע דגל שיגיד לתוכנה שצריך להפוך את הבייטים לפני הצגתם. המקרה היחיד בו האלגוריתם הזה נכשל הוא כאשר הביטים בהודעה הם כולם 0. אנו יכולים לקבל את המגבלה כיוון שלמסר כזה אין משמעות.

החיישנים שבהם אני מעוניין הם בעלי אורך הודעה של 24 סיביות נתונים אך התוכנה אינה מוגבלת לאורך זה. יש מאגר של עד שבעה בתים (אפשר להוסיף עוד) ומגדיר את אורך ההודעה המינימלי והמקסימלי בבתים. התוכנה מוגדרת לאסוף את הביטים, להמיר אותם לבייטים, לאחסן אותם באופן זמני ולאחר מכן להוציא אותם בפורמט ASCII באמצעות היציאה הטורית. האירוע המפעיל את פלט ההודעה הוא קבלת דופק התחלה/סנכרון חדש.

שלב 4: רישום נתונים

רישום נתונים
רישום נתונים

התוכנה מוגדרת לפלט את הנתונים המומרים כתווי ASCII באמצעות הפלט הטורי (TX) של ה- Arduino. כשעשיתי את גרסת ה- PIC הייתי צריך להתחבר לתוכנית מסוף במחשב כדי להציג את הנתונים. אחד היתרונות של ה- Arduino IDE הוא שיש לו פונקציית צג סידורי מובנית. הגדרתי את קצב היציאה הטורית ל- 115.2k ואז הגדרתי את חלון הצג הטריאלי לאותו שיעור. צילום המסך כאן מציג תצוגה טיפוסית עם יציאות ממגוון חיישנים שיש לי. כפי שאתה יכול לראות, הנתונים לפעמים אינם מושלמים, אך תוכל לקבוע בקלות מה הערך האמיתי של כל חיישן.

שלב 5: תוכנת מקלט לדוגמא

תוכנת מקלט לדוגמא
תוכנת מקלט לדוגמא

צירפתי דוגמא לתוכנת תוכנה המראה כיצד תוכל להשתמש במידע שנאסף כדי לקבל סט קודים ספציפי ליישום שלך. דוגמה זו מוגדרת לחיקוי של אחד משקעי Etekcity המרוחקים שלי. פקודה אחת מדליקה את הנורית המובנית בננו (D13) והפקודה השנייה מכבה את הנורית. אם אין לך LED מובנה בארדואינו שלך, הוסף את הנגד ואת ה- LED כפי שמוצג בתרשים. ביישום אמיתי פונקציה זו תפעיל/תכבה את החשמל לשקע חשמל (באמצעות ממסר או טריאק). זמני הסנכרון, זמני הסיביות ובתי הנתונים הצפויים מוגדרים כולם מראש כדי להקל על השינוי. אתה יכול להשתמש בכל אחת משורות הנתונים הנותרות כדי להפעיל/לכבות דברים וכו 'עבור היישום הספציפי שלך. פשוט הוסף את הגדרות קוד הפקודה הרלוונטי והחלף את לוגיקת ההפעלה/כיבוי של LED ב"לולאה "כך שיתאים לצרכיך.

מוּמלָץ: