สารบัญ:
- ขั้นตอนที่ 1: รับรายการ IPTV ที่ดี
- ขั้นตอนที่ 2: การทดสอบโค้ดเบื้องต้น
- ขั้นตอนที่ 3: เพิ่ม GPIO
- ขั้นตอนที่ 4: รวมฮาร์ดแวร์เพื่อให้ดูคมชัด
- ขั้นตอนที่ 5: Pi Power
- ขั้นตอนที่ 6: การรวมพลัง
- ขั้นตอนที่ 7: โซลูชันปุ่มระยะยาว
- ขั้นตอนที่ 8: ตรวจสอบความพอดีขั้นสุดท้าย
- ขั้นตอนที่ 9: การบูรณาการขั้นสุดท้าย
- ขั้นตอนที่ 10: เพลิดเพลินกับ IPTV วินเทจของคุณ
วีดีโอ: Retro Idiot Box: 10 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันพบโทรทัศน์แบบพกพา Magnavox รุ่นเก่าจากปี 1984 วางอยู่บนหิ้งที่ร้านขายของมือสองในพื้นที่ของฉัน ฉันคิดในใจว่า "โอ้ เรียบร้อย!" เมื่อตรวจสอบเพิ่มเติม ฉันสังเกตเห็นป้ายราคา 15 ดอลลาร์บนนั้น ดังนั้นฉันจึงตัดสินใจนำมันกลับบ้านและทำอะไรบางอย่างที่ดูน่าสนใจ ฉันจำได้ว่าดูการฉายซ้ำตอนเป็นเด็กของภาพยนตร์คลาสสิกที่ยอดเยี่ยมทั้งหมดในขาวดำอันรุ่งโรจน์ และต้องการทำให้สิ่งนี้เป็นจริงอีกครั้ง
ปัญหาคือไม่มีสถานีแอนะล็อกอีกต่อไปแล้ว และสิ่งนี้ไม่สามารถถอดรหัส ATSC ใดๆ หรือการถอดรหัสดิจิทัลใดๆ ได้เลย ฉันสังเกตเห็นว่ามีการเชื่อมต่อ AV ที่ด้านข้าง และมีราสเบอร์รี่ pi อยู่สองสามตัว ดังนั้นฉันจึงตัดสินใจเริ่มการผจญภัยเพื่อค้นหาว่าฉันจะสตรีมช่องไปยังช่องนี้ได้อย่างไร อยากให้ดูเฉียบด้วย ฉันจะไม่ใช้งานแบตเตอรี่ D-cell 9 ก้อน ดังนั้นฉันจึงสามารถซ่อน rpi ในช่องใส่แบตเตอรี่พร้อมกับสิ่งของอื่นๆ มากมาย
ขั้นตอนที่ 1: รับรายการ IPTV ที่ดี
รายการ IPTV รายวันมีสถานี iptv ฟรีให้เลือกมากมายซึ่งจัดตามประเทศ เลือกประเทศที่ต้องการและดาวน์โหลดไฟล์ m3u
สำหรับซอฟต์แวร์ที่อยู่ในนี้ m3u เป็นรูปแบบที่จำเป็น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับลักษณะเฉพาะของรูปแบบได้ที่นี่
ขั้นตอนที่ 2: การทดสอบโค้ดเบื้องต้น
รหัสหลามที่เราจะเขียนแยกวิเคราะห์ไฟล์ m3u ลงในรายการสถานี
#!/usr/bin/python3
นำเข้ากระบวนการย่อยจากคลาส sys นำเข้า argv สถานี: def _init_ (ตัวเอง): 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 กระบวนการ = subprocess. Popen(['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])
มาทำลายสิ่งนี้กันเถอะ
#!/usr/bin/python3
สิ่งนี้บอก bash ว่าเราจะใช้ python3 เพื่อตีความไฟล์นี้
นำเข้ากระบวนการย่อยจาก sys นำเข้า argv
เราจะต้องใช้โมดูลกระบวนการย่อยเพื่อเปิดใช้อินสแตนซ์ vlc ของเรา และเราต้องใช้ argv เพื่อเลือกช่องที่เราจะเปิดใช้ vlc
คลาส สถานี: def _init_(ตัวเอง): 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 = ฉัน channel_list.append(this) i = i + 1
ลูปนี้เปิดเพลย์ลิสต์ m3u และนำเข้าข้อมูล บรรทัดไฟล์ m3u ที่เราสนใจเริ่มต้นด้วย #EXTINF ซึ่งระบุรายการใหม่ในไฟล์เพลย์ลิสต์ ค่าที่น่าสนใจถัดไปคือชื่อ ซึ่งอยู่ในบรรทัดเดียวกับ #EXTINF แต่มีเครื่องหมายจุลภาคคั่นระหว่าง บรรทัดต่อไปนี้ของ m3u โดยเฉพาะคือที่อยู่ของสตรีม มีตัววนซ้ำ "i" ที่ใช้ในการนับว่าช่องใดเป็นช่องใด ลูปนี้วนซ้ำทั่วทั้งไฟล์ m3u และเติม channel_list ด้วยสถานี
กระบวนการ = กระบวนการย่อยปรากฏขึ้น (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])
ไลบรารีกระบวนการย่อยอนุญาตให้ python เรียกกระบวนการ (โปรแกรม) และส่งคืน PID (Process ID) สิ่งนี้ทำให้ python สามารถจัดการการเปิดและปิดโปรแกรมได้ "ถูกต้อง" โดยไม่ต้องกรอกไฟล์ประวัติ หรืออนุญาตให้เรียกใช้โค้ดตามอำเภอใจมากขึ้นด้วยการเรียก "ระบบ" ทั่วไป แต่ละองค์ประกอบของอาร์เรย์ที่ใช้เป็นอาร์กิวเมนต์ของ Popen นั้นจะถูกพิมพ์ในบรรทัดคำสั่ง
vlc --loop --intf dummy --ที่อยู่เต็มหน้าจอ
คำสั่งข้างต้นเป็นสิ่งที่ต้องการเรียกใช้โดยตัวเลือก --loop แก้ไขปัญหาบางอย่างด้วยการหยุดสตรีมในขณะที่โหลดชิ้นถัดไป (ปัญหา m3u8 แปลก ๆ) --intf dummy เริ่ม vlc โดยไม่มีอินเทอร์เฟซ เพียงหน้าจอ --fullscreen เปิดวิดีโอในโหมดเต็มหน้าจอ (ไม่มีทาง!) และที่อยู่คือที่อยู่ของสตรีม ดังที่คุณเห็นในโค้ด เรากำลังระบุที่อยู่จากหมายเลขช่องของรายการ ซึ่งระบุไว้ที่รันไทม์ผ่านคำสั่ง argv บันทึกไฟล์นี้เป็น tv_channels.py เปลี่ยนตำแหน่งเพลย์ลิสต์ในไฟล์ python ให้ชี้ไปที่เพลย์ลิสต์ของคุณ และคุณสามารถเรียกใช้โค้ดได้ดังนี้:
หลาม tv_channels.py
ขั้นตอนที่ 3: เพิ่ม GPIO
แผนผังแสดงหมุด GPIO สองตัวที่ใช้สำหรับปุ่ม และแต่ละอันมีตัวต้านทานแบบดึงขึ้นเพื่อให้พิน GPIO ถูกดึงขึ้นสูงหลังจากกดปุ่ม โค้ดที่กำหนดไว้ก่อนหน้านี้สามารถปรับปรุงให้การทำงานราบรื่นขึ้นอีกเล็กน้อยโดยการเพิ่มความสามารถของ GPIO สิ่งนี้ทำให้เราสามารถเปลี่ยนช่องด้วยปุ่ม แทนที่จะเป็นคีย์บอร์ดและคำสั่ง argv เหมือนกับ a สำหรับ realsies ทีวี
สิ่งแรกที่ควรทราบคือฉันมีโทรทัศน์ที่กำหนดเป็นชั้นเรียน ในการเป็นโทรทัศน์ เราต้องอยู่ในช่องปัจจุบัน มีรายการช่องที่เป็นไปได้ และสามารถเปลี่ยนช่องได้ ในตัวอย่างนี้ วิธีเดียวในการเปลี่ยนช่องคือเลื่อนรายการช่องขึ้น และเลื่อนรายการช่องลง เมื่อตัดสินใจเลือกช่องแล้ว เราจะต้องเริ่ม VLC บนช่องที่เราต้องการดู
#!/usr/bin/python3
from time import sleep นำเข้ากระบวนการย่อยจาก sys import argv จาก gpiozero import คลาสปุ่ม Station: def _init_ (ตัวเอง): self.channel = 0 self.name = '' self.address = '' self.process = '' class โทรทัศน์: def _init_(ตัวเอง, ชื่อไฟล์): self.current_channel = 0 self.channel_list = self.build_channel_list(ชื่อไฟล์) self.start_channel() def build_channel_list(ตัวเอง, ชื่อไฟล์): ด้วย open(ชื่อไฟล์, '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 หาก self.current_channel > len(self.channel_list): ตนเอง current_channel = len (self.channel_list) self.start_channel () def channel_down (ตัวเอง): self.current_channel = self.current_channel - 1 ถ้า self.current_channel < 0: self.current_channel = 0 self.start_channel() def start_channel (ตัวเอง): ลอง: self.process kill() ยกเว้น: pass print('starting channel %d' % self.current_channel) self.process = subprocess. Popen(['vlc', '-q', '--loop', '--intf', ' ดัมมี่', '--เต็มจอ', self.channel_list[self.current_channel].address]) this = Television('./us-m3uplaylist-2020-08-17-1.m3u') channel_UP = Button(18) channel_DN = ปุ่ม (23) ในขณะที่ True: channel_UP.when_pressed = this.channel_up channel_DN. when_pressed = this.channel_down
การทำซ้ำของรหัสนี้มีการปรับปรุงค่อนข้างน้อย ตอนนี้ใช้โมดูลที่เรียกว่า gpiozero ซึ่งราสเบอร์รี่ pi ต้องการเพื่อให้เข้าถึงฟังก์ชันการทำงานของหมุด GPIO ได้อย่างง่ายดาย
sudo apt-get ติดตั้ง python3-gpiozero
หรือ
sudo pip ติดตั้ง gpiozero
ตามที่เห็นในรหัสของฉัน ฉันได้เลือก GPIO 18 และ GPIO 23 สำหรับช่อง UP และช่อง DOWN ตามลำดับ ไลบรารี gpiozero มีคลาสที่ดีสำหรับฟังก์ชันปุ่มสำหรับ when_pressed, is_pressed, when_held ฯลฯ ซึ่งทำให้ง่าย ฉันเลือก when_pressed ซึ่งหมายถึงฟังก์ชันเรียกกลับให้ทำงานเมื่อตรวจพบสัญญาณนี้
การเปลี่ยนแปลงครั้งใหญ่ครั้งสุดท้ายคือการรวมตัวเลือก ' -q ' ในการเรียกกระบวนการย่อย VLC นี่เพียงเรียกใช้ vlc โดยไม่มีเอาต์พุตทั้งหมดไปยังเทอร์มินัลเพื่อให้ปราศจากความยุ่งเหยิง เพื่อให้เราสามารถเห็นคำสั่งการพิมพ์ข้อมูลในโค้ด
ขั้นตอนที่ 4: รวมฮาร์ดแวร์เพื่อให้ดูคมชัด
ฉันยังไม่รู้ว่าต้องทำอย่างไร และมันจะเป็นวิธีแก้ปัญหาเฉพาะสำหรับทีวีแต่ละรุ่นที่ใช้งาน ฉันต้องคิดให้หนักเกี่ยวกับเรื่องนี้และสำรวจโทรทัศน์เพื่อหาแหล่งพลังงานที่ดีสำหรับ pi เมื่อฉันยัดคอมพิวเตอร์เข้าไปในช่องใส่แบตเตอรี่ขนาดใหญ่ ฉันยังพิจารณาใช้ปุ่มนาฬิกาสำหรับการเลือกช่อง เนื่องจากมีการวางไว้บนโทรทัศน์อย่างสวยงาม และนาฬิกาก็ไม่ทำงานอยู่ดี ฉันจะโพสต์เพิ่มเติมเมื่อฉันพบวิธีแก้ปัญหาที่ดี แต่นี่คือที่ที่โครงการของฉันจะแตกต่างอย่างมากจากของคนอื่นๆ เพลิดเพลินไปกับการรวม IPTV ที่เหมือนทีวีจริง!
ขั้นตอนที่ 5: Pi Power
สำหรับทีวีรุ่นที่ฉันพบ ต้องใช้แหล่งจ่ายไฟ 12V ฉันสำรวจรอบๆ บอร์ดแล้ว แต่ไม่เห็นตัวควบคุมพลังงานที่ชัดเจนสำหรับ 5V ดังนั้นที่ที่ชัดเจนที่สุดในการจัดหาแหล่งจ่ายไฟที่มั่นคงคือบนแผงวงจรที่มีขั้วต่อแบบบาร์เรลสำหรับ 12V เข้ามา มีปัญหาที่ชัดเจนกับสิ่งนี้. เราไม่ต้องการทอด pi ดังนั้นเราจะต้องมีตัวควบคุมกำลัง ฉันได้เลือก MP2315 Step-Down Power Converter มันสกปรกราคาถูกและใช้งานง่าย เราจะประสานอินพุต 12VDC จากขั้วต่อบาร์เรลบน PCB เข้ากับพิน IN+ และ GND ของตัวแปลง และ VO+ กับพิน 2 บน Raspberry Pi รวมถึง GND
ก่อนดำเนินการนี้ ต้องแน่ใจว่าได้เปิดเครื่องคอนเวอร์เตอร์และตรวจดูให้แน่ใจว่า 5V ที่เหมาะสมออกมาจากเอาต์พุต ฉันเลือกตัวเลือกที่ง่ายที่สุดด้วยแรงดันไฟฟ้าที่ปรับได้เดินสาย ที่กันจอนจะปรับแรงดันไฟ ฉันจึงดูเอาท์พุตแรงดันไฟด้วยมัลติมิเตอร์ขณะปรับที่กันจอนด้วยไขควง
ขั้นตอนที่ 6: การรวมพลัง
หลังจากสำรวจดูโทรทัศน์แล้ว ก็ตัดสินใจว่าสถานที่ที่ดีที่สุดในการดึงกระแสไฟคือจากขั้วลบของขั้วต่อแบบบาร์เรลและสวิตช์เปิด/ปิดของโทรทัศน์ ซึ่งหมายความว่าเราสามารถเปิดและปิดสตรีมด้วยโทรทัศน์ได้ เปิด pi อย่างต่อเนื่องโดยดึงโดยตรงจากขั้วต่อบาร์เรล
สายไฟถูกบัดกรีและป้อนเข้าที่ด้านข้างของ PCB ถัดจากเคสจนกระทั่งถึงด้านหลังของตัวเครื่อง โดยถูกป้อนผ่านรูที่อยู่ด้านหลังของช่องใส่แบตเตอรี่ เมื่อป้อนเข้าไปแล้ว เราสามารถเตรียมปลายสายและประสานเข้ากับตัวควบคุมกำลัง ฉันปรับเป็น 5V เพื่อจ่ายไฟให้กับ pi และหมุดหัวบัดกรีเพื่อให้เราสามารถเรียกใช้จัมเปอร์ตัวเมียกับตัวเมียจากตัวควบคุมพลังงานโดยตรงไปยังชุดส่วนหัว GPIO ของ pi โดยปกติจะไม่แนะนำ เนื่องจาก pi มักจะได้รับพลังงานผ่าน UBS ซึ่งมีตัวควบคุมแบบอินไลน์เพื่อปรับสภาพ 5V แต่เนื่องจากกำลังได้รับการควบคุมแล้ว จึงน่าจะใช้ได้
มีเสียงรบกวนจากการทำสิ่งนี้ เนื่องจากมีกราวด์วนอยู่ในระบบ ฉันลองจุดพลังและจุดกราวด์หลายจุดทั่วทั้งกระดานโดยหวังว่าจะได้คำตอบง่ายๆ แต่ไม่พบเลย ฉันยังบัดกรีสายเคเบิล microUSB เข้ากับตัวควบคุมโหมดสวิตช์เพื่อดูว่าการบังคับพลังงานผ่านตัวควบคุมภายในของ pi จะแก้ไขปัญหาได้หรือไม่ มันไม่ได้ การแก้ปัญหาจะอยู่ในหม้อแปลงแยกกราวด์เสียงบางตัว สิ่งเหล่านี้ได้รับคำสั่งมากกว่าสร้างเพราะมีราคาถูกและบรรจุอย่างดี คุณสามารถรับได้จากร้านค้าหรือแผนกเครื่องเสียงรถยนต์ส่วนใหญ่ นี่คือสิ่งที่ฉันเลือก
ขั้นตอนที่ 7: โซลูชันปุ่มระยะยาว
ไม่ต้องสงสัยเลยว่าปุ่มต่างๆ จะไม่อยู่บนเขียงหั่นขนม ดังนั้นจึงจำเป็นต้องมีวิธีแก้ปัญหาที่ถาวรกว่านี้ ฉันหยิบโปรโตบอร์ดเก่าขึ้นมาแล้วโยนวงจรพร้อมกับหมุดส่วนหัวเพื่อให้เข้าถึงสัญญาณได้ง่าย นี่คือที่ที่ทุกคนจะมีความคิดเห็นที่แตกต่างกันเกี่ยวกับวิธีการแนบหรือติดตั้งปุ่มต่างๆ ฉันกำลังเลือกโปรโตบอร์ดและเพียงแค่แนบมันเข้ากับแชสซีเพื่อให้ที่จับที่แกว่งไปบนหน้าจอเพื่อพกพาไม่รบกวน รู้สึกอิสระที่จะรวมเอาการออกแบบโดยการเพิ่มเคสที่พิมพ์ 3 มิติที่ทำให้การติดตั้งราบรื่น ใช้น็อตและสลักเกลียว กาวแฟนซี รวมปุ่มดั้งเดิม อะไรก็ได้ ตราบใดที่ใช้งานได้ก็ไม่มีคำตอบที่ผิด
สิ่งเหล่านี้จะถูกติดตั้งไว้ที่ด้านนอกของเคส และ Raspberry Pi จะถูกซุกไว้ภายในช่องใส่แบตเตอรี่ที่กว้างมาก ดังนั้นจึงจำเป็นต้องเจาะรูเล็กๆ เพื่อให้สายเคเบิลออกจากช่องใส่แบตเตอรี่ได้
ขั้นตอนที่ 8: ตรวจสอบความพอดีขั้นสุดท้าย
อุปกรณ์ทั้งหมดต้องได้รับการตรวจสอบเป็นครั้งสุดท้ายเพื่อดูว่าจำเป็นต้องทำรูทั้งหมดไว้ที่ใดกับแชสซี และรูขนาดใด ฯลฯ จำเป็นต้องทำ นอกจากนี้ ควรพิจารณาตำแหน่งที่จะวางส่วนประกอบต่างๆ เพื่อให้ง่ายต่อการเชื่อมต่อและเข้าถึง เรื่องสั้นโดยย่อ ตรวจสอบให้แน่ใจว่าทุกอย่างลงตัวในที่ที่คุณคิดว่ามันทำ ก่อนที่คุณจะสร้างความเสียหายให้กับโครงการของคุณอย่างไม่สามารถแก้ไขได้ และต้องเอาจุดประกายออกมา
ขั้นตอนที่ 9: การบูรณาการขั้นสุดท้าย
ตอนนี้ฮาร์ดแวร์ทั้งหมดอยู่ในที่ที่มันต้องการ และทุกอย่างก็พอดีพอๆ กับตัวแมลงในพรม มาตัดสิ่งต่าง ๆ กันเถอะ! ฉันระบุตำแหน่งบนช่องใส่แบตเตอรี่ซึ่งฉันสามารถเดินสาย AV ออกได้โดยใช้การเยื้องเล็กๆ ในพลาสติก ฉันบดมันด้วยเครื่องบดแบบตั้งโต๊ะ มันทำให้งานค่อนข้างสั้น ฉันใช้เดรเมลเพื่อบดพลาสติกให้มากขึ้นเพื่อให้พอดีกับสายเคเบิล
องค์ประกอบสุดท้ายคือตัวเลือกช่อง ฉันเจาะรูเล็กๆ ในช่องแบตเตอรี่และเดินสายเฮดเดอร์ทีละสาย ปุ่มต่างๆ ถูกเชื่อมต่อเข้าด้วยกัน และฉันติดโปรโตบอร์ดเข้ากับโครงเครื่องพลาสติกด้วยเวลโครที่ติดกาวไว้ล่วงหน้าสองส่วน ฉันเข้าใจว่ามีวิธีที่ดีกว่านี้ประมาณ 1200 วิธีในการทำเช่นนี้ แต่วิธีนี้ใช้ได้ผล และฉันมีทุกสิ่งที่ฉันต้องการในมือ
ขั้นตอนที่ 10: เพลิดเพลินกับ IPTV วินเทจของคุณ
ที่เกี่ยวกับสรุปมันขึ้น ค้นหารายการและสนุกกับการรับชม อย่านั่งใกล้เกินไปแม้ว่า คุณจะเน่าสมองของคุณ!
มีพื้นที่มากมายในการปรับปรุงโครงการนี้ ดังนั้นให้นำไปในทิศทางใดก็ได้ที่คุณต้องการ แต่การมาไกลขนาดนี้ก็สนุกดี สำหรับฉัน ฉันเรียกใช้สิ่งนี้จาก cronjob เมื่อรีบูต ดังนั้น stdout จึงไม่จับข้อความจากสคริปต์ python ผมขอแก้ไขนะครับ จะได้รู้ว่าอยู่ช่องไหนครับ การเพิ่มที่ดีอีกอย่างหนึ่งคือดองเกิลคีย์บอร์ดไร้สายบน Pi วิธีนี้จะช่วยให้คุณเปลี่ยนเครือข่าย wifi หากคุณออกจากบ้านพร้อมกับทีวี โดยไม่คำนึงถึง. เป็นโปรเจ็กต์ที่สนุก และฉันแทบรอไม่ไหวที่จะเริ่มต้นในครั้งต่อไป
แนะนำ:
Retro Arcade - (ขนาดเต็มขับเคลื่อนโดย Raspberry Pi): 8 ขั้นตอน
Retro Arcade - (ขนาดเต็มขับเคลื่อนโดย Raspberry Pi): ก่อนอื่นฉันอยากจะขอบคุณสำหรับการดูคู่มือการสร้างสำหรับระบบ Retro Arcade นี้ ฉันกำลังนำกล่องอาร์เคดรุ่นเก่ามาวางไว้ในตู้แบบสแตนด์อโลนที่มีจอภาพไวด์สกรีนขนาด 24 นิ้ว การวัดในคู่มือนี้ค่อนข้างหยาบเพื่อให้ค
Retro "Rayotron" Night Light (ตอนที่ 1): 16 ขั้นตอน
Retro "Rayotron" Night Light (ตอนที่ 1): บทนำในเดือนธันวาคมปี 1956 Atomic Laboratories ได้โฆษณา Rayotron ว่าเป็นเครื่องกำเนิดไฟฟ้าสถิตและเครื่องเร่งอนุภาคต้นทุนต่ำเครื่องแรกสำหรับครูวิทยาศาสตร์และมือสมัครเล่น [1] Rayotron เป็นสายพานยางขนาดใหญ่พิเศษ
Retro CP/M Stand Alone Emulator: 8 ขั้นตอน
Retro CP/M Stand Alone Emulator: โปรเจ็กต์นี้ใช้โมดูล VGA32 ESP v1.4 เพื่อเรียกใช้ชุดค่าผสมหรือ RunCPM และ FabGL เพื่อให้คอมพิวเตอร์แบบสแตนด์อโลนที่ใช้ระบบเทียบเท่ากับ CP/M 2.2 เป็นที่นิยมในช่วงปี 1980 เป็นระบบปฏิบัติการสำหรับคอมพิวเตอร์ขนาดเล็ก สามารถกลับเข้า
The Barbie Box: a Camouflaged Case/ Boom Box สำหรับเครื่องเล่น MP3 ของคุณ: 4 ขั้นตอน (พร้อมรูปภาพ)
The Barbie Box: a Camouflaged Case/ Boom Box สำหรับเครื่องเล่น MP3 ของคุณ: นี่คือกระเป๋าพกพาที่หุ้มเบาะสำหรับเครื่องเล่น MP3 ของคุณ ซึ่งจะแปลงแจ็คหูฟังให้มีขนาดหนึ่งในสี่นิ้ว สามารถทำหน้าที่เป็นกล่องบูมที่พลิกสวิตช์ และ ปลอมแปลงเครื่องเล่น mp3 ของคุณเป็นเครื่องเล่นเทปในยุคต้นๆ หรือการโจรกรรมระดับต่ำที่คล้ายคลึงกัน i
Cedar (ซิการ์?) Box Speaker Box: 8 Steps (พร้อมรูปภาพ)
Cedar (Cigar?) Box Speaker Box: แรงบันดาลใจจากลำโพง Munny แต่ไม่ต้องการจ่ายมากกว่า 10 เหรียญ นี่คือคำแนะนำของฉันโดยใช้ลำโพงคอมพิวเตอร์รุ่นเก่า กล่องไม้จากร้านขายของมือสอง และกาวร้อนจำนวนมาก