Мазмуну:
Video: $ 1 LED маанай чырагы ATtiny13 жана WS2812 менен: 7 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
By arduinocelentanoFollow More by Author:
Бул төрт режими бар арзан маанай чырагы.
1. Радуга учкуну. Жарыктын учкуну убакыттын өтүшү менен өйдө карай жылып, бара -бара түсүн өзгөртөт.
2. Радуга жарыгы. Акырындык менен түсүн өзгөртө турган туруктуу жаркыроо.
3. Шамдын отун симуляциялоо.
4. Өчүк.
Сиз үстүндөгү сенсордук баскычты таптоо менен режимдерин алмаштыра аласыз. Учурдагы режим өчүрүлгөндөн кийин EEPROM эс тутумунда сакталат.
ATtiny13 канчалык кичинекей?
Идея минималдуу жабдуулардан максималдуу функцияларды алуу, автоматташтырылган которгучка же термометрге караганда татаал нерсе, бул кичинекей микроконтроллердин четине жакын долбоор. Кантсе да, чектөөлөр сизди чыгармачыл ойлонууга мажбурлайт, туурабы? Ооба, башында окшош экен.
Бул долбоордун эң татаалы бардык кодду ATtiny13 ичине салуу болчу. Микроконтроллерде 1К байт флэш жана 64 байт RAM бар. Ооба, мен "байт" дегенде сегиз биттен тургандарды айткым келет. Бардык жергиликтүү өзгөрмөлөрүңүз үчүн 64 байт жана чалуу стеги. Түшүнүктүү болушу үчүн, биз 8 RGB LEDди көзөмөлдөшүбүз керек деп эсептейбиз. Алардын ар бири 3 байт менен аныкталат (бирөө кызыл, жашыл жана көк канал үчүн). Ошентип, 8 LEDдин абалын сактоо үчүн, биз 8 структурадан турган массивди ишке ашыруубуз керек, ар бири 3 байт жана бул массивдин башына көрсөткүч дагы бир байтты талап кылат. Ошентип, 64 байттын 25и сыртта. Биз RAMдин 39% ын гана колдонгонбуз жана азырынча баштай элекпиз. Кошумча катары, жети негизги асан -үсөн түстөрүн сактоо үчүн сизге 7 × 3 = 21 байт керек болот, андыктан RAMдин 72% ы өчүп калган. Негизги түстөргө келсек, мен аша чаап айтып жатам: алардын баарына RAMдин бир убакта кереги жок жана алар эч качан өзгөрбөйт, андыктан алар RAMдын ордуна флэште сакталышы үчүн туруктуу массив катары ишке ашырылышы мүмкүн. Кандай болбосун, бул колдонулган жабдыктар жөнүндө жалпы таасир берет.
Кнуттун мөөнөтүнөн мурда оптималдаштыруу жөнүндөгү билдирүүсүн эстеп, мен эмне болорун көрүү үчүн үч лампа режимин прототиптөөдөн баштадым. Мен алардын өзүнчө текшерип көрдүм, алар туура иштеши керек жана ар бири менин микроконтроллериме туура келет. Аны ишке ашыруу үчүн бир нече кечтер өттү жана баары жакшы өттү … мен аларды которуу билдирүүсүнүн ичине чогултканга чейин. avr-size утилитасы 1,5 Кб текст бөлүмүнүн көлөмүн билдирди (-r желеги менен avr-gcc). Ошол учурда менин түпкү ниетим 2Kb флэш менен ATtiny25ти тартып алуу болгон жана бул окуянын бактылуу аягы болмок.
Бирок мен кандайдыр бир жол менен бир топ оптималдаштыруудан кийин, бул жаман кодду 1Кбга чейин кыскарта алаарымды сездим. Бирок, бул мүмкүн эместигин түшүнүү үчүн дагы бир жума жана аны аткарууга дагы бир жума кетти. Мен асан -үсөндү беш негизги түскө чейин кесишим керек болчу (көрүнөө айырмачылыгы жок). Мен кейстердин билдирүүлөрүнөн кутулдум жана экилик коддун өлчөмүн азайтуу үчүн if-then-if чынжырын колдондум. Өрт анимациясына жасалма сандык генератор керек, ал абдан чоң, ошондуктан мен LFSRдин жөнөкөйлөтүлгөн версиясын дайыма баштапкы мааниси менен ишке ашырдым. Мага PRNGтин толук циклинин узактыгы жана коддун өлчөмү менен "реалдуу өрт анимациясынын" ортосундагы тең салмактуулукту издөө маанилүү эмес. Мен дагы азыр эстей албаган көптөгөн майда оптимизацияларды ишке ашырдым, ал тургай оттон башка бардык режимдерди чипке жаркырата алдым. Идеялар түгөнгөндө, менин жалпы кодум болжол менен 1200 байт болчу.
Мен күтүү убактысын алдым жана AVR кодун оптималдаштыруу жөнүндө көп окудум. Мен баарын таштап, ассемблер тилинде кайра жазууга жакын калдым, бирок акыркы мүмкүнчүлүк бердим. Акыркы оптималдаштыруу учурунда мен асан -үсөндү үч негизги түскө бөлдүм жана башкаларды учууда эсептеп чыктым, баарын карап чыктым жана AVR оптималдаштыруу сунуштарын аткардым жана акыры …
avrdude: жазуу флеши (1004 байт):
Жазуу | #################################################### | 100% 0.90s
Мен учурдагы режимди сактоо үчүн дээрлик бардык RAM жана EEPROMдун бир байтын колдондум деп айтуунун кажети жок. Бул идеалдуу жана акыркы ишке ашыруу дегенди билдирбейт. Бул жөн эле иштейт жана микроконтроллерге туура келет. Мен ишенем, сен муну жакшыраак кыла аласың. Мен чын эле. Мен жөн эле башында мүмкүн эмес деп эсептеген, көрүнбөгөн проблеманы чечүүнүн кызыктуусу менен бөлүшкүм келет. "Ошентип, хакерлик мүмкүн болгон нерселердин чектерин изилдөө дегенди билдирет …" -Ричард Сталлман.
Берилиштер:
1x ATtiny13 MCU (SOP-8 пакетиндеги MCU үчүн $ 0.28 = $ 0.24 жана DIP8 адаптери үчүн $ 0.04)
8x WS2812 RGB светодиоддору (мен тактай же LED тилкесинин бир бөлүгүн сунуштайм) ($ 0.42)
1x TTP223 Touch баскычы ($ 0.10)
1x Micro USB DIP адаптерине ($ 0.14)
1x 10kΩ каршылыгы (<$ 0.01)
1x 100nF керамикалык конденсатор (<$ 0.01)
1x 10-47µF электролитикалык конденсатор (<$ 0.01)
Бардыгы <$ 0.97
1 -кадам: Программаны орнотуу
Сизге баштапкы кодду түзүү үчүн avr-gcc инструменти жана микроконтроллердин ROMун жүктөө үчүн avrdude утилита керек болот. Орнотуу процесси абдан жөнөкөй жана түшүнүктүү, бирок бул сиздин операциялык тутумуңузга жараша болот. Эгерде сиз GNU/Linuxтун кандайдыр бир түрүн колдонсоңуз, анда сиздин репозиторий дарагыңызда туура пакеттер бардыр. Бул долбоордун булак кодун бул жерден көчүрүп алса болот:
github.com/arduinocelentano/t13_ws2812_lamp
Ошондой эле сизге light_ws2812 китепканасы керек болот:
github.com/cpldcpu/light_ws2812
Сизде avr-gcc инструменти жана долбоордун булактары болгондон кийин, терминалыңызды иштетип, төмөнкү кодду териңиз:
cd path/to/project
жасоо
2 -кадам: Микроконтроллерди программалоо
Эгерде сизде кандайдыр бир USBASP программисти болсо, аны анын чокусуна ылайык Аттиниге туташтырыңыз. Адатта, мындай көрүнөт, бирок мен сиздин чыныгы пинтуңузду текшерүүнү сунуштайм!
Же болбосо, сиз Arduino тактасын программист катары колдоно аласыз. Arduino IDE ачыңыз жана "Файл → Мисалдар" менюсунан Arduino ISP мисалын табыңыз. Эскизди жүктөгөндөн кийин, сиздин Arduino тактаңыз программист катары иштейт. Эскиз кодундагы комментарийлер сизге пинтуту үчүн кеңеш берет.
Эми чуркагыла
жарк этүү
MCUду күйгүзүү үчүн жана
эритме жасоо
сактандыргычтарды орнотуу.
Сунушталууда:
3D Басылган LED маанай чырагы: 15 кадам (Сүрөттөр менен)
3D Басылган LED маанай чырагы: Мен ар дайым лампаларга болгон кызыгуумду көргөм, андыктан 3D Басып чыгаруу менен Arduino диоддорун айкалыштыруу жөндөмүнө ээ болуум керек болчу. сиз бере турган тажрыйбалар
RGB Led менен маанай чырагы: 4 кадам
RGB Led менен маанай чырагы: Аракечте Uno менен иштөө керек. Негизги варианттар комо секиргичтери, RGB же Neopixel, Led жана Cémo de desee hacer. Бул RGB жеткиликтүү болгон комуздун жардамы менен
Маанай спикери- Абанын температурасына негизделген маанай музыкасы үчүн күчтүү динамик: 9 кадам
Маанай спикери- Абанын температурасына негизделген маанай музыкасы үчүн ойнотула турган күчтүү спикер: Саламатсызбы! MCT Howest Kortrijk мектебиндеги менин долбоорум үчүн, маанай спикери кылдым, бул акылдуу Bluetooth спикери, ар кандай сенсорлор, LCD жана WS2812b спикер температурага негизделген фондук музыканы ойнойт, бирок
Төмөн Poly LED маанай чырагы: 9 кадам (Сүрөттөр менен)
Төмөн Poly LED маанай чырагы: Ар кандай столго, текчеге же столго сонун кошумча! Базасында жайгашкан дискреттик баскычы ар кандай LED жарык үлгүлөрү аркылуу айланып берет. Лампаңызды окууга, эс алууга, ал тургай кечеге колдонууну кааласаңыз да мааниге ээ эмес
LED маанай чырагы: 9 кадам (сүрөттөр менен)
LED маанай чырагы: Мен жакында эле Грег Дэвиллдин LED кубун көрдүм. Бул чоң чыгарма. Андан шыктануу менен, мен дагы ушундай нерсе жасагым келди. Бирок бул менин лигамдан алыс болчу. Мен бир убакта кадам таштоону чечтим жана бир аз кичине кылдым