एचपी कलर कारतूस को हैक करना: इसे एक हैंडहेल्ड प्रिंटर में बदलना

छवि

परिचय


कभी युवा, जब हमारे पास पुराना डेस्कजेट था, मुझे इंकजेट प्रिंटर कारतूस में दिलचस्पी थी। ये कारतूस बहुत दिलचस्प लगे और जैसे ही वे स्याही से बाहर भागे, मैं तुरंत उन्हें अपने पास ले गया। उस समय, मैं उनके साथ कुछ नहीं कर सकता था, सिवाय असंतुष्ट और मेरे हाथों को गंदे करने के ... हालांकि मुझे पता था कि अंदर किसी तरह का जटिल इलेक्ट्रॉनिक्स था, लेकिन जब संपर्कों ने बैटरी को छुआ, तो कुछ भी दिलचस्प नहीं हुआ, और अधिक के लिए इलेक्ट्रॉनिक्स का मेरा ज्ञान पर्याप्त नहीं है।

थोड़ी देर बाद, जब मैं एक छात्र बन गया, तो मैं एक पुराना इंकजेट प्रिंटर प्राप्त करने में कामयाब रहा। उस समय, मैंने खुद एक लेजर प्रिंटर का उपयोग किया था, इसलिए मुझे इसमें बहुत दिलचस्पी नहीं थी, लेकिन कारतूस की जांच करना और उन्हें इंजीनियर को उलटने की कोशिश करना दिलचस्प था। मैंने वास्तव में इन कारतूसों के प्रबंधन के बारे में एक लेख लिखा था , और हालांकि उन्होंने काफी अच्छी तरह से काम किया था, कमियां भी थीं: मैं अभी भी नलिका के सटीक क्रम का पता नहीं लगा सका था, कारतूस केवल मोनोक्रोम (एक मैजेंटा के साथ मुद्रित), और काफी पुराना था, और इसलिए संकल्प बहुत कम निकला।

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

मैं आखिरकार त्रिकोणीय रंग के कारतूस पर नियंत्रण पाने और पूरे रंग में प्रिंट करने में कामयाब रहा!

यदि आप प्रिंटर कार्ट्रिज के पूर्ण नियंत्रण के लिए प्रिंटर के ढेर से मेरे साथ जाना चाहते हैं, तो मैंने इसके बारे में हैकाडे सुपरकॉन 2018 में एक रिपोर्ट की। भाषण की वीडियो रिकॉर्डिंग नीचे जोड़ा गया है। यदि आप रिवर्स इंजीनियरिंग के विवरण में रुचि रखते हैं, तो इसे देखें। लेख में, मैं अपने द्वारा बनाए गए इलेक्ट्रॉनिक्स के तकनीकी विवरणों के साथ-साथ कारतूस के प्रबंधन के विशिष्ट विवरणों के बारे में बात करूंगा, ताकि आप खुद ESP32 या किसी अन्य माइक्रोकंट्रोलर का उपयोग करके Nyancat को आकर्षित कर सकें।


प्रस्तुति अनुलग्नक


यदि आपने वीडियो नहीं देखा है, तो यहां एक संक्षिप्त सारांश है: मैंने HP1112 प्रिंटर के लिए रंगीन कारतूस को अलग कर लिया (चीन में यह एक HP 803 कारतूस है, लेकिन लेख संख्या क्षेत्र पर निर्भर करता है), क्रिस्टल की तस्वीरें लीं और यह पता लगाने की कोशिश की कि यह कैसे काम करता है। जब मुझे बहुत कुछ पता नहीं चल पा रहा था, तो मैंने प्रिंटर और कारतूस के बीच संचरित संकेतों को पढ़ना शुरू किया, यह पता लगाया कि मेरे आदेशों का पालन करने के लिए कारतूस के लिए भेजने के लिए कौन से संकेत हैं, और फिर Nyancat और अन्य मज़ेदार चीजों को मुद्रित किया।

अध्ययन का संकेत समय हिस्सा मुख्य रूप से परीक्षण और त्रुटि प्रक्रिया था। मैं केवल अनुमान लगा सकता हूं कि संकेतों के बीच किस तरह का कनेक्शन मौजूद है, इसलिए किनारों के बीच के क्रम का पता लगाना काफी मुश्किल था और किन संकेतों में देरी हो सकती है और जिन्हें समय पर प्रेषित किया जाना चाहिए। मैंने इस जानकारी के लिए एक सिलिकॉन कारतूस का अध्ययन किया। यह पता चला कि मैं वास्तव में माइक्रोस्कोप के नीचे कारतूस डालकर इसे प्राप्त करने में कामयाब रहा, लेकिन जैसा कि मैंने उम्मीद की थी, बिल्कुल नहीं।

सुपरकॉन में बोलने से पहले, मैंने रंगीन कारतूस का अध्ययन किया क्योंकि वे मुझे सबसे दिलचस्प लगते थे। सुपरकॉन से लौटने के बाद, मैं इंजीनियर को काले कारतूस को उल्टा करना चाहता था: इसका प्रिंट सिर रंग कारतूस से बड़ा है, इसलिए मैं एक बार में अधिक प्रिंट कर सकता था। यह संभव नहीं है कि इस कारतूस के लिए समर्थन जोड़ना मुश्किल है: पिन की व्यवस्था समान लगती है, और मुझे पता था कि प्रोटोकॉल सबसे अधिक समान होगा, क्योंकि मैंने पहले ही काले कारतूस को अपने हार्डवेयर से जोड़ने की कोशिश की थी। भले ही सॉफ़्टवेयर रंगीन छवियों को प्रसारित कर रहा था, फिर भी यह कुछ प्रिंट करने में कामयाब रहा।

यहां मैंने रंगीन कारतूस के साथ क्या किया है: मैंने इसे माइक्रोस्कोप के नीचे चिपका दिया, संपर्कों से सिलिकॉन कोटिंग को हटा दिया, और कई शॉट्स को एक बड़ी छवि में संयोजित करने के लिए तैयार किया। हालांकि, काला कारतूस रंग एक से अलग था जिसमें नलिका के साथ इसकी धातु की प्लेट पर अधिक शिलालेख थे: सिलिकॉन कोटिंग के तहत सभी संपर्कों के लिए छिपे हुए संकेत नाम थे!

छवि

(वैसे, यदि आप सभी 40-मेगापिक्सेल भव्यता में पूर्ण माइक्रोस्कोप चित्रों को देखना चाहते हैं, तो यहां रंग कारतूस की ढाल और सिलिकॉन है ! नलिका की जटिलता और काले कारतूस की क्रिस्टल छवि की प्रशंसा करें!)

हालांकि यह बहुत ज्यादा नहीं लग सकता है, बिना मुद्रित मुद्रित सर्किट बोर्डों के समुद्र में, संदर्भ सामग्री और लेखों के बिना चिप्स, जो कहीं भी नेतृत्व नहीं करते हैं, कई संकेतों के नाम एक वास्तविक खोज हैं। कूबड़ पर, मैंने Google पेटेंट में "Hewlett Packard" नाम के साथ व्यक्तिगत संकेत नामों को हटा दिया और कारतूसों में उपयोग की जाने वाली तकनीकों और संकेतों का एक स्पष्ट विवरण के साथ एक विशिष्ट पेटेंट (और दूसरा, पहले द्वारा संदर्भित पुराने ) का पता लगाया। वह मुझे इतना समय बचा लेगा जब मैं कारतूस के समय से जूझता था ... ओह ठीक है। मैं ईमानदारी से कह सकता हूं कि यह संकेत खोजना बहुत मुश्किल था: सिग्नल न केवल सिलिकॉन फिल्म के साथ कवर किए गए थे, बल्कि छोटे भी निकले थे: अक्षर आकार में केवल 30 माइक्रोमीटर हैं, और यह एक मानव बाल की मोटाई से कम है।

पेटेंट कारतूस के आंतरिक संचालन का वर्णन करता है और पढ़ने के लायक है (यदि आप वहां इस्तेमाल किए गए कानूनी शब्दजाल का पता लगा सकते हैं) सिर्फ यह समझने के लिए कि एचपी कभी-कभी सभी नलिका को नियंत्रित करने के लिए कितना अजीब तर्क का उपयोग करता है। पेटेंट स्वयं उपयोगी है, लेकिन कारतूस को नियंत्रित करने के लिए पर्याप्त नहीं है; कम से कम रिवर्स इंजीनियरिंग कार्य जो मैंने किया था, अब भी आवश्यक होगा, भले ही मेरे पास यह पेटेंट हो।

यहां और नीचे मैं पेटेंट में उपयोग किए जाने वाले संकेतों और संपर्कों के नामों का उपयोग करूंगा। कृपया ध्यान दें कि कोड में मेरे स्वयं के संकेतों के नाम अभी भी मिल सकते हैं; मैं प्रलेखन के साथ एक अनुवाद तालिका भी शामिल करूंगा।

डेटा एन्कोडिंग



तो, यहाँ अध्ययन के तहत कारतूस की तरह लग रहा है। सतही नज़र में, ये काफी सरल उपकरण हैं: अंदर, वे लगभग पूरी तरह से स्याही से लथपथ स्पंज से मिलकर होते हैं। प्रिंटर के साथ आए कारतूस के मामले में, बहुत कम स्याही है: कारतूस में केवल आधा स्थान स्पंज द्वारा कब्जा कर लिया गया है, और स्वयं स्पंज भी आधा खाली हैं:


साइड में 16 संपर्क नीचे की तरफ से होते हैं जहां प्रिंट हेड स्थित है। जैसा कि आप माइक्रोस्कोप में देख सकते हैं, काले कारतूस के प्रिंट सिर में लगभग 336 नलिका और रंग कारतूस में 612 नलिकाएं हैं। नोजल को प्रिंट सिर पर ऊर्ध्वाधर पंक्तियों में व्यवस्थित किया जाता है, और प्रत्येक नोजल को इलेक्ट्रॉनिक रूप से नियंत्रित किया जा सकता है, ताकि यह स्याही में एक छोटे से स्याही की बूंद को शूट करके प्रिंटर में डाला जाए। सिर को लंबवत घुमाकर, प्रिंटर एक "पट्टी" या किसी अन्य छवि को प्रिंट कर सकता है; एक काले कारतूस के मामले में, यह पट्टी एक रंग कारतूस के लिए लगभग 15 मिमी लंबी और 8 मिमी है।

जाहिर है, संपर्कों का उपयोग करके नलिका को नियंत्रित किया जा सकता है। छोटे प्रिंट हेड शिलालेखों के अनुसार, संपर्कों में निम्नलिखित संकेत होते हैं:


चूंकि केवल 16 संपर्क हैं, सभी नलिका को नियंत्रित करने के लिए किसी प्रकार की बहुसंकेतन योजना होनी चाहिए। पेटेंट बताता है कि यह कैसे काम करता है: नोजल नियंत्रण को 14 अलग-अलग समूहों में विभाजित किया गया है। इन समूहों को क्रमिक रूप से ट्रिगर किया जाता है: पहले उन्हें अपना डेटा प्राप्त होता है और समूह 1 को ट्रिगर किया जाता है, फिर समूह 2, और इसी तरह। प्रत्येक समूह अधिकतम 24 नलिका को नियंत्रित करता है, और उनके लिए डेटा तीन डेटा बसों के माध्यम से प्रेषित होता है। रंग कारतूस के मामले में, तीन बसों में डेटा रंगों से मेल खाता है: D1 पीला डेटा है, D2 मैजेंटा डेटा है, और डी 3 सियान नोजल को नियंत्रित करता है।

पेटेंट में, एक उदाहरण के रूप में एक डेटा बस का उपयोग करके विस्तार से वर्णन किया गया है। पेटेंट का यह आंकड़ा उपयोग किए गए संकेतों को दर्शाता है:


डेटा बस में आठ बाइट्स, 0-4 शामिल हैं। यहां तक ​​कि बाइट्स को DCLK के अनुगामी किनारे द्वारा नियंत्रित किया जाता है, विषम बाइट्स को S1-S4 के अनुगामी किनारों द्वारा नियंत्रित किया जाता है। नोजल जिनके डेटा को पहले चार बाइट्स द्वारा नियंत्रित किया जाता है, उन्हें पावर बस F3 के माध्यम से बिजली की आपूर्ति करके चालू किया जा सकता है; अंतिम चार बिट्स के साथ जुड़े नलिका को F5 बस द्वारा चालू किया जाता है।

मुझे नहीं पता कि एचपी ने नोजल डेटा का प्रबंधन करने के लिए इस तरह के एक जटिल सर्किट का उपयोग करने का फैसला क्यों किया। हम कह सकते हैं कि कुछ स्पष्ट, एक बदलाव रजिस्टर की तरह, यहाँ सामान्य रूप से काम किया होता। मैं समझता हूं कि एचपी अपने पेटेंट का इस्तेमाल कारतूस रिफिलिंग कंपनियों के खिलाफ एक हथियार के रूप में करता है; शायद किसी ने पहले से ही एक सरल समाधान का पेटेंट कराया है, और उन्हें अद्वितीय होने के लिए इस अधिक जटिल समाधान के साथ आना पड़ा।

इस ग्राफ पर, मेरे द्वारा एक तर्क विश्लेषक पर बनाया गया, पेटेंट में वर्णित संकेतों को खोजना मुश्किल नहीं है:


नोजल को नियंत्रित करने के अलावा, कारतूस को नोजल के अगले समूह पर जाने के लिए या पहले समूह में रीसेट करने और वापस जाने के लिए एक सिग्नल (सीएसक्यूएनसी) की भी आवश्यकता होती है। इसे लॉजिकल एनालाइज़र से इमेज में देखा जा सकता है: यह 14 के पेनल्टी और अंतिम समूहों को दिखाता है, और csync सिग्नल का अंतिम समूह में एक पहचानने योग्य आकार है; वह कारतूस का "रीसेट" करता है ताकि पहले समूह को अगला डेटा प्राप्त हो। इस संकेत का उपयोग रिवर्स ऑर्डर में नलिका के समूहों को बायपास करने के लिए भी किया जा सकता है; यह तब उपयोगी होता है जब प्रिंट हेड बाएं से दाएं और बाएं से दाएं चलता है। यद्यपि दूसरा पेटेंट बताता है कि यह कैसे काम करता है, मैंने बस अगले समूह में संक्रमण को सांकेतिक शब्दों में बदलना और csync लाइन द्वारा मेरी छवियों में दिखाए गए संकेतों को रीसेट करने का निर्णय लिया।

ध्यान दें कि यह सब काफी तेज गति से होता है; DCLK सिग्नल के दो प्रमुख किनारों के बीच की देरी लगभग 0.4 μs है, और समूहों के बीच की दूरी लगभग 4 μs है।

अब हम जानते हैं कि 14 बाइट्स की इन तीन डेटा बसों में प्रत्येक में एक नोजल के लिए एक ऑपरेशन कमांड होता है। यदि बिट 0 है, तो संबंधित नोजल को ट्रिगर किया जाता है; यदि 1 के बराबर है, तो नोजल काम नहीं करता है। जो हम नहीं जानते वह बिट्स और नोजल के बीच का पत्राचार है। यदि आप प्रस्तुति देखते थे, तो आप जानते हैं कि मैं इसे कैसे पता लगाने में कामयाब रहा: मैंने एक काम करने वाले प्रिंटर पर एक ज्ञात पैटर्न मुद्रित किया, एक लॉजिक एनालाइज़र का उपयोग करके संकेतों को इंटरसेप्ट किया, और फिर मुझे पता चला कि संकेतों का क्रम क्या होना चाहिए ताकि संकेतों को मूल छवि में वापस आ सके।

दुर्भाग्य से, बिट्स से नलिका का मिलान काफी स्थिर लगता है, लेकिन पूरी तरह से तार्किक नहीं है। ऐसा लगता है कि यह मुख्य रूप से पर्याप्त दूरी पर एक साथ नलिका को शारीरिक रूप से स्थानांतरित करने की आवश्यकता के कारण है (स्याही टैंक में एक स्थानीय वैक्यूम की अधिकता या घटना से बचने के लिए)। इसके अलावा, मैंने यह भी पाया कि एक कारतूस में राउटिंग सिग्नलों की आसानी बिट और नोजल के मेल को काफी भ्रामक बना सकती है। मेरे फर्मवेयर में, मैंने बस लुकअप टेबल के एक सेट के रूप में इस मैपिंग को लागू किया।

इलेक्ट्रानिक्स


अब जब हम जानते हैं कि सिग्नल कैसे काम करते हैं, तो हम प्रिंटर कार्ट्रिज को एक साधारण माइक्रोकंट्रोलर से नियंत्रित कर सकते हैं? खैर, अभी नहीं। प्रिंटर कारतूस सरल 5 V या 3.3 V तर्क का उपयोग नहीं करता है। डेटा बसों को 16 V या 9 V बसों द्वारा नियंत्रित किया जाता है। पावर बसों को भी 16 V द्वारा नियंत्रित किया जाता है और वास्तव में, ट्रिगर नलिका की संख्या के आधार पर, उन्हें बिजली आपूर्ति चालू तक खींचा जा सकता है। । हमें एक स्तर रूपांतरण करने की आवश्यकता है।

स्तरीय कनवर्टर के रूप में, मैंने MC14504 को चुना। यह एक पुरानी यूनिडायरेक्शनल हेक्साडेसिमल स्तर रूपांतरण चिप है जो वोल्टेज को 18 V तक बढ़ा सकती है। हालांकि यह चिप भी काम करती है, मैं पीछे देखता हूं, मैं कह सकता हूं कि यह सबसे अच्छा विकल्प नहीं था: यह केवल कुछ एमए का उत्पादन कर सकता है और इसके बजाय बड़े प्रसार में देरी हो सकती है। मुझे लगता है कि यह कारतूस और चिप आउटपुट पर लागू लोड के आधार पर कुछ आउटपुट संकेतों की देरी प्रदान करता है। मेरे पास कम से कम एक कारतूस है जिसे काम करने के लिए संकेतों के लिए थोड़ा समय समायोजन की आवश्यकता है, और मुझे लगता है कि यही कारण है। दुर्भाग्य से, तैयार 16 वी स्तर के कन्वर्टर्स आज इतने सुलभ नहीं हैं, इसलिए मैं इसे कुछ बेहतर के साथ बदल नहीं सकता हूं। हालांकि, थोड़ा समायोजन के साथ यह क्लासिक चिप काफी पर्याप्त है।

पावर बसों के साथ, चीजें थोड़ी अधिक जटिल हैं। इस तथ्य के अलावा कि ये संपर्क वर्तमान का एक बड़ा हिस्सा लेते हैं, वे सीधे शामिल नलिका के प्रतिरोधों से भी जुड़े हुए हैं: यदि किसी कारण से बिजली की आपूर्ति लंबे समय तक की जाती है, तो ये छोटे प्रतिरोध बाहर जल जाएंगे और नोजल पूरी तरह से विफल हो जाएगा। इसके अलावा, यह "बहुत लंबा" प्राप्त करने के लिए काफी सरल है: यह केवल कुछ माइक्रोसेकंड के लिए नलिका चालू करने के लिए पर्याप्त है, और यदि आप केवल एक मिलीसेकंड के लिए बिजली की आपूर्ति करते हैं, तो वे बस वाष्पित हो जाएंगे, पूरी तरह से नोजल को तोड़ देंगे। सॉफ़्टवेयर बग या खराब कनेक्शन के कारण ऐसा होने से रोकने के लिए, मैंने हार्डवेयर तर्क जोड़ा है जो यह सुनिश्चित करता है कि पल्स 10 μs के एक छोटे से कई तक सीमित है।


पहले प्रोटोटाइप में, मैंने कई स्तर के कन्वर्टर्स को छोड़ दिया और यह नहीं पता था कि सॉफ्टवेयर कैसे काम करेगा, इसलिए मैंने एक वास्तविक एकल-चक्र मल्टीविब्रेटर के साथ समस्या को हल किया। इस सर्किट में, दो मल्टीवीब्रेटर का उपयोग 74HC123 में किया जाता है, जिससे दालों का निर्माण होता है, जिसकी चौड़ाई आरसीईटी पिन से जुड़े आर / सी के संयोजन से निर्धारित होती है। परिणामस्वरूप पल्स केवल एक बढ़ते इनपुट सिग्नल के साथ उत्पन्न होता है, इसलिए लगातार उच्च सिग्नल एक सटीक परिभाषित के अलावा और कुछ भी नहीं पैदा करेगा, लेकिन स्पूर्स आउटपुट पल्स। उसके बाद, MC16504 चैनल को वोल्टेज को बढ़ाने के लिए एक स्तर कनवर्टर के रूप में +16 V पर उपयोग किया जाता है, और पी-चैनल एमओएस ट्रांजिस्टर आवश्यक वर्तमान प्रदान करता है।


दूसरे मुद्रित सर्किट बोर्ड पर, मुझे एहसास हुआ कि अगर मैं बिजली संपर्कों के तर्क को बदल देता हूं ताकि वे स्तर शिफ्ट सर्किट के दो चैनलों का उपयोग न करें, तो केवल दो MC14504 चिप्स पर्याप्त होंगे। अब पल्स की चौड़ाई पर मेरे पास पर्याप्त प्रोग्रामेटिक नियंत्रण है, लेकिन मैं अभी भी लगातार उच्च इनपुट संपर्क सिग्नल के खिलाफ सुरक्षा रखना चाहता हूं। यहाँ वह चित्र है जो मैं आया था। यह इस तरह से काम करता है: सामान्य स्थिति में कम सिग्नल PWRB_IN के साथ, कैपेसिटर C28 खाली है, क्योंकि इसमें कोई भी वोल्टेज R20 और R21 के साथ धीरे-धीरे बहता है: ट्रांजिस्टर Q4 का गेट उच्च है, और PWRBBOUT को 16 V पावर बस से डिस्कनेक्ट किया गया है। जैसे ही उच्च PWRB_IN दिखाई देता है। संकेत, क्यू 6 ग्राउंड सी 28 का एक छोर; चूँकि इसमें वोल्टेज 0 V है, शुरू में यह इसके दूसरे पक्ष को भी खींचता है, जो गेट Q4 से जुड़ा है। Q4 शटर को नीचे खींचना प्रवाहकीय बनाता है, और इससे करंट +16 V से PWRB_OUT तक प्रवाहित होता है। सामान्य अवस्था में, PWRB_IN कम अवस्था में वापस पर्याप्त रूप से स्विच करता है, गेट Q4 को बंद करके करंट को बाधित करता है। हालाँकि, PWRB_IN कम है, C28 धीरे-धीरे चार्ज हो रहा है: एक पक्ष Q6 पर आधारित है, और दूसरा R21 और R31 के माध्यम से 16 V से जुड़ा है। जब संधारित्र को पर्याप्त रूप से चार्ज किया जाता है, तो Q4 "गेट" पर अपने उच्च स्तर को देखता है और PWRB_OUT में वर्तमान को बंद कर देता है, भले ही PWRB_IN अभी भी उच्च सिग्नल स्थिति में है। यह तंत्र सुनिश्चित करता है कि PWRB_OUT सीमित समय के लिए ही बिजली की आपूर्ति करता है।

सर्किट में 16 वी पावर बस (आर 31) के साथ श्रृंखला में जुड़ा एक छोटा अवरोधक है, साथ ही आउटपुट सिग्नल (सी 15) के समानांतर एक छोटा संधारित्र जुड़ा हुआ है। उन्हें पावर सिग्नल की "वोल्टेज को राहत देने" की आवश्यकता होती है: उनके बिना, क्यू 4 पर एक तेज और विद्युत चुम्बकीय हस्तक्षेप का एक गुच्छा प्रेरित करेगा, कारतूस को प्रेषित संकेतों को विकृत कर देगा।

इस तर्क के अलावा, और कुछ नहीं चाहिए। स्पष्ट रूप से, +9 V और +16 V स्तर के कन्वर्टर्स की आवश्यकता है। +9 V बिजली की आपूर्ति काफी मामूली होनी चाहिए: मैंने ध्यान नहीं दिया कि ये बसें आमतौर पर कुछ mA से अधिक का उपयोग करती थीं। चूंकि यह नोजल प्रतिरोधों को खिलाता है, इसलिए 16 वी स्रोत को थोड़ा मजबूत होना चाहिए: मैंने इसे बनाया ताकि खान कम से कम 400 एमए लगातार प्रदान कर सके, और साथ ही काफी डिकॉप्लिंग कैपेसिटेंस भी जोड़ा।

अंत में, छवि प्रसंस्करण और सिग्नल पीढ़ी का सबसे महत्वपूर्ण बोझ माइक्रोकंट्रोलर के साथ टिकी हुई है। इस उद्देश्य के लिए, मैंने ESP32 को चुना, मुख्य रूप से क्योंकि मैंने काम से कुछ टुकड़े ले लिए, बल्कि इसलिए भी कि इसमें एक शक्तिशाली I2S नियंत्रक है जो बहुत सुविधाजनक समानांतर मोड का उपयोग करता है: वास्तव में, हम सिर्फ घड़ी की आवृत्ति सेट कर सकते हैं, I2S नियंत्रक के लिए मेमोरी क्षेत्र निर्दिष्ट करें और यह इन बाइट्स को समानांतर में आउटपुट करेगा। इसके लिए धन्यवाद, यह आवश्यक नियंत्रण संकेतों को उत्पन्न करने के लिए आदर्श है; तथ्य यह है कि यह दो शक्तिशाली 240 मेगाहर्ट्ज कोर भी छवि प्रसंस्करण में मदद करता है।

प्रोटोटाइप


बेशक, कई कन्वर्टर्स और MOS ट्रांजिस्टर अकेले काम करने वाले प्रिंटर कार्ट्रिज कंट्रोलर नहीं बन सकते। इसलिए, मैंने एक अलग उपकरण बनाया, एक कारतूस और इसकी क्षमताओं के साथ प्रयोग करने के लिए एक मंच के रूप में कल्पना की। इसमें ESP32 मॉड्यूल है, कारतूस को नियंत्रित करने के लिए आवश्यक तर्क, और लिथियम-आयन सेल से काम करने के लिए कई बिजली की आपूर्ति। यह मानव हाथों के अपूर्ण आंदोलनों, साथ ही बटन और एक प्रदर्शन के लिए डिज़ाइन किए गए कई सेंसर से लैस है जो मुद्रित छवियों पर प्रतिक्रिया प्रदान करता है। आइए घटकों पर एक नज़र डालें, शायद किसी के लिए यह कारतूस हैकिंग के लिए एक प्रेरणा बन जाएगा:



शक्ति स्रोत से शुरू करते हैं। लिथियम-आयन सेल से बिजली की आपूर्ति की जाती है और इसे 3.3 V, 16 V और 9 V में परिवर्तित किया जाता है। सेंसर और ESP32 के लिए 3.3 V का वोल्टेज आवश्यक है; यह एक साधारण LD78 नियामक HT7833 का उपयोग करके बनाया गया है।9 V और 16 V के वोल्ट दो बूस्टर कन्वर्टर्स द्वारा बढ़ावा कनवर्टर चिप XR2203 के आधार पर उत्पन्न होते हैं। कृपया ध्यान दें कि एक 16 वी बिजली की आपूर्ति को 9 वी बिजली की आपूर्ति की तुलना में बहुत कठिन काम करना चाहिए; कारतूस 9 V से केवल कुछ मिलीमीटर की खपत करता है। दो बूस्टर कन्वर्टर्स एक ही चिप पर बनाए गए थे क्योंकि यह मेरे लिए दोनों के लिए एक प्रकार के घटक खरीदने के लिए पर्याप्त था।

चूंकि संपूर्ण डिवाइस लिथियम-आयन सेल द्वारा संचालित है, इसलिए हमें इसे किसी तरह चार्ज करने की आवश्यकता है। मेरे पास बहुत कम जगह बची है, इसलिए मैंने TP4056-आधारित लिथियम-आयन बैटरी चार्जर जोड़ा, ताकि मैं किसी भी यूएसबी पावर स्रोत से बैटरी को रिचार्ज कर सकूं।


डिवाइस की बुद्धिमत्ता ESP-Wrover32 मॉड्यूल द्वारा प्रदान की जाती है। मैंने फ्लैश मेमोरी के 8 MiB और RAM SPI के 8 MiB के साथ विकल्प का उपयोग किया; जटिल छवि प्रसंस्करण करने के लिए काफी पर्याप्त है। मॉड्यूल में एक 5-पिन कनेक्टर भी है जो आपको फ़र्मवेयर को प्रोग्राम और डीबग करने की अनुमति देता है, साथ ही दो बटन जिन्हें विकल्पों का चयन करने के लिए इस्तेमाल किया जा सकता है और फ़र्मवेयर के चलने पर रेंडर करना शुरू कर देता है।


चयनित विकल्प 160x80 छोटे रंग एलसीडी स्क्रीन पर प्रदर्शित किए जाते हैं। स्क्रीन में SPI कनेक्शन होता है और ESP32 में उपलब्ध परिधीय SPI कनेक्टर्स में से एक द्वारा सीधे नियंत्रित किया जा सकता है।


यह कारतूस का इंटरफ़ेस है। जैसा कि ऊपर कहा गया है, यह विशेष रूप से जटिल नहीं है। सभी संकेतों का स्तर MC14504 जोड़ी द्वारा परिवर्तित किया जाता है, 9 V संकेतों के लिए एक और 16 V. संकेतों के लिए एक। इसके अलावा आरेख दोहरी ऊर्जा बसों को नियंत्रित करने वाला एक स्तर / सुरक्षा पारी सर्किट है।




यहाँ तीन प्रकार के सेंसर का उपयोग किया गया है। वे सभी एक I2C बस का उपयोग करके जुड़े हुए हैं, अर्थात्, ESP32 में वे केवल दो GPIO पर कब्जा करते हैं। गति मापने के लिए तीन लेजर दूरी सेंसर VL53L0X (केवल एक दिखाया गया), बाएं और दाएं को मापने के लिए यह MPU9250 जड़त्वीय सेंसर इकाई (एक्सेलेरोमीटर, जाइरोस्कोप और डिजिटल कम्पास) है। विचार यह है कि इस जानकारी के संयोजन से, कारतूस की पूर्ण स्थिति का निर्धारण करना सैद्धांतिक रूप से संभव है। यह उपयोगी है, उदाहरण के लिए, जब मुक्त हाथ आंदोलन के साथ बड़ी छवियां खींचती हैं। बाद वाला TCS3472 कलर सेंसर है। रंग संवेदक सफेद एलईडी के बगल में स्थित है; इसका उपयोग विषय से रंग को "कॉपी" करने या उस माध्यम के रंग की क्षतिपूर्ति करने के लिए किया जा सकता है जिस पर हम प्रिंट करते हैं।


चूंकि मुझे अतिरिक्त GPIO की आवश्यकता थी, इसलिए मैंने बस में GPIO विस्तारक को कनेक्ट किया। यह तीन दूरी सेंसर के लिए रीसेट बसों को नियंत्रित करता है, एलसीडी स्क्रीन के लिए रीसेट बस, एक बढ़ावा कनवर्टर और दो एमओएस ट्रांजिस्टर (नहीं दिखाया गया है) का समावेश जो रंगीन सेंसर के लिए लक्ष्य को रोशन करने के लिए इस्तेमाल किया जाता है, और एलसीडी स्क्रीन की बैकलाइट को नियंत्रित करता है। दूरस्थ संवेदकों को एक अलग रीसेट बस की आवश्यकता होती है, क्योंकि वे एक ही I2C पते पर चालू होंगे। हालाँकि, उनके पास एक कमांड है जो I2C एड्रेस को चालू करने के बाद बदल देता है। उन्हें चालू करके और उन्हें एक-एक करके अलग-अलग I2C पते पर ले जाकर, मैं एक ही I2C बस पर तीनों को नियंत्रित कर सकता हूं।


यहाँ सर्किट बोर्ड है जिसे मैंने सर्किट के आधार पर डिज़ाइन किया है। इसका एक अजीब आकार है, क्योंकि इसे चार अलग-अलग बोर्डों में विभाजित किया जाना चाहिए और प्रिंटर कारतूस को "घेरना" चाहिए। वे विद्युत और शारीरिक रूप से जुड़े हुए हैं; इसका लाभ यह है कि मुद्रित सर्किट बोर्डों के निर्माता इस तरह के सर्किट को चार अलग-अलग बोर्ड नहीं मानते हैं और आपको केवल एक के लिए भुगतान करने की आवश्यकता होती है।


एक और लाभ यह है कि मैं बोर्ड को एक तत्व के रूप में इकट्ठा कर सकता हूं, और तब परीक्षण कर सकता हूं जब सभी घटक एक ही विमान पर हों। यह मुझे डीबगिंग के दौरान इकट्ठे डिवाइस को सावधानीपूर्वक संतुलित करने की अनुमति नहीं देता है। एक छोटा नोट: VL53L0X सेंसर एक अवरक्त लेजर बीम का उपयोग करते हैं; ऐसा लगता है कि यह मेरे "दर्पण" में अवरक्त विकिरण के खिलाफ सुरक्षा के फिल्टर के माध्यम से तोड़ने के लिए पर्याप्त मजबूत है और फ्रेम में प्रकाश के छोटे बैंगनी धब्बे के रूप में दिखाई देता है।


. , . , . , FPC PCB flex-rigid PCB, .

, KiCad ( pdf gerber) , .

, … . , , , , , Nyancat . , . , git URL.

, ESP32 ( ), .


अन्य कारीगरों के लिए अपनी खुद की परियोजनाओं में प्रिंटर कारतूस का उपयोग करना आसान बनाने के लिए, मैंने ड्राइवर का न्यूनतम काम करने वाला संस्करण भी बनाया। यह प्रोटोटाइप कोड से सभी बाह्य उपकरणों और हैक्स के लिए समर्थन का अभाव है, लेकिन वास्तुकला को साफ किया जाता है और इसलिए आगे के विकास के लिए एक ठोस आधार बन सकता है। ड्राइवर के पास एक प्रोग्राम का एक सरल उदाहरण है जो HELLO! बटन दबाते समय प्रिंट करता है रंग या काला कारतूस।

मैंने इसके लिए विशेष उपकरण नहीं बनाए हैं, लेकिन वास्तव में आप पिछले अनुभाग से हार्डवेयर का पुन: उपयोग कर सकते हैं: बस एक बिजली की आपूर्ति , ESP32
और स्तर के कन्वर्टर्स लें . : BOOST_EN, 9 /16 . ( .)

Github , ESP-IDF. components/printcart ; , , , main/main.c . rgb-.

: printcart_i2s.cESP32 नियंत्रक के I2S परिधीय कनेक्टर्स के समानांतर मोड के लिए एक साधारण ड्राइवर होता है। यह दो बफ़र्स का चयन करता है और बफ़र्स से 16-बिट शब्द 3.3 मेगाहर्ट्ज की आवृत्ति के साथ GPIO कॉन्टैक्ट्स (अधिकतम अधिकतम कॉन्टैक्ट) से ट्रांसफर होता है। (यहां, ये GPIO पिन स्तर के कन्वर्टर्स से जुड़े हैं जो कारतूस को नियंत्रित करते हैं।) हर बार बफर खाली होने पर, ड्राइवर बफर को भरने के लिए एक ईवेंट हैंडलर निष्पादित करता है।

ईवेंट हैंडलर printcart_buffer_filler.c में स्थित है । यह नोजल डेटा कतार से नोजल डेटा प्राप्त करता है और इसे printcart_genwaveform.c में एक फ़ंक्शन में भेजता है , जो टेम्पलेट द्वारा इन नोजल डेटा को संकेतों में परिवर्तित करता है। टेम्पलेट कारतूस (रंग या काला) के प्रकार पर निर्भर करता है, और आप इसे ब्राउज़र में टूल / waveform_editor.html लोड करके बदल सकते हैं

main.c. , , rgb , . , , .

:


यहां यह बहुत ही ध्यान देने योग्य है कि काला कारतूस रंग (0.7 सेमी और 1.5 सेंटीमीटर) की ऊंचाई के बारे में दो बार प्रिंट करता है, इसलिए यदि आपको रंग की आवश्यकता नहीं है और आपको अच्छी दृश्यता की आवश्यकता है, तो काले कारतूस का चयन करना बेहतर है। यह भी ध्यान देने योग्य है कि main.c में परिभाषित है कि दो कारतूस के बीच स्विच; कोड दोनों के साथ काम कर सकता है। यह पूरी तरह से स्पष्ट नहीं है कि काली छवि में धुंधली रेखाएं क्यों हैं: शायद मेरे संकेत में कोई त्रुटि है, या शायद कारतूस परीक्षण से थोड़ा थक गया है। जैसा कि यह हो सकता है, मुद्रित डेटा सुंदर और अच्छी तरह से पहचानने योग्य है।

निष्कर्ष में


- , ; (: ID?), , , . , , , . , , . - , .

… … ?

Source: https://habr.com/ru/post/hi443582/


All Articles