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

תאורת לילה רעש לבן: 11 שלבים (עם תמונות)
תאורת לילה רעש לבן: 11 שלבים (עם תמונות)

וִידֵאוֹ: תאורת לילה רעש לבן: 11 שלבים (עם תמונות)

וִידֵאוֹ: תאורת לילה רעש לבן: 11 שלבים (עם תמונות)
וִידֵאוֹ: עדן חסון ואודיה - הנשיקה! 😱 2024, יולי
Anonim
מנורת לילה רעש לבן
מנורת לילה רעש לבן
מנורת לילה רעש לבן
מנורת לילה רעש לבן

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

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

שלב 1: רשימת חלקים

רשימת חלקים
רשימת חלקים
רשימת חלקים
רשימת חלקים
רשימת חלקים
רשימת חלקים

1. פטל פי אפס W

2. מקרה כלשהו (השתמשתי במקרה הזה מאמזון)

3. בלינק מפימורוני

4. רמקול Phat מפימורוני (אתה יכול גם להשתמש ב- DAC אחר עם רמקולים זולים)

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

5. [אופציונלי] כבל מיקרו USB מסוג לוח הר - מבית Adafruit

6. כמה חוטים או מגשרים מחברים

זהו זה!

שלב 2: צריבת Raspbian וחיבור לוחות

צרבו את Raspbian וחיברו את הלוחות
צרבו את 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 הוא אכן פועל בהפעלה ללא בעיות. אבל השמע ממש ממש עלוב. כשאני מריץ את הסקריפט כרגיל, במרק, אין בעיות כאלה. יש לי זמן לפתור את הבעיה, אז אם למישהו יש רעיונות, אנא יידע אותי! תודה.

מוּמלָץ: