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

כותב קוד מורס ארדואינו: 7 שלבים (עם תמונות)
כותב קוד מורס ארדואינו: 7 שלבים (עם תמונות)

וִידֵאוֹ: כותב קוד מורס ארדואינו: 7 שלבים (עם תמונות)

וִידֵאוֹ: כותב קוד מורס ארדואינו: 7 שלבים (עם תמונות)
וִידֵאוֹ: מה זה-קוד מורס 2024, נוֹבֶמבֶּר
Anonim
Image
Image
כותב קוד מורס ארדואינו
כותב קוד מורס ארדואינו

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

אספקה

לוח Arduino Uno מנוע צעד מיקרו סרוו SG90ULN2003 מודול הנהג מנוע צעד מודול אספקת חשמל לוח 4 × חוטי מגשר 6 × חוטי דופונט נקבה לגבר 9V1A מתאם כבל USB קרטון 2 × דיבלים מעץ 2 × מעיינות קש נייר לבן דבק SuperSlim דבק חם רצועת גומי (לייצור מחזיק עט) קוצץ מספריים

שלב 1: בניית הבסיס

בניית הבסיס
בניית הבסיס
בניית הבסיס
בניית הבסיס
בניית הבסיס
בניית הבסיס

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

שלב 2: נתח הסרוו

חתיכת סרוו
חתיכת סרוו
חתיכת סרוו
חתיכת סרוו
חתיכת סרוו
חתיכת סרוו

לשלב זה אתה צריך:

  • שני דיבלים מעץ באורך 4 ס"מ
  • שני קפיצים באורך 2 ס"מ
  • קש אחד חתוך לשתי חתיכות באורך 2 ס"מ כל אחת
  • חתיכת קרטון אחת בגודל 12 ס"מ על 4 ס"מ
  • שתי חתיכות קרטון בגודל 4 ס"מ על 1.5 ס"מ
  • חתיכת קרטון בגודל 4 ס"מ על 2 ס"מ

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

שנית, הדבק את החתיכה בגודל 4 ס"מ על 2 ס"מ על גבי הקשיות.

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

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

בסופו של דבר חתכתי בערך 3 ס"מ מהחלק התחתון של היצירה בגודל 12 ס"מ על 4 ס"מ והדבקתי אליה עוד שני חתיכות של 4 ס"מ על 1.5 ס"מ, ואז כיסיתי את זה עם חתיכת קרטון בגודל 5.5 ס"מ על 4 ס"מ. וכדי להחזיק את הטוש הכנתי חתיכה קטנה לולאה של רצועת גומי והדבקתי אותה על פיסת קרטון קטנה ואז הדבקתי אותה לחתיכה בגודל 4 ס"מ על 2 ס"מ שתנוע למטה כאשר הסרוו יתחיל. תוספות אלה מנעו מהסמן לנוע מצד לצד כאשר המעיינות חוזרים למעלה.

שלב 3: הוספת מנוע סרוו וגליל הנייר לבסיס

הוספת מנוע סרוו וגליל הנייר לבסיס
הוספת מנוע סרוו וגליל הנייר לבסיס
הוספת מנוע סרוו וגליל הנייר לבסיס
הוספת מנוע סרוו וגליל הנייר לבסיס

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

שלב 4: בניית מסגרת מנוע הצעדים

בניית מסגרת מנוע הצעדים
בניית מסגרת מנוע הצעדים
בניית מסגרת מנוע הצעדים
בניית מסגרת מנוע הצעדים
בניית מסגרת מנוע הצעדים
בניית מסגרת מנוע הצעדים

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

שלב 5: גימור נגיעות

נגיעות
נגיעות
נגיעות
נגיעות
נגיעות
נגיעות
נגיעות
נגיעות

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

שלב 6: אלקטרוניקה

מכשירי חשמל
מכשירי חשמל
מכשירי חשמל
מכשירי חשמל

לבסוף, עליך לחבר את המנועים ל- Arduino ולהעלות את הקוד.

נתחיל במנוע הסרוו, נחבר את החוט החום (חוט הקרקע) לסיכת ה- GND, ולאחר מכן את החוט האדום (חוט החשמל) לסיכה 5V והחוט הכתום (חוט האות) לחפירה #5 פִּין. לאחר מכן, מנוע הצעדים, חבר את 1N1 לחפירה 11, 1N2 לחפירה 10, 1N3 לחפור מספר 9, 1N4 לחפור מספר 8, את 5V לצד החיובי של לוח הלוח ואת סיכת הטחון לצד השלילי של קרש לחם. ואל תשכח לחבר את מודול אספקת החשמל ללוח הלחם ולוודא שהצדדים החיוביים והשליליים שלו מיושרים כראוי לצדדים המתאימים בלוח הלחם. אם תשכח לעשות זאת, תוכל להפוך את הכוח לפרויקט שלך, ואתה לא רוצה לעשות זאת.

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

איך זה עובד

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

הקוד

#לִכלוֹל

#include #include #include const int stepsPerRevolution = 150; // זהו המשתנה למשפט המיתרים של צעדים מחרוזת = "*שלום"; // שנה את המשתנה הזה לכתיבת מילים שונות אך כתוב רק באותיות קטנות והתחל את מילתך ב- "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); סרוו myServo; // זו השיטה שגורמת לרובוט לכתוב נקודה חלל נקודה () {Serial.println ("נקודת התחלה"); myServo.write (160); עיכוב (1000); myServo.write (90); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); Serial.println ("dot done"); } // זוהי השיטה שגורמת לרובוט לכתוב מקף ריק () {Serial.println ("התחלת מקף"); myServo.write (160); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); myServo.write (90); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); Serial.println ("מקף הסתיים"); } // זוהי השיטה שגורמת לרובוט להשאיר רווח בין כל אות חלל חלל () {Serial.println ("התחלת רווח"); myServo.write (90); עיכוב (1000); myStepper.step (200); עיכוב (1000); Serial.println ("שטח הנעשה"); } // זוהי השיטה שגורמת לרובוט להשאיר רווח גדול יותר בין כל מילה חלל bigSpace () {myServo.write (90); myStepper.step (250); עיכוב (1000); } void setup () {// שים את קוד ההתקנה שלך כאן, להפעלה פעם אחת: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int first = phrase.indexOf ('*'); // הלולאה הזו עוברת על כל אות במחרוזת ולאחר מכן קוראת לשיטות הנכונות לכתוב אותה עבור (int i = 0; i <משפט.אורך (); i ++) {if (משפט.צ'אראט (ראשון+i) == 'a') {Serial.print (".-"); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 'b') {Serial.print ("-…"); לזנק(); נְקוּדָה(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'c') {Serial.print ("-.-."); לזנק(); נְקוּדָה(); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 'd') {Serial.print ("-.."); לזנק(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'ה') {Serial.print ("."); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'f') {Serial.print ("..-."); נְקוּדָה(); נְקוּדָה(); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 'g') {Serial.print ("-."); לזנק(); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 'h') {Serial.print ("…"); נְקוּדָה(); נְקוּדָה(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'i') {Serial.print (".."); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'j') {Serial.print (".---"); נְקוּדָה(); לזנק(); לזנק(); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'k') {Serial.print ("-.-"); לזנק(); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'l') {Serial.print (".-.."); נְקוּדָה(); לזנק(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'מ') {Serial.print ("-"); לזנק(); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'n') {Serial.print ("-."); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'o') {Serial.print ("---"); לזנק(); לזנק(); לזנק(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'p') {Serial.print (".--."); נְקוּדָה(); לזנק(); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'q') {Serial.print ("--.-"); לזנק(); לזנק(); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'r') {Serial.print (".-."); נְקוּדָה(); לזנק(); נְקוּדָה(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 's') {Serial.print ("…"); נְקוּדָה(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 't') {Serial.print ("-"); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'u') {Serial.print ("..-"); נְקוּדָה(); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (phrase.charAt (הראשון + i) == 'v') {Serial.print ("…-"); נְקוּדָה(); נְקוּדָה(); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'w') {Serial.print (".--"); נְקוּדָה(); לזנק(); לזנק(); מֶרחָב(); } אחרת אם (משפט.צ'אראט (ראשון + i) == 'x') {Serial.print ("-..-"); לזנק(); נְקוּדָה(); נְקוּדָה(); לזנק(); מֶרחָב(); } אחרת אם (משפט.כאראט (ראשון + i) == 'y') {Serial.print ("-.--"); לזנק(); נְקוּדָה(); לזנק(); לזנק(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == 'z') {Serial.print ("-.."); לזנק(); לזנק(); נְקוּדָה(); נְקוּדָה(); מֶרחָב(); } אחרת אם (phrase.charAt (first + i) == '') {Serial.print ("/"); bigSpace (); }}} לולאת void () {// אל תכתוב כאן כלום}

שלב 7: פתרון בעיות

הגלגל לא זז

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

הגלגל מושך את הנייר אך אז הוא ממשיך להסתובב מבלי למשוך את הנייר

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

הנקודות והמקפים מחוברים

בדוק אם פונקציות הנקודה, המקף והמרווח כתובות כהלכה, הן צריכות להיות כך:

// זוהי השיטה שגורמת לרובוט לכתוב נקודה dotvoid () {Serial.println ("נקודת התחלה"); myServo.write (160); עיכוב (1000); myServo.write (90); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); Serial.println ("dot done"); }

// זוהי השיטה שגורמת לרובוט לכתוב מקף

void dash () {Serial.println ("התחלת מקף"); myServo.write (160); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); myServo.write (90); עיכוב (1000); myStepper.step (stepsPerRevolution); עיכוב (1000); Serial.println ("מקף הסתיים"); }

// זוהי השיטה שגורמת לרובוט להשאיר רווח בין כל אות

חלל חלל () {Serial.println ("התחלת החלל"); myServo.write (90); עיכוב (1000); myStepper.step (200); עיכוב (1000); Serial.println ("שטח הנעשה"); }

מוּמלָץ: