สารบัญ:

Raspitone:ตู้เพลงที่ใช้งานง่าย: 7 ขั้นตอน
Raspitone:ตู้เพลงที่ใช้งานง่าย: 7 ขั้นตอน

วีดีโอ: Raspitone:ตู้เพลงที่ใช้งานง่าย: 7 ขั้นตอน

วีดีโอ: Raspitone:ตู้เพลงที่ใช้งานง่าย: 7 ขั้นตอน
วีดีโอ: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, กรกฎาคม
Anonim
Raspitone:ตู้เพลงที่ใช้งานง่าย
Raspitone:ตู้เพลงที่ใช้งานง่าย

สวัสดี โปรเจ็กต์ต่อไปของฉันคือ อย่างที่ฉันเคยทำ เป็นโปรเจ็กต์ที่ไม่ค่อยมีประโยชน์:

ตู้เพลงนี้มีพื้นฐานมาจาก Raspberry 3 B+

ฉันรู้ บางอย่างสามารถทำได้ง่ายๆ ด้วยสมาร์ทโฟนและลำโพงบลูทูธ

แต่สำหรับโครงการของฉัน ฉันมีข้อกำหนดเบื้องต้นที่ยากสองประการ:

ฉันต้องการทำบางสิ่งที่ "วินเทจ"

และโดยรวมแล้ว เนื่องจากความจริงที่ว่าผู้หญิงของฉันหมดหวังอย่างแน่นอนสำหรับคอมพิวเตอร์หรือบลูทูธหรืออะไรก็ตามจากศตวรรษที่ 21 (และแม้กระทั่งศตวรรษที่ 20) ฉันต้องทำบางอย่างที่ง่ายมากเพื่อใช้………

ดังนั้นข้อมูลจำเพาะมีดังนี้:

กดปุ่มเดียวเพื่อสตาร์ทเครื่อง

หน้าจอสัมผัส (ธรรมดามาก) สำหรับจัดการเพลง

สัมผัสเดียวบนหน้าจอเพื่อหยุดเครื่อง

และให้เสียงดี…………

เสบียง

สำหรับสิ่งนี้ฉันใช้:

1 ราสเบอร์รี่ 3 B+

โฮมเธียเตอร์เก่า 1 เครื่องที่ไม่มีประโยชน์เพราะเครื่องอ่าน DVD OOS (Samsung 2.1 รุ่นเก่ามีวูฟเฟอร์และลำโพง 2 ตัวที่ดัดแปลงให้พอดีกับกล่อง)

1 บอร์ด HIFIBERRY DIGI+ (พร้อมเอาต์พุตออปติคัลสำหรับเพาเวอร์แอมป์)

1 หน้าจอสัมผัส capacitive 7 (ของฉันคือ Makeasy สำหรับราสเบอร์รี่ที่มีอินพุต HDMI และขับเคลื่อนผ่าน USB แต่หน้าจอสัมผัส HDMI ใด ๆ ก็ใช้ได้)

1 แหล่งจ่ายไฟ 5V 5A

1 รีเลย์ชิลด์

1 Arduino nano สำหรับจัดการกระบวนการเปิด/ปิดไฟ

1 IR นำไปสู่การขับเคลื่อนโรงภาพยนตร์ในบ้าน (นำโดยทรานซิสเตอร์ 2N2222 NPN)

ตัวรับสัญญาณ IR 1 ตัว (สำหรับส่วนการเรียนรู้รหัส IR ของโครงการ ฉันได้รับของฉันจากฮาร์ดดิสก์มัลติมีเดียตัวเก่าพร้อมคำสั่งจากระยะไกล)

3 led's

1 สวิตช์สำหรับโหมดการบำรุงรักษา

1 สวิตช์สำหรับการทำงานกับ Arduino (ระหว่างการอัปโหลด Arduino จะถูกรีเซ็ต)

ตัวเชื่อมต่อ JST และ Dupont บางตัว

และสำหรับกล่อง

ไม้และไม้อัด (แต่ฉันจะไม่อธิบายอย่างลึกซึ้งถึงการทำกล่อง) แค่จะบอกว่าเกี่ยวกับ boomer ภายในกล่องนั้นต้องใช้ไม้อัด 10 มม. และไม้ 18 มม. หากคุณไม่ต้องการเห็น Jukebox ข้ามห้องนั่งเล่นขณะเล่น !!!!

ขั้นตอนที่ 1: คำอธิบายชิ้นส่วนราสเบอร์รี่:

Raspi ต้องจัดการสิ่งต่าง ๆ:

1) คำสั่งไปยังโฮมเธียเตอร์ (ผ่านรีโมท IR)

2) ไฟล์เพลง

3) หน้าจอสัมผัส

4) การเต้นของหัวใจไปยัง Arduino (ซึ่งจัดการ Wdt (นาฬิกาจับเวลาสุนัข))

ฉันเริ่มต้นจากการกระจาย Raspbian strech บนการ์ด SD 16 G (เนื่องจากเราจะอ่านไฟล์จากการ์ด SD เท่านั้น ไม่จำเป็นต้องใช้ HDD) ฉันจะไม่ใช้เวลาในส่วนนี้เนื่องจากเว็บเต็มไปด้วย tuto เกี่ยวกับมัน..

เรามาดูส่วนต่าง ๆ ในขั้นตอนต่อไป….

ขั้นตอนที่ 2: รหัสรีโมท IR

เนื่องจากหาแผนผังของโรงภาพยนตร์ในบ้านไม่เจอ ฉันจึงตัดสินใจขับผ่านคำสั่งจากระยะไกล

ขั้นตอนแรกที่ฉันต้องทำคือเรียนรู้ Raspi เกี่ยวกับรหัสของคำสั่งรีโมทโฮมเธียเตอร์ เพื่อที่ฉันจะได้ใช้ tuto ที่ดีมากใน Instructables จากรหัส IR ของ Austin Stanton

ฉันมีข้อแตกต่างบางประการ อาจเป็นเพราะเวอร์ชันใหม่เนื่องจากคำสั่งสอนค่อนข้างเก่า ไฟล์ hardware.conf ไม่มีอยู่แล้ว (อย่างน้อยฉันก็ไม่พบมัน)

ดูเหมือนว่าทรานซิสเตอร์ที่ใช้ใน tuto จะเป็นทรานซิสเตอร์ PNP ด้วย ส่วนของฉันฉันใช้ 2N2222 ซึ่งเป็น NPN แต่ผลลัพธ์ก็เหมือนกัน (ยกเว้นการเดินสาย !!!!!!!!)

การกำหนดพินมีอยู่ใน /boot/config.txt:

#ระบบอัตโนมัติของ lirc le 2019-07-08dtoverlay=lirc-rpi, gpio_out_pin=22, gpio_in_pin=23

IR LED จะเชื่อมต่อกับพิน 22 ของ Raspi

ข้อสังเกตสำคัญประการหนึ่ง: เมื่อเรียนรู้โค้ดของ Raspi จำเป็นต้องใช้คีย์เวิร์ดที่ระบุไว้ในคำสั่ง

irrecord --list-namespace

นี่คือไฟล์ที่ฉันสร้างสำหรับตู้เพลงของฉัน:

pi@raspitone:/etc/lirc $ cat lircd.conf

# โปรดใช้เวลาในการทำไฟล์นี้ให้เสร็จตามที่อธิบายไว้ใน # https://sourceforge.net/p/lirc-remotes/wiki/Check… # และทำให้ผู้อื่นใช้งานได้โดยส่งไปที่ # #

# ไฟล์กำหนดค่านี้ถูกสร้างขึ้นโดยอัตโนมัติ

# ใช้ lirc-0.9.4c (ค่าเริ่มต้น) ในวันพฤหัสบดีที่ 9 พฤษภาคม 17:33:37 น. 2019 # บรรทัดคำสั่งที่ใช้: -d /dev/lirc0 /root/lircd.conf

# รุ่นเคอร์เนล (uname -r): 4.14.98-v7+ # # ชื่อระยะไกล (ตามไฟล์ปรับแต่ง): ตู้เพลง

# ยี่ห้อของอุปกรณ์ระยะไกล สิ่งที่คุณถืออยู่ในมือ: # อุปกรณ์ระยะไกล รุ่น nr:

# URL ข้อมูลอุปกรณ์ระยะไกล:

# อุปกรณ์ระยะไกลมีอุปกรณ์จับภาพที่ให้มาหรือไม่ e. g., a

#ดองเกิลusb?:

# สำหรับอุปกรณ์ USB ที่ให้มา: รหัสผู้ขาย usb, รหัสผลิตภัณฑ์

# และสตริงอุปกรณ์ (ใช้ dmesg หรือ lsusb):

# ประเภทของอุปกรณ์ควบคุม

# (ทีวี, วีซีอาร์, เครื่องเสียง, ดีวีดี, ดาวเทียม, เคเบิล, HTPC, …):

# อุปกรณ์ควบคุมโดยรีโมตนี้:

เริ่มต้นจากระยะไกล

ชื่อตู้เพลง

บิต 16

แฟล็ก SPACE_ENC|CONST_LENGTH

eps 30

aeps 100

ส่วนหัว 4470 4496

หนึ่ง 542 1693

ศูนย์ 542 581

ptrail 553

pre_data_bits 16

pre_data 0xC2CA

ช่องว่าง 107863

toggle_bit_mask 0x0

ความถี่ 38000

เริ่มรหัส

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

รหัสสิ้นสุด

สิ้นสุดระยะไกล

อย่างที่คุณเห็น ฉันแค่ต้องการ 4 คำสั่งเพื่อขับเคลื่อนโฮมซีเนม่า

เพาเวอร์ (เปิด/ปิด)

AUX => เพื่อสลับไปยังช่องสัญญาณอินพุตแบบออปติคัล (เนื่องจาก HC เริ่มทำงานบนเครื่องอ่าน DVD เสมอ)

และระดับเสียง +/-

คำสั่งที่เกี่ยวข้องจะดำเนินการผ่านคำสั่ง LIRC:

ตัวอย่างเช่น: "ส่ง SEND_ONCE ตู้เพลง KEY_VOLUMEUP"

ขั้นตอนที่ 3: โปรแกรมหลัก

โปรแกรมหลักเขียนด้วย Python:

เนื่องจากฉันยังใหม่ใน Python ฉันเดาว่ามีการปรับปรุงมากมายที่สามารถทำได้ แต่มันทำงานได้….

ข้อกำหนด:

1) จัดการหน้าจอกราฟิก:

สำหรับสิ่งนี้ ฉันใช้ APPJAR ซึ่งเป็น TKINTER แต่มีอารยะธรรมสำหรับนักเรียน (กรณีของฉัน) ซึ่งหมายความว่าใช้ง่ายกว่ามาก อาจมีความเป็นไปได้น้อยกว่า แต่ก็เพียงพอสำหรับจุดประสงค์ของฉัน

2) เล่นไฟล์ mp3:

ฉันใช้ mplayer สำหรับ python

3) สร้างตัวเลขสุ่มสำหรับการเล่นในโหมดสุ่ม:

เนื่องจากฉันไม่อยากฟังเพลงเดิมทุกไตรมาส ฉันจึงสร้างโปรแกรมเล็กๆ ขึ้นมาเพื่อตรวจสอบว่าหมายเลขนั้นไม่มีอยู่ในรายการตัวเลข x ก่อนหน้าหรือไม่ (x ขึ้นอยู่กับความยาวของเพลย์ลิสต์)

ฟังก์ชัน randint ใน python ไม่ได้ "สุ่ม" เท่าที่ฉันเห็น

4) ส่ง "ฮาร์ทบีต" ไปที่ Arduino

5) จัดการเครื่องเล่นไฟล์:

เนื่องจาก Mplayer เป็นแบบอะซิงโครนัส เมื่อไฟล์เริ่มทำงาน ไม่มีทางรู้ว่า Python ทำงานเสร็จแล้วเมื่อไร (อย่างน้อยฉันก็ไม่พบวิธีง่ายๆ เลย)

เพื่อแก้ไขว่าฉันใช้คำสั่ง mplayer ระบุความยาวของไฟล์และความคืบหน้าในไฟล์ปัจจุบัน

สำหรับทั้ง 4 และ 5 ฉันใช้ความเป็นไปได้ที่ได้รับจาก Appjar เพื่อสร้างงานเป็นระยะ (เนื่องจาก appjar เป็นโปรแกรมเหตุการณ์ นี่เป็นวิธีในการสร้างเหตุการณ์เป็นระยะ) ฟังก์ชั่นคือ:

#******************* เริ่ม taskman **********************app.registerEvent(taskman)

p.setPollTime(1000)

Taskman สำหรับ "task manager" ซึ่งเป็น def ในโปรแกรมที่จัดการทุกอย่างที่ไม่ใช่เหตุการณ์บนหน้าจอ (สิ้นสุดไฟล์ที่เล่น, เติมแถบความคืบหน้า, ส่งการเต้นของหัวใจไปยัง Nano, ….)

เมื่อเริ่มต้นหน้าจอจะมีลักษณะดังนี้:

ภาพ
ภาพ

นี่คือโปรแกรม:(สามารถเปิดผ่าน Notepad++ หรือ Geany)

ขั้นตอนที่ 4: ส่วนราสเบอร์รี่: เริ่มอัตโนมัติและเพิ่มไฟล์ใหม่

หากคุณดูโปรแกรมคุณจะเห็นว่าฉันใช้ไฟล์ bash บางไฟล์:

1) Start_jukebox:

อันที่จริง จุดประสงค์คือเพื่อเปิดโฮมซีเนม่าและเปลี่ยนไปใช้อินพุต D. IN (อินพุตออปติคัลในโฮมซีเนม่าของฉัน)

pi@raspitone:/bin $ cat start_jukebox#!/bin/bash

ส่ง SEND_ONCE ตู้เพลง KEY_POWER

นอน7

ส่ง SEND_ONCE ตู้เพลง KEY_AUX

นอน2

2) stop_jukebox:

วิธีปิดโฮมซีเนม่า

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

ส่ง SEND_ONCE ตู้เพลง KEY_POWER

ไฟล์ทุบตีสองไฟล์นี้ถูกเรียกโดย Python ด้วยคำสั่ง os.system

เพื่อเริ่มสคริปต์ Python ฉันทำ bash. เล็กน้อย

pi@raspitone:~ $ cat dem_jukebox.bash#!/bin/bash

cd /home/pi

หลาม jukebox_gui.py

สำหรับการเริ่มต้นอัตโนมัติในโหมด GUI ฉันเพิ่งแก้ไขไฟล์ autostart ใน /etc/xdg/lxsession/LXDE-pi

pi@raspitone:/etc/xdg/lxsession/LXDE-pi $ cat autostart@lxpanel --profile LXDE-pi

@pcmanfm --desktop --profile LXDE-pi

@xscreensaver -no-splash

@lxterminal --command="dem_jukebox.bash"

จุด rpi

การเพิ่มไฟล์ mp3 ใหม่:

ในการเพิ่มไฟล์ใหม่ ฉันต้องการสร้างสคริปต์ Python โดยเฉพาะขนาดเล็ก:

new_song_file.py

ก่อนอื่นฉันจะอธิบายการจัดระเบียบไฟล์ระบบ:

ไฟล์ทั้งหมดอยู่ใน /home/pi

ไฟล์ mp3 อยู่ในไดเร็กทอรี /home/pi/Music

ศิลปินแต่ละคนมีไดเร็กทอรีย่อยของตัวเองซึ่งโฮสต์ไฟล์ mp3 ที่เกี่ยวข้อง

pi@raspitone:~/Music/Mike_oldfield $ ls -ltotal 760516

-rwxr ----- 1 pi pi 2254923 30 มิถุนายน 2017 A_New_Beginning.mp3

-rwxr ----- 1 pi pi 2691736 มิถุนายน 30 2017 Arrival.mp3

-rwxr ----- 1 pi pi 8383244 30 มิถุนายน 2017 Ascension.mp3

-rwxr ----- 1 pi pi 5410816 มิถุนายน 30 2017 Blue_Night.mp3

-rwxr ----- 1 pi pi 13125199 มิถุนายน 30 2017 Castaway_(Instrumental).mp3

-rwxr ----- 1 pi pi 12903583 30 มิถุนายน 2017 Castaway.mp3

-rwxr ----- 1 pi pi 2969869 มิถุนายน 30 2017 Celt.mp3

-rwxr ----- 1 pi pi 9047745 30 มิถุนายน 2560 Chariots_(Instrumental).mp3

-rwxr ----- 1 pi pi 9403263 30 มิถุนายน 2017 Chariots.mp3

ในไดเร็กทอรี เอกสาร เราสามารถค้นหารายการไฟล์ที่สร้างขึ้นเพื่อเล่น

pi@raspitone:~/Documents $ cat list.txtFranz_Ferdinand/Michael_live.mp3

Franz_Ferdinand/evil_and_a_heathen.mp3

Franz_Ferdinand/Walk_Away_live.mp3

Franz_Ferdinand/love_and_destroy.mp3

Franz_Ferdinand/his_fffire.mp3

Franz_Ferdinand/eleanor_put_your_boots_on.mp3

Franz_Ferdinand/missing_you.mp3

Franz_Ferdinand/this_fire_(playgroup_remix).mp3

Franz_Ferdinand/Jacqueline.mp3

นอกจากนี้เรายังสามารถค้นหาข้อมูลเพลย์ลิสต์ (แต่สิ่งนี้สร้างโดยสคริปต์ Python)

สคริปต์ Python ขนาดเล็กเพิ่มเพลงใหม่ที่บันทึกไว้ในเพลงใน list.txt หลังจากจัดรูปแบบไตเติ้ลในรูปแบบ UNIX

นี่คือสคริปต์:(สามารถเปิดได้ผ่าน Notepad++ หรือ Geany)

ขั้นตอนที่ 5: การจัดการพลังงานผ่าน Arduino Nano

เมื่อฉันต้องการที่จะเริ่มต้นอะไรง่ายๆ ฉันจึงตัดสินใจสร้างนาโนเล็กๆ ขึ้นมา:

หลักการ:

เมื่อกดปุ่มสตาร์ท อุปกรณ์จะได้รับพลังงานทั้งหมด นาโนจะเริ่มทำงาน (1 หรือ 2 วินาที) และเข้าควบคุมการจัดการพลังงานโดยทริกเกอร์รีเลย์ซึ่งจะปัดหน้าสัมผัสของปุ่มกด

จากนั้น Nano รอ 35 วินาทีเพื่อรับการเต้นของหัวใจจาก Raspberry (หมายความว่ากระบวนการเริ่มต้นเสร็จสมบูรณ์และโปรแกรมตู้เพลงทำงาน)

ตราบใดที่นาโนได้รับการเต้นของหัวใจก็จะเปิดรีเลย์ไว้ (นาฬิกาจับเวลาสุนัข)

หากไม่มีการเต้นของหัวใจอีกต่อไป (หมายถึงโปรแกรมตู้เพลงหยุดทำงาน) นาโนจะรอ 20 วินาที (เพื่อให้แน่ใจว่า raspi หยุดทำงานอย่างสมบูรณ์) เพื่อปล่อยรีเลย์กำลังไฟ

ตู้เพลงถูกปิดโดยสิ้นเชิง

ฉันเพิ่มสวิตช์เพื่อเปิดใช้งานอินพุตของ nano เพื่อระบุโหมดการบำรุงรักษา (ฉันใช้ตู้เพลงเพื่อจัดการเซิร์ฟเวอร์ raspi อื่นของฉันผ่าน ssh et vnc) นาโนจะปิดกระบวนการสุนัขเฝ้าบ้าน

สังเกต:

อินพุตสำหรับการเต้นของหัวใจจาก Raspi จะต้องถูกดึงลง (แต่ 3.3V จาก Raspi ถือว่าระดับสูงโดย Nano)

NE555 ทำได้ แต่ขี้เกียจและมี nano อยู่ในลิ้นชักตลอด !!!!

นี่คือโปรแกรม C สั้น ๆ (สามารถเปิดได้ด้วย Notepad++)

ขั้นตอนที่ 6: การเดินสาย

การเดินสาย
การเดินสาย
การเดินสาย
การเดินสาย

สำหรับหน้าจอ:

Raspi ใช้สาย HDMI และสาย USB เพื่อจ่ายไฟและขับเคลื่อนหน้าจอ

สำหรับแผงด้านหน้า:

สายเคเบิล USB ยังเชื่อมต่อจาก Raspi เพื่อให้สามารถอัปโหลดไฟล์ใหม่หรือสำรองข้อมูลได้

ต่อสาย USB จากนาโนเพื่อให้สามารถเข้าถึงซอฟต์ได้ (สำหรับการปรับเปลี่ยนหากจำเป็น)

ฉันยังเสียบด็องเกิลคีย์บอร์ดไร้สายบนราสเบอร์รี่เพื่อให้สามารถบำรุงรักษาโดยไม่ต้องใช้ปลั๊ก USB ภายนอก

เนื่องจากมีการใช้ Raspberry และ Arduino การวางสายเคเบิลจึงค่อนข้างง่าย

ทั้งหมดตั้งอยู่บนกระดานเมทริกซ์แถบ

จากราสเบอร์รี่ 2 GPIO ใช้:

Pin22 สำหรับ IR LED

ปักหมุด 27 สำหรับการเต้นของหัวใจไปที่ Arduino

บน Arduino

Pin 2 ใช้เป็นพินขัดจังหวะสำหรับการเต้นของหัวใจจาก Raspi

พิน 3 ถึง 5 ใช้สำหรับขับไฟ LED (เริ่ม, Wdt, การบำรุงรักษา)

Pin 6 ใช้สำหรับสวิตช์บำรุงรักษา

พิน 7 ถูกส่งออกไปยังรีเลย์ชิลด์

นี่คือไฟล์ fritzing:

ขั้นตอนที่ 7: กล่อง

กล่อง
กล่อง

ฉันจะไม่อธิบายมากว่าฉันทำอะไรไปบ้างเพราะมันขึ้นอยู่กับเพาเวอร์แอมป์และลำโพงที่ใช้

ตามข้อมูล โฮมเธียเตอร์จะอยู่ที่ด้านล่างของกล่อง

เหนือลำโพง:

วูฟเฟอร์ 1 ตัว

ลำโพงขนาดกลาง 2 ตัวที่ผมดัดแปลงเพื่อใส่ลงในกล่อง

ด้านบน:

แผงด้านหน้าพร้อมหน้าจอ ไฟ LED สวิตช์ และปลั๊ก USB

ไม้:

สำหรับลำโพง แผงด้านข้างด้านบนและด้านล่างใช้แผ่นไม้ขนาด 18 มม.

ด้านหน้าเป็นไม้อัดหนา 10 มม. พร้อมสกรู 40 มม.

เพื่ออำนวยความสะดวกในการเดินสายและบำรุงรักษา (ถ้าจำเป็น!!!) ผมใส่วงจรไว้ที่ลิ้นชักหลังแผงด้านหน้า

เพื่อหลีกเลี่ยงไม่ให้ความร้อนสูงเกินไป รูขนาดใหญ่จึงทำที่ด้านล่างของแผงด้านหลัง และฉันจึงใส่พัดลม 5V (8 ซม.) ที่แผงด้านหลังข้างวงจรไฟฟ้า

ภาพข้างบนนี้เป็นเพียงการให้แนวคิด

นั่นแหละค่ะ!!!!!!!!!

ขอบคุณสำหรับการอ่านฉัน

แล้วพบกันใหม่ครั้งหน้าสำหรับการผจญภัยครั้งใหม่

แนะนำ: