Мазмуну:

Ардуино иштеткен RGB Moodlamp колго жасалган: 7 кадам
Ардуино иштеткен RGB Moodlamp колго жасалган: 7 кадам

Video: Ардуино иштеткен RGB Moodlamp колго жасалган: 7 кадам

Video: Ардуино иштеткен RGB Moodlamp колго жасалган: 7 кадам
Video: RGB лампа настроения на Arduino ;) 2024, Июль
Anonim
Ардуино колдогон RGB Moodlamp колго жасалган
Ардуино колдогон RGB Moodlamp колго жасалган
Ардуино колдогон RGB Moodlamp колго жасалган
Ардуино колдогон RGB Moodlamp колго жасалган

Бул көрсөтмө 5 бөлүккө бөлүнөт:- Курулушту пландаштыруу (Step1)- Колго жасалган көлөкө (Step2+3)- ATmega8 контроллери менен 3W LEDди айдоонун электрондук схемасы (Step4)- Код (Step5)- Кантип алса болот өз алдынча (Arduino жүктөгүчүн PonyProg менен жаркылдатып, эскизди күйгүзүңүз) (Step6) жакында келе жаткан Vid: Кээ бир таасирлер

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: 3W күчтүү LED

1 -кадам: Курулушту пландаштыруу:

Курулушту пландаштыруу
Курулушту пландаштыруу
Курулушту пландаштыруу
Курулушту пландаштыруу

Мен түшүнүктү бир эле баракта жасоону жакшы көрөм. Биринчи баракта кээ бир алгачкы ойлорду көрөсүз. Мен ылдыйкы оң жактагы дизайнды тандадым. Экинчи баракта курулуш үчүн кээ бир деталдар көрсөтүлгөн. Ченөө ар бир жолу эксперименталдуу, бирок мен үчүн жакшы;-) Менин аппараттык ойлорум мындай болгон:- Мен материалдарды иштете аламбы?- Жарык жаркырайбы? көлөкө аркылуу? - Ал кандай пропорцияга ээ болушу керек? - Жөнөкөй интерфейс үчүн мага канча тетик жана казан керек болот? Менин программалык ойлорум: Чырак канча түрдүү функцияга ээ болушу керек? - Өзгөрүлүүчү ылдамдык менен автоматтык RGB өчүшү - Түштү кол менен тууралоо - Ак түсү жөнгө салынуучу жарык менен

2 -кадам: Handmade Shade

Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade

Материалдарды чогултуу: Көлөкө: Мен дүкөндө 30 фабрикадан турган 3 фут х 3 фут бутун таптым (Pic1-3). Аны кесүү үчүн курч бычакты колдонуңуз. жылмакай цилиндрди алыңыз Мен туура тешиктерди бургандан кийин баарын бурап салдым (Pic7-8). Жез жез таянычтарга пластикалык көлөкөлөрдү орнотуңуз. Бул жагымдуу көрүнөт жана аны иштетүү оңой. Мен тешиктерди 1/8 жиптүү тилкеге (Pic9-10) дал келтирүү үчүн бургуладым жана таптадым. Ошол эле учурда мен 3W LEDлерин муздатуу үчүн жана катуу базага ээ болуу үчүн радиатор жасадым. Биликтен өтө көп көлөкө албоо үчүн, үстүндө M8 гайкасы менен ширетүүчү таяктан кичинекей капас курам (Pic12). Аягына келгенде мен баарын чогулткам. Кичине бурамалар менен гайкалар бир аз татаал болчу, бирок 30 мүнөттөн кийин мен муну жасадым.

3 -кадам: Handmade Shade

Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade
Handmade Shade

Базасы: Дисктер токардык станокто жылмакай жана тегерек болуш үчүн кыпчылып калган. Кийинчерээк мен аны кызыл жыгачтан жасалган боек менен боёп алдым, ошондо карагай жакшы көрүнөт. Кийинки? көлөкө катары тоңгон пластик, жана аны RGB microLED (Pic5) менен жарыктандыруу. Түймөлөр: Мен кызыл жыгачтын бир бөлүгүнөн баскычты жана жаңгактын кесилишинен баскычтарды жасадым.

4 -кадам: Электр схемасы:

Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы
Электр схемасы

Биринчи сүрөттө менин схемамды көрөсүз. Бул жерде дагы бир видео бар: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

5 -кадам: Код:

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

Сүрөттөрдө менин Arduino менен болгон процессимди көрөсүз. Биринчиден, мен өзүм жасаган ПротоШилд, батарейка жана бир нече LED менен бир нече ай мурун TodEKurtтун "Үрөй учурган долбоорлору" жана "BionicArduino" менен баштадым. жөн гана анын проекттик кодунун татаал айкалышы. "RGBMoodlight", "RGBPotMixer" жана кээ бир кеңейтүүлөр. Үч аналогдук жана бир санариптик режимди которуштуруу катары (Ю.га рахмат үзгүлтүккө учуроо режими үчүн:). LEDлар туташтырылган PulseWithModulation колдогон D9, D10 жана D11ге. Кааласаңыз, мен эскизди жарыялай алам, бирок бул эки чоң коддун чындап жылаңач айкалышы. Мына менин чырактын баштапкы коду. Бул бир аз башаламан окшойт, анткени бул меники болчу программалоонун эң баштапкы стадиясы… Бирок эгер сиз аны көчүрүп алсаңыз, анда ал абдан жакшы иштеши керек. "PotColorMixer", "RGBfadingFunction" жана режимди алмаштыруу үчүн үзгүлтүккө учуроо сыяктуу сонун тынчтык бар./* nejo June2008

Клей Ширкинин "dimmingLEDs" ге негизделген "Moodlamp" кодум

*nejo Sep2008

  • Random-mode-switch менен маанай чырагынын акыркы коду, RGBдин өчүшү жана RGB түсүн өзгөртүү үчүн аналогдук тез терүү.
  • Караңгылатуу функциясы ак түс үчүн гана иштейт

*nejo October 2008

  • Маанай чырагы үчүн үн кеңейтүүсү:
  • Кичинекей LM368 Amp менен конденсатор микрофону, рецифер жана RC-аз өтүү-чыпкасы
  • башка analogInput менен микрофонду алуу менен түсүн өзгөртүү үчүн RGBPotMixer-функциясын колдоном.

* * * PWMди колдонгон 3 LED, кызыл, жашыл жана көк же бир үч түстүү LEDдин коду

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

*

  • AnalogRead Pin A0до RGB өчүрүү ылдамдыгын өзгөртүү үчүн иштетилген
  • AnalogRead h2RGB түсүн өзгөртүү үчүн Pin A2де иштетилген

* * */#include // Outputint ledPin = 13; // controlPin мүчүлүштүктөрдү оңдоо үчүн redPin = 9; // Кызыл LED, санарип пин 9int greenPin = 10 менен туташкан; // Жашыл LED, санарип пин 10int bluePin = 11ге туташкан; // Көк LED, санарип пин 11int dimredPin = 3 туташкан; // Транзистор драйвери dimogreenPin = 5ке туташкан аналогдук караңгылатуу үчүн казыктар; int dimbluePin = 6; // Inputint switchPin = 2; // которгуч D2int pin = 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; // Жарыкты күңүрттөө үчүн А4кө туташкан идиш // Программанын өзгөрмөлөрү redVal = 255; // Pinsint greenVal = 1ге жөнөтүү үчүн баалуулуктарды сактоо үчүн өзгөрмөлөр; // Баштапкы маанилер Кызыл толук, Жашыл жана Көк offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50ms (.05 секунд) кечигүү; тезирээк өчүрүү үчүн кыскартуу k = 0; // blink-functionintдагы controlLED үчүн мааниси DEBUG = 0; // Мүчүлүштүктөрдү эсептөөчү; эгер 1ге коюлса, LCDint = 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); // Которуу пинин inputInterrupt катары коюңуз (0, isr0, RISING); if (DEBUG) {// Эгерде биз мүчүлүштүктөрдү оңдоо үчүн пин маанилерин көргүбүз келсе… Serial.begin (9600); // … 0004 стили боюнча сериялык чыгууну орнотуу}} // Негизги 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 эсептегичин көбөйтүү if (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); // баскычтын маанисин жазат Мониторго басат}}} void dim () // Ак караңгылатуу функциясы // балким кийинчерээк бардык режимдер үчүн {maxVal = analogRead (dimPin); maxVal /= 4; // 0..255тен аналогдук диапазон 0..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; // Red down greenVal += 1; // Green up blueVal = 1; // Көк төмөн} else if if (i <509) // Өчүүнүн экинчи фазасы {redVal = 1; // Кызыл төмөн greenVal -= 1; // Green down blueVal += 1; // Blue up} else if if (i <763) // Үчүнчү этабы өчөт {redVal += 1; // Red up greenVal = 1; // Жашыл lo2 blueVal -= 1; // Көк түшүп} башка // Эсептегичти кайра коюп, кайра өчө баштайт {i = 1; } // биз "redVal" ордуна "255 -redVal" жасайбыз, анткени // LEDлар Gnd analogWrite ордуна +5Vга туташтырылган (redPin, 255 - redVal); // LED казыктарына учурдагы маанилерди жазыңыз analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // күңүрттөө dimredVal = макс (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = мүн (blueVal - maxVal, 255); dimblueVal = макс (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // LED казыктарына учурдагы маанилерди жазыңыз analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / wait / = 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); } жараксыз White () {analogWrite (redPin, maxVal); // LED казыктарына баалуулуктарды жазуу analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • 0-252 диапазонундагы "h" өзгөрмөлүү реңк берилген,
  • RGB түсүнүн маанисин туура коюңуз.
  • MaxValimum Saturation & Max Value (жарыктыгы)
  • Таза бүтүн математиканы аткарат, өзгөрүлмө чекит жок.

*/void hue_to_rgb (байт түс) {if (hue> 252) hue = 252; // артка кетүү 252 !! nejo байт 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 үзгүлтүккө учураган / 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 менен күйгүзүлгөн жүктөгүчтү өз алдынча алыңыз

PonyProg күйгүзүлгөн жүктөгүч менен аны өз алдынча алыңыз
PonyProg күйгүзүлгөн жүктөгүч менен аны өз алдынча алыңыз

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

7 -кадам: Ошентип, бул менин Arduino Moodlamp

Ошентип, бул менин Arduino Moodlamp
Ошентип, бул менин Arduino Moodlamp

Эгер сизге жакса, мага баа бериңиз.

Сунушталууда: