สารบัญ:

RGB Moodlamp ที่ทำด้วยมือโดย Arduino: 7 ขั้นตอน
RGB Moodlamp ที่ทำด้วยมือโดย Arduino: 7 ขั้นตอน

วีดีโอ: RGB Moodlamp ที่ทำด้วยมือโดย Arduino: 7 ขั้นตอน

วีดีโอ: RGB Moodlamp ที่ทำด้วยมือโดย Arduino: 7 ขั้นตอน
วีดีโอ: การควบคุม LED Strip ด้วย Arduino Ep.1 คำสั่งเบื้่องต้นทดสอบการสั่งงาน 2024, พฤศจิกายน
Anonim
RGB Moodlamp ที่ขับเคลื่อนด้วย Arduino
RGB Moodlamp ที่ขับเคลื่อนด้วย Arduino
RGB Moodlamp ที่ขับเคลื่อนด้วย Arduino
RGB Moodlamp ที่ขับเคลื่อนด้วย Arduino

คำแนะนำนี้แบ่งออกเป็น 5 ส่วน: - การวางแผนการก่อสร้าง (ขั้นตอนที่ 1) - เฉดสีที่ทำด้วยมือ (ขั้นตอนที่ 2 + 3) - วงจรอิเล็กทรอนิกส์สำหรับการขับ LED 3W ด้วยตัวควบคุม ATmega8 (ขั้นตอนที่ 4) - รหัส (ขั้นตอนที่ 5) - วิธีรับ สแตนด์อะโลน (แฟลช Arduino bootloader ด้วย PonyProg และเบิร์นสเก็ตช์) (ขั้นตอนที่ 6) เร็วๆ นี้ Vid: ความประทับใจบางส่วน

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: ไฟ LED 3W อันทรงพลัง

ขั้นตอนที่ 1: การวางแผนการก่อสร้าง:

การวางแผนการก่อสร้าง
การวางแผนการก่อสร้าง
การวางแผนการก่อสร้าง
การวางแผนการก่อสร้าง

ฉันชอบที่จะทำแนวคิดบนกระดาษเพียงแผ่นเดียว ในแผ่นแรก คุณจะเห็นแนวคิดเบื้องต้นบางอย่าง ฉันเลือกการออกแบบด้านล่างขวา หน้าที่สองแสดงรายละเอียดบางอย่างสำหรับการก่อสร้าง การวัดผลเป็นการทดลองเหมือนในแต่ละครั้ง แต่ก็โอเคสำหรับฉัน;-)ความคิดด้านฮาร์ดแวร์ของฉันคือ:- ฉันสามารถจัดการกับวัสดุได้หรือไม่- แสงจะส่องแสง ในร่มเงา?- ควรมีสัดส่วนเท่าไหร่?- ฉันต้องใช้ลูกบิดและหม้อกี่อันสำหรับอินเทอร์เฟซที่เรียบง่าย ซอฟต์แวร์ของฉันมีความคิด: หลอดไฟควรมีฟังก์ชันต่างๆ มากมายเพียงใด - RGB เฟดอัตโนมัติด้วยความเร็วที่เปลี่ยนแปลงได้ - การปรับสีด้วยตนเอง - สีขาว ปรับความสว่างได้

ขั้นตอนที่ 2: The Handmade Shade

ร่มเงาแฮนด์เมด
ร่มเงาแฮนด์เมด
ร่มเงาแฮนด์เมด
ร่มเงาแฮนด์เมด
ที่ทำด้วยมือ
ที่ทำด้วยมือ

การรวบรวมวัสดุ: ร่มเงา:ฉันพบแผ่นพลาสติก 30 มิลขนาด 3 ฟุต x 3 ฟุตที่ร้าน (Pic1-3) ใช้มีดคมตัดมัน ฉันเคลือบพลาสติกโดยใช้กระดาษทราย (Pic4-6)ถึง รับกระบอกเรียบฉันขันเข้าด้วยกันหลังจากเจาะรูที่ถูกต้อง (Pic7-8) ติดตั้งเฉดสีพลาสติกบนฐานทองเหลืองเกลียว มันดูสวยงามและง่ายต่อการหยิบจับ ฉันเจาะและเคาะรูเพื่อให้เข้ากับแท่งเกลียวที่ 1/8 (Pic9-10) ในขณะเดียวกัน ฉันทำฮีทซิงค์เพื่อทำให้ไฟ LED 3W เย็นลงและมีฐานที่มั่นคง เพื่อให้ได้เฉดสีจากก้านไม่มากเกินไป ฉันสร้างกรงเล็กๆ จากแท่งเชื่อมที่มีน๊อต M8 อยู่ด้านบน (รูปที่ 12) เมื่อประกอบเสร็จแล้วฉันก็ประกอบเข้าด้วยกัน สกรูและน็อตตัวเล็ก ๆ นั้นค่อนข้างยุ่งยาก แต่ 30 นาทีต่อมาฉันก็ทำมันเสร็จ

ขั้นตอนที่ 3: The Handmade Shade

ที่ทำด้วยมือ
ที่ทำด้วยมือ
ร่มเงาแฮนด์เมด
ร่มเงาแฮนด์เมด
ที่ทำด้วยมือ
ที่ทำด้วยมือ

ฐาน: นำจานไปกลึงในเครื่องกลึงเพื่อให้เรียบและกลม จากนั้นจึงย้อมด้วยคราบไม้มะฮอกกานีเพื่อให้ไม้สนดูดี แล้วต่อไปจะเป็นยังไง!?ฉันตัดสินใจทำฐานโดยใช้แบบเดียวกัน พลาสติกฝ้าเป็นเฉดสี และให้แสงพื้นหลังด้วย RGB microLED (Pic5) ลูกบิด: ฉันทำปุ่มจากชิ้นส่วนของมะฮอกกานีและลูกบิดจากส่วนที่ตัดของไม้นัทวูด

ขั้นตอนที่ 4: วงจรไฟฟ้า:

วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า

ในภาพแรก คุณเห็นแผนผังของฉัน และนี่คือวิดีโออื่น:https://de.youtube.com/watch?v=xkiYzQAYf_A&NR=1

ขั้นตอนที่ 5: รหัส:

รหัส
รหัส
รหัส
รหัส
รหัส
รหัส

ในภาพที่คุณเห็นกระบวนการของฉันกับ Arduino อย่างแรกเลย ฉันลองใช้ ProtoShield ที่ทำเอง ชุดแบตเตอรี่และไฟ LED บางประเภท ฉันเริ่มต้นด้วย "Spooky Projects" และ "BionicArduino" โดย TodEKurt เมื่อหลายเดือนก่อนhttps://todbot.com/blog/spookyarduino/My code is เป็นการรวมกันที่ยุ่งยากของรหัสโครงการของเขา"RGBMoodlight", "RGBPotMixer" และส่วนขยายบางส่วน สามอะนาล็อกและ. หนึ่งดิจิตอลอินเป็นสวิตช์โหมด (ขอบคุณ Ju. สำหรับกิจวัตรการขัดจังหวะ:) ไฟ LED เชื่อมต่อกัน ไปยัง D9, D10 และ D11 ที่รองรับ PulseWithModulation หากคุณต้องการ ฉันสามารถเผยแพร่ภาพร่างได้ แต่มันเป็นการผสมผสานที่ลงตัวของรหัสที่ยอดเยี่ยมทั้งสองนี้ นี่คือรหัสดั้งเดิมของหลอดไฟ มันดูเลอะเทอะเล็กน้อยเพราะเป็นของฉัน ช่วงแรกๆ ของการเขียนโปรแกรม…แต่ถ้าคุณคัดลอกมัน มันน่าจะใช้งานได้ดี มีความสงบเรียบร้อย เช่น "PotColorMixer", "RGBfadingFunction" และ Interrupt-Routine สำหรับ mode-switch./* nejo June2008

รหัสสำหรับ "Moodlamp" ของฉันตาม "dimmingLEDs" โดย Clay Shirky

*nejo Sep2008

  • รหัสสุดท้ายสำหรับ Moodlamp พร้อมสวิตช์โหมดขัดจังหวะ, ปุ่มหมุนเร็วแบบอะนาล็อกสำหรับ RGB-fading และเปลี่ยนสี RGB
  • ฟังก์ชันลดแสงใช้ได้กับสีขาวเท่านั้น

*เนโจ ตุลาคม 2551

  • ส่วนขยายเสียงสำหรับ Moodlamp:
  • ไมโครโฟนคอนเดนเซอร์พร้อมแอมป์ LM368 ขนาดเล็ก วงจรเรียงกระแส และ RC-low-pass-filter
  • ด้วย analogInput อื่น ฉันใช้ฟังก์ชัน RGBPotMixer เพื่อเปลี่ยนสีโดยรับสัญญาณไมโครโฟน

* * *รหัสสำหรับไฟ LED 3 ดวงแบบ cross-fading สีแดง สีเขียว และสีน้ำเงิน หรือ LED สามสี 1 ดวง โดยใช้ PWM

  • โปรแกรมค่อยๆ ข้ามจากสีแดงเป็นสีเขียว สีเขียวเป็นสีน้ำเงิน และสีน้ำเงินเป็นสีแดง
  • รหัสการดีบักถือว่า Arduino 0004 เนื่องจากใช้ฟังก์ชัน Serial.begin()-style ใหม่
  • เดิมที "dimmingLEDs" โดย Clay Shirky

*

  • AnalogRead เปิดใช้งานบน Pin A0 เพื่อเปลี่ยนความเร็วในการเฟด RGB
  • AnalogRead เปิดใช้งานบน Pin A2 เพื่อเปลี่ยนสี hueRGB

* * */#include // เอาต์พุต 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; // ตัวแปรสำหรับอ่าน pin statusint buttonState; // ตัวแปรที่จะกดปุ่ม stateint buttonPresses = 0; // 3 กดเพื่อไป!int potPin0 = 0; // หม้อสำหรับปรับการหน่วงเวลาระหว่างเฟดใน Moodlamp; int potPin2 = 2; // เอาต์พุตโพเทนชิออมิเตอร์สำหรับเปลี่ยน hueRGB colorint potVal = 0; // ตัวแปรเก็บอินพุตจากโพเทนชิโอมิเตอร์ maxVal = 0; // ค่าที่จะบันทึกค่าดีฟอลต์ของตัวลดแสงคือ 255 หากไม่มี Pot ที่เชื่อมต่ออยู่ dimPin = 4; // หม้อเชื่อมต่อกับ A4 เพื่อหรี่ความสว่าง // ตัวแปรโปรแกรม redVal = 255; // ตัวแปรเก็บค่าที่จะส่งไปยัง pinsint greenVal = 1; // ค่าเริ่มต้นคือ สีแดงเต็ม สีเขียว และสีน้ำเงิน offint blueVal = 1;int i = 0; // ตัวนับวนรอบรอ;// = 15; // 50ms (.05 วินาที) ล่าช้า; ย่อให้เร็วขึ้น k = 0; // ค่าสำหรับ controlLED ในฟังก์ชันกะพริบ DEBUG = 0; // เคาน์เตอร์ DEBUG; หากตั้งค่าเป็น 1 จะเขียนค่ากลับผ่าน serialint LCD = 0; // เคาน์เตอร์ LCD; หากตั้งค่าเป็น 1 จะเขียนค่ากลับผ่านการตั้งค่า serialvoid (){ pinMode(ledPin, OUTPUT); โหมดพิน (redPin, เอาต์พุต); // ตั้งค่าพินเป็นเอาต์พุต pinMode (greenPin, OUTPUT); โหมดพิน (บลูพิน, เอาต์พุต); pinMode (หรี่แสงพิน, เอาต์พุต); โหมดพิน (dimgreenPin, OUTPUT); // ตั้งค่าพินเป็นเอาต์พุต pinMode (dimbluePin, OUTPUT); โหมดพิน (potPin2, INPUT); // pinMode(potPin0, INPUT); // pinMode(dimPin, INPUT); // pinMode (สวิตช์พิน, อินพุต); // ตั้งค่าพินสวิตช์เป็นอินพุต AttachInterrupt(0, isr0, RISING); if (DEBUG) { // หากเราต้องการดูค่าพินสำหรับการดีบัก… Serial.begin(9600); // …ตั้งค่า serial ouput ใน 0004 style }}// main programvoid loop(){ if (buttonPresses == 0) { Moodlamp(); // เรียกใช้ฟังก์ชัน Moodlight } ถ้า (buttonPresses == 1) { RGBPotMixer (); // เรียกฟังก์ชัน manuel mix } if (buttonPresses == 2) { White(); // มันเป็นสีขาวทั้งหมดที่นี่ } if (buttonPresses == 3) { } // Moodlamp(); // RGBPotMixer (); //สีขาว(); เฝ้าสังเกต(); dim();}void Monitor(){ // ส่งสถานะไปที่มอนิเตอร์ if (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("ปุ่มสถานะ:"); Serial.print (ปุ่มสถานะ); // เขียนค่าของ potPin0 ไปยังจอภาพ Serial.print("\t"); Serial.print("buttonPresses:"); Serial.println (buttonPresses); // เขียนค่าของ buttonPresses ไปที่จอภาพ } }} void dim() // ฟังก์ชั่นสำหรับการหรี่แสงสีขาว // อาจจะในภายหลังสำหรับโหมดทั้งหมด{ maxVal = analogRead(dimPin); maxVal /= 4; // ช่วงอนาล็อกตั้งแต่ 0..1024 มากเกินไปสำหรับการหรี่ค่า 0.2.255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} เป็นโมฆะ Moodlamp () { รอ = analogRead (potPin0); // ค้นหาค่าจาก potPin0; // หากไม่มีการเชื่อมต่อ Pot: รอ 255 i += 1; // ตัวนับที่เพิ่มขึ้น // i = i - maxVal; if (i <255) // เฟสแรกของเฟด { redVal -= 1; // แดงลง greenVal += 1; // เขียวขึ้น blueVal = 1; // สีน้ำเงินต่ำ } else if (i < 509) // เฟสที่สองของเฟด { redVal = 1; // สีแดงต่ำ greenVal -= 1; // สีเขียวลง blueVal += 1; // สีน้ำเงินขึ้น } อื่น ๆ ถ้า (i < 763) // เฟสที่สามของเฟด { redVal += 1; // แดงขึ้น greenVal = 1; // สีเขียว lo2 blueVal -= 1; // สีน้ำเงินลง } else // ตั้งค่าตัวนับใหม่และเริ่มเฟดอีกครั้ง { i = 1; } // เราทำ "255-redVal" แทนที่จะเป็น "redVal" เพราะ // LEDs เชื่อมต่อกับ +5V แทน Gnd analogWrite (redPin, 255 - redVal); // เขียนค่าปัจจุบันไปยังพิน LED analogWrite (greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* dimredVal =นาที(redVal - maxVal, 255); // ลดแสง dimredVal = สูงสุด (redVal - maxVal, 0); dimgreenVal = นาที (greenVal - maxVal, 255); dimgreenVal = สูงสุด (greenVal - maxVal, 0); dimblueVal = นาที (blueVal - maxVal, 255); dimblueVal = สูงสุด (blueVal - maxVal, 0); analogWrite(redPin, 255 - dimredVal); // เขียนค่าปัจจุบันไปยังหมุด LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ รอ /=4; ล่าช้า(รอ); // หยุดชั่วคราวสำหรับ 'รอ' มิลลิวินาทีก่อนที่จะทำการวนซ้ำ}เป็นโมฆะ RGBPotMixer(){ potVal = analogRead(potPin2); // อ่านค่าโพเทนชิออมิเตอร์ที่ขาอินพุต potVal = potVal / 4; // แปลงจาก 0-1023 เป็น 0-255 hue_to_rgb(potVal); // ถือว่า potVal เป็นสีและแปลงเป็น rgb vals // "255-" เป็นเพราะเรามีไฟ LED ขั้วบวกทั่วไป ไม่ใช่ขั้วลบทั่วไป analogWrite (redPin, 255-redVal); // เขียนค่าไปยังพิน LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); }โมฆะสีขาว(){ analogWrite(redPin, maxVal); // เขียนค่าไปยังพิน LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • กำหนดเฉดสี 'h' ที่แปรผันได้ตั้งแต่ 0-252
  • ตั้งค่าสี RGB อย่างเหมาะสม
  • ถือว่า maxValimum Saturation & ค่าสูงสุด (ความสว่าง)
  • คำนวณเลขจำนวนเต็มเท่านั้น ไม่มีจุดลอยตัว

*/ void hue_to_rgb(byte hue) { if(hue> 252) hue = 252; // ย้อนหลัง 252!! nejo ไบต์ hd = ฮิว / 42; // 36 == 252/7, 252 == H_MAX ไบต์ hi = hd % 6; // ให้ 0-5 ไบต์ f = สี % 42; ไบต์ fs = f * 6; สวิตช์ (สวัสดี) { กรณี 0: redVal = 252; greenVal = fs; blueVal = 0; หยุดพัก; กรณีที่ 1: redVal = 252-fs; ค่าสีเขียว = 252; blueVal = 0; หยุดพัก; กรณีที่ 2: redVal = 0; ค่าสีเขียว = 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; หยุดพัก; } } เป็นโมฆะ isr0(){ Serial.println("\n \n inerrupt \n"); buttonState = digitalRead (สวิตช์พิน); // อ่านสถานะเริ่มต้นล่าช้าไมโครวินาที (100000); //if (val != buttonState) { // สถานะของปุ่มเปลี่ยนไปแล้ว! // if (buttonState == HIGH) {// ตรวจสอบว่าปุ่มถูกกดแล้วหรือไม่ buttonPresses++; // } // val = buttonState; // บันทึกสถานะใหม่ในตัวแปรของเราหาก (buttonPresses == 3) { // zur cksetzen buttonPresses = 0; } } // }ขั้นตอนต่อไปคือไดรเวอร์ทรานซิสเตอร์ ฉันใช้ทรานซิสเตอร์ PNP 3 ตัวที่มีกระแสสูงสุดที่ 3 แอมแปร์ หลังจากควบคุมกระแสไฟและแรงดันไฟ LEDemitter ทำงานได้อย่างยอดเยี่ยมด้วยความเข้มเต็มที่

ขั้นตอนที่ 6: รับแบบสแตนด์อโลนด้วย PonyProg-burned Bootloader

รับแบบสแตนด์อโลนด้วย PonyProg-burned Bootloader
รับแบบสแตนด์อโลนด้วย PonyProg-burned Bootloader

วิธีใช้พอร์ต Paralell ของคุณเพื่อเบิร์น Arduino bootloader บน ATmega168 หรือ ATmega8 เพื่อใช้ชิปเปล่าราคาถูกกับสภาพแวดล้อมของ Arduino เร็วๆ นี้….. อาจเป็นคำสั่งแยกกัน นี่เป็นคำแนะนำที่ดีในการใช้ชิปแบบสแตนด์อโลน: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

ขั้นตอนที่ 7: นั่นคือ Arduino Moodlamp ของฉัน

นั่นคือ Arduino Moodlamp ของฉัน
นั่นคือ Arduino Moodlamp ของฉัน

หากคุณชอบมันโปรดให้คะแนนฉัน

แนะนำ: