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

בורר ניגון DIP בעזרת סיכה אחת: 4 שלבים
בורר ניגון DIP בעזרת סיכה אחת: 4 שלבים

וִידֵאוֹ: בורר ניגון DIP בעזרת סיכה אחת: 4 שלבים

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

לפני זמן מה עבדתי על פרויקט "תיבת מוזיקה" שצריך לבחור בין עשרה קטעי ניגון שונים. בחירה טבעית לבחירת מנגינה ספציפית הייתה מתג טבילה 4 פינים מכיוון ש -4 מתגים מספקים 24= 16 הגדרות שונות. עם זאת, יישום הכוח האכזרי לגישה זו דורש 4 סיכות להתקן, אחת לכל מתג. מכיוון שתכננתי להשתמש ב- ATtiny85 לפיתוח, אובדן של 4 סיכות היה קצת יותר מדי. למרבה המזל, נתקלתי במאמר המתאר שיטה גאונית לשימוש בפין אנלוגי אחד לטיפול בכניסות מתג מרובות.

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

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

שלב 1: חומרה נדרשת

חומרה נדרשת
חומרה נדרשת

השימוש ב- UNO כפלטפורמת היישום ממזער את מספר רכיבי החומרה הנדרשים. יישום שיטת הכניסה של מרובי מתגים דורש מתג טבילה בן 4 פינים בלבד, 5 הנגדים המשמשים את מחלק המתח וחוט חיבור לחיבורים. זמזם פיזו מתווסף לתצורה ליישום בורר הכוונון של תיבת המוסיקה. לחלופין, בהתאם לסוג מתג הטבילה המשמש, כדאי להשתמש בשקע 2x4 8 פינים לחיבור מתג הטבילה ללוח הלחם מכיוון שנראה כי סיכות מתג הטבילה הסטנדרטיות מיועדות להלחמה ללוח perfboard שאינו מתחבר ישירות ללוח לחם. השקע מייצב את חיבורי מתג הטבילה ומונע את מתג ההרמה בקלות בעת הגדרת מתגי המתג.

שֵׁם מקור אפשרי כיצד משתמשים
מתג טבילה 4 פינים בחירת ניגון
שקע 2x4 פינים (אופציונלי) אֲמָזוֹנָה העמודים ברוב מתגי הטבילה אינם מחזיקים היטב את המתג בלוח לחם. שקע עוזר להפוך את החיבור למוצק יותר. אלטרנטיבה היא למצוא מתג טבילה שבאמת מיועד לשימוש בלוח לחם עם סיכות IC רגילות.

נגדים:

  • 10K x2
  • 20K
  • 40K
  • 80K
מיישם מחלק מתח
זמזם פיצו פסיבי אֲמָזוֹנָה נגן מנגינה כפי שהיא מונעת על ידי האפליקציה באמצעות פונקציית הטון Arduino

שלב 2: הסבר על שיטת ריבוי מתגים

הסבר על שיטת ריבוי מתגים
הסבר על שיטת ריבוי מתגים

חלק זה דן במושגי היסוד של שיטת רב המתגים ומפתח את המשוואות הנדרשות לחישוב עצמאי של מזהים ייחודיים עבור כל אחת מ -16 תצורות הגדרת מתג הטבילה האפשריות. לאחר מכן ניתן להשתמש במזהים אלה בתוכנת יישום כדי לשייך תצורה של מתג לפעולה. לדוגמה, ייתכן שתרצה שההגדרה - הפעלה 1, כיבוי 2, כיבוי 3, כיבוי 4 (1, 0, 0, 0) - לשחק את Amazing Grace ו- (0, 1, 0, 0) לשחק אריה ישן הלילה. למען הקיצור והקצרה, מזהי התצורה מכונים המשוואים בשאר המסמך.

תמונה
תמונה

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

כפי שצוין בתרשים העיצוב לעיל רב המתג מוגדר כמפריד מתח עם R2 קבוע ו- R.1 שווה להתנגדות המורכבת/המקבילה לנגדי מתג 4 הטבילה. הערך של R.1 תלוי אילו מתגי טבילה מופעלים ולכן תורמים להתנגדות המורכבת. מאחר ונגדי מתג הטבילה נמצאים במקביל, משוואת חישוב ההתנגדות המקבילה מצוינת במונחים של הדדיות של נגדי הרכיב. עבור התצורה שלנו והמקרה שכל המתגים מופעלים, המשוואה הופכת

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

נותן ר1 = 5333.33 וולט. כדי להסביר את העובדה שלרוב ההגדרות כבוי לפחות אחד המתגים, מצב המתג משמש כמכפיל:

1/R1 = ש1*1/80000 + שניות2*1/40000 + שניות3*1/20000 + שניות4*1/10000 (2)

היכן מכפיל המדינה, שאני, שווה ל -1 אם המתג מופעל ושווה ל- 0 אם המתג כבוי. ר1 כעת ניתן להשתמש בחישוב יחס ההתנגדות הדרוש למשוואה 1. שימוש במקרה שבו כל המתגים מופעלים כדוגמה שוב

יחס = R2/(ר1+R.2) = 10000/(5333.33+10000) =.6522

השלב האחרון בחישוב ערך המשווה החזוי הוא הכפלת ה- RATIO ב- 1023 על מנת לחקות את ההשפעה של הפונקציה analogRead. מזהה המקרה שבו כל המתגים מופעלים הוא

משווה15 = 1023*.6522 = 667

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

  1. ר1 מחושב באמצעות משוואה 2
  2. ר1 ו- R.2 משמשים לחישוב יחס ההתנגדות הקשור
  3. ה- RATIO מוכפל ב- 1023 כדי לקבל את ערך ההשוואה
  4. לחלופין, ניתן לחשב גם את מתח המוצא החזוי כ- RATIO*Vin

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

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

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

//-------------------------------------------------------------------------------------

// תוכנית הדגמה לקריאת פלט מחלק המתח ולהשתמש בו לזיהוי תצורת מתג הטבילה הנוכחי // על ידי חיפוש ערך הפלט במערך של // ערכי השוואה לכל הגדרה אפשרית. ניתן // להשיג את הערכים במערך החיפוש מהריצה קודמת לתצורה או באמצעות חישוב // המבוסס על המשוואות הבסיסיות. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // הגדר משתני עיבוד int dipPin = A0; // סיכה אנלוגית עבור כניסת מחלק מתח int dipIn = 0; // מחזיק פלט מתח מחלק מתורגם על ידי analogRead int count = 0; // counter counter int epsilon = 7; // מרווח השוואה bool dipFound = false ברוחב חצי רוחב // נכון אם פלט מחלק המתח הנוכחי נמצא בחיפוש בטבלה של חלל () {pinMode (dipPin, INPUT); // להגדיר את סיכת מחלק המתח כ- INPUT Serial.begin (9600); // אפשר תקשורת טורית} לולאת חלל () {עיכוב (3000); // שמור על הפלט מלגלול מהר מדי // אתחל מספר פרמטרי חיפוש = 0; dipFound = false; // קרא ותעד את מתח המוצא הנוכחי dipIn = analogRead (dipPin); Serial.print ("פלט מחלק"); Serial.print (dipIn); // חפש רשימת השוואות לערך נוכחי בעוד ((ספירה <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// מצא אותו dipFound = true; Serial.print ("נמצא בכניסה"); Serial.print (count); Serial.println ("ערך" + מחרוזת (משווה [ספירה])); לשבור; } ספירה ++; } if (! dipFound) {// ערך לא בטבלה; לא אמור לקרות Serial.println ("OOPS! לא נמצא; עדיף להתקשר ל- Ghost Busters"); }}

שלב 3: גיליון אלקטרוני של השוואה

תמונה
תמונה

החישובים עבור 16 ערכי ההשוואה ניתנים בגיליון האלקטרוני המוצג למעלה. קובץ האקסל המצורף זמין להורדה בתחתית סעיף זה.

עמודות גיליון אלקטרוני A-D מתעדות את ערכי הנגד של מתג הטבילה ו -16 הגדרות המתג האפשריות. שים לב כי מתג ה- DIP של החומרה המוצג בתרשים העיצוב המפריץ ממוספר למעשה משמאל לימין במקום המספור מימין לשמאל המוצג בגיליון האלקטרוני. מצאתי את זה קצת מבלבל אבל האלטרנטיבה לא מציבה את תצורת "1" (0, 0, 0, 1) בראש הרשימה. עמודה E משתמשת בנוסחה 2 של הסעיף הקודם כדי לחשב את ההתנגדות המקבילה של מחלק המתח R1 עבור ההגדרה. עמודה F משתמשת בתוצאה זו כדי לחשב את ההתנגדות הקשורים RATIO, ולבסוף, עמודה G מכפילה את ה- RATIO בערך המקסימלי של AnalogRead (1023) כדי להשיג את ערך המשווה החזוי. 2 העמודות האחרונות מכילות את הערכים האמיתיים מהריצה של תוכנית ההדגמה יחד עם ההבדלים בין הערכים החזאים והערכים בפועל.

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

שלב 4: נגן מנגינה

נגן מנגינה
נגן מנגינה

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

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

הבחירה והזיהוי מתבצעים כדלקמן:

  1. "המשתמש" קובע את מתגי הטבילה בתצורה המשויכת למנגינה הרצויה
  2. כל מחזור לולאת תכניות המזהה להגדרת מתג הטבילה הנוכחי מתקבל באמצעות analogRead
  3. מזהה התצורה שלב 2 מושווה מול כל אחד מהמשווים ברשימת המנגינות הזמינה
  4. אם נמצאה התאמה, נקרא שגרת playTune עם המידע הדרוש לגישה לרשימת תווי המנגינה

    באמצעות פונקציית הטון Arduino כל תו מושמע דרך הבאזר

  5. אם לא נמצאה התאמה, לא תנקוט פעולה
  6. חזור על 1-5

הגדרות מתג DIP עבור המנגינות הזמינות מוצגות בטבלה שלהלן כאשר 1 פירושו שהמתג פועל, 0 כיבוי. נזכיר כי הדרך שבה מתג הטבילה מכוון את מתג 1 במיקום השמאלי ביותר (זה המשויך לנגד 80K).

שֵׁם מתג 1 מתג 2 מתג 3 מתג 4
דני בוי 1 0 0 0
דוב קטן 0 1 0 0
אריה ישן הלילה 1 1 0 0
אף אחד לא יודע מה הבעיה 0 0 1 0
חן מדהים 0 0 0 1
חלל ריק 1 0 0 1
מלעיג בירד היל 1 0 1 1

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

מוּמלָץ: