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

גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך: 5 שלבים (עם תמונות)
גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך: 5 שלבים (עם תמונות)

וִידֵאוֹ: גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך: 5 שלבים (עם תמונות)

וִידֵאוֹ: גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך: 5 שלבים (עם תמונות)
וִידֵאוֹ: nokta pulsedive pointer הסבר קצר על המוצר 2024, נוֹבֶמבֶּר
Anonim
גלאי אינדוקציה מבוסס דופק Arduino - סליל הפוך
גלאי אינדוקציה מבוסס דופק Arduino - סליל הפוך
גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך
גלאי אינדוקציית דופק מבוסס ארדואינו - סליל הפוך

הרעיון

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

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

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

מצד שני, ה- Arduino פועל במהירות 16MHz ויש לו לא מעט יכולות תזמון i. ה. רזולוציה של 0.0625µS אם משתמשים במהירות השעון. אז במקום להשתמש בכניסה האנלוגית לחישה, הדרך הפשוטה ביותר לחוש שינויים דינאמיים קטנים במתח היא להשוות את השינוי בירידת המתח לאורך זמן במתח ייחוס קבוע.

למטרה זו ל- ATmega328 יש תכונה מסודרת של משווה פנימי בין D6 ל- D7. משווה זה מסוגל לעורר הפרעה המאפשרת טיפול מדויק באירועים. עוזב לצד שגרת התזמון המקודדת היטב כמו מילי () ומיקוס () ונכנס לטיימר הפנימי של ה- ATmega328 ברזולוציה גבוהה בהרבה, ה- Arduino הוא בסיס מצוין לגישות גילוי מתכות.

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

הקוד הכללי בארדואידו להשיג זאת הוא:

// הגדרת כל משתני הקדם הנדרשים וכו 'והגדרת הרשמים

שעון צ'אר לא חתום SelectBits = _BV (CS10); // ללא הגדרת חלל xtal מלא () {pinMode (6, INPUT); // + של המשווה - על ידי הגדרת אותם כ- INPUT, הם // מוגדרים ל- pinMode עכבה גבוהה (7, INPUT); // - של המשווה - על ידי הגדרת אותם כ- INPUT, הם // מוגדרים לקלי עכבה גבוהה (); // עצירת הפסקה TCCR1A = 0; // הגדר את כל register TCCR1A ל- 0 TCCR1B = 0; // אותו דבר לגבי TCCR1B -> מצב רגיל TCNT1 = 0; // לאתחל ערך מונה ל 0; TCCR1B | = clockSelectBits; // מגדיר מראש מכשיר התחלה ומפעיל את השעון TIMSK1 = _BV (TOIE1); // מגדיר את הפסקת הצפת הטיימר להפעלת bit sei (); // אפשר הפרעות ACSR = (0 << ACD) | // משווה אנלוגי: מופעל (0 << ACBG) | // משחקי פס של משווה אנלוגי בחר: AIN0 מוחל על הקלט החיובי (0 << ACO) | // פלט משווה אנלוגי: כבוי (1 << ACI) | // דגל הפרעה של משווה אנלוגי: נקה הפרעה ממתינה (1 << ACIE) | // הפרעה של השוואת אנלוגי: מופעלת (0 << ACIC) | // לכידת קלט משווה אנלוגי: מושבתת (0 << ACIS1 | 0 << ACIS0 // הפסקת החלפת פלט // (0 << ACIS1 | 1 << ACIS0 // שמורה // (1 << ACIS1 | 0 << ACIS0 // הפרעה בקצה התפוקה היורד // (1 << ACIS1 | 1 << ACIS0 // הפרעה בקצה הקלט העולה;}

// שגרה זו נקראת בכל פעם שהמשווה יוצר הפרעה

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); timeStamp = TCNT1; SREG = oldSREG; }

// שגרה זו נקראת בכל פעם שיש הצפה במונה הפנימי

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// שגרה זו משמשת לאיפוס הטיימר ל -0

void resetTimer (void) {oldSREG = SREG; cli (); // ביטול הפרעות TCNT1 = 0; // לאתחל ערך מונה ל 0 SREG = oldSREG; // שחזר רשום סטטוס TCCR1B | = clockSelectBits; // מגדיר מראש מכשיר התחלה ומפעיל את השעון timer1_overflow_count = 0; // מאפס מונה הצפות}

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

www.miymd.com/index.php/projects/tpimd/ (לרוע המזל דף זה אינו מקוון יותר, כרגע יש גיבוי לאתר בכתובת www.basic4mcu.com, חפש "TPIMD").

שלב 1: רעיון אינדוקציה של Arduino Pulse - Flip Coil

רעיון אינדוקציה של Arduino Pulse - סליל הפוך
רעיון אינדוקציה של Arduino Pulse - סליל הפוך
רעיון אינדוקציה של Arduino Pulse - סליל הפוך
רעיון אינדוקציה של Arduino Pulse - סליל הפוך

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

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

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

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

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

לאחר ניסויים המעגל הבא הוכיח שהוא עובד.

המעגל מורכב ממודול Arduino Nano. מודול זה מניע שני טרנזיסטורים של MOSFET המפעילים את הסליל (ב- SV3) באמצעות D10. כאשר הדופק ב- D10 מסתיים, שני ה- MOSFET מבודדים את הסליל מ- 12V ו- GND. האנרגיה החסוכה בסליל מדממת החוצה באמצעות R2 (220 אוהם). במקביל R1 (560 אוהם) מחבר את הצד החיובי לשעבר של הסליל tho GND. זה משנה את עקומת הריקבון השלילי ב- R5 (330 אוהם) לעקומה חיובית. הדיודות מגנות על סיכת הכניסה של הארדואינו.

R7 הוא מחלק מתח בסביבות 0.04V. כרגע עקומת הריקבון ב- D7 נעשית שלילית יותר מה- 0.04 ב- D6 הפרעה היא טריגרטית והמשך הזמן לאחר סיום הדופק נשמר.

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

שלב 2: בניית הגלאי (לוח לחם)

בניית הגלאי (לוח לחם)
בניית הגלאי (לוח לחם)
בניית הגלאי (לוח לחם)
בניית הגלאי (לוח לחם)
בניית הגלאי (לוח לחם)
בניית הגלאי (לוח לחם)

בניית הגלאי די קלה. ניתן לעשות זאת על גבי לוח לחם (הדבקה למעגל המקורי) או על ידי הלחמת החלקים על לוח PCB.

נורית D13 בלוח ה- Arduino Nano משמשת אינדיקציה למתכת

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

התמונות אינן מוצגות בחיבורים לתצוגת OLED של 0.96. תצוגה זו מחוברת:

Vcc - 5V (בסיכה של Arduino, לא במתח האספקה !!!)

GND - GND

SCL - A5

SDA - A4

תצוגת OLED זו נחוצה לכיול הגלאי בתחילה. זה נעשה על ידי הגדרת המתח הנכון ב- PIN6 של הארדואינו. מתח זה צריך להיות סביב 0.04V. הצג עוזר להגדיר את המתח הנכון.

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

שלב 3: מעבר ל- PCB

הולך PCB
הולך PCB
הולך PCB
הולך PCB
הולך PCB
הולך PCB
הולך PCB
הולך PCB

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

בוצעו השינויים הבאים:

1. הדיודות נותרו בחוץ.

2. לשערי ה- MOSFET יש נגד של 10 אוהם

3. מתח האספקה של מחלק המתח ב- D6 ניתן על ידי אות ברמה גבוהה ב- D8

4. סיכת הנהג עבור ה- MOSFET שונתה.

בדרך זו ניתן ליצור PCB חד צדדי הניתן להלחמה על גבי PCB אוניברסלי. באמצעות מעגל זה יהיה לך גלאי PI עובד עם 8-10 רכיבים חיצוניים בלבד (תלוי אם נעשה שימוש בתצוגת OLED ו/או ברמקול).

שלב 4: הגדרה ושימוש בגלאי

הגדרה ושימוש בגלאי
הגדרה ושימוש בגלאי
הגדרה ושימוש בגלאי
הגדרה ושימוש בגלאי
הגדרה ושימוש בגלאי
הגדרה ושימוש בגלאי

אם הגלאי בנוי כהלכה והתוכנית כתובה ל- Arduino, הדרך הקלה ביותר (אם לא היחידה) להגדיר את היחידה היא להשתמש בתצוגת OLED. התצוגה מחוברת ל- 5V, GND, A4, A5. התצוגה אמורה להראות "כיול" לאחר הפעלת היחידה. לאחר מספר שניות יופיע "כיול בוצע" ושלושה מספרים צריכים להיות מוצגים בתצוגה.

המספר הראשון הוא "ערך ההתייחסות" שזוהה במהלך הכיול. הערך השני הוא הערך האחרון שנמדד והערך השלישי הוא ערך ממוצע של 32 המדידות האחרונות.

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

כדי להתחיל בהגדרה הראשונית, לא אמורה להיות מתכת ליד הסליל.

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

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

עבור ההתקנה שלי (סליל: 18 סיבובים @ 20 ס מ) הערך היציב הוא סביב 630-650. לאחר ההגדרה, לחץ על כפתור האיפוס, היחידה מכיילת מחדש וכל ערכי העץ אמורים להיות באותו טווח שוב. אם מתכת מובאת כעת לסליל, נורית הלוח בלוח ה- Arduino (D13) אמורה להידלק. רמקול מצורף נותן כמה רעשי לחיצה (יש מקום לשיפור בתכנות שם).

כדי למנוע ציפיות גבוהות:

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

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

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

תעשה חיים!

שלב 5: עדכון 1: שימוש במסך LCD בגודל 16x2

עדכון 1: שימוש במסך LCD בגודל 16x2
עדכון 1: שימוש במסך LCD בגודל 16x2
עדכון 1: שימוש במסך LCD בגודל 16x2
עדכון 1: שימוש במסך LCD בגודל 16x2
עדכון 1: שימוש במסך LCD בגודל 16x2
עדכון 1: שימוש במסך LCD בגודל 16x2

שיפורים

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

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

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

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

התקנה ראשונית של הגלאי

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

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

סלילים

אני בונה 3 סלילים להמשך בדיקה

1 -> 18 סיבובים @ 200 מ"מ

2 -> 25 סיבובים @ 100 מ"מ

3 -> 48 סיבובים @ 100 מ"מ

מעניין שכל הסלילים עבדו די טוב, עם ביצועים כמעט זהים (מטבע 20 קראט בגובה 40-50 מ מ באוויר). זו אולי התבוננות סובייקטיבית למדי.

מוּמלָץ: