- איך זה עובד
- רכיבים נדרשים
- סכימות
- קוד אוסקלוסקופ ארדואינו
- תסריט פייתון (פלוטר)
- קוד ארדואינו
- אוסצילוסקופ ארדואינו בפעולה
האוסצילוסקופ הוא אחד הכלים החשובים ביותר שתמצאו על שולחן העבודה של כל מהנדס אלקטרוניקה או יצרן. הוא משמש בעיקר לצפייה בצורת גל ולקביעת רמות מתח, תדר, רעש ופרמטרים אחרים של אותות המופעלים בקלטו שעשויים להשתנות עם הזמן. הוא משמש גם מפתחי תוכנה משובצים לצורך איתור באגים בקוד וטכנאים לפתרון בעיות במכשירים אלקטרוניים במהלך תיקון. סיבות אלה הופכות את האוסצילוסקופ לכלי חובה לכל מהנדס. הבעיה היחידה היא שהם יכולים להיות יקרים מאוד, אוסצילוסקופים שמבצעים את הפונקציות הבסיסיות ביותר ברמת הדיוק הנמוכה ביותר יכולים להיות יקרים כמו 45 עד 100 דולר בעוד שהמתקדמים והיעילים יותר עלו יותר מ -150 דולר. היום אני אדגים כיצד להשתמש בארדואינוותוכנה, שתפותח עם שפת התכנות האהובה עלי, פייתון, לבניית אוסצילוסקופ ארדואינו בעל עלות נמוכה בעל ארבעה ערוצים המסוגל לבצע את המשימות שבגינן חלק מהאוסצילוסקופ הזול נפרס כמו הצגת צורות גל וקביעת רמות מתח עבור אותות.
איך זה עובד
לפרויקט זה ישנם שני חלקים;
- ממיר הנתונים
- הקושר
אוסצילוסקופים כוללים בדרך כלל ייצוג חזותי של אות אנלוגי המופעל על ערוץ הקלט שלו. כדי להשיג זאת, עלינו להמיר תחילה את האות מאנלוגי לדיגיטלי ואז לתכנן את הנתונים. לצורך ההמרה, ננצל את ה- ADC (ממיר אנלוגי לדיגיטלי) במיקרו-בקר atmega328p המשמש את הארדואינו להמרת הנתונים האנלוגיים בכניסה לאות לאות דיגיטלי. לאחר ההמרה, הערך לזמן נשלח באמצעות UART מהארדואינו למחשב האישי, שם תוכנת הקושר שתפותח באמצעות פיתון תמיר את זרם הנתונים הנכנס לצורת גל על ידי התוויית כל נתונים כנגד הזמן.
רכיבים נדרשים
הרכיבים הבאים נדרשים לבניית פרויקט זה;
- Arduino Uno (ניתן להשתמש בכל אחד מהלוחות האחרים)
- קרש לחם
- נגד 10k (1)
- LDR (1)
- חוטי מגשר
תוכנות נדרשות
- ארדואינו IDE
- פִּיתוֹן
- ספריות פיתון: Pyserial, Matplotlib, Drawnow
סכימות
הסכימטי של אוסצילוסקופ ארדואינו פשוט. כל שעלינו לעשות הוא לחבר את האות הנבחן לסיכה האנלוגית שצוינה של הארדואינו. עם זאת, נשתמש ב- LDR בהתקנת מחלק מתח פשוטה כדי לייצר את האות הנבדק, כך שצורת הגל שנוצרה תתאר את רמת המתח, בהתבסס על עוצמת האור סביב ה- LDR.
חבר את הרכיבים כפי שמוצג בתרשים למטה;
לאחר החיבור, ההתקנה תאהב את התמונה למטה.
עם חיבורי הכל, אנו יכולים להמשיך לכתוב את הקוד.
קוד אוסקלוסקופ ארדואינו
אנו נכתוב קודים לכל אחד משני החלקים. עבור הקושר כפי שהוזכר קודם לכן, אנו נכתוב סקריפט פיתון המקבל את הנתונים מהארדואינו דרך UART ומגרשים, ואילו עבור הממיר נכתוב סקיצה של ארדואינו שתיקח את הנתונים מ- ADC והמיר אותם ל רמות מתח אשר נשלחות לקושר.
תסריט פייתון (פלוטר)
מכיוון שקוד הפיתון מורכב יותר, נתחיל איתו.
נשתמש בכמה ספריות כולל; drawow, Matplotlib ו- Pyserial עם כתב הפיתון כפי שצוין קודם. Pyserial מאפשר לנו ליצור סקריפט פיתון שיוכל לתקשר דרך היציאה הטורית, Matplotlib נותן לנו את היכולת ליצור עלילות מהנתונים המתקבלים דרך היציאה הטורית ו drawow מספק אמצעי עבורנו לעדכן את העלילה בזמן אמת.
ישנן מספר דרכים להתקין חבילות אלה במחשב האישי שלך, והקלה ביותר היא באמצעות pip . ניתן להתקין פיפ באמצעות שורת פקודה במחשב Windows או Linux. PIP ארוז עם python3 אז אני אמליץ לך להתקין את python3 ולסמן את התיבה לגבי הוספת python לנתיב. אם אתה נתקל בבעיות בהתקנת pip, עיין באתר הפיתון הרשמי לקבלת טיפים.
עם התקנת pip, כעת אנו יכולים להתקין את הספריות האחרות הדרושות לנו.
פתח את שורת הפקודה עבור משתמשי Windows, מסוף למשתמשי לינוקס והזן את הדברים הבאים;
pip להתקין
עם זאת, התקן matplotlib באמצעות;
pip להתקין matplotlib
Drawnow מותקן לפעמים לצד matplotlib אבל רק כדי להיות בטוח, הפעל;
pip להתקין drawow
עם סיום ההתקנה, אנו מוכנים כעת לכתוב את סקריפט הפיתון.
תסריט הפיתון של הפרויקט הזה דומה לזה שכתבתי עבור האוסצילוסקופ המבוסס על פטל.
אנו מתחילים בייבוא כל הספריות הדרושות לקוד;
זמן ייבוא ייבוא matplotlib.pyplot כ- plt מיבוא drawow * ייבוא pyserial
לאחר מכן, אנו יוצרים ומאתחלים את המשתנים שישמשו במהלך הקוד. מערך Val ישמש לאחסון נתונים המתקבלים יציאה טורית CNT ישמש לספור. הנתונים במיקום 0 יימחקו לאחר כל 50 ספירות נתונים. זה נעשה כדי לשמור על הנתונים המוצגים באוסילוסקופ.
val = cnt = 0
לאחר מכן, אנו יוצרים את אובייקט היציאה הטורית שדרכו יתקשר הארדואינו עם סקריפט הפיתון שלנו. וודא כי יציאת ה- com המפורטת להלן היא אותה יציאת COM שדרכה לוח ה- Arduino שלך מתקשר עם ה- IDE. קצב שידור 115200 ששימש לעיל שימש להבטחת תקשורת מהירה עם הארדואינו. כדי למנוע שגיאות, יש לאפשר גם את היציאה הטורית של Arduino לתקשר עם קצב שידור זה.
יציאה = סידורי. ('COM4', 115200, פסק זמן = 0.5)
לאחר מכן, אנו הופכים את העלילה לאינטראקטיבית באמצעות;
plt.ion ()
עלינו ליצור פונקציה להפקת העלילה מהנתונים שהתקבלו, וליצור את המגבלה העליונה והמינימלית לה אנו מצפים, אשר במקרה זה היא 1023 בהתבסס על הרזולוציה של ה- ADC של הארדואינו. הגדרנו גם את הכותרת, תייגו כל ציר והוספנו אגדה כדי שיהיה קל לזהות את העלילה.
#create the function function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('תפוקות ADC') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' ימנית תחתונה ')
עם זאת, כעת אנו מוכנים לכתוב את הלולאה הראשית שלוקחת את הנתונים מהיציאה הטורית כאשר היא זמינה ומתכננת אותם. כדי לסנכרן עם הארדואינו, נתוני לחיצת יד נשלחים לארדואינו על ידי סקריפט הפיתון כדי להצביע על נכונותו לקרוא נתונים. כאשר הארדואינו מקבל את נתוני לחיצת היד, הוא משיב לנתונים מ- ADC. ללא לחיצת יד זו לא נוכל לתכנן את הנתונים בזמן אמת.
בעוד (נכון): port.write (b's ') #handshake עם Arduino אם (port.inWaiting ()): # אם הארדואינו משיב ערך = port.readline () # קרא את הדפס התשובה (ערך) # הדפס כדי שנוכל לפקח על זה מספר = int (value) # להמיר נתונים שהתקבלו להדפסה שלמה ('ערוץ 0: {0}'. פורמט (מספר)) # שינה למשך חצי שנייה. time.sleep (0.01) val.append (int (number)) drawow (makeFig) # עדכון העלילה כדי לשקף קלט נתונים חדש plt.pause (.000001) cnt = cnt + 1 אם (cnt> 50): val.pop (0) שמור על העלילה רעננה על ידי מחיקת הנתונים במיקום 0
קוד פיתון המלא ל אוסצילוסקופ Arduino ניתן בסוף המאמר הזה מוצג למטה.
קוד ארדואינו
הקוד השני הוא שרטוט הארדואינו להשגת הנתונים המייצגים את האות מה- ADC, ואז המתן לקבלת אות לחיצת היד מתוכנת הקושר. ברגע שהוא מקבל את אות לחיצת היד, הוא שולח את הנתונים שנרכשו לתוכנת הקושר באמצעות UART.
אנו מתחילים בהכרזה על הסיכה של הסיכה האנלוגית של הארדואינו אליה יופעל האות.
int sensorpin = A0;
לאחר מכן אנו מאותחלים ומתחילים בתקשורת סדרתית בקצב שידור של 115200
התקנת חלל () { // אתחל תקשורת טורית ב 115200 סיביות לשנייה כדי להתאים לזו של סקריפט הפיתון: Serial.begin (115200); }
לבסוף, פונקציית voidloop () המטפלת בקריאת הנתונים ושולחת את הנתונים על סדרתי לקושר.
void loop () { // קרא את הקלט בסיכה אנלוגית 0: חיישן צף = analogRead (sensorpin); נתוני בתים = Serial.read (); if (data == 's') { Serial.println (sensorValue); עיכוב (10); // עיכוב בין קריאות ליציבות } }
קוד אוסצילוסקופ Arduino המלא ניתן בהמשך כמו גם בסוף המאמר הזה מוצג למטה.
int sensorpin = A0; התקנת חלל () { // אתחל תקשורת טורית ב 115200 סיביות לשנייה כדי להתאים לזו של סקריפט הפיתון: Serial.begin (115200); } loop loop () { // קרא את הקלט על סיכה אנלוגית 0: ##################################################### ######################## חיישן צף ערך = analogRead (sensorpin); נתוני בתים = Serial.read (); if (data == 's') { Serial.println (sensorValue); עיכוב (10); // עיכוב בין קריאות ליציבות } }
אוסצילוסקופ ארדואינו בפעולה
העלה את הקוד להגדרת Arduino והפעל את סקריפט הפיתון. אתה אמור לראות את הנתונים מתחילים לזרום דרך שורת הפקודה של פיתון ואת העלילה משתנה עם עוצמת האור כפי שמוצג בתמונה למטה.
אז ככה ניתן להשתמש בארדואינו כאוסצילוסקופ, ניתן להכין אותו גם באמצעות פטל פטל, עיין כאן במדריך המלא בנושא אוסצילוסקופ מבוסס פטל פי.