Სარჩევი:

ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp: 7 ნაბიჯი
ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp: 7 ნაბიჯი

ვიდეო: ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp: 7 ნაბიჯი

ვიდეო: ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp: 7 ნაბიჯი
ვიდეო: #1 სმარტ სანათი ,,ბონდო" 2024, ივლისი
Anonim
ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp
ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp
ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp
ხელნაკეთი Arduino– ით აღჭურვილი RGB Moodlamp

ეს ინსტრუქცია იყოფა 5 ნაწილად:- მშენებლობის დაგეგმვა (ნაბიჯი 1)- ხელნაკეთი ჩრდილი (ნაბიჯი 2+3)- ელექტრონული წრე 3W LED- ების მართვისთვის ATmega8 კონტროლერთან (ნაბიჯი 4)- კოდი (ნაბიჯი 5)- როგორ მივიღოთ იგი დამოუკიდებლად (ააფეთქე Arduino ჩამტვირთავი PonyProg– ით და დაწერე ესკიზი) (ნაბიჯი 6) მალე მალე ვიდეო: ზოგიერთი შთაბეჭდილება

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: ძლიერი 3W LED

ნაბიჯი 1: მშენებლობის დაგეგმვა:

მშენებლობის დაგეგმვა
მშენებლობის დაგეგმვა
მშენებლობის დაგეგმვა
მშენებლობის დაგეგმვა

მე მიყვარს კონცეფციის გაკეთება მხოლოდ ერთ ფურცელზე. პირველ ფურცელზე ხედავთ ადრეულ იდეებს. მე ავირჩიე ქვედა მარჯვენა დიზაინი. მეორე გვერდზე ნაჩვენებია კონსტრუქციის ზოგიერთი დეტალი. გაზომვები ექსპერიმენტულია, როგორც ყოველ ჯერზე, მაგრამ ჩემთვის კარგია;-) ჩემი აპარატურის აზრები იყო:- შემიძლია მასალების დამუშავება?- განათდება თუ არა შუქი ჩრდილის მეშვეობით? - რა პროპორცია უნდა ჰქონდეს მას? - რამდენი სახელური და ქოთანი დამჭირდება მარტივი ინტერფეისისთვის? ჩემი პროგრამული აზრები იყო: რამდენი განსხვავებული ფუნქცია უნდა ჰქონდეს ნათურას? - ავტომატური RGB ქრებოდა ცვლადი სიჩქარით - ფერის ხელით რეგულირება - თეთრი რეგულირებადი სიკაშკაშე

ნაბიჯი 2: ხელნაკეთი ჩრდილი

ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი

მასალების შეგროვება: ჩრდილი: მაღაზიაში აღმოვაჩინე 30 მეტრიანი პლასტმასის 3 ფუტი x 3 ფუტიანი ფურცელი (სურათი 1-3). გამოიყენეთ მკვეთრი დანა მის დასაჭრელად. მე პლასტმასის მოყინვა გამოვიყენე ქვიშის გამოყენებით (სურათი 4-6). მიიღეთ გლუვი ცილინდრი, მე ეს ყველაფერი ერთად ჩავაბარე მარჯვენა ხვრელების გაბურღვის შემდეგ (სურათი 7-8). პლასტმასის ჩრდილების დაყენება ხრახნიანი სპილენძის საყრდენებზე. ეს მშვენივრად გამოიყურება და საკმაოდ ადვილი მისაღები და დამუშავებული. მე გაბურღული და დაჭერილი ხვრელები 1/8-ე ხრახნიან ბარს (Pic9-10). იმავდროულად, მე გავაკეთე გამაცხელებელი გამაგრილებელი 3W LED- ების გასაცილებლად და მყარი საფუძველი. შახტიდან არც თუ ისე ბევრი ჩრდილის მისაღებად, მე ვაშენებ პატარა გალიას შედუღების ჯოხიდან M8 თხილის თავზე (სურათი 12). დასრულებისთანავე შევიკრიბე ყველა ერთად. პატარა ხრახნები და თხილი იყო ცოტა სახიფათო, მაგრამ 30 წუთის შემდეგ მე ეს გავაკეთე.

