विषयसूची:

ATtiny13 और WS2812 के साथ $1 एलईडी मूड लैंप: 7 कदम
ATtiny13 और WS2812 के साथ $1 एलईडी मूड लैंप: 7 कदम

वीडियो: ATtiny13 और WS2812 के साथ $1 एलईडी मूड लैंप: 7 कदम

वीडियो: ATtiny13 और WS2812 के साथ $1 एलईडी मूड लैंप: 7 कदम
वीडियो: Awesome DIY Led Projects #shorts 2024, नवंबर
Anonim
ATtiny13 और WS2812. के साथ $1 एलईडी मूड लैंप
ATtiny13 और WS2812. के साथ $1 एलईडी मूड लैंप

arduinocelentano द्वारा लेखक द्वारा अधिक का पालन करें:

एकल-बोर्ड कंप्यूटर पर व्यक्तिगत CalDAV सर्वर
एकल-बोर्ड कंप्यूटर पर व्यक्तिगत CalDAV सर्वर
एकल-बोर्ड कंप्यूटर पर व्यक्तिगत CalDAV सर्वर
एकल-बोर्ड कंप्यूटर पर व्यक्तिगत CalDAV सर्वर
एलसीडी आक्रमणकारी: 16x2 एलसीडी कैरेक्टर डिस्प्ले पर गेम जैसा एक अंतरिक्ष आक्रमणकारी
एलसीडी आक्रमणकारी: 16x2 एलसीडी कैरेक्टर डिस्प्ले पर गेम जैसा एक अंतरिक्ष आक्रमणकारी
एलसीडी आक्रमणकारी: 16x2 एलसीडी कैरेक्टर डिस्प्ले पर गेम जैसा एक अंतरिक्ष आक्रमणकारी
एलसीडी आक्रमणकारी: 16x2 एलसीडी कैरेक्टर डिस्प्ले पर गेम जैसा एक अंतरिक्ष आक्रमणकारी
Octarine: WS2812 RGB LED के साथ एक कलर मैचिंग गेम
Octarine: WS2812 RGB LED के साथ एक कलर मैचिंग गेम
Octarine: WS2812 RGB LED के साथ एक कलर मैचिंग गेम
Octarine: WS2812 RGB LED के साथ एक कलर मैचिंग गेम

यह चार मोड के साथ कम लागत वाला मूड लैंप है।

1. इंद्रधनुष की चिंगारी। प्रकाश की एक चिंगारी समय-समय पर ऊपर की ओर बढ़ती है और धीरे-धीरे रंग बदलती है।

2. इंद्रधनुष चमक। एक स्थिर चमक जो धीरे-धीरे रंग बदलती है।

3. मोमबत्ती आग अनुकरण।

4. बंद।

आप शीर्ष पर एक स्पर्श बटन को टैप करके मोड स्विच कर सकते हैं। बिजली बंद करने के बाद वर्तमान मोड EEPROM मेमोरी में सहेजा जाता है।

ATtiny13 कितना छोटा है?

विचार न्यूनतम हार्डवेयर से अधिकतम सुविधाओं को प्राप्त करना था, स्वचालित स्विच या थर्मामीटर से कुछ अधिक जटिल, इस छोटे माइक्रोकंट्रोलर के किनारे के करीब एक परियोजना। आखिरकार, प्रतिबंध आपको रचनात्मक सोचते हैं, है ना? खैर, शुरू में तो ऐसा ही लगा।

इस परियोजना में सबसे चुनौतीपूर्ण था सभी कोड को ATtiny13 में धकेलना। माइक्रोकंट्रोलर में 1K बाइट्स फ्लैश और सिर्फ 64 बाइट्स रैम है। हां, जब मैं "बाइट्स" कहता हूं, तो मेरा मतलब आठ बिट्स से युक्त होता है। आपके सभी स्थानीय चर और कॉल स्टैक के लिए 64 बाइट्स। इसे स्पष्ट करने के लिए, विचार करें कि हमें 8 आरजीबी एलईडी को नियंत्रित करना होगा। उनमें से प्रत्येक को 3 बाइट्स (क्रमशः लाल, हरे और नीले चैनल के लिए एक) द्वारा परिभाषित किया गया है। तो, केवल 8 एल ई डी की स्थिति को स्टोर करने के लिए, हमें 8 संरचनाओं की एक सरणी को लागू करने की आवश्यकता होगी 3 बाइट्स प्रत्येक और इस सरणी की शुरुआत में एक पॉइंटर एक और बाइट लेगा। इस प्रकार, ६४ में से २५ बाइट्स निकल चुके हैं। हमने अभी-अभी ३९% RAM का उपयोग किया है और वास्तव में अभी तक शुरू नहीं किया है। इसके अतिरिक्त, सात बुनियादी इंद्रधनुष रंगों को संग्रहीत करने के लिए, आपको 7×3 = 21 बाइट्स की आवश्यकता होगी, इसलिए 72% RAM समाप्त हो गई है। ठीक है, मूल रंगों के लिए, मैं अतिशयोक्ति करता हूं: हमें रैम में एक ही समय में उन सभी की आवश्यकता नहीं होती है और वे कभी नहीं बदलते हैं, इसलिए उन्हें रैम के बजाय फ्लैश में संग्रहीत करने के लिए एक स्थिर सरणी के रूप में लागू किया जा सकता है। वैसे भी, यह प्रयुक्त हार्डवेयर के बारे में एक समग्र प्रभाव देता है।

समय से पहले अनुकूलन के बारे में नुथ के बयान को याद करते हुए, मैंने तीन लैंप मोड को अलग-अलग प्रोटोटाइप से शुरू किया, यह देखने के लिए कि क्या होता है। मैंने यह सुनिश्चित करने के लिए अलग से उनका परीक्षण किया है कि वे ठीक से काम करते हैं और हर एक मेरे माइक्रोकंट्रोलर में फिट बैठता है। इसे पूरा करने में कुछ शामें लगीं और सब कुछ ठीक हो गया … जब तक मैंने उन्हें स्विच स्टेटमेंट के अंदर एक साथ रखने की कोशिश नहीं की। avr-size उपयोगिता ने 1.5 Kb पाठ अनुभाग आकार (avr-gcc के -s ध्वज के साथ) की सूचना दी। उस समय मेरा मूल इरादा कुछ ATtiny25 को 2Kb फ्लैश के साथ हथियाने का था और यह इस कहानी का सुखद अंत हो सकता था।

लेकिन किसी तरह मुझे लगा कि काफी अनुकूलन के बाद मैं उस भद्दे कोड को 1Kb में सिकोड़ने का प्रबंधन कर सकता हूं। हालाँकि, यह महसूस करने में एक और सप्ताह लग गया कि यह असंभव है और वैसे भी इसे पूरा करने के लिए एक और सप्ताह। मुझे इंद्रधनुष को पांच मूल रंगों में काटना पड़ा (बिना महत्वपूर्ण दृश्य अंतर के)। मैंने केस स्टेटमेंट से छुटकारा पा लिया और बाइनरी कोड आकार को कम करने के लिए if-then-if की एक श्रृंखला का उपयोग किया। फायर एनीमेशन को एक छद्म यादृच्छिक संख्या जनरेटर की आवश्यकता होती है जो काफी भारी है, इसलिए मैंने निरंतर प्रारंभिक मूल्य के साथ एलएफएसआर का एक सरलीकृत संस्करण लागू किया। मुझे पीआरएनजी पूर्ण चक्र की लंबाई की परवाह नहीं है और केवल कोड आकार और "यथार्थवादी आग एनीमेशन" के बीच एक वंश संतुलन की तलाश है। मैंने बहुत से छोटे अनुकूलन भी लागू किए जो मुझे अभी याद नहीं हैं और यहां तक कि आग के अलावा सभी मोड को चिप में फ्लैश करने में कामयाब रहे। जब मेरे विचार समाप्त हो गए, तो मेरा कुल कोड लगभग 1200 बाइट्स था।

मैंने टाइमआउट लिया और AVR कोड ऑप्टिमाइज़िंग के बारे में बहुत कुछ पढ़ रहा था। मैं असेंबली भाषा में सब कुछ छोड़ने और फिर से लिखने के करीब था लेकिन इसे आखिरी मौका दिया। अंतिम अनुकूलन भीड़ के दौरान, मैंने इंद्रधनुष को तीन मूल रंगों में काट दिया है और दूसरों को फ्लाई पर गणना करने के लिए बनाया है, मैंने सब कुछ का निरीक्षण किया और एवीआर अनुकूलन सिफारिशों का पालन किया और अंत में …

avrdude: फ्लैश लिखना (1004 बाइट्स):

लेखन | ############################################# | 100% 0.90s

यह कहने की आवश्यकता नहीं है कि मैंने वर्तमान मोड को स्टोर करने के लिए लगभग सभी RAM और EEPROM के सिर्फ एक बाइट का उपयोग किया है। मेरा मतलब यह नहीं है कि यह एक आदर्श और अंतिम कार्यान्वयन है। यह सिर्फ माइक्रोकंट्रोलर काम करता है और फिट बैठता है। मुझे यकीन है, आप इसे बेहतर कर सकते हैं। मैं हूँ वाक़ई। मैं केवल एक स्पष्ट रूप से अव्यवहारिक समस्या को हल करने का मज़ा साझा करना चाहता हूं जिसे आप शुरुआत में लगभग असंभव मानते हैं। "इस प्रकार, हैकिंग का अर्थ है जो संभव है उसकी सीमाओं की खोज करना …" --रिचर्ड स्टॉलमैन।

आपूर्ति:

1x ATtiny13 MCU (SOP-8 पैकेज में MCU के लिए $0.28 = $0.24 और DIP8 एडेप्टर के लिए $0.04)

8x WS2812 आरजीबी एलईडी (मैं एक बोर्ड या एलईडी पट्टी का एक टुकड़ा सुझाता हूं) ($ 0.42)

1x TTP223 टच बटन ($0.10)

1x माइक्रो 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 टूलचेन और प्रोजेक्ट स्रोत प्राप्त कर लेते हैं, तो अपना टर्मिनल चलाएं और निम्न कोड टाइप करें:

सीडी पथ/से/परियोजना

बनाना

चरण 2: माइक्रोकंट्रोलर प्रोग्रामिंग

माइक्रोकंट्रोलर प्रोग्रामिंग
माइक्रोकंट्रोलर प्रोग्रामिंग
माइक्रोकंट्रोलर प्रोग्रामिंग
माइक्रोकंट्रोलर प्रोग्रामिंग
माइक्रोकंट्रोलर प्रोग्रामिंग
माइक्रोकंट्रोलर प्रोग्रामिंग

यदि आपके पास किसी प्रकार का USBASP प्रोग्रामर है, तो बस इसे इसके पिनआउट के अनुसार Attiny से कनेक्ट करें। आमतौर पर यह ऐसा दिखाई देगा लेकिन मैं दृढ़ता से अनुशंसा करता हूं कि आप अपने वास्तविक पिनआउट की जांच करें!

वैकल्पिक रूप से, आप एक प्रोग्रामर के रूप में एक Arduino बोर्ड का उपयोग कर सकते हैं। Arduino IDE खोलें और "फ़ाइल → उदाहरण" मेनू में Arduino ISP उदाहरण खोजें। स्केच अपलोड करने के बाद, आपका Arduino बोर्ड एक प्रोग्रामर के रूप में कार्य करता है। स्केच कोड में टिप्पणियाँ आपको पिनआउट करने के लिए एक सुराग देंगी।

अब भागो

फ्लैश बनाओ

एमसीयू फ्लैश करने के लिए और

फ्यूज बनाओ

फ्यूज बिट्स सेट करने के लिए।

सिफारिश की: