جدول المحتويات:
- الخطوة 1: احصل على قائمة IPTV جيدة
- الخطوة 2: تجربة التعليمات البرمجية الأولية
- الخطوة 3: أضف GPIO
- الخطوة 4: دمج الأجهزة لتبدو حادة
- الخطوة 5: باي باور
- الخطوة السادسة: دمج القوة
- الخطوة 7: حل زر طويل المدى
- الخطوة 8: فحص الملاءمة النهائي
- الخطوة 9: الدمج النهائي
- الخطوة 10: استمتع بـ Vintage IPTV
فيديو: صندوق الأبله الرجعية: 10 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
لقد وجدت تلفزيون Magnavox محمولًا قديمًا من عام 1984 جالسًا على رف في متجر التوفير المحلي الخاص بي. قلت لنفسي ، "أوه NEAT!" عند إجراء مزيد من الفحص ، لاحظت سعرًا قدره 15 دولارًا عليه ، لذلك قررت أن آخذه إلى المنزل وأصنع منه شيئًا أنيقًا. أتذكر مشاهدة عروض إعادة التدوير كطفل من جميع الكلاسيكيات العظيمة باللونين الأبيض والأسود المجيد ، وأردت أن أجعل هذا حقيقة مرة أخرى.
تكمن المشكلة في عدم وجود محطات تمثيلية هناك بعد الآن ، وهذا غير قادر تمامًا على القيام بأي فك تشفير ATSC أو أي فك تشفير رقمي. لقد لاحظت وجود اتصال AV على الجانب ، وكان لدي عدد قليل من raspberry Pi ، لذلك قررت الشروع في مغامرة لمعرفة كيف يمكنني بث القنوات إلى هذا. أريد أن أجعلها تبدو حادة أيضًا. لن أقوم بتشغيله على بطاريات 9 D-cell ، لذا يمكنني إخفاء rpi في حجرة البطارية مع مجموعة من الأشياء الجيدة الأخرى.
الخطوة 1: احصل على قائمة IPTV جيدة
تحتوي قائمة IPTV اليومية على مجموعة رائعة من محطات البث التلفزيوني عبر الإنترنت المجانية التي تنظمها الدولة. حدد الدولة التي تختارها ، وقم بتنزيل ملف m3u.
بالنسبة للبرنامج الموجود في هذا ، يعد m3u تنسيقًا ضروريًا. يمكنك قراءة المزيد حول تفاصيل التنسيق هنا.
الخطوة 2: تجربة التعليمات البرمجية الأولية
كود بيثون الذي سنكتبه يوزع ملف m3u في قائمة المحطات.
#! / usr / bin / python3
استيراد عملية فرعية من فئة استيراد النظام sys: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = مع open ('./ us-m3uplaylist-2020-08- 17-1.m3u '،' r ') كـ m3u: i = 0 للخط في m3u: if line.startswith (' # EXTINF '): this = Station () this.name = line.split ('، ') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Popen (['vlc'، '--loop' ، '--intf'، 'dummy'، '--fullscreen'، channel_list [int (argv [1])]. address])
دعونا نكسر هذا.
#! / usr / bin / python3
هذا يخبر باش أننا سنستخدم python3 لتفسير هذا الملف.
استيراد العملية الفرعية من استيراد sys argv
سنحتاج إلى وحدة العملية الفرعية لبدء تشغيل مثيل vlc الخاص بنا ، وسنحتاج إلى argv لاختيار القناة التي سنطلق vlc فيها.
فئة المحطة: def _init _ (self): self.channel = 0 self.name = '' self.address = ''
هذا يحدد فئة تسمى المحطة. سيكون لكل قناة رقم قناة ، واسم القناة كما هو مأخوذ من ملف m3u ، وعنوان المكان الذي يتم التدفق منه.
channel_list =
هذه قائمة ستخزن جميع القنوات المحللة من ملف m3u.
مع open ('./ us-m3uplaylist-2020-08-17-1.m3u'، 'r') كـ m3u: i = 0 للخط في m3u: if line.startswith ('# EXTINF'): this = Station () this.name = line.split ('،') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1
تفتح هذه الحلقة قائمة التشغيل m3u وتستوعب البيانات. تبدأ أسطر ملف m3u التي نهتم بها بـ #EXTINF ، وهذا يشير إلى إدخال جديد إلى ملف قائمة التشغيل. القيمة التالية للفائدة هي الاسم الموجود على نفس السطر مثل #EXTINF ، ولكن مع فاصلة بينهما. السطر التالي من هذا m3u المحدد هو عنوان الدفق. هناك مكرر "i" مستخدم لحساب أي قناة هي. تتكرر هذه الحلقة خلال ملف m3u بأكمله وتملأ channel_list بالمحطات.
process = subprocess. Popen (['vlc'، '--loop'، '--intf'، 'dummy'، '--fullscreen'، channel_list [int (argv [1])]. address])
تسمح مكتبة العمليات الفرعية لبيثون باستدعاء العمليات (البرامج) وإرجاع PID (معرف العملية). يمكّن هذا Python من أن يكون قادرًا على إدارة بدء تشغيل البرامج وإغلاقها "بشكل صحيح" دون ملء ملف المحفوظات ، أو السماح بتشغيل المزيد من التعليمات البرمجية العشوائية باستخدام مكالمات "النظام" العامة. يتم استخدام كل عنصر من عناصر المصفوفة كوسيطة لـ Popen كما هو مكتوب في سطر الأوامر.
vlc - حلقة --intf دمية - عناوين ملء الشاشة
الأمر أعلاه هو ما هو مطلوب لتشغيله ، مع خيار الحلقات لإصلاح بعض المشكلات مع إيقاف البث مؤقتًا أثناء تحميل الأجزاء التالية (مشكلات m3u8 غريبة) ، --intf dummy يبدأ تشغيل vlc بدون الواجهة ، مجرد شاشة ، - شاشة كاملة يقوم بتشغيل الفيديو في وضع ملء الشاشة (NO WAY!) ، والعنوان هو عنوان الدفق. كما ترى في الكود ، نحن نقدم العنوان من رقم قناة القائمة ، والذي يتم توفيره في وقت التشغيل عبر تعليمة argv. احفظ هذا الملف باسم tv_channels.py ، وقم بتغيير موقع قائمة التشغيل في ملف python للإشارة إلى قائمة التشغيل الخاصة بك ، ويمكنك تشغيل الكود كما يلي:
بيثون tv_channels.py
الخطوة 3: أضف GPIO
يُظهر التخطيط دبابيس GPIO المستخدمة للأزرار ، ولكل منهما مقاومة سحب لأعلى لإبقاء دبوس GPIO مرتفعًا بعد الضغط على الزر. يمكن تحسين الكود الذي تم تحديده مسبقًا لجعل العملية أكثر سلاسة عن طريق إضافة إمكانية GPIO. هذا يسمح لنا بتغيير القناة باستخدام الأزرار ، بدلاً من عبارات لوحة المفاتيح و argv ، تمامًا مثل تلفزيون realsies.
أول شيء يجب ملاحظته هو أنني لديّ التليفزيون مُعرَّف على أنه فصل دراسي. لكي نكون تلفزيونًا ، يجب أن نكون على قناة حالية ، ولدينا قائمة بالقنوات الممكنة ، ولدينا القدرة على تغيير القنوات. في هذا المثال ، ستكون الطريقة الوحيدة لتغيير القنوات هي تحريك قائمة القنوات لأعلى ، والتحرك لأسفل في قائمة القنوات. بمجرد تحديد القناة ، سيتعين علينا بدء تشغيل VLC على القناة التي نريد رؤيتها.
#! / usr / bin / python3
من وقت استيراد عملية استيراد السكون الفرعية من sys import argv من فئة gpiozero import Button class المحطة: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Television: def _init _ (self ، filename): self.current_channel = 0 self.channel_list = self.build_channel_list (filename) self.start_channel () def build_channel_list (self، filename): مع فتح (اسم الملف ، 'r') كـ m3u: i = 0 للخط في m3u: if line.startswith ('# EXTINF'): this = Station () this.name = line.split ('،') [1] line = next (m3u) this.address = line. strip () this.channel = i self.channel_list.append (this) i = i + 1 def channel_up (self): self.current_channel = self.current_channel + 1 if self.current_channel> len (self.channel_list): self. current_channel = len (self.channel_list) self.start_channel () def channel_down (self): self.current_channel = self.current_channel - 1 if self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): جرب: self.process. kill () باستثناء: تمرير الطباعة ('قناة البداية٪ d'٪ self.current_channel) self.process = subprocess. Popen (['vlc'، '-q'، '--loop'، '--intf'، ' dummy '،' --fullscreen '، self.channel_list [self.current_channel].address]) this = Television ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = زر (23) بينما صحيح: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
يحتوي هذا التكرار على بعض التحسينات. تستخدم الآن وحدة تسمى gpiozero مطلوبة من قبل raspberry pi للوصول بسهولة إلى وظائف دبابيس GPIO
sudo apt-get install python3-gpiozero
أو
sudo pip تثبيت gpiozero
كما هو موضح في الكود الخاص بي ، اخترت GPIO 18 و GPIO 23 للقناة UP والقناة DOWN على التوالي. تحتوي مكتبة gpiozero على فئة جيدة لوظائف الأزرار عند الضغط ، والضغط ، وعندما يتم الاحتفاظ بها ، وما إلى ذلك. وهذا يجعل الأمر سهلاً للغاية. اخترت when_pressed ، والتي تشير إلى وظيفة رد الاتصال للتشغيل عند اكتشاف هذه الإشارة.
التغيير الرئيسي الأخير هو تضمين الخيار "-q" في استدعاء العملية الفرعية لـ VLC. يعمل هذا ببساطة على تشغيل vlc بدون كل المخرجات إلى المحطة لإبقائها خالية من الفوضى حتى نتمكن من رؤية بيانات الطباعة المعلوماتية في الكود.
الخطوة 4: دمج الأجهزة لتبدو حادة
لم أكتشف كيف أريد تحقيق ذلك ، وسيكون حلاً فريدًا لكل طراز تلفزيون قيد الاستخدام. أحتاج إلى التفكير مليًا في هذا الأمر والبحث في التلفزيون للعثور على مصدر طاقة جيد لـ pi بمجرد حشر الكمبيوتر داخل حجرة البطارية الضخمة. لقد فكرت أيضًا في استخدام أزرار الساعة لاختيار القناة ، حيث تم وضعها بالفعل بشكل جميل على التلفزيون ، والساعة لا تعمل على أي حال. سأقوم بنشر المزيد عندما أجد حلاً جيدًا ، ولكن هذا هو المكان الذي سيختلف فيه مشروعي بشكل كبير عن مشروع أي شخص آخر. استمتع بتكامل IPTV الشبيه بالتلفزيون الحقيقي!
الخطوة 5: باي باور
بالنسبة للتلفزيون النموذجي الذي وجدته ، فإنه يتطلب مصدر طاقة بجهد 12 فولت. لقد بحثت في اللوح ، لكنني لم أر أي منظمات طاقة واضحة لـ 5 فولت ، لذا فإن المكان الأكثر وضوحًا للحصول على مصدر طاقة ثابت هو على لوحة الدائرة حيث يأتي موصل البرميل لـ 12V. هناك مشكلة واضحة في هذا. لا نريد قلي البي ، لذلك سنحتاج إلى منظم طاقة. لقد اخترت MP2315 Step-Down محول الطاقة. إنها رخيصة الثمن وسهلة الاستخدام. سنلحم مدخلات 12VDC من موصل البرميل الموجود على PCB إلى دبابيس IN + و GND للمحول ، و VO + للدبوس 2 على Raspberry Pi ، بالإضافة إلى GND.
قبل القيام بذلك ، تأكد من تشغيل المحول وتأكد من خروج 5V المناسب من الخرج. اخترت الخيار الأبسط مع الجهد القابل للتعديل السلكي. ستقوم أداة التشذيب بضبط الجهد ، لذلك شاهدت خرج الجهد بمقياس متعدد أثناء ضبط أداة التشذيب باستخدام مفك البراغي.
الخطوة السادسة: دمج القوة
بعد البحث حول التلفزيون ، تقرر أن أفضل مكان للاستيلاء على الطاقة هو السالب لموصل البرميل ومفتاح تشغيل / إيقاف التلفزيون ، مما يعني أنه يمكننا تشغيل وإيقاف التدفقات باستخدام التلفزيون ، بدلاً من ذلك باستمرار تشغيل pi عن طريق السحب مباشرة من موصل البرميل.
تم لحام الأسلاك وتغذيتها على طول جانب ثنائي الفينيل متعدد الكلور بجوار العلبة حتى وصلت إلى الجزء الخلفي من الوحدة ، حيث تم تغذيتها من خلال ثقب كان في الجزء الخلفي من حجرة البطارية. بمجرد تغذيتها ، يمكننا إعداد أطراف الكابلات ولحامها في منظم الطاقة. لقد قمت بضبطه على 5 فولت لتشغيل pi ودبابيس الرأس الملحومة حتى نتمكن من تشغيل لاعبي الإناث إلى الإناث من منظم الطاقة مباشرة إلى مجموعة رأس GPIO الخاصة بـ Pi. لا يُنصح بهذا عادةً ، حيث يحصل pi عمومًا على الطاقة من خلال UBS ، الذي يحتوي على منظم مضمن لتكييف 5V ، ولكن نظرًا لأن الطاقة يتم تنظيمها بالفعل ، فيجب أن تكون جيدة.
هناك بعض الضوضاء على خطوط الصوت من القيام بذلك ، لأن هناك حلقة أرضية في النظام. لقد جربت العديد من نقاط القوة والأرض في جميع أنحاء اللوحة على أمل الحصول على إجابة سهلة ، لكن لم أجد أيًا منها. لقد قمت أيضًا بلحام كبل microUSB بمنظم الوضع المحول لمعرفة ما إذا كان إجبار الطاقة من خلال المنظمين الداخليين في Pi سيؤدي إلى حل المشكلة. لم تفعل. سيكون الحل في بعض محولات عزل الصوت الأرضي. تم طلبها بدلاً من بنائها ، لأنها رخيصة ومعبأة بشكل جيد. يمكنك الحصول عليها من معظم متاجر أو أقسام صوت السيارات. هذا ما اخترته.
الخطوة 7: حل زر طويل المدى
مما لا شك فيه أن الأزرار لن تبقى على اللوح ، لذلك يجب أن يكون هناك حل دائم. أمسكت ببعض الألواح القديمة ورميت الدائرة مع بعض دبابيس الرأس لتسهيل الوصول إلى الإشارات. هذا هو المكان الذي سيختلف فيه الرأي حول كيفية إرفاق الأزرار أو تركيبها. أنا أختار أن أضعهم على لوح الحماية وأرفقهم بالهيكل المعدني بحيث لا يتداخل المقبض الذي يتأرجح فوق الشاشة لحمله. لا تتردد في تحسين التصميم عن طريق إضافة حافظة مطبوعة ثلاثية الأبعاد تسهل التثبيت ، واستخدام الصواميل والمسامير ، والمواد اللاصقة الفاخرة ، ودمج الأزرار الأصلية ، أيًا كان. طالما أنه يعمل ، فلا توجد إجابات خاطئة.
سيتم تثبيتها على الجزء الخارجي من العلبة ، وسيتم وضع Raspberry Pi داخل حجرة البطارية الفسيحة للغاية ، لذلك ستحتاج إلى ثقب صغير محفور للسماح للكابلات بالخروج من حجرة البطارية.
الخطوة 8: فحص الملاءمة النهائي
يجب أن تكون جميع المعدات مناسبة لفحصها مرة أخيرة لمعرفة المكان الذي يجب إجراء جميع الثقوب فيه بالضبط في الهيكل ، وحجم الثقوب ، وما إلى ذلك التي يجب القيام بها. بالإضافة إلى ذلك ، ينبغي النظر في مكان وضع المكونات من أجل السهولة المثلى للاتصال والوصول. قصة قصيرة طويلة ، تأكد من أن كل شيء يناسب المكان الذي تعتقد أنه يحدث فيه قبل أن تتلف مشروعك بشكل لا يمكن إصلاحه وتضطر إلى التخلص منه.
الخطوة 9: الدمج النهائي
الآن جميع الأجهزة في المكان الذي يجب أن تكون فيه ، وكلها مناسبة تمامًا مثل حشرة في السجادة. دعونا نقطع الأشياء! لقد حددت مكانًا في حجرة البطارية حيث يمكنني توجيه كبلات AV للخارج باستخدام مسافة بادئة صغيرة في البلاستيك. لقد قمت بتثبيته باستخدام طاحونة مقاعد البدلاء. جعلت منه عملاً قصيرًا جدًا. لقد استخدمت جهاز dremel لطحن المزيد من البلاستيك لجعله مناسبًا جدًا للكابلات.
المكون الأخير هو محدد القناة. لقد قمت بحفر ثقب صغير في حجرة البطارية وقمت بتوجيه كابلات الرأس منها واحدة تلو الأخرى. تم توصيل الأزرار ، وقمت بتوصيل لوح الحماية بالهيكل البلاستيكي بنصفين من الفيلكرو اللاصق مسبقًا. أدركت أنه كان هناك حوالي 1200 طريقة أفضل للقيام بذلك ، لكن هذا نجح ، وكان لدي كل ما أحتاجه في متناول اليد.
الخطوة 10: استمتع بـ Vintage IPTV
هذا يلخص الامر. ابحث عن العروض واستمتع بالمشاهدة. لا تجلس قريبًا جدًا ، رغم ذلك. سوف تتعفن عقلك!
هناك متسع كبير لتحسين هذا المشروع ، لذا خذها في أي اتجاه تريده ، ولكن كان من الممتع الوصول إلى هذا الحد. بالنسبة لي ، أقوم بتشغيل هذا من cronjob عند إعادة التشغيل ، لذا فإن stdout لا يلتقط الرسائل من نص Python النصي. أرغب في إصلاح هذا حتى أعرف القناة التي أستخدمها. إضافة جيدة أخرى هي دونجل لوحة مفاتيح لاسلكية على Pi. سيتيح لك ذلك تغيير شبكة wifi إذا غادرت منزلك بالتلفزيون. بغض النظر. لقد كان مشروعًا ممتعًا ، ولا أطيق الانتظار لبدء المشروع التالي.
موصى به:
اصنع وحدة تحكم الألعاب الرجعية المحمولة الخاصة بك! وهو أيضًا جهاز لوحي Win10: 6 خطوات (بالصور)
اصنع وحدة تحكم الألعاب الرجعية المحمولة الخاصة بك! …… وهو أيضًا جهاز لوحي Win10!: في هذا المشروع سأوضح لك كيفية إنشاء وحدة تحكم ألعاب قديمة يمكن استخدامها أيضًا كجهاز لوحي يعمل بنظام Windows 10. سوف تتكون من 7 & quot؛ HDMI LCD مع شاشة تعمل باللمس ، و LattePanda SBC ، و USB Type C PD Power PCB وعدد قليل من العناصر التكميلية
وحدة تحكم بأسلوب حلبة الرقص للألعاب الرجعية الضخمة: 4 خطوات
وحدة تحكم ضخمة على طراز حلبة الرقص في الألعاب الرجعية: لحفل زفافنا في شهر مارس من هذا العام ، أردنا حفل استقبال بطابع لعبة ريترو ، لأننا مجرد أطفال صغار في القلب وأنا متأكد من أن الكثير من الأشخاص الآخرين كذلك! البحث في MakeyMakey's اعتقدت أنه سيكون فكرة رائعة أن أعانقني
صندوق باربي: علبة مموهة / صندوق بوم لمشغل MP3 لديك: 4 خطوات (بالصور)
صندوق باربي: علبة مموهة / صندوق بوم لمشغل MP3 الخاص بك: هذه حقيبة حمل واقية مبطنة لمشغل mp3 الخاص بك والتي تقوم أيضًا بتحويل مقبس سماعة الرأس إلى ربع بوصة ، ويمكن أن تكون بمثابة صندوق ذراع عند قلب المفتاح ، و يتنكر في مشغل mp3 الخاص بك في شكل مشغل شرائط في أوائل التسعينيات أو ما شابه ذلك من السرقة المنخفضة i
بناء صندوق بطارية صندوق السيجار لأجهزة الراديو الأنبوبية: 4 خطوات
قم ببناء صندوق بطارية Cigar Box Battery Box لأجهزة الراديو الأنبوبية: إذا كنت تعمل على البناء واللعب باستخدام أجهزة الراديو الأنبوبية مثلي ، فمن المحتمل أن تكون لديك مشكلة مماثلة كما أفعل في تشغيلها. تم تصميم معظم الدوائر القديمة لتعمل على بطاريات b عالية الجهد والتي لم تعد متوفرة. وبالتالي
صندوق إضاءة العرض من صندوق خشبي: 9 خطوات (بالصور)
عرض صندوق إضاءة من صندوق خشبي: أعطيت أنا وزوجتي لأمي تمثالًا زجاجيًا لعيد الميلاد. عندما فتحته أمي ، قام أخي بإدخال & quot؛ RadBear (حسنًا لقد قال اسمي بالفعل) يمكنه أن يبني لك صندوقًا خفيفًا! & quot ؛. قال هذا لأنني بصفتي شخصًا يجمع الزجاج