תוכן עניינים:
- שלב 1: רשימת חלקים
- שלב 2: צריבת Raspbian וחיבור לוחות
- שלב 3: התקנת התוכנה הנדרשת
- שלב 4: כתיבת קוד כלשהו ובדיקתו
- שלב 5: הוספת סקריפטים אלה ל- Cron
- שלב 6: בדיקת Phat רמקול
- שלב 7: הגדרת שרת אינטרנט קטן ו- Webapp
- שלב 8: בניית האתר
- שלב 9: ריבה הכל למארז
- שלב 10: זהו
- שלב 11: תוספת
וִידֵאוֹ: תאורת לילה רעש לבן: 11 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
זהו פרויקט שהכנתי לילד שלי לשנה לחג המולד. אם כי בכנות, זו הייתה מתנת שפיות לי ולאשתי. מדובר במכונת רעש לבן שיכולה לנגן מספר צלילים שונים שנבחרו באמצעות ממשק אינטרנט, ומשלבת גם נורות שמשנות את צבען בהתאם לזמן (נורות אדומות פירושו להיות במיטה, צהוב אומר שאתה יכול לשחק בחדר שלך, וירוק אומר שזה בסדר לצאת). מכיוון שבני צעיר מכדי לדעת זמן, מנורת לילה המבוססת על צבע נראתה כמו רעיון ממש טוב.
זה פרויקט ממש קל, ומכיוון שכבר כתבתי את הקוד, זה אולי 1 מתוך 5 בסולם הקושי. אם יש לך פעוטות שמפריעים לך לעזאזל מוקדם מדי בבוקר, תרצה להכין אחד.
שלב 1: רשימת חלקים
1. פטל פי אפס W
2. מקרה כלשהו (השתמשתי במקרה הזה מאמזון)
3. בלינק מפימורוני
4. רמקול Phat מפימורוני (אתה יכול גם להשתמש ב- DAC אחר עם רמקולים זולים)
יהיה עליך כמה מיומנויות הלחמה בסיסיות בכדי להרכיב את דובר הרמקולים, יש קישור עם הוראות שלב אחר שלב מדף המוצר, כך שלא תוכל לדפוק אותו.
5. [אופציונלי] כבל מיקרו USB מסוג לוח הר - מבית Adafruit
6. כמה חוטים או מגשרים מחברים
זהו זה!
שלב 2: צריבת Raspbian וחיבור לוחות
אני משתמש ב- Raspian Stretch lite לבנייה זו. אז צרוב את זה ל- microSD עם כל כלי שעובד עבורך, ולאחר מכן הפעל את הפאי. אם אתה זקוק לעזרה בהקניית פאי ללא ראש כדי להתחבר ל- wifi של ביתך ולהפעיל ssh, יש הרבה הדרכות מקוונות שיכולות להראות לך כיצד לעשות זאת, אך תצטרך לוודא שעשית זאת במשך שאר הזמן. לעבוד.
באמצעות https://pinout.xyz אתה יכול למשוך את שני הלוחות ולקבל את הסיכות שלהם באתר זה. לוחות Blinkt דורשים רק 4 חיבורים, והרמקול Phat צריך 9.
זה אמור להיראות כמו התמונה בסיום. עכשיו אנחנו צריכים לבדוק שהכל עובד.
שלב 3: התקנת התוכנה הנדרשת
כעת, לאחר שאנו מחוברים, נצטרך להתקין את התוכנה הנדרשת להפעלת לוחות Blinkt ו- Speaker Phat. כנסו ל- pi ותמצאו את עצמכם בספריית הבית. הזן את הפרטים הבאים:
סלסול https://get.pimoroni.com/blinkt | לַחֲבוֹט
ואז ברגע שזה הושלם, זה:
curl -sS https://get.pimoroni.com/speakerphat | לַחֲבוֹט
זה יתקין את כל הדרוש לשני לוחות פימורוני. אם אתה מזין את הפקודה ls, אתה אמור לראות ספריית Pimoroni. אז עכשיו בואו נכתוב קוד ונבדוק את לוח ה- Blinkt.
שלב 4: כתיבת קוד כלשהו ובדיקתו
צור ספרייה בשם "סקריפטים" על ידי הקלדת סקריפטים mkdir ונשמור שם את כל הדרוש לנו. אז סקריפטים של תקליטורים כדי להיכנס לעצמך לתיקייה הזו.
עכשיו, מה שאנחנו רוצים הם אורות עמומים אדומים לשעות הלילה, אורות עמומים צהובים לזמן משחק שקט ואורות ירוקים מעט בהירים יותר כשזה בסדר לצאת. בשבילי, רציתי נורות אדומות בין השעות 19:30 ל -6: 15, ובשעה 6:15 הן יהפכו לצהובות למשך שעה, ואז לבסוף ירוק בשעה 7:15 בבוקר. רציתי גם שהם יכבו בשעה 8:30 בבוקר כשאף אחד לא יהיה בחדר.
ישנן שתי דרכים לעשות זאת. הראשון (הדרך שבה בחרתי לעשות זאת) הוא עם ארבעה סקריפטים שונים, המנוהלים ממשרות cron. הדרך השנייה לעשות זאת היא סקריפט אחד הכולל פונקציית זמן המופעלת בעת ההפעלה. למעשה כתבתי את התסריט כדי לעשות את זה קודם כל, אבל זה נראה פחות יעיל מאשר לעשות את זה על סמך cron, אז החלפתי אותו. אם אתה רוצה את שיטת "סקריפט אחד", הודע לי על כך ואוכל לפרסם אותה בתגובות.
אז נתחיל בתסריט האדום. הקלד touch red.py ולאחר מכן ננו red.py. לאחר מכן הזן את הקוד הבא.
#!/usr/bin/env python
יבוא blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #sets פיקסלים 3 ו -4 לאדום blinkt.show ()
לעשות את אותו הדבר עבור yellow.py ו- green.py.
yellow.py:
#!/usr/bin/env python
ייבא blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (4, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) #קובע פיקסלים 2, 3, 4 ו -5 לצהוב blinkt.show ()
green.py:
#!/usr/bin/env python
יבוא blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #sets את כל הפיקסלים ל blinkt.show ירוק ()
ולבסוף, אנו רוצים שתסריט ינקה את ה- Blinkt כאשר אין בו צורך (lightsout.py):
#!/usr/bin/env python
ייבוא blinkt blinkt.set_clear_on_exit (True) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #sets את כל הפיקסלים לכיבוי blinkt.show ()
זהו זה. לבדיקת הקלד python red.py ובדוק אם שני הפיקסלים האמצעיים נדלקים באדום. לאחר מכן הקלד python lightsout.py כדי לנקות אותו. זהו זה! בשלב הבא נצטרך להגדיר את אלה בכרטיסייה cron כך שיפעילו כאשר נרצה.
שלב 5: הוספת סקריפטים אלה ל- Cron
במסוף SSH סוג crontab -e
גלול לסוף הקובץ והוסף את השורות הבאות:
15 6 * * * python /home/pi/scripts/yellow.py15 7 * * * python /home/pi/scripts/green.py 30 8 * * * python /home/pi/scripts/lightsout.py 30 19 * * * python /home/pi/scripts/red.py
זה מגדיר את התסריטים לפעול בזמנים שתוארו בשלב הקודם, קדימה והתאימו אותם לצרכיכם.
זהו זה לאור הלילה! סופר קל. כעת נעבור להגדרת חלק הרעש הלבן של מבנה זה.
שלב 6: בדיקת Phat רמקול
הדרך הקלה ביותר (לדעתי) לבדוק את Phat Speaker היא על ידי התקנת סוקס והפעלת קצת סטטי משורת הפקודה.
sudo apt-get להתקין sox
לאחר ההתקנה, נוכל לנסות כמה פקודות הפעלה לדוגמה. זה צריך להישמע כמו גלים.
play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 טרפז amod 0.1 30
כמה מרגיע! Ctrl+c יעצור את זה. אבל, מה זה? יש הרבה נוריות לד על פניו של הרמקול Phat המואר, ואיננו יכולים להפריע לזה לנורות ה- Blinkt שלנו. אז בואו נכבה את אלה.
לשם כך, נצטרך לשנות את הקובץ /etc/asound.conf ולהסיר את תוסף מד VU, כך שהוא אפילו לא ינסה להניע את הנורות מלכתחילה. עשיתי זאת פשוט על ידי שינוי שם זה. הקלד פקודה זו mv /etc/asound.conf /etc/asound.conf.bak מצאתי זאת באמצעות קצת חיפוש בגוגל, כך שאולי יש דרך טובה יותר.
סוקס עובד, וזה נהדר, אבל תכננתי להשתמש בכמה קבצי MP3 הניתנים ללולאה לחלק מהרעש הלבן במכונה הזו, אז הייתי צריך נגן אחר, רצוי משהו ממש קל. mpg123 זה מה שהסתפקתי בו. התקן את זה עכשיו עם sudo apt-get install mpg123
אוקי, עכשיו כשאנחנו יודעים ש- Speaker Phat פועל כצפוי, הגיע הזמן לבנות את הממשק והתסריטים המתאימים.
שלב 7: הגדרת שרת אינטרנט קטן ו- Webapp
Flask היא מסגרת מיקרו אינטרנט הכתובה ב- Python. הוא מספק את כל הפונקציונליות הדרושה לנו עבור שרת האינטרנט (שעתיד לפעול כאפליקציה). התקן אותו באמצעות הפקודה הבאה:
בקבוק pip3 להתקנה
זה ייקח קצת זמן, אז תחכה. לאחר השלמתו, נצטרך לבנות את התיקיות שנצטרך להוציא מהן כאשר האתר פועל, ולתיקיות אלה יש שמות ספציפיים. נתחיל ממקום לאירוח האתר. מספריית הבית, צור ספרייה חדשה בשם www עם mkdir www. עכשיו תקליטור www נכנס לספרייה הזו. כאן אנו זקוקים לעוד שתי ספריות, אחת הנקראת סטטית ואחת נוספת נקראת תבניות.
אנחנו גם צריכים מקום לשים את קבצי ה- MP3 הניתנים לריצה. הכנתי ספרייה בספריית הבית בשם "צלילים" בשביל זה. מצאתי את קובצי ה- MP3 שלי על ידי חיפוש קבצי MP3 הניתנים ללולאה בלוגן בגוגל. הרבה מקומות פנויים שאפשר לצאת מהם. השתמשתי ב- WinSCP להעלאת הקבצים.
ייתכן שתרצה לבדוק אותם באמצעות הפקודה omxplayer למטה לשחק עם החלק --vol -### כדי לחייג את עוצמת הקול המתאימה לחדר שלך. שוב Ctrl+C יעצור את השחקן.
עכשיו כשיש לנו את כל אלה במקום, אפשר לכתוב קצת פייתון כדי לעמוד מול שרת האינטרנט כשה- pi מופעל. חזור לספריית www והפעל קובץ חדש בשם webapp.py (nano webapp.py) והכנס את הקוד הבא
webbapp.py:
#!/usr/bin/python
מבקבוק ייבוא בקבוק, render_template, request, ניתוב מחדש של ייבוא os app = Flask (_ שם_) @app.route ('/') def index (): החזר render_template ('index.html') @app.route ('/rain', methods = ['POST']) def rain (): os.system ("mpg123 -f 8000 --loop -1 ~/scripts/sounds/rain.mp3") return redirect ('/') @app.route ('/waves', method = ['POST']) def waves (): os.system ("mpg123 -f 20500 --loop -1 ~/scripts/sounds/waves.mp3") הפניה חזרה ('/') @app.route ('/whitenoise', methods = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/scripts/sounds/whitenoise.mp3") הפניה חזרה (' /') @app.route ('/stop ', methods = [' POST ']) def stop (): os.system ("killall mpg123") הפניה חזרה ('/') אם _name_ ==' _main_ ': app.run (debug = True, host = '0.0.0.0')
כפי שאתה יכול לראות webapp זה יכלול 5 עמודים, אחד לאינדקס, 3 עבור 3 צלילים שונים (גל, גשם ולבן) ועוד אחד לעצור. כל 4 הדפים שאינם אינדקס מפנים חזרה לאינדקס ('/') לאחר שהם מבצעים את הפקודה שנשלחה ל- omxplayer, לכן עלינו ליצור index.html אחד בלבד ותו לא. אני משתמש כאן ב- killall כפונקציית עצירה, כי לא הצלחתי למצוא דרך טובה יותר לשלוח פקודה "עצור" ל- omxplayer. אם ידוע לכם על דרך טובה יותר לעשות זאת, אשמח לשמוע!
עכשיו בואו להרכיב את index.html.
שלב 8: בניית האתר
אלה התמונות שבהן השתמשתי לבנייה שלי, אבל אתה מוזמן להכין בעצמך. כולם צריכים להישמר בתיקייה הסטטית שיצרנו קודם. הקובץ index.html שאנו יוצרים כאן צריך להיות בתיקיית התבניות. זה די חשוב, אחרת שום דבר מזה לא יעבוד. הנה הקוד של index.html שלי (שוב, זה פשוט HTML פשוט, אז שנה אותו בכל דרך שתתאים לך).
מכיוון ש- Instructables לא יאפשר לי לפרסם HTML גולמי, הנה קישור לקובץ כפי שהוא קיים ב- Dropbox שלי:
www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…
אבל במקרה שאי פעם ימות, קובץ ה- HTML הוא רק CSS מפואר ושולחן 2x2 פשוט עם 4 הסמלים האלה ככפתורים עם ערכי פוסט כמו:
form action = "/whitenoise" שיטת = "פוסט"
קלט src = "/static/whitenoise.png" value = "רעש לבן"
אמור להיות די קל להכין לעצמך אחד כזה.
השלב האחרון הוא לוודא ש- webapp.py פועל בעת ההפעלה, שוב, עשיתי זאת על ידי הוספתו לקרונטב. אז שוב הקלד crontab -e והוסף לסוף את הדברים הבאים:
@reboot python3 /home/pi/www/webapp.py
לאחר מכן הפעל מחדש את ה- pi, הצבע דפדפן במכונה אחרת (הטלפון שלך) אל ה- IP של ה- pi (הכי טוב אם אתה יכול להפוך את זה לסטטי) ובדוק אם זה עבד. לחץ על הכפתורים ובדוק אם אתה מקבל רעש.
בטלפון אנדרואיד אתה יכול לסמן אתר למסך הבית שלך, וזה מה שעשיתי עם זה כדי לגרום לו להיראות ולהרגיש כמו אפליקציה. אם אתה באמת רוצה לגרום לזה להיראות "פרו" מצא או צור קובץ.ico מתאים ותתן לאתר סמל משלו שיופיע במסך הבית של הטלפון שלך ויראה הרבה יותר כמו אפליקציה. הרבה הדרכות מקוונות כיצד להוסיף אייקון (favicon) לאתר.
שלב 9: ריבה הכל למארז
עכשיו כשהכל נבדק ועובד, הגיע הזמן לדחוף את כל זה למארז.
בניתי תושבת עמידה ל- Raspberry Pi Zero בעזרת שאריות פלסטיק שהיו לי ברחבי הבית. לאחר מכן קדחתי כמה חורים ללוח המיקרו USB, והשתמשתי בכמה קבצי תכשיטנים בריבוע מהחור. כבל ההרכבה בלוח מעט נוקשה, כך שאולי אקנה מתאם בזווית ישרה ליציאת המיקרו USB ב- Pi מתישהו בעתיד.
חתכתי פתח קטן בחלק העליון של המארז כדי שהרמקול ישחק על ידי קידוח שני חורים וחיבורם עם Dremel. לאחר מכן קדח את החורים במכסה כדי להרכיב את הרמקול Phat. בשביל מה זה שווה, אחרי שצילמתי את התמונה הזו חזרתי ועשיתי עוד כמה חורים כי הרעש באמת נלכד בתוך המארז. הרכבתי את ה- Blinkt בעזרת מרק הפוסטר כי הדבר אינו כולל חורי הר, אך נראה כי המרק מחזיק היטב, כך שהוא יעשה.
שלב 10: זהו
חבר אותו וסיימת. הנה שלי פועל רק אחרי 20:00. הנורית הירוקה בפאי עצמה אינה בהירה כמו שהתמונה הזו גורמת לה להיראות.
כמה עריכות מאוחרות יותר שביצעתי:
הוספתי עוד 4 דפים לקבצי webapp.py ו- index.html. 4 אלה הם "אדום", "צהוב", "ירוק" ו"כבוי ". די מסביר את עצמו. רציתי את היכולת להחליף אותו מגב ירוק לצהוב אם אני והאישה מרגישים עייפים במיוחד ולא רוצים להיות מוטרדים.
@app.route ('/red', methods = ['POST']) def red (): os.system ("python ~/scripts/red.py") הפניה חזרה ('/')
בעצם זה 4 פעמים, הפעלת 4 הסקריפטים השונים, ואז עוד כמה כפתורים באינדקס שקוראים לדפים האלה.
את השינוי האחר כבר ציינתי, אבל קידחתי עוד חורים והרחבתי את הפתח הקיים סביב הרמקול מכיוון שהרעש לא ברח מספיק מהמארז.
אם אעשה שינויים נוספים, אשמח לחזור לכאן ולרשום אותם.
שלב 11: תוספת
אחרי שבניתי את זה הבנתי שאשתי ואני לעתים קרובות משאירים את הטלפונים שלנו למטה כאשר מניחים את הילד למיטה או תנומה. אז הוספתי כפתור לחיצה רגעי לפין 36 הפיזי, וכללתי את הקוד הבא (קראתי לו button.py) להפעלה בעת ההפעלה ב- rc.local:
#!/usr/bin/env python
ייבוא RPi. GPIO כשעת יבוא GPIO ייבוא מערכת ייבוא תת -תהליך יבוא מחדש GPIO.setmode (GPIO. BOARD) # השתמש בלחצן ערכת מספור פינים פיזית = 36 # כפתור מחובר לפין פיזי 16 GPIO.setup (כפתור, GPIO. IN, pull_up_down = GPIO. PUD_UP) # הפוך את הכפתור לכניסה, הפעל את Resistor Pull UP בזמן אמת: אם GPIO.input (כפתור) == 0: # המתן ללחוץ על הלחצן returnprocess = False # בהתחלה מוגדר לצליל כבוי s = subprocess. Popen (["ps", "ax"], stdout = subprocess. PIPE) עבור x ב- s.stdout: if re.search ("mpg123", x): returnprocess = True if returnprocess == False: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") אחר: os.system (" killall mpg123 ") os.system ("python /home/pi/scripts/lightsout.py")
כפי שאתה יכול לראות, עברתי גם ל- mpg123 מ- omxplayer מכיוון שהוא הרבה יותר קל ופשוט לשימוש.
עם זאת, מסיבה כלשהי כאשר אני שם את הסקריפט הזה ב- rc.local הוא אכן פועל בהפעלה ללא בעיות. אבל השמע ממש ממש עלוב. כשאני מריץ את הסקריפט כרגיל, במרק, אין בעיות כאלה. יש לי זמן לפתור את הבעיה, אז אם למישהו יש רעיונות, אנא יידע אותי! תודה.
מוּמלָץ:
מנורת לילה מנורת לילה: 13 שלבים (עם תמונות)
מנורת לילה מנורת ירח: מנורת לילה מקסימה זו משתמשת בפנס הירח הנפלא שתוכל למצוא כאן https://www.instructables.com/id/Progressive-Detai… היא משתמשת בלוח ESP8266 בעלות נמוכה ליצירת מנורת לילה פנטסטית המשתמשת 3W LED RGB מ- Future Eden ויכול להציג
תאורת המסתורין (תאורת לילה): 4 שלבים
תאורת המסתורין (תאורת לילה): וזה פרויקט קטן ומהנה שקל לבצע, הפרויקט הזה הוא הפניה מ- https://www.instructables.com/id/Arduino-Traffic-L…, אבל אני כבר שינה הרבה מבנה של האתר המקורי, .אני מוסיף עוד לד ואני משתמש בקופסת הנעליים לארוז אותו
תאורת לילה Neopixel: 14 שלבים (עם תמונות)
תאורת לילה Neopixel: אני מעביר כמה סדנאות בתחום האלקטרוניקה תוך מספר שבועות, שבמרכזן פרויקט זול אך שימושי בעולם האמיתי. כאשר ניסיתי להמציא משהו להכין, רציתי שהוא יכלול מיקרו -בקר, נוריות NeoPixel (כי הן מדהימות)
קנה לבן לבן של ארדואינו (חלק ראשון): 6 שלבים (עם תמונות)
ארדואינו משמיעה קנה לבן (חלק ראשון): לפני שנים, הייתי עם סטודנט שהיה לו בן משפחה עיוור, הבנתי שנוכל להגיע לפתרון קטן המסוגל להשמיע כמה צעדים יש מכשול כלשהו, ברור ארדואינו עם מספרים שהוקלטו בעבר יכול
תאורת לילה אוטומטית: 5 שלבים (עם תמונות)
מנורת לילה אוטומטית: היום אני הולך להכין מנורת לילה אוטומטית לחדר שלי. זה עשה זאת בעצמך מגניב מאוד. זהו אחד המעגלים המגניבים שיצרתי …. אני חושב שבטח תאהבו את הפרויקט שלי