» אלקטרוניקה » גלאי מתכות »גלאי מתכות בארדואינו פרו מיני. עיבוד מעמקי הקולוקולוב-שכרין על פי עקרון "העברת"

גלאי מתכות ב- Arduino Pro Mini. עיבוד מעמקי הקולוקולוב-שכרין על פי עקרון "העברת"


מיחזור תוכנית המים העמוקים קולוקולוב-שקרין הבדלים מהתכנית המקורית:
1. אין מתנד גביש בשבב k561 .. וקוורץ 32 קילו הרץ. האות של 32 קילו הרץ מעניק ל- Arduino Pro Mini.
2. גם מעגלי התראה קוליים בכמה מעגלי מיקרו-סדרה של 561 סדרות אינם קיימים, ארדואינו גם משמיע את היעד (ואני חייב לומר, מדובר בהשמעה מצוינת, בהשוואה לתכנית של הכותב).
3. מופעל על ידי מתח 12 חד-קוטבי (סוללת עופרת חומצה).
4. התאם את הרגישות באמצעות הכפתורים. עם סולם ה- ADC בין 0 ל 1023, סף התגובה ניתן לכוונון בין 1 ל 38 (ניתן לשנות בקלות את הערך בסקיצה).


גלאי מתכות ב- Arduino Pro Mini. עיבוד מעמקי הקולוקולוב-שכרין על פי עיקרון


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


כשהתחלתי לעבוד לראשונה עם ארדואינו, הייתי כל כך נלהב שחשבתי שאוכל למצוא ולהרכיב כל מעגלי גלאי מתכות מהאינטרנט באינטרנט בארדואינו שיכולתי למצוא בקלות בשטח האשפה העצום. באופן עקרוני, כך התברר, אך המעגלים התבססו על מונה תדרים, שלא אפשר להשיג טווח טוב באמת. כמה צעצועים לילדים ובדיקת עט + מנסה להרוויח כסף למתחילים. המקור של MD זה הוא סוס עבודה אמיתי שמאפשר למצוא חפצים גדולים במרחק של 2 מ '(ראה ספר קולוקולוב-שדרין בגוגל). אין נתונים סטטיסטיים לגבי ה- md שעבר טרנספורמציה. אני מקווה שהיא מופיעה בתמיכת אוהדי MD ו Arduino. התוכנית עבדה עם Arduino Uno ו- Arduino Pro Mini.

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




כרגע, יש סקיצה המאפשרת לך להתאים את מחסום הרגישות (סיכה 7 מזכירה +1 למחסום, סיכה 8 -1 למחסום). .
Arduino על מיני 5v, 16 מגה הרץ, ATmega168 והתצוגה השתמשו בהם. ליד הסולם נמצא מתאם ה- Mini SD


כאמור 1602 עולה 86 רובל, ProMini - 82 רובל. אם תרצו, תוכלו בדרך כלל לקחת ATmega168 עירום, לפתח עבורו לוח ולמלא את השרטוט ישירות לתוכו.וכך, למשל, התקנתי את אמא-אבא בלוח ה- MD באמצעות המחבר. בתמונה מוצג התקע בן 6 הפינים של ארדואינו, דרכו נשפכו רישומים ישירות על הלוח.

Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// קלט A3 אנלוגי למתח מתח
// קלט אנלוגי A4 לאות
// 6- מסקנת הזוק
// 9 - תדר פלט 31200 הרץ
# כלול
Lcd גביש נוזלי (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// סמל סוללה
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // משתנה לשמירת ערך רמת הסקאלה
 int volt = 0; // משתנה לאחסון ערך המתח
 int noll = 0; // משתנה לאחסון ערך נקודת האמצע
   # הגדר NUM_SAMPLES 10 // 10 דוגמאות אנלוגיות לקריאה תוך שנייה אחת
   סכום int = 0; // סכום הדגימות שנלקחו
   שמש int = 0; // אותו דבר, אך מחולק ב- 10
   מדגם char = לא חתימה = 0; // מספר מדגם נוכחי עם
   מתח צף = 0.0; // מתח מחושב
   const int לחצן 1 = 7; // כפתור פלוס מחסום
   const int כפתור 2 = 8; // כפתור מחסום מינוס
   int i = 5; // מחסום
   
הגדרת ביטול () {
     lcd.begin (16, 2); // אתחול תצוגה
     lcd.set סמן (1, 0);
     lcd.set cursor (10, 1);
     lcd.print ("Rx-Tx");
     עיכוב (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // בסיכה 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
לולאת חלל () {
     int buttonState1 = HIGH; // מצב הכפתור הוא אחד
     int buttonState2 = HIGH; // מצב שני כפתורים
   sample_count = 0; // לאפס את קווי המתאר של מספר התוספות
   סכום = 0; // לאפס את סכום 10 התוספות
   בעוד (sample_count & lt; NUM_SAMPLES) {
   סכום + = analogRead (A4); // המדידה הבאה מתווספת לסכום
   sample_count ++; // היחידה מתווספת למספר המדידה
   sun = סכום / 10;} // מצא את הערך הממוצע מתוך 10 מדידות
   
   noll = analogRead (A3) / 2; // כוח נקודת אמצע
   מתח צף = מפה (analogRead (A3), 0,1023,0,1500) /100.0;
                                        // מד מתח שנבנה בכניסה A3
   אם (שמש & gt; = noll + i) {countleds = מפה (שמש, noll + i, noll * 2 - 250, 9, 14);
                                        // אם התוצאה שהתקבלה היא בחלק ה-9-15 בסולם
    צליל (6, ספרות * 100);}
   if (שמש & lt; = noll - i) {countleds = מפה (שמש, 116, noll - i, 0, 7);
                                        // אם התוצאה המתקבלת היא 0-7 קטע של הסקאלה
    טון (6, ספרות * 50); }
     אם (שמש & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // האי של אפס וירטואלי (קטע 7)
     אם (שמש & nt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // אי בקנה מידה אפס וירטואלי (8 קטע)

   
    {lcd.setCursor (ספרות, 0); // הגדר את הסמן לטור המסומן, שורה 0
    lcd.print ("\ xff"); // סמל מלא
    lcd.setCursor (0, 1); // מעבר לשורה 2, עמודה 0
    lcd.print (char (1)); // אינדיקציה על אייקון סוללה
    lcd.set סמן (1, 1); // לעבור לאינדיקטור מתח
    lcd.print (מתח); // מתח
    lcd.setCursor (7, 0); // טור 8 בשורה ראשונה
    if (sun & lt; noll) {lcd.print ("{");} // הדפס
    lcd.set cursor (8, 0); // טור 9 בשורה ראשונה
    if (שמש & nt; noll) {lcd.print ("}");} // הדפס
    lcd.set cursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // עמודה 11 בשורה השנייה
    lcd.print (i); // מחסום
    lcd.set cursor (13, 1); // טור 13 בשורה שניה
    lcd.print (שמש); // הדפיס את הערך הממוצע של ערך ה- ADC
    עיכוב (100); // לחכות
    
  buttonState1 = digitalRead (כפתור 1); // קרא מצב כפתור 1
  buttonState2 = digitalRead (button2); // קרא מצב כפתור 2
  if (buttonState1 == LOW) {i = i + 1; עיכוב (50);}
                                        // בעת לחיצה על הכפתור, המכשול גדל ב- 1. עיכוב 50
  אם (buttonState2 == LOW) {i = i - 1; עיכוב (50);}
                                        // בעת לחיצה על הכפתור, המכשול פוחת ב- 1. עיכוב 50
  אם (i & lt; 1) {i = 1;} // גבול התחתון של המכשול
  if (i & gt; 38) {i = 38;} // הגבול העליון של המכשול
 
 lcd.clear ();
    }
}

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

הוסף תגובה

    • לחייךמחייךxaxaבסדרלא יודעיאהוnea
      בוסשריטהשוטהכןכן כןאגרסיביסודי
      סליחהריקודריקוד 2ריקוד 3סליחהעזרהמשקאות
      עצורחבריםטובטובשריקהלהתנדנדלשון
      עשןמוחא כפייםמשוגעלהכריזלזלזלdon-t_mentionלהוריד
      חוםלא מועילצחוק 1מדמפגשמסגדשלילי
      לא_יפופקורןלהענישלקרואלהפחידמפחידחיפוש
      מתגרהתודהזהלרמזאמניקחריףמסכים
      רעדבורהשחורblum3סומקלהתפארשעמום
      מצונזרהנאהסוד 2לאייםניצחוןיוsun_bespectacled
      שוקכבודחחחקדמהברוך הבאkrutoyya_za
      ya_dobryiעוזרne_huliganne_othodiפלומהאיסורקרוב
24 פירוש
הכותב
תודה puteec FU! ביקשתי זאת מהפעם השנייה. תפרתי דרך ארדואינו אונו. הבעיה נעלמה לאחר עדכון טוען האתחול. עכשיו מעניין כיצד לקבוע את התצורה נוספת.
puteec fu
כל ארדואינו מתאים ל- atmega168, atmega328. על זה ננו עם מחבר usb אם לא טועה. תפרו את האידיא ארדואינו מהדוגמאות של מערכון הבלינק (נוריות LED מהבהבות בסיכה 13, הלד מותקן על הלוח). וודא שאתה משתמש ביציאה הנכונה, הלוח נבחר כראוי, המעבד בלוח נבחר כראוי, תדירות קוורץ בלוח נבחר כראוי ושיטת הקושחה (μ2) נבחרה כראוי.
לא אירעה שגיאה.
צור קובץ חדש בארדואינו, העתק את הסקיצה מכאן לרישום חדש ונקי וזה יעבוד.אך ראשית, הפוך את הנורית על לוח ארדואינו להבהב עם דוגמה מהבהבת סטנדרטית. ואז להמשיך הלאה.
קניתי Arduino p nano רק במעבד Atmega328. סקרתי חבורה של סרטונים ופורומים ... הם אמרו שזה אמור לעלות .... אבל אז הפטיש לא מהבהב .... נותן #include מצפה ל" FILENAME "או . מישהו נתקל בזה?
הכותב
סקיצה עובדת עם לוח זה. מה בדיוק נוצר התקע?
אם שופכים את הסקיצה האחרונה, אז לא ניתן להתקין את כל הפרטים הקשורים ל- D3.3 ו- D3.4, כמו גם הם עצמם. על הברזל יש רישום מחדש בנושא זה
Anjey888
שלום. נושא זה מעוניין מאוד. אני רוצה להרכיב את המכשיר. הרמתי לוח הברזל מההתחלה ... ואז נתקעתי. מכיוון שיש הרבה חילוקי דעות בין הלוח למעגל. התחל להשוות את הלוח שלך ... זה הבדל גדול. אבל מבולבלת עם הרתמה בארדואינו.
אני מבקש את עזרתם של אנשים בקיאים.
הכותב
זהה למתכות אחרות. עומק הגילוי תלוי באזור היעד. ככל שיותר, עמוק יותר.
האורח יוג'ין
מהם הגבולות לגילוי חפצים? זהב, אלומיניום, נחושת.
האורח אלכסנדר
מה לעשות עכשיו, כי עדיין יש מחסום שוטקי?
הכותב
ובכן כאן! בערך אפילו הערך הקטן ביותר אינו בא בחשבון! תודה על ההבהרה.
ציטוט: puteec_80
ואנשים יבינו בצורה מהירה ואינטואיטיבית יותר על מה אני מדבר.
אתה יכול להמשיך להישאר בשגיאה זו. ((אנשים בעלי אוריינית טכנית יהיו אובדי עצות.
BARRIER, בעל.
1. מכשול (סוג של קיר, קרן צלב) המוצב בדרך.
2. גדר, גידור.

THRESHOLD, סף, בעל.
1. במדע וטכנולוגיה, הסף נקרא הערך הקטן ביותר, מידת הביטוי של משהו.
סף הרגישות של המכשיר. | סף השמיעה. | סף הכאב. | החיישן מופעל כאשר חורג מסף הטמפרטורה שנקבע.
לחייך
הכותב
בואו נישאר עם שלנו. אני אכתוב "הגדלת המחסום ביחידה אחת" ו"רגישות המקלט הייתה 5 מיקרו וולט. " ואתה כותב "הגדלת סף הפעולה על ידי יחידה אחת" ו"סף הרגישות של המקלט .. "יתר על כן, אנשים יבינו בצורה מהירה ואינטואיטיבית יותר על מה אני מדבר.
ואני מסביר בדוגמא זו. אין סף בקפדנות, מכיוון שאין סולם התייחסות ברור. יש איזושהי גזרה צף מגזרת מאותת צף. אז נראה לי שהגדרת המכשול מתאימה הרבה יותר לרצועה "הצפה" הזו מאשר לסף.
טיעון חסר טעם וטיפשות בדרך כלל. יש לך שאלות?
ציטוט: puteec_80
מהם הספים התחתונים והעליונים שלהם?
אולי המשמעויות של המילים המתורגמות אינן תואמות או מעט אינן תואמות. אך הם מתארים בצורה מושלמת את התהליך ונכנסים בהדרגה לסלנג.
מה בדיוק הסף. סף התגובה הוא במקרה שלך. אנא הסביר כיצד "המחסום" מתאר את התהליך.
לגבי ההצטרפות לסלנג - עכשיו יש שם המון כל מיני אי הבנות. ((
הכותב
במקרה זה, אני עדיין נוטה להשתמש במילה "מחסום", מכיוון זה המחסום שמוגדר בטקסט של התוכנית, פשוט לא נופל לטווח שלה, האות נתפס על ידי המיקרו-בקר כשימושי. וזה המכשול כי יש לו שני ערכים - הגבול העליון והתחתון של ההפעלה, כלומר הפעולה מתרחשת מעל "העליונה" ומתחת לגבול "התחתון" של המכשול בסולם ADC. עם זאת, אתה יודע טוב יותר. מהם הספים התחתונים והעליונים שלהם?
אולי המשמעויות של המילים המתורגמות אינן תואמות או מעט אינן תואמות. אך הם מתארים בצורה מושלמת את התהליך ונכנסים בהדרגה לסלנג.
אגב. הרגישות והמחסום הם דברים שונים לחלוטין.
כןהם מצטלבים. אבל לא יותר.
ציטוט: puteec_80
ב- MD הזר, התפריט אומר "Barier".

אני אולי מפתיע אותך, אך למילים רבות באנגלית שנראות דומות לשלנו יש משמעות אחרת, לפעמים קרובה, לפעמים לא. חפש את המילים "חברים מתרגמים כוזבים".
עכשיו בעצם. ברוסית טכני תיעוד לא פשוט אין ביטוי כזה "מחסום רגישות" - וזהו! ישנו "סף רגישות", במקרים מסוימים ניתן לומר "גבול רגישות", אך לא "מחסום רגישות". אולי בכמה ענפי ידע אחרים משתמשים בו, אך לא באלקטרוניקה.
הכותב
ובכן, זה אומר שכל המהנדסים הזרים קופצים מעל מקל על הכביש. אצל רופאים זרים, התפריט אומר "בארייר". החבר איבן, אתה נופל בעיניי עם ניקוב קטנטן כזה! היכן ההערות שלך לגופם? אחריה אתה צריך למחוא כפיים על המצח? היית מפנק אותי לעתים קרובות להעניש
ההבדל הוא משמעותי: הסף הוא מונח טכני, המכשול הוא "מקל מעבר לכביש".
הכותב
אולי. אבל אני לא רואה את ההבדל.
אולי לא "מחסום", אלא סף? ;)
הכותב
התרשים אינו מציג את לחצני כוונון המכשול. הם מחוברים לפינים 7 ו -8 של הארדואינו. כל אחד נמשך עם התנגדות של 10k ליתרון, נסגר כשאתה לוחץ על המסה.
הכותב
לולאת חלל () {
int buttonState1 = HIGH; // מצב הכפתור הוא אחד
int buttonState2 = HIGH; // מצב שני כפתורים

int pot = analogRead (A4); // פילטר לשינוי אות מהיר
סימן = סימן * (1-K) + סיר * K;

noll = noll * (1-L) + סימן * L; // פילטר אות ארוך טווח
// מד מתח שנבנה בכניסה A3
מתח צף = מפה (analogRead (A3), 0,1023,0,1500) /100.0;

if (סימן> = noll + i) {countleds = map (sign, noll + i, 1023, 9, 14);
// אם התוצאה שהתקבלה היא בחלק ה-9-15 בסולם
צליל (6, ספרות * 100);}
אם (סימן <= noll - i) {countleds = map (sign, 0, noll - i, 0, 7);
// אם התוצאה המתקבלת היא 0-7 קטע של הסקאלה
טון (6, ספרות * 50); }
אם (סימן = noll - (i-1)) {countleds = 7;
noTone (6); } // האי של אפס וירטואלי (קטע 7)
if (sign> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // אי בקנה מידה אפס וירטואלי (8 קטע)


{lcd.setCursor (ספרות, 0); // הגדר את הסמן לטור המסומן, שורה 0
lcd.print ("\ xff"); // סמל מלא
lcd.setCursor (0, 1); // מעבר לשורה 2, עמודה 0
lcd.print (char (1)); // אינדיקציה על אייקון סוללה
lcd.set סמן (1, 1); // לעבור לאינדיקטור מתח
lcd.print (מתח); // מתח
lcd.setCursor (7, 0); // טור 8 בשורה ראשונה
if (סימן lcd.set cursor (8, 0); // טור 9 בשורה ראשונה
if (sign> noll) {lcd.print ("}");} // הדפס
lcd.set cursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // עמודה 11 בשורה השנייה
lcd.print (i); // מחסום
lcd.set cursor (13, 1); // טור 13 בשורה שניה
lcd.print (סימן); // הדפיס את הערך הממוצע של ערך ה- ADC
עיכוב (10); // לחכות

buttonState1 = digitalRead (כפתור 1); // קרא מצב כפתור 1
buttonState2 = digitalRead (button2); // קרא מצב כפתור 2
if (buttonState1 == LOW) {i = i + 1; עיכוב (50);}
// בעת לחיצה על הכפתור, המכשול גדל ב- 1. עיכוב 50
אם (buttonState2 == LOW) {i = i - 1; עיכוב (50);}
// בעת לחיצה על הכפתור, המכשול פוחת ב- 1. עיכוב 50
אם (i <1) {i = 1;} // גבול התחתון של המכשול
אם (i> 38) {i = 38;} // הגבול העליון של המכשול

lcd.clear ();
}
}
הכותב
מערכון חדש. האלגוריתם לגילוי האות השימושי שונה. התוכנית מפושטת, אין אלמנטים D3.4 ו- D3.3 עם כל הכריכות שלהם. אם אתה לוקח משלך משלך, פשוט לא ניתן להתקין את כל הפרטים האלה. רגישות רבה יותר. אין חיובי שווא.
סקיצה:

// קלט A3 אנלוגי למתח מד. ניתן להגדרה על ידי פוטנציומטר R32.
// קלט A4 אנלוגי לאות. הגדר עם האות המינימלי ב- D3.2
// נגד R40 עבור קריאות ה- ADC של בערך 510.
// 6 - מסקנה
// 9 - תדר פלט 31200 הרץ
# כלול
Lcd גביש נוזלי (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// סמל סוללה
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // משתנה לשמירת ערך רמת הסקאלה

מתח צף = 0.0; // מתח מחושב
const int לחצן 1 = 7; // כפתור פלוס מחסום
const int כפתור 2 = 8; // כפתור מחסום מינוס
int i = 5; // מחסום
const לצוף K = 0.1; // מעקב אחר סינון מהיר אחר שינויים (מקדם. ככל שקטן יותר חזק יותר)
const float L = 0.07; // מעקב אחר סינון לאורך זמן
שלט לצוף = 0; // פילטר
nolf צף = 0;

הגדרת ביטול () {
lcd.begin (16, 2); // אתחול תצוגה
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, פלט);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // בסיכה 10 PWM = 50% f = 31200Hz
// למעשה, עבור PWM = 50% אתה צריך להגדיר לפחות 220 מילוי, על פי האוסילוסקופ
// הדואין לא יכול להתמודד עם זה. זה לא קריטי.
}
הכותב
אלה שצפו בסקיצה. הסימנים> = ו <= הוחלפו בשילובים מוזרים של & gt ו- & lt. למה אני לא יודע. כאשר ניפוי באגים היה תקין.

אנו ממליצים לך לקרוא:

תן אותו לסמארטפון ...