- חומרים נדרשים
- חיישן סאונד עובד
- מדידת תדר שמע באוסילוסקופ
- תרשים מעגל גלאי משרוקיות
- מדידת תדירות עם Arduino
- מתכנת את Arduino לגילוי משרוקית
- גלאי משרוקיות Arduino עובד
כילד הוקסמתי ממכונית מוזיקת צעצועים שמופעלת כשמחאים כפיים בידיים, ואז כשגדלתי תהיתי אם נוכל להשתמש בה כדי להחליף אורות ומאווררים בביתנו. זה יהיה מגניב פשוט להדליק את המאווררים שלי ואת האורות על ידי מחיאת כפיים בלבד במקום ללכת עם העצמי העצלן שלי אל לוח המתגים. אך לעיתים קרובות זה לא תקין מכיוון שמעגל זה יגיב לכל רעש חזק בסביבה, כמו רדיו חזק או מכסחת הדשא של שכני. למרות שבניית מתג מחיאות כפיים היא גם פרויקט שכיף לעשות.
זה היה אז, כשנתקלתי בשיטה זו של איתור משרוקיות שבה המעגל יגלה שריקה. משרוקית שלא כמו צלילים אחרים תהיה בתדירות אחידה למשך פרק זמן מסוים ולכן ניתן להבדיל בין דיבור או מוסיקה. אז במדריך זה נלמד כיצד לזהות צליל משרוקית על ידי ממשק חיישן סאונד לארדואינו וכאשר זוהקת משרוקית נעבור בין נורת AC דרך ממסר. על הדרך נלמד גם כיצד מתקבלים אותות קול על ידי המיקרופון וכיצד מודדים תדר באמצעות Arduino. נשמע מעניין נכון אז בואו נתחיל עם פרויקט אוטומציה ביתית מבוסס Arduino.
חומרים נדרשים
- ארדואינו UNO
- מודול חיישן קול
- מודול ממסר
- מנורת AC
- חוטי חיבור
- קרש לחם
חיישן סאונד עובד
לפני שנצלול לחיבור החומרה ולקוד של פרויקט אוטומציה ביתית זה, בואו נסתכל על חיישן הקול. חיישן הקול המשמש במודול זה מוצג להלן. עקרון העבודה של מרבית חיישני הקול הקיימים בשוק דומה לזה, אם כי המראה עשוי להשתנות מעט.
כידוע המרכיב הפרימיטיבי בחיישן הקול הוא המיקרופון. מיקרופון הוא סוג של מתמר הממיר גלי קול (אנרגיה אקוסטית) לאנרגיה חשמלית. בעיקרון הסרעפת בתוך המיקרופון רוטטת לגלי הקול באטמוספרה שמייצרת אות חשמלי על סיכת הפלט שלו. אך אותות אלה יהיו בעוצמה נמוכה מאוד (mV) ולכן לא ניתן לעבד אותם ישירות על ידי מיקרו-בקר כמו ארדואינו. כמו כן, כברירת מחדל אותות קול הם אנלוגיים באופיים ומכאן שהפלט מהמיקרופון יהיה גל סינוס בתדר משתנה, אך מיקרו-בקרים הם מכשירים דיגיטליים ולכן הם עובדים טוב יותר עם גל מרובע.
כדי להגביר את גלי הסינוס האותיים הנמוכים ולהמיר אותם לגלים מרובעים, המודול משתמש במודול ההשוואה LM393 המובנה כמוצג לעיל. פלט השמע המתח הנמוך מהמיקרופון מסופק לסיכה אחת של המשווה דרך טרנזיסטור מגבר ואילו מתח סימוכין נקבע על הסיכה השנייה באמצעות מעגל מחלק מתח הכולל פוטנציומטר. כאשר מתח יציאת השמע מהמיקרופון עולה על המתח הקבוע מראש המשווה עולה גבוה עם 5 וולט (מתח הפעלה), אחרת המשווה נשאר נמוך ב- 0 וולט. בדרך זו גל סינוס עם אות נמוך יכול להיות ממיר לגל מרובע במתח גבוה (5V). תמונת המצב של האוסצילוסקופ למטה מציגה את אותו המקום בו הגל הצהוב הוא גל הסינוס הנמוך של האות והכחול פועל הוא הגל המרובע המוצא. הניתן לשלוט על הרגישות על ידי שינוי הפוטנציומטר במודול.
מדידת תדר שמע באוסילוסקופ
מודול חיישן קול זה ימיר את גלי הקול באטמוספירה לגלים מרובעים שתדירותם תהיה שווה לתדר גלי הקול. אז על ידי מדידת תדירות הגל המרובע אנו יכולים למצוא את תדירות אותות הקול באטמוספרה. כדי לוודא שהדברים עובדים כמו שהם אמורים חיברתי את חיישן הקול לתחום שלי כדי לחקור את אות הפלט שלו כפי שמוצג בסרטון למטה.
הפעלתי את מצב המדידה בהיקף שלי כדי למדוד את התדירות והשתמשתי באפליקציית Android (Frequency Sound Generator) מחנות Play לייצור אותות קול בתדר ידוע. כפי שניתן לראות ב- GID לעיל ההיקף הצליח למדוד אותות קול בדיוק די הגון, ערך התדר המוצג בהיקף קרוב מאוד לזה המוצג בטלפון שלי. עכשיו, כשאנחנו יודעים שהמודול עובד, אפשר להמשיך עם ממשק חיישן סאונד עם Arduino.
תרשים מעגל גלאי משרוקיות
תרשים המעגל השלם למעגל מתג גלאי משרוקיות Arduino באמצעות חיישן סאונד מוצג להלן. המעגל שורטט באמצעות תוכנת פריצינג.
חיישן הקול ומודול הממסר מופעלים באמצעות סיכה 5V של הארדואינו. סיכת הפלט של חיישן הקול מחוברת לסיכה הדיגיטלית 8 של הארדואינו, זאת בגלל מאפיין הטיימר של אותו סיכה ונדון בנושא נוסף בסעיף התכנות. מודול הממסר מופעל על ידי סיכה 13 המחוברת גם לנורית ה- LED המובנית בלוח UNO.
בצד אספקת החשמל החוט הנייטרלי מחובר ישירות לסיכה המשותפת (C) של מודול הממסר ואילו השלב מחובר לסיכה הרגילה פתוחה (NO) של הממסר דרך עומס זרם החשמל (נורה). בדרך זו כאשר הממסר מופעל, הפין NO יחובר לסיכת C וכך הנורה תבריק. אחרת הבלוב יישאר כבוי. לאחר החיבורים, החומרה שלי נראתה ככה.
אזהרה: עבודה עם מעגל זרם חילופין עלולה להיות מסוכנת, להיות זהירה בזמן הטיפול בחוטים חיים ולהימנע מקצר. מפסק או השגחת מבוגרים מומלצים לאנשים שאינם מנוסים באלקטרוניקה. ראה הוזהרת!!
מדידת תדירות עם Arduino
בדומה להיקף שלנו שקורא את תדירות הגלים המרובעים הנכנסים, עלינו לתכנת את ארדואינו כדי לחשב תדר. למדנו כבר כיצד לעשות זאת בהדרכת מונה התדרים שלנו באמצעות פונקציית הדופק. אך במדריך זה נשתמש בספריית Freqmeasure למדידת תדירות לקבלת תוצאות מדויקות. ספריה זו משתמשת בהפסקת הטיימר הפנימית בסיכה 8 כדי למדוד כמה זמן הדופק נשאר פעיל. ברגע שהזמן הוא מדד נוכל לחשב את התדירות באמצעות הנוסחאות F = 1 / T. אולם מכיוון שאנו משתמשים ישירות בספרייה איננו צריכים להיכנס לפרטי הרישום ולמתמטיקה של אופן מדידת התדירות. ניתן להוריד את הספרייה מהקישור למטה:
- ספריית מדידת תדרים מאת pjrc
הקישור שלעיל יוריד קובץ zip, ואז תוכל להוסיף קובץ zip זה ל- ID של Arduino שלך על ידי ביצוע הנתיב Sketch -> Include Library -> Add.ZIP Library.
הערה: השימוש בספרייה יבטל אתפונקציונליותה- AnalogWrite בסיכה 9 ו -10 ב- UNO מכיוון שהטיימר יופעל על ידי ספריה זו. כמו כן סיכות אלה ישתנו אם משתמשים בלוחות אחרים.
מתכנת את Arduino לגילוי משרוקית
התוכנית המלאה עם וידאו הדגמה ניתן למצוא בתחתית הדף הזה. בכותרת זו אסביר את התוכנית על ידי פריצתו לקטעים קטנים.
כמו תמיד, אנו מתחילים את התוכנית על ידי הכללת הספריות הנדרשות והכרזה על המשתנים הנדרשים. ודא שהוספת את ספריית FreqMeasure.h כבר כמוסבר בכותרת לעיל. המצב המשתנה מייצג את מצב ה- LED והמשתנה תדר והמשכיות משמשים להפקת התדר הנמדד והמשכיותו בהתאמה.
#לִכלוֹל
בתוך פונקציית ההתקנה הריקנית, אנו מתחילים את המסך הטורי בקצב שידור של 9600 לצורך איתור באגים. ואז השתמש בפונקציה FreqMeasure.begin () כדי לאתחל את סיכה 8 למדידת התדר. אנו מצהירים גם כי פין 13 (LED_BUILTIN) הוא פלט.
הגדרת חלל () { Serial.begin (9600); FreqMeasure.begin (); // מדידות על סיכה 8 כברירת מחדל pinMode (LED_BUILTIN, OUTPUT); }
בתוך הלולאה האינסופית, אנו ממשיכים להקשיב על סיכה 8 באמצעות הפונקציה FreqMeasure.available (). אם יש אות נכנס אנו מודדים את התדר באמצעות FreqMeasure.read (). כדי למנוע שגיאות בגלל רעש אנו מודדים 100 דגימות ולקחנו ממוצע של זה. הקוד לעשות את אותו הדבר מוצג להלן.
אם (FreqMeasure.available ()) { // ממוצע מספר קריאות ביחד סכום = sum + FreqMeasure.read (); ספירה = ספירה + 1; אם (ספירה> 100) { תדירות = FreqMeasure.countToFrequency (סכום / ספירה); Serial.println (תדר); סכום = 0; ספירה = 0; } }
אתה יכול להשתמש בפונקציה Serial.println () כאן כדי לבדוק את ערך התדר לשריקה שלך. במקרה שלי הערך שהתקבל היה בין 1800Hz ל- 2000Hz. תדירות השריקה של רוב האנשים תיפול בטווח המסוים הזה. אבל אפילו צלילים אחרים כמו מוזיקה או קול עשויים ליפול תחת התדר הזה, כדי להבדיל אותם נעקוב אחר המשכיות. אם התדר רציף שלוש פעמים, אנו מאשרים שזה צליל משרוקית. לכן, אם התדר הוא בין 1800 ל -2000, אנו מגדילים את המשתנה שנקרא המשכיות.
אם (תדר> 1800 && תדר <2000) {המשכיות ++; Serial.print ("המשכיות ->"); Serial.println (המשכיות); תדר = 0;}
אם ערך ההמשכיות מגיע לשלושה או עולה על שלושה, אנו משנים את מצב ה- LED על ידי החלפת המשתנה הנקרא מצב. אם המדינה כבר נכונה אנו משנים אותה לשקר ולהיפך.
אם (המשכיות> = 3 && מצב == שקר) {מדינה = נכון; המשכיות = 0; Serial.println ("אור נדלק"); עיכוב (1000);} אם (המשכיות> = 3 && מצב == נכון) {מדינה = שקר; המשכיות = 0; Serial.println ("אור כבוי"); עיכוב (1000);}
גלאי משרוקיות Arduino עובד
לאחר שהקוד והחומרה מוכנים אנו יכולים להתחיל לבדוק אותו. ודא שהחיבורים תקינים והפעל את המודול. פתח את המסך הסדרתי והתחל לשרוק, תוכל להבחין בערך ההמשכיות שמצטבר ולבסוף להדליק או לכבות את המנורה. צילום תמונה לדוגמא של המסך הסידורי שלי מוצג להלן.
כאשר המסך הסדרתי אומר כי האור נדלק את הסיכה 13 יהיה גבוה והממסר יופעל להדליק את המנורה. באופן דומה המנורה תכבה כאשר המסך הטורי אומר כי האור כבוי . לאחר שבדקת את העבודה תוכל להפעיל את ההתקנה באמצעות מתאם 12V ולהתחיל לשלוט על מכשיר הביתי שלך באמצעות משרוקית.
את העבודה המלאה של פרויקט זה תוכלו למצוא בסרטון המקושר למטה. מקווה שהבנת את ההדרכה ונהנית ללמוד משהו חדש. אם יש לך בעיה לגרום לדברים לעבוד, השאר אותם בסעיף ההערות או השתמש בפורום שלנו לחיפושים טכניים אחרים.