Агуулгын хүснэгт:

Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн: 7 алхам
Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн: 7 алхам

Видео: Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн: 7 алхам

Видео: Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн: 7 алхам
Видео: Объяснение прошивки Marlin 2.0.x 2024, Долдугаар сарын
Anonim
Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн
Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн
Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн
Arduino дээр ажилладаг RGB Moodlamp гараар хийсэн

Энэхүү зааварчилгаа нь 5 хэсэгт хуваагдана:- Барилгын ажлыг төлөвлөх (Алхам1)- Гараар хийсэн сүүдэр (Алхам2+3)- ATmega8 хянагчтай 3W LED жолоодох электрон хэлхээ (Алхам4)- Код (Алхам5)- Үүнийг яаж авах вэ? бие даасан (Arduino bootloader-ийг PonyProg-ээр гялсхийлгэж, тоймыг нь шатаагаарай) (Алхам 6) удахгүй гарах болно Vid: Зарим сэтгэгдэл

de.youtube.com/watch?v=apZ9NpaUG84 Зураг1: The Moodlamp Pic2: 3W хүчирхэг LED

Алхам 1: Барилгын ажлыг төлөвлөх:

Барилгын төлөвлөлт
Барилгын төлөвлөлт
Барилгын төлөвлөлт
Барилгын төлөвлөлт

Би ганцхан цаасан дээр үзэл баримтлал хийх дуртай бөгөөд эхний хуудсан дээр эртний санаануудыг олж хардаг. Би баруун доод талын загварыг сонгосон. Хоёрдахь хуудсан дээр барилгын талаархи зарим нарийн ширийн зүйлийг харуулав. Хэмжилт нь цаг тутамд туршилт хийдэг, гэхдээ миний хувьд зүгээр;-) Миний техник хангамжийн талаархи бодол:- Би материалыг зохицуулж чадах уу?- Гэрэл гэрэлтэх үү? Сүүдэр дамжин өнгөрөх үү? - Энэ нь ямар харьцаатай байх ёстой вэ? - Энгийн интерфэйс хийхэд надад хичнээн тооны бариул, сав хэрэгтэй вэ? Миний програм хангамжийн бодол: Дэнлүү хэдэн өөр функцтэй байх ёстой вэ? - Цайвар гэрлийг тохируулж болно

Алхам 2: Гар хийцийн сүүдэр

Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр

Материалыг цуглуулах: Сүүдэр: Би дэлгүүрээс 30 тээрмийн хуванцар хэмжээтэй 3 фут х 3 фут хэмжээтэй хуудас олсон (Зураг 1-3). Хурц хутгаар хайчилж, зүлгүүр ашиглан хуванцарыг царцаасан (Зураг 4-6). гөлгөр цилиндр авах Би зөв нүх өрөмдсөний дараа бүгдийг нь боолттой болгосон (Зураг 7-8). Урсгалтай гуулин тулгуур дээр хуванцар сүүдрийг холбоно уу. Энэ нь гоёмсог харагдаж байна, авахад хялбар, нүхийг 1/8 дахь урсгалтай бааранд тааруулан өрөмдөж, тогшлоо (Зураг 9-10). Үүний зэрэгцээ би 3W LED-ийг хөргөх, бат бөх суурьтай болгохын тулд радиатор хийсэн. Босоо амнаас хэт олон сүүдэр авахгүйн тулд би гагнуурын саваагаар M8 самартай бага зэрэг тор барьдаг (Зураг 12). Дууссаны дараа би бүгдийг нь угсарсан. Жижиг эрэг, самар жаахан төвөгтэй байсан ч 30 минутын дараа би үүнийг хийж чадсан.

Алхам 3: Гар хийцийн сүүдэр

Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр
Гар хийцийн сүүдэр

Суурь: Дискийг токарь дээр чангалж, гөлгөр, дугуй хэлбэртэй болгохын тулд дараа нь зандан модны толботой будсан тул нарсыг сайхан харагдуулав. Дараа нь яах вэ?!? сүүдэртэй царцсан хуванцар, арын гэрэлтүүлэг нь RGB microLED (Зураг 5). Бариул: Би товчийг зандан модноос, товчлуурыг самрын модны тасархайгаар хийсэн.

Алхам 4: Цахилгаан хэлхээ:

Цахилгаан хэлхээ
Цахилгаан хэлхээ
Цахилгаан хэлхээ
Цахилгаан хэлхээ
Цахилгаан хэлхээ
Цахилгаан хэлхээ

Эхний зураг дээр та миний схемийг харж байна, энд бас нэг видео байна: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Алхам 5: Код:

Код
Код
Код
Код
Код
Код

Зураг дээр та миний Arduino -тэй хийсэн үйл явцыг харж байна. Нэгдүгээрт, би өөрөө хийсэн ProtoShield, батерейны багц, зарим төрлийн LED -ийг туршиж үзсэн. Хэдэн сарын өмнө TodEKurt -ийн "Spooky Projects", "BionicArduino" -г эхлүүлсэн. Түүний төслийн кодын нарийн хослол. "RGBMoodlight", "RGBPotMixer" болон зарим өргөтгөлүүд. Гурван аналог ба нэг дижитал горим горим шилжүүлэгч (Ju-д баярлалаа. тасалдлын горимд:). LED нь холбогдсон PulseWithModulation -ийг дэмждэг D9, D10 ба D11 -ийн хувьд. Хэрэв би ноорогоо нийтэлж болно, гэхдээ энэ бол үнэхээр гайхалтай хоёр кодын хослол юм. Энд миний анхны чийдэнгийн код байна. Энэ нь минийх байсан болохоор жаахан замбараагүй харагдаж байна. програмчлалын маш эрт үе шат … Гэхдээ хэрэв та үүнийг хуулж авбал энэ нь маш сайн ажиллах болно. "PotColorMixer", "RGBfadingFunction", горимыг солих тасалдлын горим гэх мэт нарийн тохиргоо байдаг./* nejo June 2008,

Клэй Ширкигийн "dimmingLEDs" дээр үндэслэсэн миний "Moodlamp" код

*2008 оны 9 -р сар

  • Тасалдлын горим-шилжүүлэгч, RGB-ийн бүдэгрэх, RGB-ийн өнгийг өөрчлөх аналог хурдны залгуур бүхий moodlamp-ийн эцсийн код.
  • Бүдэгрүүлэх функц нь зөвхөн цагаан өнгөний хувьд л ажилладаг

*2008 оны аравдугаар сар

  • Сэтгэлийн хөдөлгөөнийг сайжруулах дууны өргөтгөл:
  • Жижиг LM368 Amp, хүлээн авагч, RC бага нэвтрүүлэх шүүлтүүр бүхий конденсаторын микрофон
  • өөр аналог оролтоор би RGBPotMixer функцийг ашиглан микрофоны дохиог авах замаар өнгийг өөрчилдөг.

* * * ХОУХШ ашиглан улаан, ногоон, цэнхэр өнгийн гурван LED буюу нэг гурван өнгийн LED-ийн бүдгэрч буй код

  • Хөтөлбөр нь улаанаас ногоон, ногооноос цэнхэр, цэнхэрээс улаан хүртэл аажмаар бүдгэрч байна
  • Дебаг хийх код нь шинэ Serial.begin () маягийн функцийг ашигладаг тул Arduino 0004 гэж үздэг.
  • анх Клэй Ширкигийн "dimmingLEDs"

*

  • AnalogRead нь Pin A0 дээр идэвхжсэн бөгөөд RGB бүдгэрүүлэх хурдыг өөрчилдөг
  • AnalogRead нь Pin A2 дээр hueRGB өнгийг өөрчлөхийн тулд идэвхжсэн байдаг

* * */#include // 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; // pin statusint товчлуурыг унших хувьсагчState; // товчлуурыг дарах хувьсагч stateint buttonPresses = 0; // явахын тулд 3 дарна уу! Int potPin0 = 0; // Moodlamp -д бүдгэрэх хоорондын хоцролтыг тохируулах сав; int potPin2 = 2; // hueRGB colorint potVal = 0 -ийг өөрчлөх потенциометрийн гаралт; // maxVal = 0 потенциометрийн оролтыг хадгалах хувьсагч; // бүдэгрүүлэх коэффициентийг хадгалах утга нь 255, хэрэв Pot холбогдоогүй бол dimPin = 4; // Гэрлийг бүдгэрүүлэхийн тулд А4 -т холбогдсон тогоо // Хөтөлбөрийн хувьсагчид redVal = 255; // pinsint greenVal = 1 рүү илгээх утгуудыг хадгалах хувьсагчууд; // Анхны утга нь Улаан дүүрэн, Ногоон, Цэнхэр offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50ms (.05 секунд) саатал; илүү хурдан fadesint богиносгох k = 0; // анивчих функц дахь хяналтын LED-ийн утга DEBUG = 0; // DEBUG тоолуур; хэрэв 1 гэж тохируулсан бол утгуудыг serialint 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 style дээр цуваа гаралтыг тохируулна уу}} // Үндсэн programvoid loop () {if (buttonPresses == 0) {Moodlamp (); // Moodlight функцийг дуудна} if (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:"); Цуваа.хэвлэх (blueVal); // println, тэргэнцэрээр дуусгахын тулд Serial.print ("\ t"); Serial.print ("dimValue:"); Цуваа.хэвлэх (maxVal); // println, тэргэнцэрээр дуусгахын тулд Serial.print ("\ t"); Serial.print ("хүлээх:"); Цуваа.хэвлэх (хүлээх); // potPin0 -ийн утгыг Serial.print монитор дээр бичдэг ("\ t"); Serial.print ("hueRGBvalue"); Цуваа.хэвлэх (potVal); // potPin0 -ийн утгыг Serial.print монитор дээр бичдэг ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // potPin0 -ийн утгыг Serial.print монитор дээр бичдэг ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // товчлуурын утгыг бичдэг дэлгэц рүү дарна}}} void dim () // Цагаан өнгийг бүдгэрүүлэх функц // магадгүй дараа нь бүх горимд {maxVal = analogRead (dimPin); maxVal /= 4; // 0..255 утга analogWrite (dimredPin, maxVal) -ийг бүдгэрүүлэхийн тулд 0..1024 -ийн аналог хүрээ хэт их байна; analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // утгыг potPin0 -ээс хайх; // хэрэв Pot холбогдоогүй бол: хүлээх 255 i += 1; // Өсөн нэмэгдэх тоолуур // i = i - maxVal; if (i <255) // Бүдгэрэх эхний үе шат {redVal -= 1; // Улаан доош ногоонVal += 1; // Ногоон хүртэл blueVal = 1; // Цэнхэр нам} өөр тохиолдолд if (i <509) // Хоёрдугаар үе бүдгэрнэ {redVal = 1; // Улаан бага ногоонVal -= 1; // Ногоон доош blueVal += 1; // Blue up} else if if (i <763) // Гурав дахь үе бүдгэрнэ {redVal += 1; // Улаан хүртэл ногоонVal = 1; // Ногоон lo2 blueVal -= 1; // Цэнхэр доош} өөр // Тоолуурыг дахин тохируулаад дахин бүдгэрүүлж эхлээрэй {i = 1; } // бид зөвхөн "redVal" -ний оронд "255 -redVal" хийдэг, учир нь // LED нь Gnd analogWrite -ийн оронд +5V хүртэл холбогдсон байдаг (redPin, 255 - redVal); // Одоогийн утгыг LED pins analogWrite дээр бичих (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // бүдэгрүүлэх dimredVal = max (redVal - maxVal, 0); dimgreenVal = мин (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = мин (blueVal - maxVal, 255); dimblueVal = хамгийн их (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Одоогийн утгыг LED pins analogWrite дээр бичих (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / хүлээх / = 4; хойшлуулах (хүлээх); // Циклийг үргэлжлүүлэхийн өмнө 'хүлээх' миллисекунд түр зогсооно уу} хүчингүй RGBPotMixer () {potVal = analogRead (potPin2); // potVio = potVal / 4 оролтын зүү дээрх потенциометрийн утгыг уншина уу; // 0-1023-аас 0-255 болгон хөрвүүлэх hue_to_rgb (potVal); // potVal-ийг өнгө болгон авч, rgb vals болгон хөрвүүлэх // "255-" нь бидэнд нийтлэг катодын аналоги биш, нийтлэг анодын LED байдагтай холбоотой (redPin, 255-redVal); // LED pins analogWrite-д утгыг бичих (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } хүчингүй цагаан () {analogWrite (redPin, maxVal); // LED pins analogWrite (greenPin, maxVal) дээр утгыг бичих; analogWrite (bluePin, maxVal); }/*

  • "H" гэсэн хувьсах өнгийг өгвөл 0-252 хооронд хэлбэлздэг.
  • RGB өнгөний утгыг зохих ёсоор тохируулах.
  • Хамгийн их ханалт ба хамгийн их утга (тод байдал) гэж үздэг.
  • Хөвөгч цэггүй цэвэр бүхэл тооны математикийг гүйцэтгэдэг.

*/void hue_to_rgb (байтын өнгө) {if (hue> 252) hue = 252; // 252 руу хоцролт !! nejo byte 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; 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); // анхны төлөвийн хоцролтыг уншаарайMicroseconds (100000); // if (val! = buttonState) {// товчлуурын төлөв өөрчлөгдсөн! // if (buttonState == HIGH) {// товчлуур одоо дарагдсан эсэхийг шалгаарай buttonPresses ++; //} // val = buttonState; // хэрэв (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Дараагийн шат бол транзистор-драйверууд байв. Би 3Ampere дээр хамгийн их гүйдэлтэй 3 PNP транзистор ашигласан. Урд гүйдэл ба хүчдэлийг зохицуулсны дараа LEDemitter нь бүрэн эрчимтэй ажилладаг.

Алхам 6: PonyProg шатаасан Bootloader-ийг ашиглан бие дааж аваарай

PonyProg шатаасан Bootloader ашиглан үүнийг бие даан аваарай
PonyProg шатаасан Bootloader ашиглан үүнийг бие даан аваарай

ATmega168 эсвэл ATmega8 дээр arduino bootloader -ийг шатаахын тулд параллел портоо хэрхэн ашиглах вэ, удахгүй arduino орчинтой хямд хоосон чип ашиглах болно … удахгүй тусдаа зааварчилгаа өгөх боломжтой Энд чипийг дангаар нь ашиглах боломжтой сайн заавар байна: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Алхам 7: Тэгэхээр энэ бол миний Arduino Moodlamp

Тэгэхээр энэ бол миний Arduino Moodlamp
Тэгэхээр энэ бол миний Arduino Moodlamp

Хэрэв танд таалагдсан бол надад үнэлгээ өгнө үү.

Зөвлөмж болгож буй: