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

לוח שנה חכם: 5 שלבים
לוח שנה חכם: 5 שלבים

וִידֵאוֹ: לוח שנה חכם: 5 שלבים

וִידֵאוֹ: לוח שנה חכם: 5 שלבים
וִידֵאוֹ: סרטון מדהים ומרגש עם מסר חזק במיוחד 2024, נוֹבֶמבֶּר
Anonim
לוח שנה חכם
לוח שנה חכם

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

במדריך זה אראה לך כיצד לבנות לוח שנה חכם, המציג אירועים מכמה חשבונות Google. הוא יציג גם זמן, תאריך, מזג אוויר, טמפרטורה וכמה מידע נוסף. הוא יופעל על ידי מחשב Raspberry Pi עם חיישן תנועה פסיבי חיישן אינפרא אדום (PIR) המחובר אליו, כך שהתצוגה נדלקת כאשר תזוהה תנועה בחדר, אך נכבה לאחר מספר דקות של חוסר פעילות. הדרכה זו מבוססת על מספר הדרכות אחרות שמצאתי באינטרנט ואני אתן את הקישורים אליהן להבנה טובה יותר. יש צורך בידע בסיסי בתכנות (HTML, Python, …).

שלב 1: החומרה

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

- ערכת פטל פטל. בתחילה השתמשתי בדגם 2 הישן שלי מפרויקט אחר. זה עבד, אבל העריכה והטעינה של דף האינטרנט לקחו לי הרבה זמן, ולכן בסופו של דבר החלפתי לדגם 3, שעובד בצורה שוטפת יותר https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = פטל+פי+ערכה & _sacat = 0

- מסך LCD. השתמשתי במסך מהמחשב הנייד הישן שלי, אז הייתי צריך לקנות רק לוח מנהלי LVDS עבורו ולספק הכוח https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ נהג+LVDS+לוח & _sacat = 0

-קופסת אחסון מפלסטיק לאלקטרוניקה

- חיישן תנועה אינפרא אדום פסיבי

- חיישן טמפרטורה/לחות AM2302

- קלסר החלקה מפלסטיק שחור למסגרת LCD

- כבלים שונים (HDMI, 5.5 מ מ עבור מתח DC, כבלי מגשר קרשים ללא הלחמה, …)

שלב 2: יצירת צג ה- LCD

יצירת תצוגת LCD
יצירת תצוגת LCD
יצירת תצוגת LCD
יצירת תצוגת LCD
יצירת תצוגת LCD
יצירת תצוגת LCD

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

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

פירקתי את הכיסוי של המחשב הנייד הישן שלי, הוצאתי את צג ה- LCD ואז הזמנתי את לוח הנהג LVDS הנכון. סיפקתי למוכר את קוד המוצר, שניתן למצוא בצד האחורי של ה- LCD, במקרה שלי הוא LP171WE3 (TL) (A2) - ראה התווית הימנית התחתונה בתמונה האחרונה, ואז הוא שלח לי את ה- LVDS המתאים. שים לב, תצטרך גם את ספק הכוח לתצוגה, אז בקש מהמוכר לשלוח גם אותו. רכשתי גם קופסת פלסטיק נחמדה בגודל 14.5 × 7.5 × 2 ס מ שתתאים יפה ללוח הנהג ולחבר אותה לצד האחורי של ה- LCD.

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

שלב 3: הגדרת התוכנה

כשחיפשתי באינטרנט כמה רמזים כיצד לבנות לוח שנה, קיבלתי השראה מדף זה https://dakboard.com/site. הם מספקים את המוצר המוגמר (התצוגה, המחשב ותוכנת העבודה), אך יש להם גם הדרכה מצוינת לפתרון DIY (https://blog.dakboard.com/diy-wall-display/). אני ממליץ לך לעקוב אחר הדרכה זו, לפחות בחלק הראשון עם ההוראות להכנה והקמה של המערכת ב- Raspberry, כך שהדפדפן יטען אוטומטית את דף האינטרנט הרצוי בעת אתחול.

זה עבד יפה, אולם חיפשתי פתרון כלשהו שיכול להתאים אישית יותר לפי רצוני. החלטתי להקים שרת אינטרנט משלי וליצור דף אינטרנט, שיציג מידע נוסף מלבד לוח השנה. בחרתי ב- Wordpress.org מכיוון שהוא מתועד היטב ויש לו תמיכה טובה וקהילה גדולה שתעזור לך. להלן ההדרכה להתקנת וורדפרס ב- Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. עם התקנת וורדפרס, הגיע הזמן לעצב את דף הבית שלי. אתה יכול להשתמש באחד הנושאים הרבים המסופקים, או לעצב מאפס. בכל מקרה, יש צורך בידע כלשהו בתכנות HTML לשם כך.

עיצבתי את הדף שלי, כך שבצד שמאל מוצג לוח השנה (https://sl.wordpress.org/plugins/google-calendar-events/), ואילו בצד ימין מוצגים השעה והתאריך (https://www.timeanddate.com/clocks/free.html ו- https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). תחזית מזג האוויר היא מדף זה (https://www.1a-vreme.si/vremensko-okno/), המספק ווידג'ט תחזיות לערים סלובניות, אך אני מניח שניתן למצוא יישומונים למדינות אחרות גם באינטרנט. הטמפרטורה נאספת באמצעות חיישן AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), כפי שהוסבר בסוף פרק זה. בתחתית טיימר יום יומי פשוט, המציג כמה ימים נותרו לאירוע כלשהו (מעניין לילדיי לדעת, כמה ימים יצטרכו לחכות למשהו). בקצה הימני העליון נמצא התוסף MetaSlider (https://wordpress.org/plugins/ml-slider/), המחליק באופן אקראי לתמונות נבחרות של משפחתי. בנוסף השתמשתי בפלאגין מחוון הרקע (https://sl.wordpress.org/plugins/background-slider-master/) כדי להראות לי תמונה אקראית לרקע נחמד יותר.

כפי שצוין קודם לכן, הטמפרטורה הפנימית נאספת באמצעות חיישן AM2302. יש הרבה הדרכות כיצד להשיג טמפרטורה, עקבתי אחר זה: https://www.modmypi.com/blog/am2302-temphumidity-sensor. מאוחר יותר העברתי חיישן זה ל- Raspberry Pi אחר עם עוזר הבית בו פועל, מכיוון שקל יותר לקרוא ולפרסם ערכים באמצעות רכיב חיישן DHT שלו (https://www.home-assistant.io/components/sensor.dht/). Home Assistant יכול גם לאסוף טמפרטורה חיצונית באמצעות רכיבי מזג אוויר שונים, השתמשתי ברכיב YR.no (https://www.home-assistant.io/components/sensor.yr/). עם זאת, כתבתי סקריפט אוטומציה לאסוף טמפרטורה פנימית/חיצונית מהרכיבים האלה ולכתוב אותם לקובץ טקסט, המוצג לאחר מכן בלוח הקיר שלי. למידע נוסף על Home Assistant, עיין בדף הבית (https://www.home-assistant.io/).

שלב 4: אופציונלי - כיבוי הצג

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

שימו לב כי כישורי התכנות שלי מוגבלים למדי, כך שהדברים הבאים לא יכולים להיות אופטימליים, מכיוון שבחרתי אותו מפורומים שונים ומדריכים מקוונים, אך בעיקרו של דבר זה עובד. ובכל זאת, כל המלצה עדיין תתקבל בברכה. ראשית נתחיל בבדיקה להפעלת/כיבוי המסך באופן ידני. לשם כך ניצור שני קבצים (למשל monitor_on.sh ו- monitor_off.sh) ונכתוב בו קוד. הדרך הקלה ביותר לעשות זאת היא להיכנס לפטל שלך באמצעות SSH והקלד

סודו ננו monitor_on.sh

והקלד את הקוד הבא

tvservice -מועדף;

startx/usr/bin/graphical_launcher `fgconsole`

הקש CTRL+X כדי לשמור ולצאת ולאחר מכן צור את הקובץ השני

sudo nano monitor_off.sh

והקלד את הקוד הבא

tvservice -off;

שוב, הקש CTRL+X כדי לשמור ולצאת. הפוך את הקבצים החדשים שנוצרו להפעלה:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

עכשיו כדי לנסות אם פקודות אלה פועלות, הקלד

sudo./monitor_off.sh

sudo./monitor_on.sh

המסך אמור להיכבות ולהדלק בהתאם. שמתי לב שעל Raspberry Pi 2 לקח כמעט 10 שניות עד שהמסך נדלק. ב- Raspberry Pi 3 זה לוקח 1-2 שניות. לאחר מכן נחבר חיישן אינפרא אדום, שיפעיל סקריפטים אלה. שוב, יש הרבה הדרכות כיצד להגדיר את Raspberry Pi ו- PIR, עקבתי אחרי זה: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. בעיקרון, צור קובץ בעזרת עורך ננו (למשל motion_sensor.py) והקלד בו את קוד ה- Python המתאים. להלן הדוגמה של הקובץ שלי:

ייבוא RPi. GPIO כ- GPIO ייבוא זמן ייבוא תת -תהליך תת -ייבוא נתוני זמן כ- dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = Falsel_ time.time () SHUTOFF_DELAY = 180 # שניות ואילו נכון: i = GPIO.input (17) אם i == 0: # כאשר הפלט מחיישן התנועה נמוך, כבה את המסך אם לא כבה_ והזמן. time ()> (last_motion_time + SHUTOFF_DELAY): הדפס "אין פולשים", iturned_off = Truetime.sleep (1) subprocess.call (['/home/pi/monitor_off.sh'], shell = True) elif i == 1: #כאשר פלט מחיישן תנועה הוא HIGH, הפעל את המסך ONprint "פולש זוהה", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () אם כבה_דה ו dt.datetime.now (). שעה> 5 ו dt.datetime. עכשיו (). שעה <23: Turn_off = Falsesubprocess.call (['/home/pi/monitor_on.sh'], shell = True) אם _name_ == '_main _': try: main () למעט KeyboardInterrupt: GPIO.cleanup ()

שים לב כי "GPIO.setup (17, GPIO. IN)" מציין שסיכת הפלט מ- PIR מחוברת לסיכה 17 ב- Raspberry Pi. איזו סיכה תלויה אם אתה מגדיר GPIO.setmode (GPIO. BOARD) או GPIO.setmode (GPIO. BCM). ההבדל מוסבר כאן: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. יש לי # מול GPIO. BOARD, כך שזה מתעלם ומשתמשים ב- GPIO. BCM.

שימו לב לשורה

SHUTOFF_DELAY = 180 #שניות

כאן נאמר, כמה זמן הדלק מופעל מאז שהתגלה התנועה האחרונה, לפני שהוא כבוי. זה שימושי מכיוון שאני לא רוצה שהצג יכבה/יעלה כל הזמן כשאני עובר לידו, אבל רוצה להשאיר אותו דולק זמן מה לפני שהוא כבוי. בחרתי במרווח של 180 שניות, כך שהצג יכבה כ -3 דקות לאחר שהתנועה האחרונה זוהתה.

לבסוף, השורה הזו

אם מופעל_כוב ו dt.datetime.now (). שעה> 6 ו- dt.datetime.now (). שעה <23:

קובע כי המסך נדלק רק בין 6:00 ל -23: 00, כך שהוא לא מפריע לי במהלך הלילה. הקווים

- "אין פולשים", ד

ו

- "פולש זוהה", ד

מיועדים לבדיקת הסקריפט בלבד, תוכל למחוק אותם מאוחר יותר, כאשר תפעיל אותו. עכשיו בדוק את התסריט:

sudo python motion_sensor.py

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

sudo nano ~/.config/lxsession/LXDE-pi/autostart

והוסף את השורה הבאה

@sudo/usr/bin/python /home/pi/motion_sensor.py

כמובן שעליך לציין את שם הקובץ הנכון של סקריפט Python שיצרת.

שלב 5: תלו את לוח השנה

עם כל ההגדרות, הגיע הזמן לתלות את לוח השנה על הקיר!

בתחילה חשבתי להסתיר את Raspberry Pi מאחורי צג ה- LCD, כך שיהיה צורך רק בכבל אחד (מתח DC). אבל מכיוון שפטל פועל על 5V ותצוגת LCD פועלת על 12V, הייתי צריך שנאי נוסף. כמו כן, מארז הפטל עבה למדי, מה שאומר ש- LCD יהיה מרוחק כ -3 סנטימטרים מהקיר. אז זנחתי את זה והשארתי רק אלקטרוניקה LCD מאחורי ה- LCD, כך שהיא נמצאת במרחק של פחות מסנטימטר אחד מהקיר. רכשתי שני כבלים באורך 5 מטר, אחד HDMI ואחד 5, 5 מ מ לאספקת חשמל DC. שני הכבלים לבנים, כמו הקיר, מה שאומר שהם לא בולטים במיוחד. הצבתי את ה- LCD על הקיר והנחתי את פטל על גבי המקרר על הקיר הנגדי, כך שהוא בעצם מוסתר, אך עדיין נגיש בקלות.

מוּמלָץ: