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

שינוי אור לילה באמצעות צבע באמצעות Ardruino 101: 4 שלבים (עם תמונות)
שינוי אור לילה באמצעות צבע באמצעות Ardruino 101: 4 שלבים (עם תמונות)

וִידֵאוֹ: שינוי אור לילה באמצעות צבע באמצעות Ardruino 101: 4 שלבים (עם תמונות)

וִידֵאוֹ: שינוי אור לילה באמצעות צבע באמצעות Ardruino 101: 4 שלבים (עם תמונות)
וִידֵאוֹ: Web Programming - Computer Science for Business Leaders 2016 2024, יולי
Anonim
Image
Image
שינוי אור לילה באמצעות צבע באמצעות Ardruino 101
שינוי אור לילה באמצעות צבע באמצעות Ardruino 101

בפרויקט זה אתה תכין מנורת לילה באמצעות ardruino, Adafruit neo rgb strips ומדפסת תלת מימד.

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

שלב 1: דרישות

דרישות
דרישות
דרישות
דרישות
דרישות
דרישות

לפרויקט זה תזדקק לחומרה ולכלים הבאים

חוּמרָה:

1 - Ardruino101 (בארה"ב) או Genuino101 (מחוץ לארה"ב).

2 - רצועות לד מסוג NeoPixel rgb מ- adafruit (5 וולט).

3 - מחבר USB מסוג ardruino (מחבר מסוג B עד A).

4 - תוכנה של Ardruino, Ardruino IDE במדריך זה נשתמש בגרסת 1.8.5. דרישות ספריית התוכנה הן: 101, Adafruit NeoPixel ו- Madgwick.

5 -וחפץ שיכיל את החומרה שלך. במקרה זה אשתמש במדפסת תלת מימד. הקובץ להדפסה תלת מימדית זו ממוקם בתיאורים הנקראים "ראש מנורה". שים לב שפורמט קובץ זה אינו מוכן להדפסה תלת -ממדית. בהתאם למדפסות התלת -ממד שלך עליך להפעיל תחילה את תוכנת ההדפסה התלת -ממדית המיועדת לאובייקט התלת -ממד. לפעמים קנה המידה של ההדפסה התלת -ממדית יתאפס. לכן וודא שהקוטר מוגדר ל -11 ס"מ על 11 ס"מ.

6 - ערכת הלחמה בסיסית.

שלב 2: הבנת החומרה והתוכנה

Ardruin/Genuino101

רק להבהיר Ardruino101 ו- genuino101 זהים בדיוק לצד השמות. לשניהם אותם מפרט ומשתמשים באותה תוכנה.

ל- Ardruino101 יש את המפרט הבסיסי כמו ה- ARdruino UNO ועוד. המאפיין העיקרי של ardruino101 הוא מד התאוצה והג'ירוסקופ בהם נשתמש בפרויקט שלנו. כמו כן, לסוג זה של ardruino יש ספריית קוד ייחודית בשם CurrieIMU (יחידות מדידה פנימיות) הכלולה בתוסף 101 של הספרייה.

עם זאת נאפשר לדבר על התוכנה.

תוכנות וספריות

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

עם זאת, הספריות בהן אנו משתמשים הן כדלקמן:

בתפריט סקיצה,> כלול ספרייה> נהל ספריות … הקלד בתיבה הזנת טקסט

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

-Adafruit NeoPixel על מנת לקודד את רצועות הפיקסלים הניאו שלנו.

-Madgwick על מנת לקרוא את הנתונים הגולמיים ולחשב את הנתונים האלה ל- raw, pitch and roll.

רצועות ניאו RGB

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

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

ראשית, תזדקק לרצועות לד מסוג Neodigital RGB מ- adafruit. רצועות מסוג זה ניתנות לביצוע באמצעות קודים. הבא שאתה צריך לדעת הוא שיש צד אחורי וחזית על הרצועות האלה. החלק האחורי והחלק הקדמי הזה חשוב להלחמה. הקפד לרתך את הצד הקדמי שבו מקש החץ מצביע הרחק מהקצה.

להלן מדריך כיצד להשתמש בהם.

ישנן שלוש נקודות הלחמה שעליך לזכור בחיבור קרקע (GND), חיבור מתח (V) וחיבור פינים (DIN).

שלב 3: הגדרת הרכיבים

הגדרת הרכיבים
הגדרת הרכיבים
הגדרת הרכיבים
הגדרת הרכיבים
הגדרת הרכיבים
הגדרת הרכיבים

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

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

שלישית, הסקמטיקים של הארדרואינו והרצועות הם די קלים. אתה תשתמש ב -3 חוטים כדי לחבר את הרצועות ל- ardruino. שים לב שהמקומות היחידים בהם אני מלחים הם על הרצועות. לא על ה- Ardruino עצמו.

GND עובר ל- GND

DIN הולך לפין (במקרה שלנו pin6 על ardruino)

5V עובר ל 5V

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

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

שלב 4: קידוד

אז עד עכשיו אמורים להיות לך כל הרכיבים הדרושים בספרייה שלך.

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

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

#include #include #include #include

#הגדר PIN 6 // 11 פיקסלים NeoPixel Strip

#הגדר PIN1 7 // 1 פיקסל רצועת NeoPixel #הגדר NUMPIXELS 30 // מספר פיקסלים #הגדר SAMPLE_RATE 25 // קצב דגימה עבור מד תאוצה וג'ירוסקופ

// תצורה של מדגוויק

מסנן מדגוויק; micros ארוך לא חתום PerReading, microsPrevious; float accelScale, gyroScale;

// תצורת NeoPixel

Adafruit_NeoPixel פיקסלים = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// רווחי צבע

ממיר RGBConverter; h כפול = 1; כפול s = 1; v כפול = 1; בתים rgb [3];

// מנורת תנועת סטטוס

// מצב 0 -> בחר גוון -פיץ '// מצב 1 -> בחר רוויה -גליל // מצב 2 -> בחר ערך -יאוו // מצב 3 -> תיקון צבע נדיף int statusLamp = 0;

הגדרת בטל () {

Serial.begin (9600);

// הפעל את ה- IMU וסנן

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// הגדר את טווח מד התאוצה ל- 2G

CurieIMU.setAccelerometerRange (2); // הגדר את טווח הג'ירוסקופ ל- 250 מעלות/שנייה CurieIMU.setGyroRange (250);

CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);

CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();

CurieIMU.attachInterrupt (eventCallback);

CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.interrupts (CURIE_IMU_TAP);

// לאתחל משתנים כדי לקצב עדכונים לשיעור הנכון

microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();

// Init NeoPixel 11

פיקסלים.התחל (); pixels.show ();

// Init NeoPixel 1

pixelsStatus.begin (); pixels.show ();

// הצג סטטוס ב- px

setStatusPixel (statusLamp); }

לולאת חלל () {

int aix, aiy, aiz; // מד תאוצה int gix, giy, giz; גרזן צף, איי, אז; float gx, gy, gz; גליל צף, המגרש, יאו; מיקרו מיקרו ארוך סטטי לא חתום;

// בדוק אם הגיע הזמן לקרוא נתונים ולעדכן את המסנן

microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {

// קראו נתונים גולמיים מ- CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// להמיר מנתונים גולמיים לכוח המשיכה ומעלות/יחידות שנייה

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// עדכן את המסנן, אשר מחשב כיוון

filter.updateIMU (gx, gy, gz, ax, ay, az);

// הדפס את הכותרת, הצג וגלגל

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// להגדיל את הפעם הקודמת, כך שאנו שומרים על קצב מתאים

microsPrevious = microsPrevious + microsPerReading;

// רק אם שינוי גוון, רוויה או ערך

if (statusLamp בחר גוון if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform angle pitch = pitch + 90; // מקבל קואורדינטות צבע מזוויות h = pitch / 180.0;}

// מגבלות זוויות

// גלגול בלבד -90º עד 90º = 180º // מצב 1 -> בחר רוויה אם (גליל> = -90 && גליל <= 90 && statusLamp == 1) {// שינוי גליל זווית = גליל + 90; // משיג קואורדינטות צבע מזוויות s = גליל / 180.0; }

// מצב 2 -> בחר ערך

if (statusLamp == 2) {// yaw 0º to 360º v = yaw / 360.0; }

// המר ל rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("צבע:"); Serial.print (ח); Serial.print (" -"); הדפסה טורית (ים); Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("כיוון:");

Serial.print (יאו); Serial.print (""); Serial.print (גובה); Serial.print (""); Serial.println (גליל); */

// שנה את צבע הפיקסלים

עבור (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); pixels.show (); }}

// הצג סטטוס ב- px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// מכיוון שאנו משתמשים בטווח 2G // -2g מפות לערך גולמי של -32768 // +2g מפות לערך גולמי של 32767

לצוף a = (aRaw * 2.0) / 32768.0;

להחזיר א; }

float convertRawGyro (int gRaw) {

// מכיוון שאנו משתמשים בטווח של 250 מעלות/שניות // -250 מפות לערך גולמי של -32768 // +250 מפות לערך גולמי של 32767

צף g = (gRaw * 250.0) / 32768.0;

החזרה g; }

אירוע חלל סטטי Callback ()

{// זיהוי הקשה בכל הציר אם (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("הקש על statusLamp זוהה:"); Serial.println (statusLamp);

// שנה מצב

statusLamp ++;

// מצב ראשוני

אם (statusLamp> 3) {statusLamp = 0; }}}

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); לשבור; מקרה 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); לשבור; מקרה 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); לשבור; מקרה 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); לשבור;

}

}

מוּמלָץ: