פרסומת
רצית שאי פעם הייתה לך מכונית משלך אלפיים תעשיות משלך (KITT) משלך - אתה יודע, מ"נייט ריידר "? הפוך את החלום שלך צעד אחד קרוב יותר למציאות על ידי בניית סורק LED! הנה התוצאה הסופית:
מה אתה צריך
לא צריך הרבה חלקים לפרויקט הזה, וייתכן שיש לך כבר רבים מהם:
- 1 x ארדואינו UNO או דומה
- 1 x טיפוס לחם
- 8 נוריות LED אדומות
- נגדים 8 x 220 אוהם
- פוטנציומטר 1 x 10 ק"ג אוהם
- חוטים בין זכר לזכר
אם יש לך ערכת המתנע של ארדואינו מה כלול בערכת Starter Arduino? [MakeUseOf מסביר]הצגתי בעבר את חומרת המקור הפתוח של Arduino כאן ב- MakeUseOf, אבל אתה זקוק ליותר מסתם הארדואינו בפועל כדי לבנות מזה משהו ולמעשה להתחיל. ערכות המתנע של ארדואינו הן ... קרא עוד סביר להניח שיש לך את כל החלקים האלה (מה אתה יכול לעשות עם ערכת התנעה? 5 פרוייקטים ארדואינו ייחודיים למתחילים שתוכלו להכין רק עם ערכת התחלה קרא עוד ).
כמעט כל ארדואינו יעבוד, בתנאי שיש לו שמונה סיכות זמינות (מעולם לא השתמשתי בארדואינו לפני כן? התחל כאן תחילת העבודה עם ארדואינו: מדריך למתחיליםArduino היא פלטפורמת אב-טיפוס אלקטרונית עם קוד פתוח המבוססת על חומרה ותוכנה גמישים ונוחים לשימוש. הוא מיועד לאמנים, מעצבים, חובבים ולכל מי שמעוניין ליצור חפצים או סביבות אינטראקטיביות. קרא עוד ). אתה יכול השתמש ברישום Shift תכנות ארדואינו - משחק עם אוגרי משמרות (a.k. אפילו נוריות נוריות נוספות)היום אנסה ללמד אותך קצת על ריסטרי משמרות. אלה הם חלק חשוב למדי בתכנות של Arduino, בעיקרון מכיוון שהם מרחיבים את מספר התפוקות שבהם תוכלו להשתמש, בתמורה ל ... קרא עוד כדי לשלוט בנורות הלד, אם כי זה לא נחוץ לפרויקט זה, מכיוון שלארדואינו יש מספיק סיכות.
בניית תוכנית
זהו פרויקט פשוט מאוד. למרות שזה נראה מורכב מהמספר הגדול של החוטים, כל חלק בודד הוא פשוט מאוד. כל דיודה פולטת אור (LED) מחוברת לפין הארדואינו שלה. משמעות הדבר היא כי ניתן להפעיל ולכבות כל LED בנפרד. פוטנציומטר מחובר לאנלוגי הארדואינו בפינים, שישמש להתאמת מהירות הסורק.
המעגל
חבר את הסיכה השמאלית החיצונית (מבט מקדימה, עם הסיכות בתחתית) של הפוטנציומטר לקרקע. חבר את הסיכה החיצונית ההפוכה ל- + 5v. אם זה לא עובד נכון, הפוך את הסיכות האלה. חבר את הסיכה האמצעית לאנלוגי Arduino ב- 2.
חבר את האנודה (רגל ארוכה) של כל LED לפינים דיגיטליים אחד עד שמונה. חבר את הקתודות (רגל קצרה) לאדמת ארדואינו.
הקוד
צור מערכון חדש ושמור אותו כ- "KnightRider". הנה הקוד:
const int leds [] = {1,2,3,4,5,6,7,8}; // סיכות לד. const int totalLeds = 8; זמן int = 50; // הגדרת חלל מהירות ברירת מחדל () {// מאתחל את כל היציאות עבור (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } לולאת חלל () {עבור (int i = 0; i 0; --i) {// סרוק זמן מימין לשמאל = analogRead (2); digitalWrite (נוריות [i], HIGH); עיכוב (זמן); digitalWrite (נוריות [i - 1], HIGH); עיכוב (זמן); digitalWrite (נוריות [i], LOW); } }
בואו נשבר את זה. כל פין לד מאוחסן במערך:
const int leds [] = {1,2,3,4,5,6,7,8};
מערך הוא בעצם אוסף של פריטים קשורים. אלמנטים אלה מוגדרים כקבועים ("const"), מה שאומר שלא ניתן לשנות אותם בהמשך. אתה לא צריך להשתמש בקבוע (הקוד יעבוד בצורה מושלמת אם תסיר את "const"), למרות שזה מומלץ.
ניתן לגשת אלמנטים של מערך באמצעות סוגריים מרובעים ("[]") ומספר שלם הנקרא אינדקס. אינדקסים מתחילים באפס, כך ש- "נוריות [2]" יחזירו את האלמנט השלישי במערך - סיכה 3. מערכים הופכים את קוד מהיר יותר לכתיבה וקל יותר לקריאה, הם גורמים למחשב לעשות את העבודה הקשה!
A לולאה משמש להגדרת כל סיכה כפלט:
עבור (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
קוד זה נמצא בפונקציה "הגדרה ()", מכיוון שהוא צריך לרוץ פעם אחת רק עם תחילת התוכנית. עבור לולאות הם שימושיים מאוד. הם מאפשרים לך להפעיל את אותו הקוד שוב ושוב, עם ערך שונה בכל פעם. הם מושלמים לעבודה עם מערכים. מספר "i" שלם מוכרז, ורק קוד בתוך הלולאה יכול לגשת למשתנה זה (זה מכונה "היקף"). הערך של i מתחיל באפס, ולכל איטרציה של הלולאה, i מוגדל באחד. ברגע שהערך של i פחות או שווה למשתנה "totalLeds", הלולאה "נשברת" (נעצרת).
הערך של i משמש לגישה למערך ה- "נוריות". לולאה זו ניגשת לכל אלמנט במערך ומגדירה אותו כפלט. אתה יכול להקליד ידנית "pinMode (pin, OUTPUT)" שמונה פעמים, אך מדוע לכתוב שמונה שורות כשאתה יכול לכתוב שלוש?
בעוד שכמה משפות תכנות יכולות לדעת כמה אלמנטים נמצאים במערך (בדרך כלל עם תחביר כמו array.length), Arduino לא הופך את זה לכל כך פשוט (זה כרוך במתמטיקה יותר). מכיוון שמספר האלמנטים במערך כבר ידוע, זה לא בעיה.
בתוך הלולאה הראשית (לולאה חלילה ()) הם שניים נוספים עבור לולאות. הראשונה מכוונת את נוריות הנורית ומכבות אותה בין 1 - 8. הלולאה השנייה מכוונת את נוריות הלחץ ומופעלת בין 8 - 1. שימו לב כיצד פועל הסיכה הנוכחי, וגם הסיכה הנוכחית פלוס אחת מופעלת. זה מבטיח שתמיד יהיו שני נוריות LED בו זמנית, מה שהופך את הסורק למראה יותר מציאותי.
בתחילת כל לולאה, ערך הקופה נקרא למשתנה "זמן":
time = analogRead (2);
זה נעשה פעמיים, פעם אחת בתוך כל לולאה. זה צריך להיות כל הזמן לבדוק ולעדכן. אם זה היה מחוץ לולאות, זה עדיין היה עובד, עם זאת היה עיכוב קטן - הוא יפעל רק לאחר שהלולאה תסיים לבצע. סירים הם אנלוגיים, ומכאן משמש "analogRead (pin)". זה מחזיר ערכים בין אפס (מינימום) ל- 1023 (מקסימום). ארדואינו מסוגל להמיר ערכים אלה למשהו מועיל יותר, עם זאת הם מושלמים למקרה שימוש זה.
העיכוב בין שינוי נוריות LED (או למהירות הסורק) נקבע באלפיות השנייה (1/1000 שניה), כך שהזמן המקסימאלי הוא קצת יותר משנייה.
סורק מתקדם
עכשיו כשאתה יודע את היסודות, הבה נראה במשהו מורכב יותר. סורק זה ידליק את נוריות הנורית בזוגות המתחילים מבחוץ ועובדים פנימה. לאחר מכן זה יהפוך את זה ויעבור מבפנים לזוגות חיצוניים. הנה הקוד:
const int leds [] = {1,2,3,4,5,6,7,8}; // סיכות לד. const int totalLeds = 8; const int halfLeds = 4; זמן int = 50; // הגדרת חלל מהירות ברירת מחדל () {// מאתחל את כל היציאות עבור (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } לולאת חלל () {עבור (int i = 0; i 0; --i) {// סרוק בתוך זוגות זמן החוצה = analogRead (2); digitalWrite (נוריות [i], HIGH); digitalWrite (נוריות [(totalLeds - i) - 1], HIGH); עיכוב (זמן); digitalWrite (נוריות [i], LOW); digitalWrite (נוריות [(totalLeds - i) - 1], LOW); עיכוב (זמן); } }
קוד זה מעט מורכב יותר. שימו לב כיצד שני הלולאות עוברות מאפס ל"חצי נוריות - 1 "(3). זה הופך את הסורק טוב יותר. אם שני הלולאות היו עוברים מ- 4 - 0 ו- 0 - 4 אז אותם נוריות נוריות היו מהבהבות פעמיים באותו רצף - זה לא היה נראה טוב במיוחד.
כעת עליך להיות בעל סורק LED עובד על Knight Rider! יהיה קל לשנות זאת לשימוש בנורות LED גדולות יותר או גדולות יותר, או ליישם דפוס משלך. קל מאוד להעביר מעגל זה ל- פאי פטל (חדש לפי? התחל כאן פטל Pi: ההדרכה הלא רשמיתבין אם אתה בעל Pi נוכחי שרוצה ללמוד יותר ובין שהוא בעל פוטנציאל של מכשיר זה בגודל כרטיס אשראי, זה לא מדריך שאתה רוצה לפספס. קרא עוד ) או ESP8266 הכירו את רוצח ארדואינו: ESP8266מה אם הייתי אומר לך שיש לוח dev תואם Arduino עם Wi-Fi מובנה בפחות מ -10 $? ובכן, יש. קרא עוד .
האם אתה בונה העתק KITT? אשמח לראות את כל הדברים שנייט ריידר בתגובות.
ג'ו הוא בוגר מדעי המחשב מאוניברסיטת לינקולן, בריטניה. הוא מפתח תוכנה מקצועי, וכאשר הוא לא טס מל"טים או כותב מוסיקה, לעתים קרובות ניתן למצוא אותו בצילום או בהפקת סרטונים.