Мазмұны:

Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp: 7 қадам
Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp: 7 қадам

Бейне: Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp: 7 қадам

Бейне: Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp: 7 қадам
Бейне: Урок №3. Широтно-импульсная модуляция. BeyondRobotics 2024, Шілде
Anonim
Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp
Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp
Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp
Қолмен жасалған Arduino жұмыс істейтін RGB Moodlamp

Бұл нұсқаулық 5 бөлікке бөлінеді:- Құрылысты жоспарлау (1-қадам)- Қолдан жасалған көлеңке (2-қадам+3)- ATmega8 контроллерімен 3 Вт жарық диодты жүргізуге арналған электрондық схема (4-қадам)- Код (5-қадам)- Қалай алуға болады оқшауланған (Arduino жүктеушісін PonyProg көмегімен жанып, эскизді жағыңыз) (6-қадам) жақында келеді Vid: Кейбір әсерлер

de.youtube.com/watch?v=apZ9NpaUG84 Сурет1: The Moodlamp Pic2: 3W қуатты жарық диоды

1 -қадам: құрылысты жоспарлау:

Құрылысты жоспарлау
Құрылысты жоспарлау
Құрылысты жоспарлау
Құрылысты жоспарлау

Мен тұжырымдаманы бір парақ қағазда жасағанды ұнатамын, бірінші парақта сіз алғашқы идеяларды көресіз. «Мен төменгі оң жақтағы дизайнды таңдадым. Екінші бетте құрылыстың кейбір бөлшектері көрсетілген. Өлшеу әр жолы эксперименттік болып табылады, бірақ мен үшін жақсы;-) Менің аппараттық ойларым:- Мен материалдармен жұмыс жасай аламын ба?- Жарық жарқырай ма? көлеңке арқылы? - Ол қандай пропорцияда болуы керек? - Қарапайым интерфейс үшін маған қанша тұтқалар мен кастрөлдер қажет? Менің бағдарламалық қамтамасыз етудегі ойларым: Шамның неше түрлі функциясы болуы керек? - Айнымалы жылдамдықпен автоматты түрде RGB өшуі - Түсті қолмен реттеу - Жарықтық реттелетін ақ түсті

2 -қадам: Қолдан жасалған көлеңке

Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке

Материалдарды жинау: Көлеңке: Дүкеннен мен 30 диірмен пластиктен тұратын 3 футтық х 3 футтық парақты таптым (Pic1-3). Оны кесу үшін өткір пышақты қолданыңыз. тегіс цилиндрді алыңыз Мен дұрыс тесіктерді бұрғылағаннан кейін бәрін бұрап алдым (Pic7-8). Бұрандалы жезден жасалған тіректерге пластикалық реңктерді орнатыңыз. Бұл өте жақсы көрінеді және оны өңдеу оңай. Мен тесіктерді 1/8 бұрандалы штангаға сәйкес бұрғыладым және тесіп алдым (Pic9-10). Сонымен қатар мен 3Вт жарықдиодты суытып, берік негізге ие болу үшін радиатор салдым. Біліктен тым көп реңкті алу үшін, мен M8 гайкасымен дәнекерлеу таяқшасынан кішкене тор құрамын (Pic12). Аяқтаған соң мен бәрін жинадым. Кішкене бұрандалар мен жаңғақтар сәл қиын болды, бірақ 30 минуттан кейін мен оны жасадым.

3 -қадам: Қолдан жасалған көлеңке

Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке
Қолдан жасалған көлеңке

Негізі: Дискілер тегіс және дөңгелек болуы үшін токарлық станокта бекітілген. Содан кейін мен қарағайдың жақсы көрінуі үшін оны ағаштан жасалған дақпен боядым. Бұдан кейін не істеу керек?!? көлеңке ретінде мұздатылған пластик, және оны RGB microLED (Pic5) көмегімен жарықтандыру.

4 -қадам: Электр тізбегі:

Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі

Бірінші суретте сіз менің схемамды көресіз, және тағы бір бейне: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

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

Кодекс
Кодекс
Кодекс
Кодекс
Кодекс
Кодекс

Суреттерде сіз менің Arduino -мен қалай жұмыс жасайтынымды көресіз. Алдымен мен өз қолыммен жасалынған ProtoShield, аккумуляторлық батареялар мен жарықдиодтардың бірнеше түрін қолданып көрдім. Мен бірнеше ай бұрын TodEKurt -тың «Үрейлі жобалар» мен «BionicArduino» -мен бастадым. Http://todbot.com/blog/spookyarduino/ оның жобалық кодының күрделі комбинациясы. «RGBMoodlight», «RGBPotMixer» және кейбір кеңейтімдер. Үш аналогты және бір цифрлық қосқыш режимі ретінде (Ju. үзіліс режимі арқасында:). Жарық диодтары қосылған PulseWithModulation қолдайтын D9, D10 және D11 -ге. Егер сізге ұнаса, мен эскизді жариялай аламын, бірақ бұл осы екі керемет кодтың жалаң комбинациясы. Міне менің шамның бастапқы коды. Бұл сәл лас көрінеді, себебі бұл менікі. Бағдарламалаудың өте ерте кезеңі … Бірақ егер сіз оны көшірсеңіз, ол жақсы жұмыс істеуі керек. «PotColorMixer», «RGBfadingFunction» және режимді ауыстыру үшін үзіліс режимі сияқты тамаша жұптар бар./* nejo маусым 2008 ж.

Клэй Ширкидің «dimmingLEDs» негізіндегі «Moodlamp» коды

*2008 ж. қыркүйек

  • RGB түсінің өзгеруі мен үзіліс режимінің ауысуы, аналогты жылдам теру бар көңіл-күй лампасының соңғы коды.
  • Күңгірттеу функциясы ақ түс үшін ғана жұмыс істейді

*Неджо қазан, 2008 ж

  • Көңіл күйге арналған дыбысты кеңейту:
  • Кішкене LM368 ампері бар конденсаторлы микрофон, рецификатор және RC төмен өтетін сүзгі.
  • басқа аналогты енгізу арқылы микроб сигналын алу арқылы түсін өзгерту үшін RGBPotMixer функциясын қолданамын.

* * * PWM көмегімен 3 жарықдиодты қызыл, жасыл және көк немесе бір түсті үш диодты сөндіруге арналған код

  • Бағдарлама қызылдан жасылға, жасылдан көкке және көкке қызылға баяу өтеді
  • Отладка коды Arduino 0004 қабылдайды, себебі ол жаңа Serial.begin () стиліндегі функцияларды қолданады.
  • бастапқыда Клей Ширкидің «dimmingLEDs»

*

  • AnalogRead A0 пинінде RGB өшу жылдамдығын өзгерту үшін қосылады
  • H2RGB түсін өзгерту үшін AnalogRead A2 түйреуішінде қосылады

* * */#include // Outputint ledPin = 13; // redPin = 9 отладкаға арналған controlPin; // Қызыл жарықдиодты, 9int greenPin цифрлық түйреуішіне қосылған = 10; // Жасыл жарық диоды, 10int bluePin = 11 цифрлық түйреуішіне қосылған; // Blue LED, цифрлық пин 11int dimredPin = 3 қосылған; // dimgreenPin = 5 транзистор драйверіне қосылған аналогтық күңгірттеу мәні үшін түйреуіштер; int dimbluePin = 6; // Inputint switchPin = 2; // қосқыш D2int істігіне қосылған val = 0; // айнымалы мән мәртебесін оқуState; // айнымалы түймені ұстап тұру күйіintintPressPresses = 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 жіберілетін мәндерді сақтауға арналған айнымалылар; // Бастапқы мәндер - қызыл толы, жасыл және көк түссіз көкVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50 мс (.05 секунд) кідіріс; қысқару жылдамдығы үшін қысқарту k = 0; // жыпылықтау функциясындағы DELEBUD-дегі controlLED мәні = 0; // ҚАТЕСТІРУ есептегіші; егер 1 -ге қойылса, LCD = 0 сериялық нүктесі арқылы мәндерді кері жазады; // СКД есептегіші; егер 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); // Коммутатордың түйреуішін input attachInterrupt (0, isr0, RISING) ретінде орнатыңыз; if (DEBUG) {// Егер біз отладтау үшін түйін мәндерін көргіміз келсе… Serial.begin (9600); // … 0004 стилінде сериялық шығуды орнату}} // Негізгі programvoid циклы () {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:»); 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 мәнін analogWrite (dimredPin, maxVal) күңгірттеу үшін 0..1024 -тен аналогтық диапазон тым көп; analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} жарамсыз Moodlamp () {күту = analogRead (potPin0); // potPin0 мәнін іздеңіз; // егер Pot қосылмаған болса: 255 i += 1 күтіңіз; // Өсу есептегіші // i = i - maxVal; if (i <255) // Бірінші кезең сөнеді {redVal -= 1; // Қызыл төмен жасылVal += 1; // Green up blueVal = 1; // Көк төмен} else if if (i <509) // Екінші фаза өшеді {redVal = 1; // Қызыл төмен жасылVal -= 1; // Жасыл төмен көкVal += 1; // Blue up} else if if (i <763) // Үшінші кезең өшеді {redVal += 1; // Red up greenVal = 1; // Жасыл lo2 blueVal -= 1; // Көк төмен} басқа // Есептегішті қайта орнатыңыз және қайтадан өшуді бастаңыз {i = 1; } // біз «redVal» орнына «255 -redVal» жасаймыз, себебі // светодиодтар Gnd analogWrite орнына +5В қосылады (redPin, 255 - redVal); // Ағымдағы мәндерді жарықдиодты түйреуіштерге 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 = мин (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Ағымдағы мәндерді жарықдиодты түйреуіштерге analogWrite жазыңыз (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / күту / = 4; кешіктіру (күту); // Циклды жалғастырмас бұрын 'күту' миллисекундына кідірту} void RGBPotMixer () {potVal = analogRead (potPin2); // potVal = potVal / 4 кіріс түйреуішіндегі потенциометрдің мәнін оқу; // 0-1023-тен 0-255-ке дейін өзгерту hue_to_rgb (potVal); // potVal-ды реңк ретінде қабылдап, rgb vals-ке түрлендіру // «255-» себебі-бізде жалпы анодты жарық диодтары бар, катодты analogWrite емес (redPin, 255-redVal); // мәндерді жарықдиодты түйреуіштерге analogWrite жазыңыз (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } жарамсыз White () {analogWrite (redPin, maxVal); // мәндерді жарықдиодты түйреуіштерге жазу analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • «H» айнымалы реңк берілген, ол 0-252 аралығында,
  • RGB түс мәнін сәйкесінше орнатыңыз.
  • Максималды максималды қанықтылық пен максималды мәнді (жарықтық) қабылдайды
  • Толық математиканы орындайды, өзгермелі нүкте жоқ.

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

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

Егер сізге ұнаған болса, маған баға беріңіз.

Ұсынылған: