הקוראים מוזמנים
תוצרת בית מחבר ה- Instructables תחת הכינוי Gearboxmakers, המציג את המרחק בין האובייקט לאיתור הטווחים במחוון סולם, ואם הוא קטן מדי, הוא מנגן מנגינה.
המאסטר מתחיל לעבוד על העיצוב על ידי עריכת התוכנית שלו:
המסקנות לאספקת הכוח למד טווח לא מוצגות בתרשים, אך על מד טווח עצמו כל ההערות הנחוצות זמינות.
אוגרי Shift 74HC595 (KR1564IR52) הנה המרכיבים השניים החשובים ביותר אחרי
ארדואינו. הם משמשים לעתים קרובות כשצריך לנהל עומסים רבים, תוך שימוש בשני יציאות בלבד מהקרם מיקרו. פשוט מאוד, ניתן לתאר את עקרון הפעולה שלהם באופן הבא. אתה מקליד במקלדת - פיזית או על המסך. באופן טבעי, באותו זמן אתה לוחץ על המקשים בתורם, ברצף. התוצאה היא קו שכל הסימנים שרואים על המסך בו זמנית - במקביל. קל להגדיל את מספר העומסים המבוקרים על ידי הוספת עוד אוגרי משמרת לשרשרת. מספר היציאות של בקר המיקרו המעורב לא יגדל, אך עם מהירות העברת נתונים קבועה, התדירות המרבית בה ניתן להפעיל ולכבות כל אחד מהעומסים תקטן.
מכיוון שמספר נוריות ה- LED המופעלות בו זמנית משתנה, המאסטר לא מצליח להסתדר עם נגן משותף אחד - עליכם להוסיף הנגד לכל LED.
האשף מרכיב את המכשיר
עשה זאת בעצמך על גבי קרש לחם מסוג פרפורבורד ומחבר כמה מוליכים לארדואינו המשמשים להקבלה של קווי החשמל והחוט המשותף, כמו גם חילופי נתונים עם המיקרו-בקר. אותות בקרה מרשמות המשמרת, פולט הצליל ופולט הזרמת טווח המועברים מהארדואינו למכשיר, והאותות המופקים על ידי המקלט של מד טווח עם קבלת תנודות משתקפות מועברים למכשיר. בשלב הבא, הלוח מוצג מורכב בחלקו:
האשף מתחיל לעבוד על התוכנה, הוא מקבל את הסקיצה הבאה:
/ *
** נוצר על ידי: צ'רלס מוצ'ין
** @charlesmuchene
**
** תאריך: 3 באוקטובר 2013
**
** זמן: 1412 שעות
**
** קוד מד מרחק
** המערכת מודדת את המרחק
** באמצעות חיישן קולי HC-SR04
** ומתרגם אותו לסדרה
** של נוריות LED מוארות
**
** תיהנו ותגנו אותו!
* /
/ * ספריה למגרשים המלודיים
** הוא מתאר את התדרים שייצרו * /
# כלול "pitches.h"
const int triggerPin = 10; // סיכת הדק (ירוק)
const int echoPin = 9; // סיכת הד (כתום)
const int tonePin = 8; // סיכת צליל (כחול לבן)
const int serialDataPin = 7; // סיכת נתונים טורית (כתומה)
const int registerClockPin = 6; // סיכת שעון סיכה (חום)
const int shiftRegisterClockPin = 5; // שעון רישום משמרת
const int numOfRegisters = 16; // מספר הרשומות
רגיסטרים בולוניים [numOfRegisters]; // מערך רישום
int litLEDs = 0; // דלפק סיכות הוביל
טווח int = 100; // ערך טווח
מרחק int; // מרחק
const int count = טווח / מספר רישום; // (מטרים לכל LED)
// הפעלת ניגון
מנגינה int [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
// מנגינת מרחק קריטית
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
// משך זמן הערה: 4 = תו רבע, 8 = תו שמיני וכו '.
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
הגדרת ביטול ()
{
/ * תצורות סיכות * /
pinMode (triggerPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (serialDataPin, OUTPUT);
pinMode (registerClockPin, OUTPUT);
pinMode (shiftRegisterClockPin, OUTPUT);
/ * מדליק אותם * /
lightEmUp ();
/ * לחן התחל * /
playMelody ();
/ * כבה את כל נוריות ה- LED * /
clearRegisters ();
} // הגדרה
/ * קבל מרחק מ- HC-SR04 * /
int getDistance ()
{
digitalWrite (triggerPin, LOW);
עיכוב מיקרו-שניות (2);
/ * שלח אות טריגר * /
digitalWrite (triggerPin, HIGH);
עיכוב מיקרו-שניות (10);
digitalWrite (triggerPin, LOW);
/ * מרחק חזרה בסנטימטרים * /
חזרה (דופק (echoPin, HIGH) / 2) / 29.1;
} // קבל מרחק
// מדליקים את כל העורות
lightEmUp void ()
{
עבור (pin pin = 0; pin = 0; i--)
רושם [i] = LOW;
writeRegisters ();
} // רישומים ברורים
/ * כתוב ערכי הרשמה ושמור אותם * /
רישום ריקים ()
{
/ * עם סיכת שעון פנקס נמוכה
** תוכן פנקס האחסון
** אינם משתנים על ידי ערכי רישום המשמרות המשתנים
** /
digitalWrite (registerClockPin, LOW);
/ * עיין בכל הרשומות * /
עבור (int i = numOfRegisters - 1; i> = 0; i--)
{
digitalWrite (shiftRegisterClockPin, LOW);
int val = רושם [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} // לולאות את כל הרשומות
/ * האות הזה מעביר את התוכן של
** מפנקס המשמרות לרישומי האחסון
* /
digitalWrite (registerClockPin, HIGH);
} // כתוב רישומים
// הגדר סיכה בודדת גבוהה או נמוכה
setRegisterPin בטל (אינדקס int, ערך int)
{
רושם [אינדקס] = ערך;
} // הגדר ערך סיכת רישום
/ * הפעל התחל uMelody * /
play voidMelody ()
{
עבור (int thisNote = 0; thisNote <10; thisNote ++)
{
/ * לחישוב משך ההערה,
קח שנייה אחת מחולקת לפי סוג הערה
/ * למשל שטר רבע = 1000/4,
** פתק שמיני = 1000/8 וכו '* /
int noteDuration = 1000 / noteDurations [הערה זו];
טון (tonePin, מנגינה [הערה זו], noteDuration);
/ * כדי להבדיל בין ההערות, קבע זמן מינימלי ביניהן.
** נראה כי משך הפתק + 30% עובד היטב * /
int pauseBetweenNotes = noteDuration * 1.30;
עיכוב (pauseBetweenNotes);
noTone (8);
} // כל התווים
} // השמעת ניגון הפעלה
/ * מנגינה קריטית * /
play voidCriticalMelody ()
{
עבור (int thisNote = 0; thisNote <4; thisNote ++)
{
int noteDuration = 1000 / noteDurations [הערה זו];
טון (tonePin, criticalMelody [הערה זו], noteDuration);
/ * כדי להבדיל בין ההערות, קבע זמן מינימלי ביניהן.
** נראה כי משך הפתק + 30% עובד היטב * /
int pauseBetweenNotes = noteDuration * 1.30;
עיכוב (pauseBetweenNotes);
noTone (8);
} // לולאה את כל התווים
} // נגן ניגון ביקורתי
לולאה חלילה ()
{
/ * קבל מרחק * /
מרחק = getDistance ();
/ * חישוב נוריות נוריות * /
אם (טווח> = מרחק)
litLEDs = (טווח - מרחק) / ספירה;
אחר
litLEDs = -1;
/ * נוריות נוריות תלויות המרחק המחושב * /
עבור (pin pin = 0; pin = 13)
playCriticalMelody ();
} // לולאה
/ *****************************************************
* הגדרת "Pitches.h"
*
* קבועים ציבוריים
* הקבועים מייצגים את תדרי המגרש
* מההערות בהתאמה קונצרט סטנדרטי
* כוונון מכשירים כמו פסנתר
**************************************************** /
# הגדר NOTE_B0 31
# הגדר את ה- NOTE_C1 33
# הגדר NOTE_CS1 35
# הגדר NOTE_D1 37
# הגדר NOTE_DS1 39
# הגדר את הערה_E1 41
# הגדר את NOTE_F1 44
# הגדר NOTE_FS1 46
# הגדר את NOT_G1 49
# הגדר את NOT_GS1 52
# הגדר את NOT_A1 55
# הגדר NOTE_AS1 58
# הגדר את NOTE_B1 62
# הגדר את NOT_C2 65
#define NOTE_CS2 69
# הגדר את NOTE_D2 73
# הגדר את NOT_DS2 78
# הגדר את NOTE_E2 82
# הגדר את NOTE_F2 87
# הגדר את NOTE_FS2 93
# הגדר את NOTE_G2 98
# הגדר את NOTE_GS2 104
# הגדר את NOTE_A2 110
# הגדר NOTE_AS2 117
# הגדר את NOTE_B2 123
# הגדר את NOT_C3 131
# הגדר את NOTE_CS3 139
# הגדר את NOT_D3 147
# הגדר את NOT_DS3 156
# הגדר את NOT_E3 165
# הגדר את ה- NOTE_F3 175
# הגדר את NOTE_FS3 185
# הגדר את NOT_G3 196
# הגדר את NOTE_GS3 208
# הגדר את ה- NOTE_A3 220
# הגדר את NOT_AS3 233
# הגדר את NOT_B3 247
# הגדר את NOTE_C4 262
# הגדר את NOTE_CS4 277
# הגדר את ה- NOT_D4 294
# הגדר את NOTE_DS4 311
# הגדר את NOTE_E4 330
# הגדר את NOTE_F4 349
# הגדר את NOTE_FS4 370
# הגדר את NOT_G4 392
# הגדר את NOTE_GS4 415
# הגדר את NOTE_A4 440
# הגדר את NOTE_AS4 466
# הגדר את ה- NOTE_B4 494
# הגדר את NOTE_C5 523
# הגדר את NOTE_CS5 554
# הגדר את ה- NOT_D5 587
# הגדר את ה- NOTE_DS5 622
# הגדר את ה- NOT_E5 659
# הגדר את ה- NOTE_F5 698
# הגדר את NOTE_FS5 740
# הגדר את ה- NOTE_G5 784
# הגדר את NOTE_GS5 831
# הגדר את NOTE_A5 880
# הגדר את NOTE_AS5 932
# הגדר את ה- NOTE_B5 988
# הגדר את NOTE_C6 1047
# הגדר את NOTE_CS6 1109
# הגדר את ה- Note_D6 1175
# הגדר את ה- NOTE_DS6 1245
# הגדר את ה- NOTE_E6 1319
# הגדר את ה- NOTE_F6 1397
# הגדר את ה- NOTE_FS6 1480
# הגדר את ה- Note_G6 1568
# הגדר את ה- NOTE_GS6 1661
# הגדר את ה- NOTE_A6 1760
# הגדר את NOT_AS6 1865
# הגדר את ה- NOTE_B6 1976
# הגדר את NOT_C7 2093
# הגדר את NOTE_CS7 2217
# הגדר את ה- NOTE_D7 2349
# הגדר את NOT_DS7 2489
# הגדר את ה- NOTE_E7 2637
# הגדר את ה- NOTE_F7 2794
# הגדר את NOTE_FS7 2960
# הגדר את NOTE_G7 3136
# הגדר את NOTE_GS7 3322
# הגדר את ה- NOTE_A7 3520
# הגדר את NOT_AS7 3729
# הגדר את ה- NOTE_B7 3951
# הגדר את NOTE_C8 4186
# הגדר את NOTE_CS8 4435
# הגדר את ה- NOTE_D8 4699
# הגדר את NOTE_DS8 4978
לאחר השלמת ההרכבה ומילוי הסקיצה, האשף מראה שהוא הצליח:
המכשיר עשוי, למשל, להודיע לעובד על חנות תמונות, מרכז העתקות, תיקון מתכת וכו '. לגבי המראה של הלקוח.