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

גלאי יונק/צילום תמונות: 12 שלבים (עם תמונות)
גלאי יונק/צילום תמונות: 12 שלבים (עם תמונות)

וִידֵאוֹ: גלאי יונק/צילום תמונות: 12 שלבים (עם תמונות)

וִידֵאוֹ: גלאי יונק/צילום תמונות: 12 שלבים (עם תמונות)
וִידֵאוֹ: אתגר - אל תדברו עם סירי ב-3 בלילה 2024, יולי
Anonim
גלאי יונק/צילום תמונות
גלאי יונק/צילום תמונות

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

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

שלב 1: בחירת מיקרו -בקר

בחירת מיקרו -בקר
בחירת מיקרו -בקר

המיקרו -בקר שבחרתי היה PJRC Teensy. ה- Teensy משתמש במיקרו -בקר ARM, במיוחד ב- ARM Cortex M4. Cortex M4 מכיל את החומרה לביצוע FFT (Fast Fourier Transform) שיעשה את הגילוי. PJRC מוכרת גם לוח שמע המאפשר לך להשתמש ב- Teensy לנגן מוזיקה וכן להקליט אודיו עם כניסה חיצונית, או מיקרופון קטן שאתה יכול להוסיף ללוח. התכנון שלי היה לגרום ל- Teensy לבצע FFT על השמע מהמיקרופון.

שלב 2: FFT?

FFT?
FFT?

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

זה עבד! אז איך עשיתי את זה, איך יכולת לעשות את זה ואיך תוכל לשפר את זה?

שלב 3: איך נשמע יונק דבש מרחף?

איך נשמע יונק דבש מרחף?
איך נשמע יונק דבש מרחף?

דבר ראשון, הייתי צריך להבין באיזו תדירות אני אשמע את כנפי הכנפיים של הדבש. כדי לקבוע זאת, השתמשתי באייפון שלי. חיברתי את האייפון לחצובה וגרמתי לו להקליט וידאו בהילוך איטי ישירות מול מזין הדבש שעל הסיפון שלנו. לאחר פרק זמן הסרתי את המצלמה והורדתי את הסרטון. לאחר מכן צפיתי בסרטון וחיפשתי יונק דבש מול המזין. כשמצאתי רצף טוב, ספרתי את מספר המסגרות האינדיבידואליות שנדרשו עבור הדבש כדי לנפנף בכנפיו מעמדה אחת עד לאותה תנוחה. תנועה איטית באייפון היא כ -240 פריימים לשנייה. ראיתי יונק דבש מרחף מול המזין וספרתי 5 מסגרות כדי להזיז את כנפיו מהמיקום קדימה למצב האחורי ולאחר מכן לחזור למצב קדימה. מדובר ב -5 מסגרות מתוך 240. זכור, אנו שומעים צליל על כל מכה של כנפי הכנף של הדבש (אחד על שבץ קדימה ואחד על מכה לאחור). עבור 5 מסגרות למחזור או לתקופה, אנו יכולים לחשב את התדירות כמחלקה לתקופה כלומר 1 / (5/240) או 48 הרץ. המשמעות היא שכאשר יונק הדבש הזה מרחף, הצליל שאנו שומעים חייב להיות כפול מזה או בערך 96 הרץ. התדירות כנראה גבוהה יותר כשהם עפים ולא מרחפים. הוא עשוי להיות מושפע גם מהמסה שלהם, אבל אני חושב שאפשר להניח שלרוב הציפורים מאותו מין יש אותה מסה בערך.

שלב 4: סדרת פורייה והטנסי

סדרות פורייה והנערה
סדרות פורייה והנערה

ה- Teensy (השתמשתי ב- Teensy 3.2) מיוצר על ידי PJRC (www.pjrc.com). ה- FFT יחושב על דגימת צליל. כדי לרכוש את הצליל, PJRC מוכרת לוח מתאם שמע עבור Teensy (TEENSY3_AUDIO - $ 14.25). הם גם מוכרים מיקרופון קטן הניתן להלחמה ללוח מתאם השמע (MICROPHONE - $ 1.25 $). לוח מתאם השמע משתמש בשבב (SGTL5000) שאליו יכולה הטנזי לדבר איתו באמצעות אוטובוס סדרתי (I2S). ה- Teensy משתמש ב- SGTL5000 כדי לדגום את השמע מהמיקרופון ולדמות אותו, כלומר ליצור מערכת מספרים המייצגת את הצליל שהמיקרופון שומע.

FFT היא רק גרסה מהירה של מה שנקרא טרנספורמציה פורטית דיסקרטית (DFT). עם זאת, ניתן לבצע DFT במספר שרירותי של דגימות, אך FFT צריך לאחסן את הדגימות בקבוצות שהן כפולות בינאריות. החומרה של Teensy יכולה לבצע FFT על קבוצה של 1024 דוגמאות (1024 = 2^10) אז בזה נשתמש.

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

לוח השמע של Teensy דוגם אודיו בתדר של 44, 100 הרץ. אז, 1024 דגימות בתדר זה מייצגות מרווח זמן של 1024/44100 או בערך 23.2 אלפיות השנייה. במקרה זה, ה- FFT ייצר כפלט, גדלים שהם כפולים שלמים של תקופת הדגימה של 43 הרץ (שוב, 1/0.0232 שווה בערך ל- 43 הרץ). נרצה לחפש גדלים שהם בערך פי שניים מהתדר הזה: 86 הרץ. זה לא בדיוק התדירות של כנפי הכנף המחושבות שלנו, אבל זה קרוב מספיק כפי שנראה.

שלב 5: שימוש בנתוני פורייה

שימוש בנתוני פורייה
שימוש בנתוני פורייה

הספריות ש- PJRC מספקת ל- Teensy יעבדו את הדגימות ויחזירו מערך של ערכי גודל. נתייחס לכל גודל במערך המוחזר כסל. הסל הראשון (באפס קיזוז במערך הנתונים שאנו מקבלים בחזרה) הוא קיזוז DC של הגל. אנו יכולים להתעלם מהערך הזה בבטחה. הסל השני (בקזוז 1) ייצג את גודל הרכיב 43 הרץ. זוהי תקופת הבסיס שלנו. הפח הבא (בקיזוז 2) ייצג את גודל הרכיב של 86 הרץ וכן הלאה. כל סל עוקב הוא כפולה שלמה של תקופת הבסיס (43 הרץ).

עכשיו המקום הזה קצת מוזר. אם היינו משתמשים ב- FFT לניתוח צליל מושלם של 43 הרץ אז ה- FFT היה מחזיר את הפח הראשון בסדר גודל כלשהו וכל שאר הפחים יהיו שווים לאפס (שוב, בעולם מושלם). אם הצליל שצילמנו וניתחנו היה 86 הרץ אז הסל במקזז אחד יהיה אפס והסל בקזוז 2 (ההרמוניה השנייה) יהיה בסדר גודל כלשהו ושאר הפחים יהיו אפס וכן הלאה. אבל אם היינו קולטים את הצליל של יונק הדבש וזה היה 96 הרץ (כפי שמדדתי על הציפור האחת שלי), אז לאורך 2 bin @ 86 הרץ יהיה גודל של ערך מעט נמוך יותר (מאשר הגל המושלם של 86 הרץ) ו לפחים שסביבו (אחד נמוך יותר וכמה גבוהים יותר) יהיה כל ערך פחות או יותר אפס.

אם גודל הדגימה עבור ה- FFT שלנו היה גדול מ- 1024 או אם תדירות דגימת השמע שלנו הייתה נמוכה יותר, נוכל לשפר את רזולוציית הפחים שלנו (כלומר קטנה יותר). אבל גם אם נשנה את הדברים האלה כדי להפוך את פחי ה- FFT שלנו לכפולים של 1 הרץ לתקופת הבסיס, עדיין נצטרך להתמודד עם 'זליגה' של פח זה. הסיבה לכך היא שלעולם לא נקבל תדר כנף שנחת, תמיד ובדיוק, על פח אחד. המשמעות היא שאנחנו לא יכולים רק לבסס את הזיהוי של יונק דבש על הערך שבסל 2 המקוזז ולהתעלם מהשאר. אנו זקוקים לדרך לנתח את הנתונים בכמה פחים על מנת לנסות ולהבין זאת. עוד על כך בהמשך.

שלב 6: התחל בבנייה

התחל בנייה
התחל בנייה
התחל בנייה
התחל בנייה

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

(https://www.pjrc.com/store/teensy3_audio.html).

שלב 7: חומרה לצלם תמונה

חומרה לצלם תמונה
חומרה לצלם תמונה
חומרה לצלם תמונה
חומרה לצלם תמונה

יש לי (טוב, לאשתי) מצלמה דיגיטלית של Canon Rebel. במצלמה יש שקע המאפשר לך לחבר שלט תריס מרחוק ידני. רכשתי שלט רחוק ידני מ- B&H Photo. לכבל יש את השקע המתאים למצלמה בקצה אחד ואורכו כ- 6 מטרים. חתכתי את הכבל בקצה ליד תיבת הבקרה והפשטתי את החוטים והלחמתי אותם לשלושה סיכות כותרת שאוכל לחבר ללוח הלחם. יש חוט חשוף שנטחן ושני אותות נוספים: הקצה הוא טריגר (ורוד) והטבעת (הלבנה) ממוקדת (ראו את התמונות). קיצור הקצה ו/או הטבעת לקרקע מפעיל את התריס ואת המיקוד במצלמה.

בעזרת חוט מגשר העברתי קרקע משותפת מהטנסי לאזור שבו אוכל להשתמש בו על לוח הלחם. חיברתי גם את האנודה של נורית לפין 2 ב- Teensy ואת הקתודה של ה- LED לנגד (100-220 אוהם) לאדמה. חיברתי גם את סיכה 2 של ה- Teensy לנגד 10K ואת הצד השני של הנגד שחיברתי לבסיס טרנזיסטור NPN (2N3904 נמצא בכל מקום). חיברתי את פולט הטרנזיסטור לקרקע ואת הקולט חיברתי לחוטים הלבנים והורודים מהכבל שעובר למצלמה. החוט החשוף, שוב, היה מחובר לאדמה. בכל פעם שהנורית נדלקת על ידי ה- Teensy, גם הטרנזיסטור NPN יופעל והוא יפעיל את המצלמה (ואת המיקוד). ראה את סכמטי.

שלב 8: עיצוב מערכת

עיצוב מערכת
עיצוב מערכת

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

ל- PJRC יש ממשק GUI נהדר המאפשר לך לגרור ולשחרר את מערכת השמע שלך עבור לוח ה- Teensy ולוח השמע. אתה יכול למצוא אותו כאן:

www.pjrc.com/teensy/gui/

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

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

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

שלב 9: קוד

קוד
קוד

זה ייקח יותר מדי מקום במדריך הזה לעבור על התוכנה בפירוט. מה שאנסה לעשות הוא להדגיש כמה מחתיכות הקוד העיקריות. אבל זה בכל מקרה לא יישום גדול במיוחד. ל- PJRC יש הדרכת וידאו מצוינת על השימוש ב- Teensy ובספריות/כלי האודיו (https://www.youtube.com/embed/wqt55OAabVs).

התחלתי עם קוד דוגמא מסוג FFT מ- PJRC. הדבקתי את מה שקיבלתי מכלי עיצוב מערכת השמע לראש הקוד. אם תסתכל על הקוד אחרי זה תראה קצת אתחול ואז המערכת מתחילה לבצע דיגיטציה של אודיו מהמיקרופון. התוכנה נכנסת ללולאה 'לנצח' () ומחכה שנתוני FFT יהיו זמינים באמצעות שיחה לפונקציה fft1024_1.available (). כאשר נתוני FFT זמינים, אני לוקח עותק של הנתונים ומעבד אותם. שים לב, אני תופס נתונים רק אם גודל הסל הגדול ביותר הוא מעל ערך מוגדר. ערך זה הוא האופן שבו אני מגדיר את רגישות המערכת. אם הפחים נמצאים מעל הערך שנקבע אז אני מנרמל את הגל ומעביר אותו למערך זמני לעיבוד, אחרת אני מתעלם ממנו וממשיך לחכות ל- FFT אחר. עלי לציין שאני משתמש גם בפונקציית בקרת הגברת המיקרופון כדי להתאים את הרגישות של המעגל (sgtl5000_1.micGain (50)).

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

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

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

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

שלב 10: הרכבה

הַרכָּבָה
הַרכָּבָה

אתה יכול לראות בתמונה כיצד הרכבתי (באופן לא רציני) את האלקטרוניקה. חיברתי את ה- Teensy ללוח לחם שהיה תקוע בלוח נשיאה יחד עם תואם אחר (לא בשימוש) של Arduino (Arduino Zero אני חושב). קשרתי את כל הדבר על עמוד סוכך מתכת על הסיפון שלי (הוספתי גם הקלה במתיחה לכבל שעובר למצלמה). המוט היה ממש ליד מזין הדבש. הפעלתי את האלקטרוניקה בעזרת לבנה חשמלית קטנה מסוג LiPo שתוכל להשתמש בה כדי להטעין טלפון סלולרי מת. לבני החשמל היה מחבר USB שבו השתמשתי כדי להעביר את החשמל ל- Teensy. העברתי את כבל ההדק המרוחק למצלמה וחיברתי אותו. הייתי מוכן לפעולה של ציפורים!

שלב 11: תוצאות

תוצאות
תוצאות

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

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

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

שלב 12: מחשבות אחרונות

מחשבות אחרונות
מחשבות אחרונות

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

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

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

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

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

תודה שקראתם!

כדי להשתמש בקוד שפרסמתי תזדקק ל- Arduino IDE (https://www.arduino.cc/en/Main/Software). תזדקק גם לקוד Teensyduino מ- PJRC (https://www.pjrc.com/teensy/td_download.html).

מוּמלָץ: