עקרון הפעולה של התצוגה המוצעת, שנעשתה ונבנתה על ידי Instructables תחת הכינוי alstroemeria, היא כדלקמן: קטעים המתקדמים על ידי סרוו מטילים צל, מה שמביא אותם לעין. החלקים הנותרים, הממוקמים באותו מישור עם הרקע, מתמזגים איתו.
ברור ש
תוצרת בית מסתבר שזה יקר, כי מבחינתה האדון רוכש עד 28 סרוו כאלה:
ומודול ניהול שמתחבר אליו
ארדואינו ככה:
נראה כי מודול השעון בזמן אמת (RTC) על רקע זה הוא הוצאה קטנה מאוד.
לאחר שרכש את כל הרכיבים הדרושים, המאסטר עד כה מניח אותם בצד לעבוד על תבניות לייצור החלק המכני של התצוגה. הוא מקבל ארבעה קבצים:
1,
2,
3,
4. האשף מציג קבצים 1 ו -3 פעמיים על פלוטר חיתוך, ו -2 ו -4, אחד בכל פעם, כולם בסולם 1: 1, ומקבל שישה חלקים שחלקם דומים לכרטיסי אגרוף ישנים בדרך כלשהי. ניתן גם להדפיס, גם בסולם של 1: 1 ובאותן כמויות, ולחתוך ידנית.
דרמל חותך סיכות מתכת חלולות באורך של 20 מ"מ וצינורות בקוטר חיצוני גדולים מעט יותר מהקוטר החיצוני של הסיכה באורך של 10 מ"מ:
דבק שכבות עם קלטת דו צדדית עבה ומוסיף צינורות:
זה מוסיף קטעים מטלטלים המודבקים לפינים העוברים דרך הצינורות, בצד האחורי מדביקים דוחפי תיל פלדה לאותם סיכות, וכאן הפינים חלולים:
הוא מכופף דוחפים, מדביק סרוו ומתחבר אליהם:
סוגר את סרוו עם שאר הנותרים המחוררים:
מודול בקרת סרוו מתחבר לפי הסכימה שניתנה בתחילת המאמר. הכוננים עצמם מחוברים למודול לפי הסדר המתאים לייעודי הקטעים הסטנדרטיים:
מודול RTC מתחבר באופן הבא: SDA - פין 4 Arduino, SCL - פין 5, בתוספת כוח וחוט משותף - במקביל לקווי הארדואינו המתאימים. הנה התוצאה:
האשף קובע את השעה במודול RTC בעזרת מערכון זה (אתה זקוק לספריית RTClib):
# כלול
# כלול את "RTClib.h"
RTC_DS1307 RTC;
הגדרת ביטול () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
אם (! RTC.isrunning ()) {
Serial.println ("RTC לא פועל!");
RTC.adjust (תאריך זמן (__ DATE__, __TIME__));
}
}
ואז הוא ממלא את הסקיצה העיקרית הדורשת את אותה הספרייה:
# כלול
# כלול את "RTClib.h"
RTC_DS1307 RTC;
segA קצר = 0; // סיכת תצוגה 14
segB קצר = 1; // סיכת תצוגה 16
segC קצר = 2; // סיכת תצוגה 13
segD קצר = 3; // סיכת תצוגה 3
segE קצר = 4; // סיכת תצוגה 5
segF קצר = 5; // סיכת תצוגה 11
segG קצר = 6; // סיכת תצוגה 15
segA_OUT קצר = 110;
segB_OUT קצר = 110;
segC_OUT קצר = 110;
segD_OUT קצר = 110;
segE_OUT קצר = 110;
segF_OUT קצר = 110;
segG_OUT קצר = 110;
segA_IN קצר = 90;
segB_IN קצר = 90;
segC_IN קצר = 90;
segD_IN קצר = 90;
segE_IN קצר = 90;
segF_IN קצר = 90;
segG_IN קצר = 90;
int TIME = 2000;
DateTime datePast;
תאריך תאריך תאריך עכשיו;
// שמירת בית
הגדרת ביטול () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (תאריך זמן (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// לולאה ראשית
לולאת חלל () {
dateNow = RTC.now ();
אם (! (datePast.hour () == dateNow.hour () & & datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// בהינתן מספר אנו מציגים 10:22
// לאחר שעבר על 4 המספרים, התצוגה מושבתת
display voummer (int toDisplay) {
עבור (ספרת int = 4; ספרה> 0; ספרה--) {
lightNumber (toDisplay% 10, digit);
toDisplay / = 10;
}
// התחל בתנועה
Serial.print ("T"); Serial.println (TIME);
}
מהלך ריק (int servo, int מיקום) {
Serial.print ("#");
Serial.print (סרוו);
Serial.print ("P");
Serial.print (מיקום);
}
// נתון מספר, מדליק את הקטעים האלה
// אם המספר == 10, כבה את המספר
void lightNumber (מספר מספר intoDisplay, קטע int) {
קיזוז int = (קטע - 1) * 7;
מתג (numberToDisplay) {
מקרה 0:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
לזוז (segE + offset, segE_OUT);
להעביר (segF + אופסט, segF_OUT);
לזוז (segG + קיזוז, segG_IN);
שבירה;
מקרה 1:
להעביר (segA + אופסט, segA_IN);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + offset, segD_IN);
להעביר (segE + offset, segE_IN);
להזיז (segF + אופסט, segF_IN);
לזוז (segG + קיזוז, segG_IN);
שבירה;
מקרה 2:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
לזוז (segC + אופסט, segC_IN);
להעביר (segD + אופסט, segD_OUT);
לזוז (segE + offset, segE_OUT);
להזיז (segF + אופסט, segF_IN);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 3:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
להעביר (segE + offset, segE_IN);
להזיז (segF + אופסט, segF_IN);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 4:
להעביר (segA + אופסט, segA_IN);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + offset, segD_IN);
להעביר (segE + offset, segE_IN);
להעביר (segF + אופסט, segF_OUT);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 5:
לזוז (segA + קיזוז, segA_OUT);
להעביר (segB + אופסט, segB_IN);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
להעביר (segE + offset, segE_IN);
להעביר (segF + אופסט, segF_OUT);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 6:
לזוז (segA + קיזוז, segA_OUT);
להעביר (segB + אופסט, segB_IN);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
לזוז (segE + offset, segE_OUT);
להעביר (segF + אופסט, segF_OUT);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 7:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + offset, segD_IN);
להעביר (segE + offset, segE_IN);
להזיז (segF + אופסט, segF_IN);
לזוז (segG + קיזוז, segG_IN);
שבירה;
מקרה 8:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
לזוז (segE + offset, segE_OUT);
להעביר (segF + אופסט, segF_OUT);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 9:
לזוז (segA + קיזוז, segA_OUT);
להזיז (segB + אופסט, segB_OUT);
להזיז (segC + אופסט, segC_OUT);
להעביר (segD + אופסט, segD_OUT);
להעביר (segE + offset, segE_IN);
להעביר (segF + אופסט, segF_OUT);
להזיז (segG + קיזוז, segG_OUT);
שבירה;
מקרה 10:
להעביר (segA + אופסט, segA_IN);
להעביר (segB + אופסט, segB_IN);
לזוז (segC + אופסט, segC_IN);
להעביר (segD + offset, segD_IN);
להעביר (segE + offset, segE_IN);
להזיז (segF + אופסט, segF_IN);
לזוז (segG + קיזוז, segG_IN);
שבירה;
}
}
הכל עובד:
אז התצוגה המכנית של עיצוב לא טריוויאלי מוכנה.