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

רכבת גן - Arduino Wireless NMRA DCC: 4 שלבים (עם תמונות)
רכבת גן - Arduino Wireless NMRA DCC: 4 שלבים (עם תמונות)

וִידֵאוֹ: רכבת גן - Arduino Wireless NMRA DCC: 4 שלבים (עם תמונות)

וִידֵאוֹ: רכבת גן - Arduino Wireless NMRA DCC: 4 שלבים (עם תמונות)
וִידֵאוֹ: פרויקטון בחשמל ואלקטרוניקה 2 תפעול ובקרת מחסומי רכבת חלק א' 2024, נוֹבֶמבֶּר
Anonim
Image
Image
עיצוב מערכת
עיצוב מערכת

בהמשך להוראות קודמות עם מערכת DCC על מערכת רכבות מתות, פיתחתי את הרעיון עוד יותר באמצעות תחנת פיקוד DCC ביד עם לוח מקשים ותצוגת LCD. תחנת הפיקוד מכילה את כל הקידוד הנדרש להוראות NMRA DCC, אולם במקום להתחבר למסילות, הנתונים מועברים באמצעות מודול רדיו RF24L01+ למקלט המותקן במשאית או מתחת ללוקו - בכל מקום שהחדר מאפשר זאת.

כמובן שעל המיקומים שלך להיות מצוידים במפענח של יכולת עומס המתאימה למנועי המנוע.

שלב 1: עיצוב המערכת

עיצוב מערכת
עיצוב מערכת

ה- Arduino Pro Mini הוא לב העיצוב. שימוש ב- Fritzing כדי לפתח את המעגל וליצור PCB.

הצלחתי להשתמש באותו לוח עבור משדר ומקלט ובכך לחסוך עלויות מסוימות.

למשדר יש חיבורים ללוח המקשים ול- LCD בעוד שהמקלט אינו דורש אלה ומשתמש בגשר ה- H לאספקת יציאת DCC ללוקו.

פיתוח נוסף כולל חיבורים לגשר H גדול אם נדרש עבור לוקוסים עוצמתיים יותר.

ניתן למחוק את ה- PCF8574 אם אתה משתמש בתצוגת LCD המצורפת עם התרמיל המאפשרת לחיבורי SCA / SCL בארדואינו להאכיל את המסך באמצעות 2 חוטים בלבד. רשימת חלקים: סה"כ = כ -60 ליש"ט לתחנת הפקודה DCC + מקלט אחד עלות מקלטים נוספים = 10.00 ליש"ט בערך כל אחד. + סוללות

Arduino Pro Mini. x 2 = £ 4.00

לוח מקשים 4x3 ממברנה = £ 3.00

צג LCD 20 x 4 = 7.00 ליש ט

PCF5874 = 1.80 ליש ט

NRF24L01+. מודולי רדיו x 2 = 5.80 ליש ט

ייצור PCB ב -10 הנחה (או שניתן להשתמש בלוח Vero) = £ 24 או 4.80 £ עבור 2off

3.3 v רגולטור = 0.17 ליש ט (חבילה של 25 מ- RS Comp)

רגולטור 5v LM7805 = £ 0.30

H-bridge SN754410ne = £ 3.00

Lloytron נטענת מחדש 2700 mah סוללות AA x 12 = £ 22.00. (סוללות בעלות דירוג maH נמוך יותר זולות יותר)

קבלים, סירים, סיכות, מחברים וכו '= £ 2.00 בערך

מארז 190x110x60 מ מ = £ 8.00

משדר - מטען / סוללה לטלפון = 2.00 ליש ט

שלב 2: משדר

מַשׁדֵר
מַשׁדֵר

תרשים המעגל מוצג כאשר סיכות D2 עד D8 ב- Arduino Pro Mini מחוברות ללוח המקשים. פוטנציומטר 100k אוהם מחובר לפין אנלוגי A0 להתאמת מהירות. סיכות ה- SDA וה- SCL היוצרות שבב PCF8574 מחוברות לסיכות A4 ו- A5 על ה- Arduino Pro Mini באמצעות חוטים מולחמים לפינים בשכבה העליונה של ה- Pro Mini.

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

השתמשתי בתצוגת LCD בגודל 20 x 4 המאפשרת 4 שורות מידע עם 20 תווים לכל שורה. לוח המקשים מספק את התפריט הבא:

1 עד 9 = כתובת לוקו * = כיוון 0 = נורות # = תפריט פונקציות למקשים 1 עד 8

תיאור בסיסי של מערכון Arduino Pro Mini: שורה זו של הקוד מסדרת את הודעת DCC בפורמט HEX. הודעת struct struct [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // msg

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 בייט כתובת

};

כדי לאחסן את ההגדרות עבור כל לוקו, סדרת מערכים מוגדרים כדלקמן:

int la [20]; // מערך להחזיק מספרי לוקו

int sa [20]; // מערך להחזיק ערכי מהירות

int fda [20]; // מערך להחזיק dir

int fla [20]; // מערך להחזיק אורות

int f1a [20]; // מערך להחזיק כיף 1…..

int f8a [20]; // מערך להחזיק fun8

כדי לאפשר את תיקון הוראות ה- DCC תוך כדי:

להוראות מהירות: void amend_speed (struct message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg עם 28 שלבי מהירות}

להנחיות פונקציה:

void amend_group1 (struct message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg עם הדרכה קבוצתית אחת 0x80}

הלולאה העיקרית של המערכון:

לולאת void (void) {if (read_locoSpeed ()) {assemble_dcc_msg_speed ();

send_data_1 (); // לשלוח נתונים באמצעות אלחוטית

עיכוב (10);

send_data_3 (); // נתוני תצוגה בתצוגת LCD

send_data_4 (); // להציג נתונים על צג טורי}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

עיכוב (10);

send_data_3 (); }}

עדכן נתונים כאשר המהירות משתנה:

boolean read_locoSpeed () זה מזהה כתובת לוקו חדשה, הגדרת מהירות או כיוון ומשנה את 'נתוני' HEX בהתאם. כאן ציינתי 28 שלבי מהירות וכדי לעמוד בתקן NMRA S 9.2, יש למצוא את נתוני המהירות מטבלת חיפוש. ב- 'speed_step ()'

void speed_step () {switch (locoSpeed) {

מקרה 1: נתונים | = 0x02; לשבור;

מקרה 2: נתונים | = 0x12; לשבור;

מקרה 3: נתונים | = 0x03; לשבור;

………

מקרה 28: נתונים | = 0x1F; לשבור; }}

עדכן נתונים כאשר הפונקציות משתנות:

קריאה_פונקציונלית בוליאנית ()

אם (fla [locoAdr] == 0) {data = 0x80;

} // כיבוי האורות

if (fla [locoAdr] == 1) {

נתונים = 0x90;

} // פנסי ראש דולקים

לכל פונקציה:

אם (f2a [locoAdr] == 0) {data | = 0; }. // פונקציה 2 כבויה

אם (f2a [locoAdr] == 1) {

נתונים | = 0x02; // פונקציה 2 על} 'נתונים' נבנית על ידי שילוב ['| =' תרכובת bitwise או] קודי HEX עבור כל פונקציה.

שלב 3: מקלט

מַקְלֵט
מַקְלֵט

תרשים המעגלים מוצג היכן שהסיכות 5 ו -6 של ה- Arduino Pro Mini משמשות לאספקת DCC המסופק לגשר H. זוגות גשר ה- H מחוברים במקביל להגדלת הקיבולת הנוכחית. בהתאם לזרם שמושך הלוקו, ייתכן שיהיה צורך בחיבור גוף קירור למכשיר ה- DIP בעל 16 פינים, או שחיבור חיצוני H-bridge כבד חיצוני.

הסקיצה של Arduino מצורפת להורדה. אות DCC מורכב משעון הפועל במהירות 2MHZ

void SetupTimer2 () עושה את העבודה הזו.

השעון כולל 'פולסים קצרים' (58us) עבור '1' בנתוני DCC ו- 'פולסים ארוכים' (116us) עבור '0' בנתוני DCC.

חלל הלולאה, מקבל נתונים מהרדיו ואם נמצאה מחרוזת תקפה, הנתונים מומרים לנתוני DCC.

לולאת void (void) {if (radio.available ()) {bool done = false; done = radio.read (inmsg, 1); // קרא את הנתונים שהתקבלו

char rc = inmsg [0]; // הכנס קריאת תווים למערך זה

אם (rc! = 0) {. // אם התו אינו שווה לאפס

inString.concat (rc); // בנה את המסר}

if (rc == '\ 0') {// אם התו הוא '/0' סוף ההודעה

Serial.println (inString); // הדפס את ההודעה המורכבת

חוּט(); // לבנות את הודעת המחרוזת כדי לקבל הוראות DCC

} } }

שלב 4: הפעל את לוקוסים

הפעל את לוקוסים
הפעל את לוקוסים

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

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

הסוללות בהן השתמשתי ניתנות לחיוב מחדש LLoytron AA x 12. בניתי מטען במיוחד עבורן שנטען 6 בכל פעם. (ראה הוראה)

מוּמלָץ: