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

דגם רכבת - תחנת פיקוד DCC באמצעות Arduino :: 3 שלבים
דגם רכבת - תחנת פיקוד DCC באמצעות Arduino :: 3 שלבים

וִידֵאוֹ: דגם רכבת - תחנת פיקוד DCC באמצעות Arduino :: 3 שלבים

וִידֵאוֹ: דגם רכבת - תחנת פיקוד DCC באמצעות Arduino :: 3 שלבים
וִידֵאוֹ: הצפיפות ברכבת ישראל 4# 2024, יולי
Anonim
Image
Image
קוד Arduino - תחנת פיקוד עם לוח מקשים
קוד Arduino - תחנת פיקוד עם לוח מקשים

עודכן באוגוסט 2018-ראה הוראה חדשה:

עדכון 28 באפריל 2016: כעת יכולת שליטה של 16 אחוזים / נקודות לתחנת הפיקוד. התחלפות T1 - T8 זמינות באמצעות מקש 'B' המחזורים T9 - T16 זמינים באמצעות מקש 'C'

עדכון 10 במרץ 2016:

כעת נוספה 8 יכולות שליטה / נקודות שליטה בתחנת הפיקוד. קוד הארדואינו עודכן בהתאם באמצעות החבילה הסטנדרטית של NMRA לשיעורים (מבוסס גם על מחקר של מנות נתונים של Lenz / Atlas Compact לבקרת אחוזי הצבעה).

המיקומים T1 - T8 זמינים באמצעות מקש 'B'

ראה הנחיות לגבי מעגל מקלט מנות הנתונים המשמש וקוד Arduino נדרש.

עדכון 18 בינואר 2016:

הוספתי למעגל חישה הנוכחי (1k5 אוהם) וקבל (10 uf) ושיניתי את קוד הארדואינו כדי לנתק את החשמל כאשר מתגלה זרם שיא של> 3200 mA. מפרט H-bridge מציין זרם חישה של פלט של 377 uA לכל 1 אמפר בעומס.

הנגד של 1.5 קילו -אוהם יספק 0.565 וולט לכל אמפר על הסיכה האנלוגית 6. עם 1023 שלבים על הכניסה האנלוגית, זה נותן 0.565 * 1023 /5 = 116 לכל עומס אמפר.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (כדי לתת תוצאה במיליאמפרס)

זרם העומס במיליאמפר מוצג ב- TFT

מקלדת 4x4 מלאה כוללת פונקציות F1 עד F8 ועוד 10 לוקוסים (1-19) באמצעות מקש '#' (להוספת 10 למקשים המספריים החל ממקום 10).

קוד הארדואינו כולל את תקן NMRA לבייטים של הוראות.

ראה קישור

www.nmra.org/sites/default/files/s-9.2.1_20…

(עמוד 6 רלוונטי במיוחד)

המנות מסודרות לפי מספר שלבי המהירות, כתובת ארוכה / קצרה והוראות קבוצת פונקציות.

לכל בתים ההוראה קודמת מבוא של סיביות '1' 11111111 (או חבילת סרק) ואחריה;

לְמָשָׁל כתובת 4 בתים 0 00000011 0 00111111 0 10000011 0 10111111

משתווה ללוקו 3, 128 צעדים במהירות, כיוון קדימה ושלב מהירות 3 (בתום הסיום היא בדיקת השגיאות XOR)

למשל כתובת 3 בתים 0 00000011 0 10010000 0 10110011

משתווה ללוקו 3, קבוצת פונקציות 1, נורות FL דולקות בתוספת XOR בייט (ביט '0' מפריד בין כל בתים)

ראה סרטון הדגמה מצורף ללוקו 12.

הפונקציות F1 - F8 זמינות באמצעות מקש 'A', DIR ('*' מקש = כיוון) FL ('0' מקש = נורות) ומקש '#' נותן לוקוסים 10 עד 19 בלוח המקשים המספרי. מקש 'D' משמש כעת ל'עצור חירום '.

תודה לספקים שונים באינטרנט למקורות מידע DCC וקוד Arduino.

בפרט, הפרויקט הזה היה בהשראת מייקל בלנק ו'ה DCC הפשוט שלו - תחנת פיקוד '.

www.oscale.net/en/simpledcc

4x4 מטריקס מערך 16 מקשי מתג ממברנה ממברנה (ebay) £ 1.75

2.2 אינץ '240x320 מודול תצוגת LCD SPI TFT LCD טורי (ebay) £ 7.19

מתאם חשמל אוניברסלי 12V 5A 60W אספקת חשמל (ebay) £ 6.49

Nano V3.0 עבור Arduino עם CH340G 5V 16M תואם ATmega328P (ebay) 2 x £ 3.30 = £ 6.60

מודול נהג מנוע LMD18200T עבור Arduino R3 (eBay) £ 6.99

מחברים, חוט, לוח ורו, פוטנציומטר כ -3.50 ליש ט

סה"כ 32.52 ליש"ט

תחנת הפיקוד הבסיסית ללא מסך tft ו- 1 x ננו תהיה 22.03 ליש ט

[הערה: אפשר להוסיף כרטיס זיכרון לתצוגת TFT ולשנות קוד להצגת תמונות של מנועים נבחרים, אם כי יש לערוך את קודי הספרייה למטה כדי ליצור יותר זיכרון לסקיצה. גודל הסקיצה הנוכחי הוא למקסימום עבור ה- TFT Arduino Nano]

קוד ה- Arduino המקורי של מייקל בלנק היה עבור מנוע אחד, קדימה / אחורה בלבד ללא בקרת פונקציות, ללא לוח מקשים וללא תצוגה.

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

גשר LMD18200T יכול לשאת עד 3 אמפר מה שהופך אותו מתאים לכל קנה המידה כולל סולמות G (רכבות גן). ספק הכוח ואלקטרוניקה מתאימים לשימוש פנימי בלבד, אלא אם כן אתה יכול להפוך את כל זה למזג האוויר. יש לי את תחנת הפיקוד בבית הקיץ עם חוטי חיבור למסילות החוצה דרך הקיר עד למסילה.

שלב 1: קוד Arduino - תחנת פיקוד עם לוח מקשים

תודתי ל- tvantenna2759 שהצביע על 2 שגיאות בתרשים המעגלים שבו קוד Arduino לא תאם את החיווט, עודכן כעת (21 באוקטובר 2017).

כעת הוסיף 16 תחזיות לתחנת הפיקוד. ראה הנחיות בתרשים מעגל ההצבעה / נקודות באמצעות מודול Arduino Mini Pro.

הקוד ששונה כולל בקרת אחוזי מצורף להלן.

חבילת מפענח בסיסית לאביזר היא: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 מניתוח החבילה המשמשת את Lenz (קומפקטי / אטלס) לבקרת נקודות, השתמשתי בפורמט המנות הבינאריות הבאות עבור בתים 1 ו -2: tunAddr = 1 אחזקה 1a: 1000 0001 1111 1000 / אחוזי 1b: 1000 0001 1111 1001 אחוז 2a: 1000 0001 1111 1010 / שיעור 2b: 1000 0001 1111 1011 אחזקה 3a: 1000 0001 1111 1100 / שיעור 3b: 1000 0001 1111 1101 אחוזי 4a: 1000 0001 1111 1110 / אחזקה 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- אחוז ההצבעה 5a: 1000 0010 1111 1000 / שיעור 5b: 1000 0010 1111 1001 אחוזי שיא: 1000 0010 1111 1010 / שיעור 6b: 1000 0010 1111 1011 אחזקה 7a: 1000 0010 1111 1100 / שיעור 7b: 1000 0010 1111 1101 שיעור 8a: 1000 0010 1111 1110 / שיעור 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- אחוזי הצבעה 9a: 1000 0011 1111 1000 / שיעור ההצבעה 9b: 1000 0011 1111 1001 וכו '………..

חלץ מהקוד שהשתנה: הוסף עוד 2 עדכוני הודעה 'struct' חל על amend_tun1 (הודעת struct & x) {x.data [0] = 0x81; // מפענח אביזר 0x80 & כתובת 1 x.data [1] = 0; }

void amend_tun2 (הודעת struct & x) {x.data [0] = 0x82; // מפענח אביזר 0x80 וכתובת 2 x.data [1] = 0; }

הוסף חלל חדש לשיעורים: read_turnout בוליאני () {עיכוב (20);

בוליאנית שונתה_ט = שקר; לקבל מפתח();

אם (key_val> = 101 && key_val <= 404 && turn == 1) {

נתונים = 0xf8; // = בינארי 1111 1000

amend_tun1 (הודעה [1]);

}

אם (key_val> = 505 && key_val <= 808 && turn == 1) {

נתונים = 0xf8; // = בינארי 1111 1000

amend_tun2 (הודעה [1]);

}

אם (key_val == 101 && turn == 1) {

אם (tun1 == 1) {

נתונים | = 0; // t1a

change_t = true;}

אם (tun1 == 0) {

נתונים | = 0x01; // t1b

change_t = true;}

}

אם (key_val == 202 && turn == 1) {

אם (tun2 == 1) {

נתונים | = 0x02; // t2a

change_t = true;

}

אם (tun2 == 0) {

נתונים | = 0x03; // t2b

change_t = true; }

}

אם (key_val == 303 && turn == 1) {

אם (tun3 == 1) {

נתונים | = 0x04; // t3a

change_t = true;

}

אם (tun3 == 0) {

נתונים | = 0x05; // t3b

change_t = true;}

}

אם (key_val == 404 && turn == 1) {

אם (tun4 == 1) {

נתונים | = 0x06; // t4a

change_t = true;

}

אם (tun4 == 0) {

נתונים | = 0x07; // f4b

change_t = true;}

}

אם (key_val == 505 && turn == 1) {

אם (tun5 == 1) {

נתונים | = 0; // t5a

change_t = true;

}

אם (tun5 == 0) {

נתונים | = 0x01; // t5b

change_t = true;}

}

וכו ………………….

שלב 2: קוד Arduino - תצוגת TFT

קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT
קוד Arduino - תצוגת TFT

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

שלב 3: בקר יציאה

בקר השתתפות
בקר השתתפות
בקר השתתפות
בקר השתתפות

עיין בהוראות כיצד ליצור את בקר אחוז ההצבעה / נקודות.

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

מוּמלָץ: