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

מנורת מצב רוח RGB המופעלת בעבודת יד בארדואינו: 7 שלבים
מנורת מצב רוח RGB המופעלת בעבודת יד בארדואינו: 7 שלבים

וִידֵאוֹ: מנורת מצב רוח RGB המופעלת בעבודת יד בארדואינו: 7 שלבים

וִידֵאוֹ: מנורת מצב רוח RGB המופעלת בעבודת יד בארדואינו: 7 שלבים
וִידֵאוֹ: Color Changing Screen - Mood Led Lights [10 Hours] 2024, נוֹבֶמבֶּר
Anonim
מנורת מצב RGB המופעלת בעבודת יד בארדואינו
מנורת מצב RGB המופעלת בעבודת יד בארדואינו
מנורת מצב רוח RGB המופעלת בעבודת יד
מנורת מצב רוח RGB המופעלת בעבודת יד

מדריך זה מחולק ל -5 חלקים:- תכנון הבנייה (שלב 1)- הגוון בעבודת יד (שלב 2+3)- המעגל האלקטרוני להנעת נוריות 3W עם בקר ATmega8 (שלב 4)- הקוד (שלב 5)- כיצד להשיג זאת עצמאי (הבזק את מטען האתחול של Arduino עם PonyProg ושרוף את הסקיצה) (שלב 6) בקרוב Vid: כמה התרשמות

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: מנורת מצב הרוח Pic2: נורית 3W אדירה

שלב 1: תכנון הבנייה:

תכנון הבנייה
תכנון הבנייה
תכנון הבנייה
תכנון הבנייה

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

שלב 2: הצל בעבודת יד

הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד

איסוף החומרים: הגוון: מצאתי בחנות גיליון של 30 רגל על 3 רגל של פלסטיק 30 טחנת (Pic1-3). השתמש בסכין חדה כדי לחתוך אותו. הקפאתי את הפלסטיק בעזרת נייר זכוכית (Pic4-6). קבל גליל חלק דפקתי את הכל יחד לאחר קידוח החורים הנכונים (Pic7-8). הרכיב את גווני הפלסטיק על תומכי הפליז המושחלים. זה נראה יפה ודי קל להשיג ולטפל בו. קידחתי והקשתי על החורים כך שיתאימו לסרגל ההברגה 1/8 (Pic9-10). בינתיים הכנתי גוף קירור כדי לקרר את נוריות ה -3 W ולבסיס בסיס מוצק..כדי לקבל לא יותר מדי גוונים מהפיר, אני בונה כלוב קטן ממוט ריתוך עם אגוז M8 למעלה (Pic12). בסיום הרכבתי הכל יחד. הברגים והאגוזים הקטנים היו קצת מסובכים, אבל 30 דקות לאחר מכן סיימתי.

שלב 3: הצל בעבודת יד

הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד
הצל בעבודת יד

הבסיס: הדיסקים נחתכו במחרטה כדי שיהיה חלק ועגול. לאחר מכן כתמתי אותו בכתם מעץ מהגוני כדי שהאורן ייראה טוב. מה הלאה?!? החלטתי להכין בסיס בעזרת אותו פלסטיק חלב כגוון, ותאורה אחורית באמצעות מיקרו LED RGB (Pic5). הכפתורים: הכנתי את הכפתור מחתיכת מהגוני ואת הכפתורים מחיתוך מעץ אגוז.

שלב 4: המעגל החשמלי:

המעגל החשמלי
המעגל החשמלי
המעגל החשמלי
המעגל החשמלי
המעגל החשמלי
המעגל החשמלי

בתמונה הראשונה אתה רואה את הסכימה שלי. והנה עוד סרטון: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

שלב 5: הקוד:

הקוד
הקוד
הקוד
הקוד
הקוד
הקוד

בתמונות אתה רואה את התהליך שלי עם ארדואינו. ראשית ניסיתי להסתובב עם ה- ProtoShield שלי, חבילת סוללות וכמה מיני נוריות. התחלתי עם "פרויקטים מפחידים" ו"ביוניק ארדואינו "מאת TodEKurt לפני מספר חודשים. Http: //todbot.com/blog/spookyarduino/ הקוד שלי הוא רק שילוב מסובך של קוד הפרויקט שלו. "RGBMoodlight", "RGBPotMixer" וכמה הרחבות. שלושה אנלוגי-אין ו. אחד דיגיטלי-אין כמתג מצב (תודה ל- Ju. על שגרת ההפסקות:). נוריות ה- LED מחוברות ל- D9, D10 ו- D11 התומכים ב- PulseWithModulation. אם תרצה, אני יכול לפרסם את הסקיצה, אבל זה שילוב ממש חשוף של שני הקודים הנהדרים האלה. הנה הקוד המקורי של המנורה. זה נראה קצת מבולגן, כי זה היה שלי שלב מאוד מוקדם בתכנות … אבל אם אתה מעתיק את זה, זה אמור לעבוד מצוין. יש שקטות טובות, כמו "PotColorMixer", "RGBfadingFunction" ו- Interrupt-Routine עבור mode-witch./* nejo יוני 2008

קוד עבור "מנורת הלחץ" שלי, המבוסס על "dimmingLEDs" מאת קליי שירקי

*nejo ספטמבר 2008

  • קוד סופי עבור מנורת הלחץ עם מתג מצב מפסק, חיוג מהיר אנלוגי לדהיית RGB ושינוי צבע RGB.
  • פונקציית העמעום פועלת רק לצבע הלבן

*nejo אוקטובר 2008

  • הרחבת קול למנורת הלחץ:
  • מיקרופון מעבה עם מגבר LM368 זעיר, מקלט ומסנן RC-low-pass.
  • עם קלט אנלוגי אחר אני משתמש בפונקציית RGBPotMixer כדי לשנות את הצבע על ידי קבלת אות המיקרופון.

* * * קוד ל -3 נוריות צולבות, אדום, ירוק וכחול, או נורית אחת בשלושה צבעים, באמצעות PWM

  • התוכנית צולבת לאט מאדום לירוק, ירוק לכחול וכחול לאדום
  • קוד האיתור מניח Arduino 0004, מכיוון שהוא משתמש בפונקציות החדשות בסגנון Serial.begin ().
  • במקור "dimmingLEDs" מאת קליי שירקי

*

  • AnalogRead מופעל על Pin A0 כדי לשנות את מהירות דהיית ה- RGB
  • AnalogRead מופעל על Pin A2 כדי לשנות את צבע hueRGB

* * */#כוללים // Outputint ledPin = 13; // controlPin לניפוי באגים redPin = 9; // LED אדום, מחובר לפין דיגיטלי 9int greenPin = 10; // LED ירוק, מחובר לפין דיגיטלי 10int bluePin = 11; // כחול LED, מחובר לפין דיגיטלי 11int dimredPin = 3; // סיכות לערך העמעום האנלוגי, מחוברות לנהג הטרנזיסטור: dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // מתג מחובר לסיכה D2int val = 0; // משתנה לקריאת הלחצן statusint pinState; // משתנה להחזיק את הלחצן stateint buttonPresses = 0; // 3 לחיצות כדי ללכת! Int potPin0 = 0; // סיר להתאמת העיכוב בין דהייה ב- Moodlamp; int potPin2 = 2; // פלט פוטנציומטר לשינוי color hintRGB colorVal = 0; // משתנה לאחסון הקלט מה- potentiometerint maxVal = 0; // ערך לשמירת ברירת המחדל של גורם עמעום הוא 255, אם אין סיר מחוברint dimPin = 4; // סיר מחובר ל- A4 כדי לעמעם את הבהירות // משתני התוכניתint redVal = 255; // משתנים לאחסון הערכים שיש לשלוח ל- pinsint greenVal = 1; // הערכים הראשוניים הם אדום מלא, ירוק וכחול כחול כחול = 1; int i = 0; // Loop counter int wait; // = 15; // עיכוב של 50 ms (.05 שנייה); לקצר לדהייה מהירה יותר k = 0; // ערך עבור ה- controlLED ב- blink-functionint DEBUG = 0; // מונה DEBUG; אם הוא מוגדר ל -1, הוא יכתוב ערכים בחזרה באמצעות סדרת LCD = 0; // מונה LCD; אם הוא מוגדר ל -1, הוא יכתוב ערכים בחזרה באמצעות הגדרת serialvoid () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // מגדיר את הפינים כ- pinMode פלט (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // מגדיר את הפינים כ- pinMode פלט (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // הגדר את סיכת המתג כקלט attachInterrupt (0, isr0, RISING); if (DEBUG) {// אם נרצה לראות את ערכי הסיכה לניפוי באגים … Serial.begin (9600); // … הגדר את הפלט הסידורי בסגנון 0004}} // לולאת התוכנית הראשית () {if (buttonPresses == 0) {Moodlamp (); // מכנה את הפונקציה Moodlight} אם (buttonPresses == 1) {RGBPotMixer (); // מכנה את פונקציית תערובת המדריך} if (buttonPresses == 2) {White (); // הכל לבן כאן} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //לבן(); צג (); dim ();} void Monitor () {// שלח מצב לצג אם (DEBUG) {// אם נרצה לקרוא את הפלט DEBUG += 1; // הגדל את מונה DEBUG אם (DEBUG> 10) {// הדפס כל 10 לולאות DEBUG = 1; // אפס את המונה Serial.print (i); // פקודות סדרתיות בסגנון 0004 Serial.print ("\ t"); // הדפס כרטיסייה Serial.print ("R:"); // ציין שהפלט הוא ערך אדום Serial.print (redVal); // הדפס ערך אדום Serial.print ("\ t"); // הדפס כרטיסייה Serial.print ("G:"); // חזור על ירוק וכחול… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, לסיום עם החזרת עגלה Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, לסיום עם החזרת עגלה Serial.print ("\ t"); Serial.print ("המתן:"); Serial.print (המתן); // כותב את הערך של potPin0 למסך Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // כותב את הערך של potPin0 לצג Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // כותב את הערך של potPin0 למסך Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // כותב את ערך הכפתור לוחץ אל הצג}}} חלל עמום () // פונקציה לעמעם לבן // אולי מאוחר יותר עבור כל המצבים {maxVal = analogRead (dimPin); maxVal /= 4; // טווח אנלוגי מ 0..1024 יותר מדי לעמעם ערך 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // חפש את הערך מתוך potPin0; // אם לא מחובר סיר: המתן 255 i += 1; // מונה תוספת // i = i - maxVal; אם (i <255) // שלב ראשון של דהייה {redVal -= 1; // אדום למטה greenVal += 1; // ירוק עד כחול = 1; // כחול נמוך} אחרת אם (i <509) // שלב שני של דהייה {redVal = 1; // אדום נמוך greenVal -= 1; // ירוק למטה blueVal += 1; // כחול למעלה} אחר אם (i <763) // שלב שלישי של דהייה {redVal += 1; // אדום למעלה greenVal = 1; // ירוק lo2 blueVal -= 1; // כחול למטה} אחר // הגדר מחדש את המונה, והתחל את ההתעמעמות שוב {i = 1; } // אנו עושים "255 -redVal" במקום רק "redVal" כי נוריות // מחוברות ל- +5V במקום GW analogWrite (redPin, 255 - redVal); // כתוב ערכים נוכחיים לסיכות LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // עמעום dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // כתוב ערכים נוכחיים לסיכות LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / המתן / = 4; עיכוב (המתנה); // השהה למשך מילי -שניות 'המתן' לפני חידוש הלולאה} void RGBPotMixer () {potVal = analogRead (potPin2); // קרא את ערך הפוטנציומטר בפין הקלט potVal = potVal / 4; // להמיר מ- 0-1023 ל- 0-255 hue_to_rgb (potVal); // התייחסו ל- potVal כגוון והמירו ל- rgb vals // "255-" הוא מכיוון שיש לנו נוריות אנודה משותפות, לא analogWrite-cathode common-cathode (redPin, 255-redVal); // כתוב ערכים לסיכות LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // כתוב ערכים לסיכות LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • בהתחשב בגוון משתנה 'h', הנע בין 0-252,
  • הגדר את ערך הצבע RGB כראוי.
  • מניח את הרוויה המקסימלית והערך המקסימלי (בהירות)
  • מבצע מתמטיקה שלמה בלבד, ללא נקודה צפה.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // סטטבק ל 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX בתים hi = hd % 6; // נותן 0-5 בתים f = גוון % 42; בתים fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; לשבור; מקרה 1: redVal = 252-fs; greenVal = 252; blueVal = 0; לשבור; מקרה 2: redVal = 0; greenVal = 252; blueVal = fs; לשבור; מקרה 3: redVal = 0; greenVal = 252-fs; blueVal = 252; לשבור; מקרה 4: redVal = fs; greenVal = 0; blueVal = 252; לשבור; מקרה 5: redVal = 252; greenVal = 0; blueVal = 252-fs; לשבור; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // קרא את עיכוב המצב ההתחלתי מיקרו שניות (100000); // אם (val! = buttonState) {// מצב הלחצן השתנה! // if (buttonState == HIGH) {// בדוק אם הכפתור נלחץ כעת buttonPresses ++; //} // val = buttonState; // שמור את המצב החדש במשתנה שלנו אם (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} השלב הבא היו מנהלי הטרנזיסטורים. השתמשתי ב -3 טרנזיסטורים PNP עם זרם מרבי ב- 3Ampere. לאחר ויסות הזרם והמתח קדימה, LEDemitter עבד מצוין בעוצמה מלאה.

שלב 6: קבל את זה עצמאי עם מטען אתחול שנשרף על ידי PonyProg

קבל את זה עצמאי עם מטען אתחול שנשרף על ידי PonyProg
קבל את זה עצמאי עם מטען אתחול שנשרף על ידי PonyProg

כיצד להשתמש ביציאת המדף שלך כדי לשרוף את מטען האתחול של arduino ב- ATmega168 או ATmega8 כדי להשתמש בשבב ריק וזול עם סביבת arduino. בקרוב … אולי במדריך נפרד הנה גם הוראה טובה לשימוש בשבב העצמאי: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

שלב 7: אז זהו מנורת הלחץ הארדואינית שלי

אז זהו מנורת הלחץ הארדואינית שלי
אז זהו מנורת הלחץ הארדואינית שלי

אם אהבתם, אנא דרגו אותי.

מוּמלָץ: