פרסומת

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

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

אתה תצטרך:

  • ארדואינו
  • חיישן "פינג" קולי, אני משתמש HC-SR04 PIR יהיה טוב יותר, אך אלה יקרים. ניתן להציב חיישן פינג בפתאומיות בפתח ועדיין לשרת את אותה עבודה בסיסית, והוא עומד על 5 דולר בלבד
  • זמזם פייזו
  • אור רצועת לד, עם אותם חיווט שהשתמשנו בו בפרויקט זה בנה תאורת אווירה דינמית משלך למרכז מדיהאם אתה צופה בסרטים רבים במחשב האישי שלך או במרכז המדיה, אני בטוח שהתמודדת עם דילמת התאורה; האם אתה מכבה לחלוטין את כל האורות? האם אתה שומר עליהם בפיצוץ מלא? או ... קרא עוד .

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

חיווט מוגמר

אורות מהבהבים

instagram viewer

השתמש בתרשים החיווט מהפרויקט הזה בנה תאורת אווירה דינמית משלך למרכז מדיהאם אתה צופה בסרטים רבים במחשב האישי שלך או במרכז המדיה, אני בטוח שהתמודדת עם דילמת התאורה; האם אתה מכבה לחלוטין את כל האורות? האם אתה שומר עליהם בפיצוץ מלא? או ... קרא עוד לחבר את רצועת ה- LED שלך; אל תשנה את הסיכות, מכיוון שאנו זקוקים לפלט PWM. להשתמש קוד זה כדי לבדוק במהירות את החיווט שלך. אם הכל מסתדר, כדאי שיהיה לך את זה:

מבחן led-rgb

חיישן מרחק

במודול SR04 תמצאו 4 סיכות. VCC ו GND עבור למסילה + 5V לקרקע בהתאמה; TRIG הוא הסיכה המשמשת להעברת אות סונאר, הניח את זה על סיכה 6; ECHO משמש לקריאת האות בחזרה (ולכן לחישוב המרחק) - הניחו זאת על 7.

sr04

כדי להפוך דברים פשוטים להפליא, יש ספרייה בה אנו יכולים להשתמש NewPing. הורד והניח בסרטי Arduino שלך ספריה תיקיה והפעלה מחדש של ה- IDE לפני שתמשיך. מבחן באמצעות קוד זה; פתח את המסך הסידורי וודא שהמהירות מוגדרת ל 115200 באוד. עם כל מזל, אתה אמור לראות כמה מדידות מרחק נשלחות אליך במהירות גבוהה למדי. יתכן שתמצאו שונות של 1 או 2 סנטימטרים, אך זה בסדר. נסה להרים את היד שלך מול החיישן, להזיז אותו למעלה ולמטה כדי לצפות בקריאות המשתנות.

פינג פלט

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

בלופ של אפליקציית הבדיקה הזו אנו משתמשים ב- פינג () הפונקציה לשלוח פינג סונאר, להחזיר ערך באלפיות השנייה כמה זמן לקח לערך לחזור. כדי להבין את זה אנו משתמשים בספריות NewPing שנבנו ללא הפסקה US_ROUNDTRIP_CM, שמגדיר כמה מיקרו-שניות שנדרשות כדי לעבור סנטימטר בודד. יש גם עיכוב של 50 שניות בין הפינגס כדי למנוע עומס יתר על החיישן.

אזעקת פייזו

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

להשתמש קוד זה לבחון.

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

קידוד מערכת האזעקה

עכשיו כשיש לנו את כל חלקי הפאזל הזה, בואו ונשלב אותם יחד.

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

# כלול  // בחר באילו סיכות מסוגלות PWM יש להשתמש. # הגדר RED_PIN 10. # הגדר GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // סיכת ארדואינו קשורה להדק סיכה בחיישן הקולי. #define ECHO_PIN 7 // סיכת ארדואינו קשורה לסיכת הד על חיישן הקולי. #define MAX_DISTANCE 100 // המרחק המרבי אליו אנו רוצים לחפש (בסנטימטרים). # הגדר ALARM 3 צף sinVal; צליל int; 

התחל על ידי כתיבת בסיסי להכין() פונקציה - נעסוק כרגע רק באורות. הוספתי עיכוב של 5 שניות לפני שהלופ הראשי יתחיל לתת לנו קצת זמן לצאת מהדרך במידת הצורך.

הגדרת חלל () {// הגדר pinModes עבור pinmode RGB strip strip (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // אפס אורות analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); עיכוב (5000); }

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

// פונקצית עוזר המאפשרת לשלוח צבע בפקודה אחת. צבע בטל (אדום לא חתום אדום, ירוק ללא חתימה, כחול char לא חתום) // פונקציית יצירת הצבעים. {analogWrite (RED_PIN, אדום); analogWrite (BLUE_PIN, כחול); analogWrite (GREEN_PIN, ירוק); }

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

לולאה חלל () {צבע (255,0,0); // עיכוב אדום (100); צבע (255,255,0); // עיכוב צהוב (100); }

העלה ובדוק זאת כדי להבטיח שאתה בדרך הנכונה.

כעת, נשלב את חיישן המרחק כדי להפעיל את האורות הללו רק כשמשהו נכנס למשל 50 ס"מ (פחות מרוחב מסגרת הדלת). הגדרנו כבר את הסיכות הנכונות וייבאנו את הספרייה, אז לפני שלך להכין() פונקציה הוסף את השורה הבאה כדי לייצר אותה:

סונאר חדש של פינג (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // הגדרת NewPing של סיכות והמרחק המרבי. 

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

בוליאני מופעל = שקר; 

הוסף שורה ל- להכין() פונקציה כדי שנוכל לעקוב אחר הפלט בסידורים וניפוי באגים.

Serial.begin (115200); // פתח צג סדרתי ב 115200 באוד כדי לראות תוצאות פינג. 

בשלב הבא, שנה את שם הלולאה הנוכחית אזעקה() - כך ייקרא אם האזעקה תופעל.

אזעקת חלל () {צבע (255,0,0); // עיכוב אדום (100); צבע (255,255,0); // עיכוב צהוב (100); }

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

לולאת חלל () {if (מופעלת == true) {alarm (); } else {עיכוב (50); // המתן 50 שניות בין הפינגס (כ -20 פינג / שניה). 29 ס"מ צריכים להיות העיכוב הקצר ביותר בין הפינגס. לא חתום US = sonar.ping (); // שלח פינג, קבל זמן פינג במיקרו-שניות (US). מרחק לא מבוצע חתום = uS / US_ROUNDTRIP_CM; Serial.println (מרחק); אם (מרחק <100) {מופעל = נכון; } } }

הרשו לי להסביר את הקוד בקצרה:

  • התחל בבדיקה לבדוק אם האזעקה הופעלה, ואם כן, כבה את פונקציית האזעקה (פשוט מהבהב באורות ברגע).
  • אם זה עדיין לא מופעל, קבל את הקריאה הנוכחית מהחיישן.
  • אם החיישן קורא <100 ס"מ, משהו ריפד את הקורה (התאם ערך זה אם הוא מפעיל אותך מוקדם מדי, ברור).

תן לזה הפעלת ניסיון עכשיו, לפני שנוסיף את זמזם הפייזו המעצבן.

עובד? גדול. עכשיו נוסיף את זמזם זה בחזרה. הוסף pinMode אל ה להכין() שגרה.

pinMode (אזעקה, פלט); 

לאחר מכן הוסף את לולאת זמזם הפייזו לפונקציית האזעקה ():

עבור (int x = 0; x <180; x ++) {// המירו מעלות לרדיאנים ואז קבלו ערך חטא sinVal = (sin (x * (3.1412 / 180))); // ליצור תדר מערך החטא toneVal = 2000+ (int (sinVal * 1000)); טון (ALARM, toneVal); }

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

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

# כלול 

והתאם את הקו:

 טון (ALARM, toneVal); 

ל

 NewTone (ALARM, toneVal); 

במקום זאת.

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

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

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

אשראי תמונה: אזעקת אש דרך פליקר

ג'יימס הוא בעל תואר ראשון בבינה מלאכותית, והוא מוסמך CompTIA A + ו- Network +. הוא המפתח הראשי של MakeUseOf, ומבלה את זמנו הפנוי במשחקי פיינטבול VR ומשחקי לוח. הוא בנה מחשבים אישיים מאז שהיה ילד.