ნაბიჯი 3: ხელნაკეთი ჩრდილი

ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი
ხელნაკეთი ჩრდილი

საფუძველი: დისკები ჩაკეტილი იყო ლაქაში, რათა ის გლუვი და მრგვალი ყოფილიყო. ამის შემდეგ, მე შევიღებე მას მაჰოგანის ხის ლაქით, რათა ფიჭვი კარგად გამოიყურებოდეს. რა არის შემდეგი?!? მე გადავწყვიტე, რომ ბაზის გაკეთება იგივე გამოყენებით ყინვაგამძლე პლასტმასი, როგორც ჩრდილი და განათება RGB microLED (Pic5). ღილაკები: მე გავაკეთე ღილაკი მაჰოგანის ნაჭერიდან და ღილაკები თხილიდან.

ნაბიჯი 4: ელექტრული წრე:

ელექტრული წრე
ელექტრული წრე
ელექტრული წრე
ელექტრული წრე
ელექტრული წრე
ელექტრული წრე

პირველ სურათზე ხედავთ ჩემს სქემატურს. და აი კიდევ ერთი ვიდეო: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

ნაბიჯი 5: კოდი:

Კოდი
Კოდი
Კოდი
Კოდი
Კოდი
Კოდი

სურათებზე ხედავთ ჩემს პროცესს არდუინოსთან. პირველ რიგში ვცადე ჩემი ხელნაკეთი ProtoShield, ბატარეის პაკეტი და გარკვეული სახის LED- ები. დავიწყე რამდენიმე თვის წინ TodEKurt- ის "Spooky Projects" - ით და "BionicArduino" - ით. Http://todbot.com/blog/spookyarduino/ ჩემი კოდი არის მხოლოდ მისი პროექტის კოდის სახიფათო კომბინაცია. "RGBMoodlight", "RGBPotMixer" და ზოგიერთი გაფართოება. სამი ანალოგი-და. ერთი ციფრული, როგორც რეჟიმი გადართვა (მადლობა Ju. შეფერხების რუტინისთვის:). LED- ები დაკავშირებულია D9, D10 და D11, რომლებიც მხარს უჭერენ PulseWithModulation– ს. თუ გნებავთ, შემიძლია გამოვაქვეყნო ესკიზი, მაგრამ ეს მართლაც შიშველი კომბინაციაა ამ ორი დიდი კოდისა. პროგრამირების ძალიან ადრეული ეტაპი … მაგრამ თუ დააკოპირებ, ის მშვენივრად უნდა მუშაობდეს. არის მშვენიერი მშვიდობები, როგორიცაა "PotColorMixer", "RGBfadingFunction" და რეჟიმი-გადართვის რეჟიმის შეწყვეტა./* nejo ივნისი, 2008 წ.

კოდი ჩემი "Moodlamp" კლეი შირკის "dimmingLEDs" საფუძველზე

*nejo 2008 წლის სექტემბერი

  • განწყობის ნათურის საბოლოო კოდი შეფერხების რეჟიმის გადამრთველით, ანალოგური სწრაფი აკრიფეთ RGB- გაცვეთილ და RGB ფერის შეცვლაზე.
  • ჩამუქების ფუნქცია მუშაობს მხოლოდ თეთრი ფერისთვის

*nejo 2008 წლის ოქტომბერი

  • ხმის გაფართოება განწყობის განათებისთვის:
  • კონდენსატორის მიკროფონი პატარა LM368 ამპერით, გადამცემი და RC დაბალი გამავლობის ფილტრი
  • სხვა ანალოგური შეყვანისას მე ვიყენებ RGBPotMixer ფუნქციას, რომ შეცვალოს ფერი მიკრო სიგნალის მიღებით.

* * * კოდი 3 LED- ის გადაკვეთაზე, წითელი, მწვანე და ლურჯი, ან ერთი სამი ფერის LED, PWM გამოყენებით

  • პროგრამა ნელ-ნელა იშლება წითელიდან მწვანემდე, მწვანედან ლურჯამდე და ლურჯიდან წითლამდე
  • გამართვის კოდი ითვალისწინებს Arduino 0004- ს, რადგან ის იყენებს ახალ Serial.begin ()-სტილის ფუნქციებს
  • თავდაპირველად "dimmingLEDs" კლეი შირკის მიერ

*

  • AnalogRead ჩართულია Pin A0– ზე, რათა შეცვალოს RGB გაცვეთილი სიჩქარე
  • AnalogRead ჩართულია Pin A2– ზე, რათა შეცვალოს hueRGB ფერი

* * */#მოიცავს // გამოყვანის ledPin = 13; // controlPin debuggingint redPin = 9; // წითელი LED, ციფრულ პინთან დაკავშირებული 9int greenPin = 10; // მწვანე LED, ციფრულ პინთან დაკავშირებული 10int bluePin = 11; // ლურჯი LED, ციფრულ პინთან დაკავშირებული 11int dimredPin = 3; // ქინძისთავები ანალოგური დაბინდვის მნიშვნელობისათვის, რომელიც დაკავშირებულია ტრანზისტორის დრაივერთან dimgreenPin = 5; int dimbluePin = 6; // შეყვანის ჩამრთველი Pin = 2; // გადამრთველი უკავშირდება pin D2int val = 0; // ცვლადი პინის სტატუსის ღილაკის წასაკითხად სახელმწიფო; // ცვლადი ღილაკის მდგომარეობის შესანარჩუნებლად button Presses = 0; // 3 დაჭერა წასასვლელად! Int potPin0 = 0; // ქოთანი მოუდლამპში გაფუჭებას შორის დაგვიანების გასწორების მიზნით; int potPin2 = 2; // პოტენომეტრის გამომუშავება hueRGB colorint potVal = 0 შეცვლისთვის; // ცვლადი შესანახად შესასვლელი potentiometerint maxVal = 0; // დაბინდვის ფაქტორის ნაგულისხმევი მნიშვნელობა არის 255, თუ პოტი არ არის დაკავშირებული in dimPin = 4; // A4- სთან დაკავშირებული ქოთანი სიკაშკაშის შესამცირებლად // პროგრამის ცვლადები redVal = 255; // ცვლადები მნიშვნელობების შესანახად pinsint greenVal = 1; // საწყისი მნიშვნელობებია წითელი სრული, მწვანე და ლურჯი offint blueVal = 1; int i = 0; // მარყუჟის მრიცხველი int ელოდება; // = 15; // 50 წმ (.05 წამი) შეფერხება; შემოკლება უფრო სწრაფი fadesint k = 0; // მნიშვნელობა controlLED მოციმციმე ფუნქციაში DEBUG = 0; // DEBUG მთვლელი; თუ დაყენებულია 1 -ზე, ის ჩაწერს მნიშვნელობებს სერიული LCD = 0 საშუალებით; // LCD მრიცხველი; თუ დაყენებულია 1 -ზე, ჩაწერს მნიშვნელობებს serialvoid setup () {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) {// თუ გვინდა დავინახოთ გამართვის გამართვის pin მნიშვნელობები … Serial.begin (9600); //… დააყენეთ სერიული ამონაწერი 0004 სტილში}} // მთავარი პროგრამის მარყუჟის მარყუჟი () {if (buttonPresses == 0) {Moodlamp (); // იძახებს Moodlight ფუნქციას} if (buttonPresses == 1) {RGBPotMixer (); // იძახებს manuel mix ფუნქციას} if (buttonPresses == 2) {თეთრი (); // აქ ყველაფერი თეთრია} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // თეთრი (); მონიტორი (); dim ();} void მონიტორი () {// გამოაგზავნეთ მდგომარეობა მონიტორზე 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 ("დაელოდეთ:"); სერიული. ბეჭდვა (ლოდინი); // წერს 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 (ღილაკზე დაჭერილი); // წერს ღილაკის მნიშვნელობასპრესს მონიტორზე}}} void dim () // ფუნქცია თეთრის დაბნელებისთვის // შესაძლოა მოგვიანებით ყველა რეჟიმისთვის {maxVal = analogRead (dimPin); maxVal /= 4; // ანალოგური დიაპაზონი 0..1024 -დან ძალიან ბევრი 0..255 მნიშვნელობის ანალოგრატის დაბნელებისთვის (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {ლოდინი = analogRead (potPin0); // მოძებნეთ მნიშვნელობა potPin0– დან; // თუ პოტი არ არის დაკავშირებული: დაელოდეთ 255 i += 1; // გაზრდის მრიცხველი // i = i - maxVal; თუ (i <255) // პირველი ფაზა ქრება {redVal -= 1; // წითელი მწვანე greenVal += 1; // გამწვანება blueVal = 1; // ლურჯი დაბალი} სხვა შემთხვევაში თუ (i <509) // მეორე ფაზა ქრება {redVal = 1; // წითელი დაბალი greenVal -= 1; // მწვანე ქვემოთ blueVal += 1; // ლურჯი up} სხვაგან თუ (i <763) // fades მესამე ფაზა {redVal += 1; // გაწითლეთ greenVal = 1; // მწვანე lo2 blueVal -= 1; // ცისფერი ქვემოთ} სხვა // ხელახლა დააყენეთ მრიცხველი და კვლავ დაიწყეთ ქრებოდა {i = 1; } // ჩვენ ვაკეთებთ "255 -redVal" - ს მხოლოდ "redVal" - ის ნაცვლად, რადგან // LED- ები მიმაგრებულია +5V მდე Gnd 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); // წაიკითხეთ პოტენომეტრის მნიშვნელობა შეყვანის pin 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); } void თეთრი () {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; გადართვა (hi) {შემთხვევა 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 უწყვეტი / n"); buttonState = digitalRead (switchPin); // წაიკითხეთ საწყისი მდგომარეობის დაყოვნება მიკროწამები (100000); // if (val! = buttonState) {// ღილაკის მდგომარეობა შეიცვალა! // if (buttonState == HIGH) {// შეამოწმეთ არის თუ არა ღილაკზე დაჭერილი ღილაკი დაჭერით ++; //} // val = buttonState; // შეინახეთ ახალი მდგომარეობა ჩვენს ცვლადში, თუ (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} შემდეგი ეტაპი იყო ტრანზისტორი-მძღოლები. მე გამოვიყენე 3 PNP ტრანზისტორი მაქსიმალური დენით 3 ამპერზე. მას შემდეგ, რაც წინამორბედი დენი და ძაბვა დარეგულირდა, LED განათება მშვენივრად მუშაობდა სრული ინტენსივობით.

ნაბიჯი 6: მიიღეთ იგი დამოუკიდებლად PonyProg დამწვარი ჩამტვირთველით

მიიღეთ იგი დამოუკიდებლად PonyProg- ზე დამწვარი ჩამტვირთველით
მიიღეთ იგი დამოუკიდებლად PonyProg- ზე დამწვარი ჩამტვირთველით

როგორ გამოვიყენოთ თქვენი პარალელის პორტი, რომ დაწვათ arduino ჩამტვირთავი ATmega168 ან ATmega8, რომ გამოიყენოთ იაფი ცარიელი ჩიპი არდუინოს გარემოსთან ერთად. მალე … შესაძლოა ცალკე ინსტრუქციულად აქ არის ასევე კარგი ინსტრუქცია ჩიპების დამოუკიდებლად გამოყენების შესახებ: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

ნაბიჯი 7: ეს არის ჩემი Arduino Moodlamp

ეს არის ჩემი Arduino Moodlamp
ეს არის ჩემი Arduino Moodlamp

თუ მოგეწონათ, გთხოვთ შემიფასოთ.

გირჩევთ: