הקוראים מכירים צופים - אנלוגים של חלוצים שלנו, אך מסתבר שיש גם גורים - אנלוגים לאוקטובר שלנו. מתקבלת בהם מגיל חמש. בנו של הסופר אינסטרובסלס תחת הכינוי mr_fid כבר אומץ, והוא יצטרך להשתתף באירוע מרכזי של מוניות וצופים, שאחד מהם יהיה קוד מורס. כדי לעניין עוד יותר את הילד, האדון נתן לו צעצוע יוצא דופן.
זה מבוצע בתאריך
ארדואינו ננו ומייצר 12 מילים שונות המוצגות לצפצוף עם גנרטור מובנה (ניתן להחלפה באמצעות מתג מכני) ונורת לד RGB. ניתן להתאים את המחזור בין 100 ל 1100 אלפיות השנייה. כדי להחליף מילים, קיים מתג טינקר. העיצוב מופעל על ידי סוללת ליתיום-פולימר של 1000 מיליאמפר / שעה. בקר הטעינה מובנה. אבל כאן זה עוד לא:
מר_פיד מודה לסיימון מונק על הספר תכנות ארדואינו, אותו קנה לפני מספר שנים. בעריכת הסקיצה הסתמך על דוגמאות מהספר הזה.
מתחילים בעבודה
תוצרת בית, המאסטר ידע על קוד מורס רק שישנו אות SOS. הייתי צריך ללמוד את החומר ולגלות שהנקודה היא מידה אחת, המקף הוא שלוש, המרווח בין התווים במכתב הוא מידה אחת, בין האותיות הוא שלוש, בין המילים הוא שבע.
בעת סימון פלסטיק mr_fid משתמש בסרט מיסוך. הודות לכך, ניתן לראות את סימן הסמן טוב יותר אם הפלסטיק כהה. בנוסף, סרט דבק זה מט, והמקדח אינו מחליק כאשר הוא "מכוון".
יש להעריך מראש היכן יימצאו מרכיבי המבנה, כך שהכל יתאים, ואף אחד המרכיבים לא נוגע באלה הסמוכים, כולל החלקים הבולטים. מר_פיד לא שכח דבר מלבד ... הסוללה. ובכן, המקרה די מרווח, ואז נמצא לו מקום. בינתיים ...
למרות שיש לאדון מקדח ספסל קטן, אפילו בעזרתו השתמש במקדחה מדרגה לנוחות רבה יותר, אך זהו גם "אדרה" או "גזר".
כאשר מסתובב פיר מתג הידית על ידי הידית, המתג עצמו חייב להישאר נייח. לשם כך, בנוסף לפיר, לפניו סיכה קטנה הדורשת חור נוסף בלוח הקדמי.
לכן, mr_fid קידח תחילה חור לפיר, ואז הדביק את סרט המסיכה בגב, הניח את מתג הברגים למקומו ולחץ עליו. הסיכה הותירה חותם על סרט המסיכה, נותר לקדוח חור שם.
התוכנית מבלי לקחת בחשבון את הסוללה, בקר הטעינה והממיר נראית כך:
בלוח הקדמי, שם נמצאים מתג הביסקוויט והנגד המשתנה, שילב המאסטר את המסקנות של רכיבים אלה המחוברים לאותן נקודות מעגל במקרה (במקרה זה, הפלוס והחוט המשותף). זה אפשר רק למשוך ארבעה חוטים בין הפאנל הקדמי והדיור.
מתג הברגים הופך גם הוא לסוג של נגדי משתנה, רק צעד אחד, שעבורו מולחמים אליו 11 נגדים לכל 1 kOhm, כפי שמוצג בתצלומים. ארדואינו קובע את מיקומו על ידי מתח משתנה צעד צעד, שעבורו מספיק קלט אנלוגי אחד.
גדול יותר:
כדי לשלוט על LED RGB, בחר mr_fid בסיכות הארדואינו עם המספרים 9, 10 ו- 11. אלה הם יציאות PWM, שבקושחה הבאה תאפשר להשיג יותר ביטים לכל צבע משלושה.
הוא חיבר פלוס וחוט משותף בקוטביות הפוכה לנגד משתנה כך שתנוחת המינימום תואמת את המחזור של משך המקסימום, כלומר המהירות המינימלית.
דוגמה מתוך ספר הלימוד של סיימון מונק הוא פשוט ופונקציונאלי: הוא לוקח נתונים שנכנסים דרך יציאה טורית ומתרגם אותם לקוד מורס עם מחזור שעון של 200 אלפיות שנייה. פונקציות נוספות שנוספו על ידי האשף מספקות התאמת התקופה בהתאם למתח המגיע ממנוע הנגד המשתנה, כמו גם סירוב היציאה הסדרתית לטובת אחסון של 12 מילים קבועות שנבחרו על ידי מתג החיוג. בנוסף הוסיפו שגרות לבקרת כפתור המיתוג של מצב RGB-LED, ובכן ועם טוויטר עם גנרטור מובנה, התוכנית יכולה לשלוט בהתחלה.
כשאתה מתכנת את ארדואינו, mr_fid שכח לחלוטין שצריך להאכיל את הצעצוע ממשהו, מכיוון שהלוח מופעל מ- USB כל הזמן הזה. כאשר נזכר, המחשבה הראשונה הייתה להעביר את הכל מה"קרונה "דרך המייצב. אך זה לא התאים, ובהתחלה המאסטר רצה למקם אותו בחוץ, אך לאחר מכן החליט להשתמש בסוללת ליתיום-פולימר דקה עם 3.7 וולט ו -1000 מיליאמפר / שעה.
עם סוללה טעונה טרי, המתח מגיע ל -4.2 וולט, וזה מספיק לכל הגבישים של ה- RGB LED, כולל כחול. אך ככל שהוא פורק, הוא צונח ולמרות ש- 3.3 V מספיקים, בהירות האור הכחול יכולה לרדת מאוד. הייתי צריך להשתמש במייצב דחיפה עם חמישה וולט יציב ביציאה. וכדי לא להוציא את הסוללה מהמקרה בעת הטעינה, הוסיף הכותב בקר טעינה ומתג היפוך דו-מוטי המחבר את הסוללה בשני הקטבים לארדוינו או לבקר זה. עכשיו אתה יכול לטעון את הצעצוע מ- USB.
הוא חיבר את כל זה יחד בצורה כזו, לא שוכח את הקוטביות ומניעת הקצר:
על ידי שינוי המיקום של מתג הביסקוויטים, תוכלו לבחור את קוד מורס עבור שילובי האותיות הבאות: HHH (נקודה אחת), OOO (מקף אחד), חתול (חתול), כלב (כלב), נמלה (נמלה), עף (זבוב), RAT (עכברוש), ינשוף (ינשוף), חזיר (חזיר), HEN (עוף), שועל (שועל) ו- EMU (אמו). הכפתור מאפשר לך לשנות את מצבי ההפעלה של LED RGB על הטבעת: צבעים קבועים - אדום, כחול, ירוק, כחול-ירוק, צהוב, פטל, לבן, כמו גם נקודה אדומה ונקיון ירוק, שינוי צבע אחרי כל מילה, שינוי צבע אחרי כל אות .
בארדואינו העלה mr_fid מערכון כזה:int dotDelay = 200;
int ledPinRed = 11; // אדום
int ledPinBlue = 10; // כחול
int ledPinGreen = 9; // ירוק
int oldAI = 15;
int pat;
int i = 1;
int j = 0;
bool toggle = שווא;
כפתור int = 8;
אינטר אינטר = 7;
דגל int = 1;
בחר ב- Word;
חיה int = 1;
int potValue = 0;
int maxVoltageBits = 1023;
int splitBits = maxVoltageBits / 22;
const int pot = A4;
const int rotaryInput = A5;
char char;
char * אותיות [] = {
".-", "-...", "-.-.", "- ..", ".", "..-.", "-.", "....", " .. ",
".---", "-.-", ".- ..", "-", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "- .."} ;
char * numbers [] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "--- ..", "----."};
char * animals3 = "hhhooocatdogantflyratowlpighenfoxemu";
הגדרת ביטול ()
{
pinMode (ledPinBlue, OUTPUT);
pinMode (ledPinRed, OUTPUT);
pinMode (ledPinGreen, OUTPUT);
pinMode (סיר, INPUT);
pinMode (rotaryInput, INPUT);
pinMode (כפתור, קלט);
pinMode (זמזם, פלט);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, LOW);
עיכוב (500);
digitalWrite (ledPinRed, HIGH);
עיכוב (100);
digitalWrite (ledPinBlue, LOW);
עיכוב (500);
digitalWrite (ledPinBlue, HIGH);
עיכוב (100);
digitalWrite (ledPinGreen, LOW);
עיכוב (500);
digitalWrite (ledPinGreen, HIGH);
עיכוב (100);
digitalWrite (זמזם, גבוה);
עיכוב (100);
digitalWrite (זמזם, נמוך);
int buttonValue = digitalRead (כפתור);
אם (כפתור ערך == 1)
{
selectWord = analogRead (rotaryInput);
selectorSwitch1 (selectWord);
}
אחר
{
דגל = 1;
}
}
לולאה חלילה ()
{
wait_for_enter ();
selectWord = analogRead (rotaryInput);
selectorSwitch (selectWord);
potValue = analogRead (סיר);
dotDelay = potValue + 100;
i = (חיה * 3) -3;
בזמן (j & lt; 3)
{
ch = בעלי חיים 3 [i];
אם (ch & gt; = 'a' && ch & lt; = 'z')
{
flashSequence (אותיות [ch - 'a']);
}
אחרת אם (ch & gt; = '0' && ch & lt; = '9')
{
flashSequence (אותיות [ch - '0']);
}
אחרת אם (ch == '')
{
עיכוב (dotDelay * 7);
}
i = i + 1;
j = j + 1;
}
עיכוב (dotDelay * 7);
// toggle =! toggle; // החלף צבע כל מילה (לא נחוץ)
j הוא 0;
}
void wait_for_enter ()
{
int buttonValue = digitalRead (כפתור);
בזמן (כפתור ערך == 0)
{
buttonValue = digitalRead (כפתור);
}
}
בטל flashSequence (char * רצף)
{
int k = 0;
while (רצף [k]! = '\ 0')
{
flashDotOrDash (רצף [k]);
k = k + 1;
}
//Serial.print ("");
עיכוב (dotDelay * 3);
toggle =! toggle; // toggle צבע בין אותיות
}
void flashDotOrDash (char dotOrDash)
{
אם (dotOrDash == '.')
{
אם (דגל == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
}
אחרת אם (דגל == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 8)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
}
אחרת אם (דגל == 9)
{
אם (להחליף! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
}
אחר
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinBlue, HIGH);
}
}
}
אחר
{
אם (דגל == 1)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
}
אחרת אם (דגל == 2)
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 3)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 4)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 5)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 6)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
}
אחרת אם (דגל == 7)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (ledPinBlue, LOW);
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
digitalWrite (ledPinBlue, HIGH);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 8)
{
digitalWrite (ledPinGreen, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinGreen, HIGH);
}
אחרת אם (דגל == 9)
{
אם (להחליף! = 0)
{
digitalWrite (ledPinRed, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinRed, HIGH);
}
אחר
{
digitalWrite (ledPinBlue, LOW);
digitalWrite (זמזם, גבוה);
עיכוב (dotDelay * 3);
digitalWrite (זמזם, נמוך);
digitalWrite (ledPinBlue, HIGH);
}
}
}
עיכוב (dotDelay); // בין אותיות
// toggle =! toggle; // לעבור בין caractors
}
בורר חללים Switch1 (int AI)
{
אם ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // לראות אם הערך השתנה?
{
אם (AI & gt; 11 * חלקים ביטים) // חייב להיות 7,8,9,10,11,12.
{
אם (AI & gt; 17 * splitBits) // חייב להיות 10,11,12.
{
אם (AI & gt; 21 * splitBits) // חייב להיות 12.
{
דגל = 12;
}
אחר // חייב להיות 10.11.
{
אם (AI & gt; 19 * splitBits) // חייב להיות 11.
{
דגל = 11;
}
אחר // חייב להיות 10.
{
דגל = 10;
}
}
}
אחר // חייב להיות 7,8,9.
{
אם (AI & gt; 15 * splitBits) // חייב להיות 9.
{
דגל = 9;
}
אחר // חייב להיות 7.8.
{
אם (AI & gt; 13 * splitBits) // חייב להיות 8.
{
דגל = 8;
}
אחר // חייב להיות 7.
{
דגל = 7;
}
}
}
}
אחר // חייב להיות 1,2,3,4,5,6.
{
אם (AI & gt; 5 * splitBits) // חייב להיות 4,5,6.
{
אם (AI & gt; 9 * splitBits) // חייב להיות 6.
{
דגל = 6;
}
אחר // חייב להיות 4,5.
{
אם (AI & gt; 7 * splitBits) // חייב להיות 5
{
דגל = 5;
}
אחר // חייב להיות 4.
{
דגל = 4;
}
}
}
אחר // חייב להיות 1,2,3.
{
אם (AI & gt; 3 * splitBits) // חייב להיות 3.
{
דגל = 3;
}
אחר // חייב להיות 1,2.
{
אם (AI & gt; splitBits) // חייב להיות 2.
{
דגל = 2;
}
אחר // חייב להיות 1.
{
דגל = 1;
}
}
}
}
}
oldAI = AI;
// עיכוב (500);
//Serial.println ();
}
בורר חלל סוויץ '(int AI)
{
אם ((AI & gt; (oldAI + 10)) || (AI & lt; (oldAI - 10))) // // לראות אם הערך השתנה?
{
אם (AI & gt; 11 * ביטים מחולקים) // חייב להיות 7,8,9,10,11,12.
{
אם (AI & gt; 17 * splitBits) // חייב להיות 10,11,12.
{
אם (AI & gt; 21 * splitBits) // חייב להיות 12.
{
בעל חיים = 12;
}
אחר // חייב להיות 10.11.
{
אם (AI & gt; 19 * splitBits) // חייב להיות 11.
{
חיה = 11;
}
אחר // חייב להיות 10.
{
חיה = 10;
}
}
}
אחר // חייב להיות 7,8,9.
{
אם (AI & gt; 15 * splitBits) // חייב להיות 9.
{
חיה = 9;
}
אחר // חייב להיות 7.8.
{
אם (AI & gt; 13 * splitBits) // חייב להיות 8.
{
חיה = 8;
}
אחר // חייב להיות 7.
{
בעל חיים = 7;
}
}
}
}
אחר // חייב להיות 1,2,3,4,5,6.
{
אם (AI & gt; 5 * splitBits) // חייב להיות 4,5,6.
{
אם (AI & gt; 9 * splitBits) // חייב להיות 6.
{
בעל חיים = 6;
}
אחר // חייב להיות 4,5.
{
אם (AI & gt; 7 * splitBits) // חייב להיות 5
{
חיה = 5;
}
אחר // חייב להיות 4.
{
בעל חיים = 4;
}
}
}
אחר // חייב להיות 1,2,3.
{
אם (AI & gt; 3 * splitBits) // חייב להיות 3.
{
חיה = 3;
}
אחר // חייב להיות 1,2.
{
אם (AI & gt; splitBits) // חייב להיות 2.
{
בעל חיים = 2;
}
אחר // חייב להיות 1.
{
בעל חיים = 1;
}
}
}
}
}
oldAI = AI;
// עיכוב (500);
//Serial.println ();
}
אם חזרתם אחרי המאסטר, עכשיו בידיכם הוא אותו צעצוע איתו תוכלו לעניין את ילדיכם בקוד מורס. וכשגדלו, עם שינוי קושחה פשוט, אתה יכול לקבל את הבסיס ל"שועל "אוטומטי רגיל, להעביר בחירה של MOE, MOI, MOS, MOH או MO5, להדליק למשך דקה אחת כל ארבע דקות.
P.S. במיוחד עבור אנשים משעממים שמגלים פגמים בכותרות: בעלי חיים הם שם קולקטיבי לבעלי חיים, ציפורים וחרקים.