Mục lục:

Moodlamp RGB hỗ trợ Arduino được làm thủ công: 7 bước
Moodlamp RGB hỗ trợ Arduino được làm thủ công: 7 bước

Video: Moodlamp RGB hỗ trợ Arduino được làm thủ công: 7 bước

Video: Moodlamp RGB hỗ trợ Arduino được làm thủ công: 7 bước
Video: Web Programming - Computer Science for Business Leaders 2016 2024, Tháng bảy
Anonim
Mô hình RGB Moodlamp hỗ trợ Arduino được làm thủ công
Mô hình RGB Moodlamp hỗ trợ Arduino được làm thủ công
Mô hình RGB Moodlamp hỗ trợ Arduino được làm thủ công
Mô hình RGB Moodlamp hỗ trợ Arduino được làm thủ công

Hướng dẫn này được chia thành 5 phần: - Lập kế hoạch xây dựng (Bước 1) - Bóng râm thủ công (Bước 2 + 3) - Mạch điện tử để điều khiển đèn LED 3W với bộ điều khiển ATmega8 (Bước 4) - Mã (Bước 5) - Cách sử dụng độc lập (flash bộ nạp khởi động Arduino với PonyProg và ghi bản phác thảo) (Bước 6) sắp ra mắt Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: Đèn LED 3W mạnh mẽ

Bước 1: Lập kế hoạch xây dựng:

Lập kế hoạch xây dựng
Lập kế hoạch xây dựng
Lập kế hoạch xây dựng
Lập kế hoạch xây dựng

Tôi thích thực hiện một khái niệm chỉ trên một tờ giấy. Trên tờ đầu tiên, bạn sẽ thấy một số ý tưởng ban đầu. Tôi đã chọn thiết kế dưới cùng bên phải. Trang thứ hai hiển thị một số chi tiết cho việc xây dựng. Các phép đo đều mang tính thử nghiệm như mỗi lần, nhưng tôi thấy ổn;-) Suy nghĩ phần cứng của tôi là: - Tôi có thể xử lý vật liệu không? - Đèn có chiếu sáng không qua bóng râm? - Nó phải có tỷ lệ như thế nào? - Tôi sẽ cần bao nhiêu nút bấm và chậu cho một giao diện đơn giản? Suy nghĩ phần mềm của tôi là: Đèn nên có bao nhiêu chức năng khác nhau? - Tự động mờ dần RGB với tốc độ có thể thay đổi - Điều chỉnh màu thủ công - Màu trắng với độ sáng có thể điều chỉnh

Bước 2: Bóng râm thủ công

Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công

Thu thập các vật liệu: Bóng râm: Tôi tìm thấy một tấm nhựa có kích thước 3 foot x 3 foot bằng 30 cối xay ở cửa hàng (Hình 1-3). Dùng một con dao sắc để cắt nó. Làm mờ nhựa bằng cách sử dụng giấy nhám (Hình 4-6). có được một hình trụ trơn Tôi vặn tất cả chúng lại với nhau sau khi khoan đúng các lỗ (Pic7-8). Gắn các tấm nhựa lên các thanh đỡ bằng đồng có ren. Nó trông độc đáo và khá dễ dàng để lấy và xử lý. Tôi đã khoan và khai thác các lỗ để khớp với thanh ren 1/8 (Pic9-10). Trong khi đó, tôi đã làm một bộ tản nhiệt để làm mát các đèn LED 3W và để có một đế vững chắc Để không nhận được quá nhiều sắc thái từ trục, tôi tạo một cái lồng nhỏ từ que hàn với đai ốc M8 ở trên (Pic12). Sau khi kết thúc, tôi lắp ráp tất cả lại với nhau. Các ốc vít nhỏ và đai ốc hơi phức tạp, nhưng 30 phút sau tôi đã hoàn thành.

Bước 3: Bóng râm làm bằng tay

Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công
Bóng râm thủ công

Phần đế: Những chiếc đĩa được gia công bằng máy tiện để nhẵn và tròn, sau đó, tôi nhuộm nó bằng một vết gỗ gụ để làm cho cây thông trông đẹp. Các nút bấm: Tôi làm nút bấm từ một mảnh gỗ gụ và các nút bấm từ gỗ nutwood.

Bước 4: Mạch điện:

Mạch điện
Mạch điện
Mạch điện
Mạch điện
Mạch điện
Mạch điện

Trên hình ảnh đầu tiên, bạn thấy sơ đồ của tôi Và đây là một video khác: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Bước 5: Mã:

Mật mã
Mật mã
Mật mã
Mật mã
Mật mã
Mật mã

Trên các bức ảnh, bạn thấy quy trình của tôi với Arduino. Đầu tiên, tôi đã thử với ProtoShield tự chế của mình, một bộ pin và một số loại đèn LED. Tôi bắt đầu với "Spooky Projects" và "BionicArduino" của TodEKurt vài tháng trước. Http://todbot.com/blog/spookyarduino/Mã của tôi là chỉ là sự kết hợp phức tạp giữa mã dự án của anh ấy. "RGBMoodlight", "RGBPotMixer" và một số tiện ích mở rộng. Ba công tắc chế độ analog-in và. digital-in as (Cảm ơn Ju. cho quy trình ngắt:). Các đèn LED được kết nối đến D9, D10 và D11 hỗ trợ PulseWithModulation. Nếu bạn thích, tôi có thể xuất bản bản phác thảo, nhưng đó là sự kết hợp thực sự trần trụi của hai mã tuyệt vời này. giai đoạn đầu trong lập trình… Nhưng nếu bạn sao chép nó, nó sẽ hoạt động rất tốt.

Mã cho "Moodlamp" của tôi, dựa trên "dimmingLEDs" của Clay Shirky

* nejo thg 9, 2008

  • Mã cuối cùng cho đèn pha với công tắc chuyển chế độ ngắt, quay số nhanh tương tự để làm mờ RGB và thay đổi màu RGB.
  • Chức năng làm mờ chỉ hoạt động cho màu trắng

* nejo tháng 10 năm 2008

  • Phần mở rộng âm thanh cho đèn tâm trạng:
  • Một micrô tụ điện với một bộ khuếch đại LM368 nhỏ, một bộ thu và một bộ lọc thông thấp RC
  • với một Đầu vào tương tự khác, tôi sử dụng chức năng RGBPotMixer để thay đổi màu sắc bằng cách nhận tín hiệu micrô.

* * * Mã cho 3 đèn LED mờ dần, đỏ, xanh lá cây và xanh dương hoặc một đèn LED ba màu, sử dụng PWM

  • Chương trình chuyển dần từ đỏ sang xanh lá cây, xanh lục sang xanh lam và xanh lam sang đỏ
  • Mã gỡ lỗi giả định Arduino 0004, vì nó sử dụng các hàm kiểu Serial.begin () mới
  • ban đầu là "dimmingLEDs" của Clay Shirky

*

  • AnalogRead được bật trên Pin A0 để thay đổi tốc độ mờ dần RGB
  • AnalogRead được bật trên Pin A2 để thay đổi màu sắc hueRGB

* * * / # include // Outputint ledPin = 13; // controlPin để gỡ lỗi redPin = 9; // LED đỏ, kết nối với chân kỹ thuật số 9int greenPin = 10; // Đèn LED xanh lục, được kết nối với chân kỹ thuật số 10int bluePin = 11; // Đèn LED màu xanh, được kết nối với chân kỹ thuật số 11int dimredPin = 3; // Các chân cho giá trị làm mờ tương tự, được kết nối với transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // công tắc được kết nối với chân D2int val = 0; // biến để đọc pin statusint buttonState; // biến giữ nút stateint buttonPresses = 0; // 3 lần nhấn để đi! Int potPin0 = 0; // Pot để điều chỉnh độ trễ giữa fade trong Moodlamp; int potPin2 = 2; // Đầu ra chiết áp để thay đổi màu sắc hueRGB potVal = 0; // Biến để lưu dữ liệu đầu vào từ potentiometerint maxVal = 0; // giá trị để lưu hệ số mờ mặc định là 255, nếu không có Pot nào được kết nốiint dimPin = 4; // Nồi kết nối với A4 để giảm độ sáng // Các biến chương trìnhint redVal = 255; // Các biến để lưu trữ các giá trị để gửi tới các chân cắm greenVal = 1; // Các giá trị ban đầu là Red full, Green và Blue offint blueVal = 1; int i = 0; // Bộ đếm vòng lặp int wait; // = 15; // Độ trễ 50ms (0,05 giây); rút ngắn cho fadesint nhanh hơn k = 0; // giá trị cho controlLED trong hàm DEBUG = 0; // Bộ đếm GỬI; nếu được đặt thành 1, sẽ ghi các giá trị trở lại thông qua serialint LCD = 0; // Bộ đếm LCD; nếu được đặt thành 1, sẽ ghi các giá trị trở lại thông qua serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // đặt các chân là pinMode đầu ra (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // đặt các chân là pinMode đầu ra (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Đặt chân chuyển đổi làm đầu vào AttachInterrupt (0, isr0, RISING); if (DEBUG) {// Nếu chúng ta muốn xem các giá trị pin để gỡ lỗi… Serial.begin (9600); //… thiết lập nối tiếp theo kiểu 0004}} // Vòng lặp chương trình chính () {if (buttonPresses == 0) {Moodlamp (); // gọi hàm Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // gọi hàm trộn manuel} if (buttonPresses == 2) {White (); // Ở đây toàn màu trắng} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Trắng(); Màn hình(); dim ();} void Monitor () {// Gửi trạng thái tới màn hình if (DEBUG) {// Nếu chúng ta muốn đọc đầu ra DEBUG + = 1; // Tăng bộ đếm DEBUG if (DEBUG> 10) {// In sau mỗi 10 vòng lặp DEBUG = 1; // Đặt lại bộ đếm Serial.print (i); // Các lệnh nối tiếp theo kiểu 0004 Serial.print ("\ t"); // In ra một tab Serial.print ("R:"); // Cho biết đầu ra là giá trị màu đỏ Serial.print (redVal); // In giá trị màu đỏ Serial.print ("\ t"); // In ra một tab Serial.print ("G:"); // Lặp lại cho màu xanh lá cây và xanh lam… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, kết thúc bằng ký tự xuống dòng Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, kết thúc bằng dấu xuống dòng Serial.print ("\ t"); Serial.print ("đợi:"); Serial.print (chờ đợi); // ghi giá trị của potPin0 vào màn hình Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // ghi giá trị của potPin0 vào màn hình Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // ghi giá trị của potPin0 vào màn hình Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // ghi giá trị của nút Nhấn vào màn hình}}} void dim () // Hàm làm mờ màu Trắng // có thể sau cho tất cả các Chế độ {maxVal = analogRead (dimPin); maxVal / = 4; // Phạm vi tương tự từ 0..1024 quá nhiều để làm mờ giá trị 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // tìm kiếm giá trị từ potPin0; // nếu không có Pot nào được kết nối: wait 255 i + = 1; // Bộ đếm tăng // i = i - maxVal; if (i <255) // Giai đoạn đầu của fade {redVal - = 1; // Red xuống greenVal + = 1; // Lên màu xanh blueVal = 1; // Mức thấp màu xanh lam} else if (i <509) // Giai đoạn thứ hai của fades {redVal = 1; // Red low greenVal - = 1; // Màu xanh lá cây xuống blueVal + = 1; // Lên màu xanh} else if (i <763) // Pha thứ ba của fades {redVal + = 1; // Màu đỏ lên greenVal = 1; // Màu xanh lá cây lo2 blueVal - = 1; // Màu xanh lam xuống} else // Thiết lập lại bộ đếm và bắt đầu lại bộ đếm {i = 1; } // chúng tôi thực hiện "255-redVal" thay vì chỉ "redVal" vì // các đèn LED được nối với + 5V thay vì Gnd analogWrite (redPin, 255 - redVal); // Ghi giá trị hiện tại vào chân LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // làm mờ 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); // Ghi giá trị hiện tại vào chân LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / chờ / = 4; trì hoãn (chờ đợi); // Tạm dừng 'chờ' vài mili giây trước khi tiếp tục vòng lặp} void RGBPotMixer () {potVal = analogRead (potPin2); // đọc giá trị chiết áp tại chân đầu vào potVal = potVal / 4; // chuyển đổi từ 0-1023 thành 0-255 hue_to_rgb (potVal); // coi potVal là hue và chuyển đổi thành rgb vals // "255-" là do chúng ta có các đèn LED cực dương chung, không phải analogWrite cathode chung (redPin, 255-redVal); // Ghi giá trị vào chân LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Ghi giá trị vào chân LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Cho một biến màu 'h', nằm trong khoảng từ 0-252,
  • đặt giá trị màu RGB một cách thích hợp.
  • Giả sử độ bão hòa maxValimum & giá trị tối đa (độ sáng)
  • Thực hiện phép toán số nguyên hoàn toàn, không có dấu phẩy động.

* / void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // lùi về 252 !! byte nejo hd = hue / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd% 6; // cho 0-5 byte f = hue% 42; byte fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; nghỉ; trường hợp 1: redVal = 252-fs; greenVal = 252; blueVal = 0; nghỉ; trường hợp 2: redVal = 0; greenVal = 252; blueVal = fs; nghỉ; trường hợp 3: redVal = 0; greenVal = 252-fs; blueVal = 252; nghỉ; trường hợp 4: redVal = fs; greenVal = 0; blueVal = 252; nghỉ; trường hợp 5: redVal = 252; greenVal = 0; blueVal = 252-fs; nghỉ; }} void isr0 () {Serial.println ("\ n / n trơ / n"); buttonState = digitalRead (switchPin); // đọc trạng thái ban đầu delayMicroseconds (100000); // if (val! = buttonState) {// trạng thái của nút đã thay đổi! // if (buttonState == HIGH) {// kiểm tra xem nút hiện đã được nhấn chưa buttonPresses ++; //} // val = buttonState; // lưu trạng thái mới trong biến if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Giai đoạn tiếp theo là các trình điều khiển bóng bán dẫn. Tôi đã sử dụng 3 bóng bán dẫn PNP với dòng điện tối đa trên 3Ampere. Sau khi dòng chuyển tiếp và điện áp được điều chỉnh, LEDemitter hoạt động tốt với cường độ đầy đủ.

Bước 6: Làm cho nó hoạt động độc lập với Bootloader do PonyProg ghi

Nhận nó độc lập với Bootloader do PonyProg ghi
Nhận nó độc lập với Bootloader do PonyProg ghi

Cách sử dụng cổng paralell của bạn để ghi bộ nạp khởi động arduino trên ATmega168 hoặc ATmega8 để sử dụng chip trống giá rẻ với môi trường arduino.com sắp ra mắt….. có thể trên một hướng dẫn riêng Đây cũng là một hướng dẫn hay để sử dụng chip độc lập: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Comp tương thích-Developme/?ALLSTEPS

Bước 7: Đó là Moodlamp Arduino của tôi

Vì vậy, đó là Moodlamp Arduino của tôi
Vì vậy, đó là Moodlamp Arduino của tôi

Nếu bạn thích nó, xin vui lòng đánh giá tôi.

Đề xuất: