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

השמעת שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או בנאי Flyback: 6 שלבים (עם תמונות)
השמעת שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או בנאי Flyback: 6 שלבים (עם תמונות)

וִידֵאוֹ: השמעת שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או בנאי Flyback: 6 שלבים (עם תמונות)

וִידֵאוֹ: השמעת שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או בנאי Flyback: 6 שלבים (עם תמונות)
וִידֵאוֹ: פלייליסט לרכב | שירים ישראליים לנסיעה | ישי ריבו, עקיבא, עידן חביב, שולי רנד | פלייליסט נסיעה 2024, נוֹבֶמבֶּר
Anonim
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים
נגן שירים (MP3) באמצעות Arduino באמצעות PWM ברמקול או ברובוטריקים

היי ח'ברה, זו ההדרכה הראשונה שלי, אני מקווה שתאהבו את זה !!

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

רציתי להזכיר כי הפרויקט הזה אינו מיועד למתחילים !!!.

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

תשומת הלב

עשיתי את החלק השני של המדריך הזה, שהוא הרבה יותר קל ודורש בעיות מינימליות לעבודה

קישור לחלק השני (הקל ביותר).

שלב 1: דברים שאנחנו צריכים לפרויקט זה (דרישות)

1. לוח Arduino (אנו יכולים להשתמש בכל לוח (328, 2560) כלומר מגה, אונו, מיני וכו 'אך עם סיכות שונות ספציפיות)

2. מחשב או מחשב נייד עם לינוקס (השתמשתי בפדורה 29) או חי USB עם לינוקס

3. קרש או פרדבורד

4. חיבור חוטים

5. TC4420 (נהג Mosfet או דבר כזה)

6. Power Mosfet (ערוץ N או P, אנא חברו אז בהתאם) (השתמשתי בערוץ N)

7. רמקול או שנאי Flyback (כן קראתם נכון !!)

8. ספק כוח מתאים (0-12V) (השתמשתי באספקת כוח ATX משלי)

9. גוף קירור (הצלתי מהמחשב הישן שלי)

10. מחשב עם ווינדוס וכונן עט.

כדי לדעת את העבודה המפורטת של כל רכיב ופרויקט זה אנא קרא את השלב הבא.

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

שלב 2: הבנת עקרון העבודה

אההה !! החלק הארוך ביותר של פרק זה להוראה, קריאה וכתיבה משעמם.

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

מה שאנחנו עושים כאן הוא שראשונה אנחנו ממירים את שיר ה- MP3 שלנו לקובץ WAV ואת הקובץ הזה לקובץ כותרת C באמצעות התוכנה שנמצאת בקישור. קוד C זה למעשה מכיל 8 סיביות (מדוע 8 סיביות ?? קרא עוד) דוגמאות נתונים שאנו צריכים לשחק באמצעות ה- Arduino שלנו בקצב או במהירות קבועה, המפורטת בהתאם לקצב הדגימה שלנו.

תיאוריה של אות אודיו.

למי שלא יודע מהו קצב הדגימה או קצב הסיביות:-

קצב הדגימה מוגדר כמספר הדגימות, אנו משחקים בשנייה (בדרך כלל נמדדים ב- Hz או KHz).

למידע נוסף בפירוט: לחץ כאן

שיעורי הדגימה הסטנדרטיים הם 44100 הרץ (האיכות הטובה ביותר), 32000 הרץ, 22050 הרץ וכו '

מה שאומר ש- 44100 דוגמאות משמשות תוך שנייה ליצירת גל בהתאם.

כלומר, כל מדגם נדרש לשחק במרווח קבוע של 1/44100 = 22.67 ארה ב.

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

אבל עם Arduino או כל מיקרו-בקר אחר עם שעון 16Mhz מאפשר לנו להשתמש בנו עד 8 ביט בלבד. אני אסביר את זה למה.

יש נוסחה בדף מס '102 בגיליון הנתונים של 328p:- גליון נתונים

לא אפרט יותר מדוע אני משתמש בנוסחה זו.

תדירות האות = אות השעון / N x (1+למעלה)

אות שעון = 16Mhz (לוח Arduino)

N = מחליק מראש (1 הוא ערך לפרויקט שלנו)

TOP = ערך 0 עד 2^16 (עבור מונה טיימר של 16 סיביות) (255 = 2^8 (8 סיביות) לפרויקט שלנו)

אנו מקבלים את הערך של תדר האות = 62.5 קילוהרץ

המשמעות היא שתדר גלי המוביל תלוי בעומק הסיביות.

נניח, אם נשתמש בערך TOP = 2^16 = 65536 (כלומר עומק הסיביות של 16 סיביות)

אז נקבל את הערך של תדר האות = 244 הרץ (שלא נוכל להשתמש בו)

OKK … אז מספיקה התאוריה הזו של אופן הפעולה של אותות אודיו, אז נחזור לפרויקט.

ניתן להעתיק את קוד C שנוצר לשיר לארדואינו וניתן לשחק אותו, אך אנו מוגבלים להשמעת אודיו של 3 שניות עם קצב דגימה של 8000 הרץ. מכיוון שקוד C זה הוא קובץ טקסט ומכאן שאינו דחוס אלא דחוס. וזה לוקח יותר מדי מקום. (למשל קובץ קוד C עם אודיו בן 43 שניות עם 44 דגימות של 1 קילוהרץ לוקח מקום עד 23 מגה בייט). ואילו Arduino Mega שלנו נותן לנו שטח של כ- 256 Kb.

אז איך נשמיע שירים באמצעות Arduino. זה לא אפשרי. המדריך הזה מזויף. אל דאגה קוראים, לכן עלינו להשתמש בתקשורת כלשהי בין Arduino במהירות כה גבוהה (עד 1 Mb/s) כדי לשלוח נתוני אודיו ל- Arduino.

אבל כמה מהירות בדיוק אנחנו צריכים, כדי לעשות זאת ??

התשובה היא 44000 בתים לשנייה כלומר מהירות יותר מ 44000*8 = 325, 000 ביט/ש.

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

אההה … זה אומר שנוכל להשתמש בתקשורת סדרתית … אבל רגע … סדרתי אפשרי רק במהירויות של עד 115200 סיביות/s מה שאומר (325000/115200 = 3) כי הוא איטי פי שלוש מהנדרש.

לא, חברים, זה לא. נשתמש במהירות או בשידור Baud של 500, 000 סיביות/שניות עם כבל עד 20-30 ס מ לכל היותר, המהיר פי 1.5 מהנדרש.

למה לינוקס, לא ווינדוס ???

לכן עלינו לשלוח דוגמאות במרווח (שצוין גם למעלה) של 1/44100 = 22.67 ארה ב עם המחשב האישי שלנו.

אז איך נוכל לתכנת את זה כך ??

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

כמו nanosleep, Chrono וכו 'וכו'.

עבור (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

אבל אף אחד זה לא עבד על WINDOWS גם לא עבד בצורה זו ב- Linux (אבל מצאתי דרך אחרת שתוכל לראות בקוד שלי המצורף.)

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

בעיות שמצאתי אפילו עם לינוקס …

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

פונקציות כמו nanosleep, Chrono nanosleep וכו 'וכו' גם הן לא פועלות, מכיוון שהן מספקות שינה רק יותר מ -100 US. אבל הייתי צריך בדיוק 22 US בדיוק. חקרתי כל עמוד בגוגל והתנסיתי בכל הפונקציות האפשריות הזמינות ב- C/C ++ אבל שום דבר לא עבד בשבילי. ואז הגעתי לתפקוד משלי, שעבד עבורי כקסם אמיתי.

והקוד שלי מספק כעת שינה מדויקת ומדויקת של 1uS ומעלה !!!

אז כיסינו את החלק הקשה והשאר קל …

ואנחנו רוצים לייצר אות PWM באמצעות Arduino עם תדר ספציפי גם תדר גל נשא. (62.5KHz (כפי שחושב למעלה) לחסינות טובה של האות).

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

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

אז, זו הייתה כמעט התיאוריה של הפרויקט הזה, אנו יכולים לראות כעת את תרשים המעגלים.

שימו לב שימו לב תשומת לב

למעשה, הפרויקט הזה התקשה מאוד בכוונה (אני אסביר למה), יש שיטה נוספת שדורשת noPC רק Arduino ורמקול ב- nextinstructable. Link שלי כאן.

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

שלב 3: סכמטי

סכמטי
סכמטי

חבר את כל הרכיבים כפי שמוצג בתרשים. אז יש לכם כאן שתי אפשרויות:-

1. חבר רמקול (מחובר עם 5V)

2. חבר שנאי Flyback (מחובר עם 12V)

ניסיתי את שניהם. ושניהם עובדים די טוב.

כתב ויתור:-

*אני ממליץ להשתמש בשנאי Flyback בזהירות מכיוון שהוא עלול להיות מסוכן מכיוון שהוא מייצר מתח גבוה. ולא אהיה אחראי לכל נזק.*

שלב 4: המרת MP3 לקובץ WAV באמצעות Audacity

המרת MP3 לקובץ WAV באמצעות Audacity
המרת MP3 לקובץ WAV באמצעות Audacity
המרת MP3 לקובץ WAV באמצעות Audacity
המרת MP3 לקובץ WAV באמצעות Audacity
המרת MP3 לקובץ WAV באמצעות Audacity
המרת MP3 לקובץ WAV באמצעות Audacity

אז קודם כל תוריד את התוכנה

1. תעוזה, חיפוש והורדה מגוגל

2. כדי להמיר קובץ WAV ל- C-Code, הורד יישום חלון בשם WAVToCode

תוכל ללמוד כיצד להשתמש בתוכנת WAVToCode מהקישור הזה ולהוריד אותו מקישור זה.

אני גם אתן שלבים מפורטים כיצד להשתמש בשתי התוכנות.

אנא עיין בתמונות המקושרות להנחיה זו.

בשלב זה נמיר MP3 ל- Wav. (עקוב אחר התמונות, קצב הפרויקט חייב להיות 44100Hz)

בשלב הבא נמיר קובץ wav ל- C Code.

שלב 5: WAV ל- C-Code

WAV ל- C-Code
WAV ל- C-Code
WAV ל- C-Code
WAV ל- C-Code
WAV ל- C-Code
WAV ל- C-Code

עקוב אחר התמונות.

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

(אתה יכול לראות שהשיר של 1 דקות ב -41 דקות תפס שטח של 23MB.)

שנה את שם השיר ואת אורך השיר עם שם ומשך השיר בהתאמה.

ושמור את קובץ קוד C.

עשה זאת לכל השירים שאתה רוצה לשחק עם ארדואינו

שלב 6: צור קובץ סופי והפעל את Linux

צור קובץ סופי והפעל את לינוקס
צור קובץ סופי והפעל את לינוקס
צור קובץ סופי והפעל את Linux שלך
צור קובץ סופי והפעל את Linux שלך
צור קובץ סופי והפעל את Linux שלך
צור קובץ סופי והפעל את Linux שלך

הוסף את כל השירים שהומרו לקובץ המסופק בקישור זה.

ותעקוב אחרי התמונות.

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

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

בסופו של דבר הפעל את ה- Fedora Live USB שלך או אחר והתקן מהדר gcc ולאחר מכן השתמש בהוראות הידור מהתיקייה הידור התוכנית והפעל אותו.

בסופו של דבר תוכל להאזין לשירים מרמקול או מ Flyback.

תודה שקראתם את ההדרכה הזו ותגיבו אם אהבתם.

שימו לב: הפכתי את החלק השני של זה להדריך, שהוא הרבה יותר קל ודורש בעיות מינימליות לעבודה. קישור לחלק השני (הקל ביותר)

מוּמלָץ: