Სარჩევი:

სიმღერების დაკვრა (MP3) Arduino– ით PWM– ს გამოყენებით სპიკერზე ან Flyback Transformer– ზე: 6 ნაბიჯი (სურათებით)
სიმღერების დაკვრა (MP3) Arduino– ით PWM– ს გამოყენებით სპიკერზე ან Flyback Transformer– ზე: 6 ნაბიჯი (სურათებით)

ვიდეო: სიმღერების დაკვრა (MP3) Arduino– ით PWM– ს გამოყენებით სპიკერზე ან Flyback Transformer– ზე: 6 ნაბიჯი (სურათებით)

ვიდეო: სიმღერების დაკვრა (MP3) Arduino– ით PWM– ს გამოყენებით სპიკერზე ან Flyback Transformer– ზე: 6 ნაბიჯი (სურათებით)
ვიდეო: Leap Motion SDK 2024, ნოემბერი
Anonim
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ს გამოყენებით PWM სპიკერზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ით PWM– ს გამოყენებით დინამიკზე ან Flyback Transformer– ზე
დაუკარით სიმღერები (MP3) Arduino– ით PWM– ს გამოყენებით დინამიკზე ან Flyback Transformer– ზე

Გამარჯობათ ბიჭებო, ეს არის ჩემი პირველი სასწავლო ინსტრუქცია, იმედი მაქვს მოგეწონებათ !!

ძირითადად, ამ პროექტში მე გამოვიყენე სერიული კომუნიკაცია ჩემს არდუინოსა და ჩემს ლეპტოპს შორის, ლეპტოპიდან მუსიკალური მონაცემების გადასაცემად არდუინოში. Arduino TIMERS– ის გამოყენებით მონაცემების დაკვრა PWM სიგნალის სახით.

მინდოდა აღვნიშნო, რომ ეს პროექტი არ არის დამწყებთათვის !!!.

სინამდვილეში, ეს პროექტი იყო ერთ -ერთი ყველაზე გრძელი პროექტი, რადგან ბევრი რამის გაკეთება გვიწევს იმისათვის, რომ ის იმუშაოს.

ყურადღება

მე გავაკეთე ამ ინსტრუქციის მეორე ნაწილი, რომელიც ბევრად უფრო ადვილია და სამუშაოს მინიმალური პრობლემები სჭირდება

მეორე ნაწილის ბმული (უმარტივესი).

ნაბიჯი 1: რაც ჩვენ გვჭირდება ამ პროექტისთვის (მოთხოვნები)

1. Arduino დაფა (ჩვენ შეგვიძლია გამოვიყენოთ ნებისმიერი დაფა (328, 2560) ანუ მეგა, უნიო, მინი და სხვა, მაგრამ კონკრეტული განსხვავებული ქინძისთავებით)

2. კომპიუტერი ან ლეპტოპი Linux– ით (მე გამოვიყენე Fedora 29) ან Live USB Linux– ით

3. Breadboard ან Perfboard

4. დამაკავშირებელი მავთულები

5. TC4420 (Mosfet მძღოლი ან მსგავსი რამ)

6. სიმძლავრე Mosfet (N ან P არხი, გთხოვთ მიაწოდოთ შემდეგ შესაბამისად) (მე გამოვიყენე N არხი)

7. სპიკერი ან Flyback Transformer (დიახ თქვენ სწორად წაიკითხეთ !!)

8. შესაფერისი კვების წყარო (0-12V) (მე გამოვიყენე ჩემი საკუთარი ATX კვების ბლოკი)

9. გამათბობელი (მე ამოღებული მაქვს ძველი კომპიუტერიდან)

10. კომპიუტერი Windows და კალამიანი დისკით.

თითოეული კომპონენტისა და ამ პროექტის დეტალური მუშაობის შესასწავლად გთხოვთ წაიკითხოთ შემდეგი ნაბიჯი.

მე გავაკეთე ამ ინსტრუქციის მეორე ნაწილი, რაც ბევრად უფრო ადვილია და სამუშაოს მინიმალური პრობლემები სჭირდება. მეორე ნაწილთან დაკავშირება (უმარტივესი).

ნაბიჯი 2: მუშაობის პრინციპის გაგება

აჰჰ !! ინსტრუქციის ყველაზე გრძელი ნაწილი, ამ მონაკვეთის კითხვა და წერა ორივე მოსაწყენია.

უპირველეს ყოვლისა, ჩვენ უნდა მივიღოთ მიმოხილვა, თუ როგორ მუშაობს სინამდვილეში ეს.

რასაც ჩვენ ვაკეთებთ აქ არის ის, რომ ჩვენ პირველ რიგში ვაკონვერტირებთ ჩვენს MP3 სიმღერას WAV ფაილში და ამ ფაილს C სათაურის ფაილში პროგრამული უზრუნველყოფის გამოყენებით, რომელიც არის ბმულში. ეს C კოდი სინამდვილეში შეიცავს 8-ბიტიან (რატომ 8-ბიტიანი? წაიკითხეთ შემდგომ) მონაცემთა ნიმუშებს, რომლებიც უნდა ვითამაშოთ ჩვენი Arduino– ს გამოყენებით ფიქსირებული სიჩქარით ან სიჩქარით, რაც მითითებულია ჩვენი შერჩევის მაჩვენებლის მიხედვით.

აუდიო სიგნალის თეორია.

მათთვის, ვინც არ იცის რა არის შერჩევის მაჩვენებელი ან ბიტ განაკვეთი:-

შერჩევის მაჩვენებელი განისაზღვრება როგორც ნიმუშების რაოდენობა, ჩვენ ვთამაშობთ მეორეში (ჩვეულებრივ იზომება Hz ან KHz).

უფრო დეტალურად რომ იცოდეთ:-დააწკაპუნეთ აქ

სტანდარტული შერჩევის მაჩვენებლებია 44100 Hz (საუკეთესო ხარისხი), 32000 Hz, 22050 Hz და ა.შ.

რაც იმას ნიშნავს, რომ 44100 ნიმუში გამოიყენება წამში, რათა წარმოქმნას ტალღა შესაბამისად.

ანუ თითოეული ნიმუში უნდა იყოს დაკრული 1/44100 = 22.67 აშშ დოლარით.

შემდეგ მოდის აუდიო სიგნალის ბიტ სიღრმე, რომელიც ჩვეულებრივ ზომავს რამდენად ზუსტად არის წარმოდგენილი ხმა ციფრულ აუდიოში. რაც უფრო მაღალია ბიტის სიღრმე, მით უფრო ზუსტია ციფრული ხმა.

მაგრამ Arduino– სთან ან სხვა მიკროკონტროლერთან ერთად 16Mhz საათი საშუალებას გვაძლევს გამოვიყენოთ მხოლოდ 8 ბიტიანი. აგიხსნით რატომ.

არსებობს ფორმულა.102 გვერდზე 328p მონაცემთა ცხრილში:- მონაცემთა ცხრილი

მე არ შევალ დეტალურად, რატომ ვიყენებ ამ ფორმულას.

სიგნალის სიხშირე = საათის სიგნალი / N x (1+TOP)

საათის სიგნალი = 16 MHz (Arduino დაფა)

N = prescaler (1 არის ღირებულება ჩვენი პროექტისთვის)

TOP = მნიშვნელობა 0-დან 2^16-მდე (16 ბიტიანი ტაიმერის მრიცხველისთვის) (255 = 2^8 (8 ბიტიანი) ჩვენი პროექტისათვის)

ჩვენ ვიღებთ სიგნალის სიხშირის მნიშვნელობას = 62.5 კჰც

ეს ნიშნავს, რომ გადამზიდავი ტალღის სიხშირე დამოკიდებულია ბიტის სიღრმეზე.

დავუშვათ, თუ ჩვენ ვიყენებთ TOP მნიშვნელობას = 2^16 = 65536 (ანუ ბიტის სიღრმე 16 ბიტიანი)

შემდეგ ვიღებთ სიგნალის სიხშირის მნიშვნელობას = 244 ჰერცი (რომელსაც ჩვენ ვერ ვიყენებთ)

OKK … ასე რომ, ამდენი თეორია იმის შესახებ, თუ როგორ მუშაობს აუდიო სიგნალები, საკმარისია, ასე რომ დავუბრუნდეთ პროექტს.

სიმღერისთვის წარმოქმნილი C კოდი შეიძლება გადაწერილი იყოს Arduino– ში და შეიძლება დაკვრა, მაგრამ ჩვენ შეზღუდული ვართ 3 წამამდე აუდიო დაკვრით, შერჩევის სიჩქარით 8000 Hz. ვინაიდან ეს C კოდი არის ტექსტური ფაილი და, შესაბამისად, არ არის შეკუმშული და საკმაოდ დეკომპრესიული. და ძალიან ბევრ ადგილს იკავებს. (მაგ. C კოდის ფაილი 43 წმ აუდიოთი 44, 1 KHz ნიმუშებით იკავებს ადგილს 23 მბ-მდე). და ჩვენი Arduino Mega გვაძლევს სივრცეს დაახლოებით 256 Kb.

როგორ ვითამაშებთ სიმღერებს არდუინოს გამოყენებით. Ეს შეუძლებელია. ეს ინსტრუქცია ყალბია. არ ინერვიულო მკითხველებო, სწორედ ამიტომ, ჩვენ უნდა გამოვიყენოთ რაიმე სახის კომუნიკაცია Arduino– ს შორის ძალიან მაღალი სიჩქარით (1 მბ/წმ – მდე) აუდიო მონაცემების Arduino– ში გასაგზავნად.

მაგრამ ზუსტად რამდენი სიჩქარე გვჭირდება ამის გასაკეთებლად ??

პასუხი არის 44000 ბაიტი წამში, რაც ნიშნავს სიჩქარეს 44000*8 = 325, 000 ბიტი/წმ -ზე მეტი.

ჩვენ გვჭირდება სხვა პერიფერიული მოწყობილობა, რომელსაც აქვს დიდი საცავი, რომ გავაგზავნოთ ეს მონაცემები ჩვენს არდუინოში. და ეს იქნება ჩვენი კომპიუტერი Linux– ით (რატომ კომპიუტერი Linux– ით ??? გთხოვთ, წაიკითხოთ მეტი, რომ მეტი იცოდეთ ამის შესახებ.)

აჰა … ეს ნიშნავს, რომ ჩვენ შეგვიძლია გამოვიყენოთ სერიული კომუნიკაცია … მაგრამ დაელოდეთ … სერიალი შესაძლებელია მხოლოდ 115200 ბიტი/წმ სიჩქარით, რაც ნიშნავს (325000/115200 = 3), რომ ის სამჯერ ნელია ვიდრე საჭიროა.

არა, ჩემო მეგობრებო, ეს ასე არ არის. ჩვენ გამოვიყენებთ სიჩქარეს ან Baud Rate- ს 500, 000 ბიტი/წმ სიჩქარით კაბელით მაქსიმუმ 20-30 სმ-მდე, რაც 1.5-ჯერ მეტია ვიდრე საჭიროა.

რატომ Linux და არა Windows ???

ასე რომ, ჩვენ უნდა გავაგზავნოთ ნიმუშები ინტერვალით (ასევე მითითებულია ზემოთ) 1/44100 = 22.67 uS ჩვენს კომპიუტერთან.

ასე რომ, როგორ შეგვიძლია დავაპროგრამოთ ის ამის გასაკეთებლად ??

ჩვენ შეგვიძლია გამოვიყენოთ C ++, რომ გავაგზავნოთ მონაცემთა ბაიტი სერიალის საშუალებით ინტერვალით ძილის ფუნქციის გამოყენებით

როგორიცაა ნანო ძილი, ქრონო და ა.შ. და ა.შ.…

for (int x = 0; x

sendData (x);

ნანო ძილი (22000); // 22uS

}

მაგრამ ის არ მუშაობს Windows– ზე ასევე არ მუშაობდა Linux– ზე ამ გზით (მაგრამ მე ვიპოვე სხვა გზა, რომელსაც თქვენ ხედავთ ჩემს თანდართულ კოდში).

იმიტომ, რომ ჩვენ ვერ მივაღწევთ ასეთ მარცვლოვანებას ფანჯრების გამოყენებით. თქვენ გჭირდებათ Linux, რომ მიაღწიოთ ამგვარ სიზუსტეს.

პრობლემები, რომლებიც მე აღმოვაჩინე Linux– თანაც კი…

ჩვენ შეგვიძლია მივაღწიოთ ამგვარ სიზუსტეს Linux– ის გამოყენებით, მაგრამ მე ვერ ვიპოვნე ასეთი ფუნქცია, რომ დამეძინა ჩემი პროგრამა 22uS.

ფუნქციები, როგორიცაა nanosleep, Chrono nanosleep და ა.შ. და ა.შ. ასევე არ მუშაობს, რადგან ისინი უზრუნველყოფენ ძილს მხოლოდ 100 აშშ დოლარზე მეტი. მაგრამ მე მჭირდებოდა ზუსტად, ზუსტად 22 აშშ დოლარი. მე გამოვიკვლიე Google– ის თითოეული გვერდი და ექსპერიმენტი გავუკეთე ყველა შესაძლო ფუნქციას, რომელიც ხელმისაწვდომია C/C ++ - ში, მაგრამ არაფერი გამომივიდა. შემდეგ გამოვედი ჩემი საკუთარი ფუნქციით, რომელიც მუშაობდა ჩემთვის, როგორც ნამდვილი ხიბლი.

და ჩემი კოდი ახლა იძლევა ზუსტ, ზუსტად 1uS ძილს ან ზემოთ !!!

ასე რომ, ჩვენ განვიხილეთ რთული ნაწილი და დანარჩენი ადვილია…

ჩვენ გვსურს PWM სიგნალის გენერირება Arduino– ს გამოყენებით კონკრეტული სიხშირით, ასევე ტალღის მატარებელი სიხშირით. (62.5 KHz (ზემოთ გამოთვლილი) სიგნალის კარგი იმუნიტეტისთვის).

ამრიგად, ჩვენ უნდა გამოვიყენოთ Arduino– ს ეგრეთ წოდებული TIMERS PWM– ის შესაქმნელად. სხვათა შორის, მე არ დაწვრილებით განვიხილავ ამაზე, რადგან თქვენ ნახავთ ბევრ გაკვეთილს TIMERS– ის თემაზე, მაგრამ თუ ვერ იპოვით, შემდეგ კომენტარს გავაკეთებ ქვემოთ.

მე გამოვიყენე TC4420 Mosfet– ის დრაივერი ჩვენი Arduino Pins– ის შესანახად, რადგან მათ არ შეუძლიათ ამდენი დენის მიწოდება ხანდახან MOSFET– ის მართვისთვის.

ასე რომ, ეს იყო ამ პროექტის თითქმის თეორია, ახლა ჩვენ შეგვიძლია ვნახოთ წრიული დიაგრამა.

ყურადღება გაამახვილე ყურადღება ყურადღება

სინამდვილეში, ეს პროექტი გამიჭირდა განზრახ (მე გეტყვით რატომ), არის კიდევ ერთი მეთოდი, რომელიც არ საჭიროებს არა მხოლოდ PC- ს Arduino- ს და მომხსენებელს ჩემს შემდგომ ინსტრუქციაში. ბმული აქ არის.

*ამ პროექტის მთავარი მიზანია სერიული კომუნიკაციის გამოყენება და მისი ძალაუფლების ცოდნა და ვისწავლოთ თუ როგორ შეგვიძლია ჩვენი კომპიუტერის პროგრამირება დავალებების ზუსტად შესასრულებლად.

ნაბიჯი 3: სქემატური

სქემატური
სქემატური

შეაერთეთ ყველა კომპონენტი, როგორც ეს მოცემულია სქემატურ რეჟიმში. ასე რომ თქვენ გაქვთ ორი ვარიანტი:-

1. შეაერთეთ სპიკერი (უკავშირდება 5 ვ)

2. შეაერთეთ Flyback Transformer (დაკავშირებულია 12V– თან)

ორივე ვცადე. და ორივე საკმაოდ კარგად მუშაობს.

უარი პასუხისმგებლობაზე:-

*მე გირჩევთ გამოიყენოთ Flyback Transformer სიფრთხილით, რადგან ის შეიძლება საშიში იყოს, რადგან ის აწარმოებს მაღალ ძაბვებს. და მე არ ვიქნები პასუხისმგებელი რაიმე სახის ზიანისთვის.*

ნაბიჯი 4: გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით

გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით
გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით
გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით
გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით
გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით
გადაიყვანეთ MP3 WAV ფაილში Audacity– ის გამოყენებით

ასე რომ, პირველ რიგში, გადმოწერეთ პროგრამა

1. სიმამაცე, მოძებნეთ და გადმოწერეთ Google- დან

2. WAV ფაილის C- კოდზე გადასაყვანად ჩამოტვირთეთ ფანჯრის პროგრამა, სახელწოდებით WAVToCode

თქვენ შეგიძლიათ გაიგოთ როგორ გამოიყენოთ WAVToCode პროგრამული უზრუნველყოფა ამ ბმულიდან და გადმოწეროთ ამ ბმულიდან.

მე ასევე მივცემ დეტალურ ნაბიჯებს, თუ როგორ გამოიყენოთ ორივე პროგრამული უზრუნველყოფა.

გთხოვთ, იხილოთ ამ ინსტრუქციასთან დაკავშირებული ფოტოები.

ამ ნაბიჯში ჩვენ MP3– ს გადავიყვანთ Wav– ში. (მიჰყევით ფოტოებს, პროექტის სიხშირე უნდა იყოს 44100 ჰც)

მომდევნო ეტაპზე, ჩვენ გადავაქცევთ wav ფაილს C კოდში.

ნაბიჯი 5: WAV C კოდიდან

WAV C კოდიდან
WAV C კოდიდან
WAV C კოდიდან
WAV C კოდიდან
WAV C კოდიდან
WAV C კოდიდან

მიჰყევით ფოტოებს.

იხილეთ ბოლო ორი სურათი, ცვლილებები ზუსტად იგივე უნდა იყოს, დიდი ასოები უნდა იყოს დიდი და მცირე ასოები, ან თქვენ მიიღებთ სინტაქსურ შეცდომას შედგენისას.

(თქვენ ხედავთ, რომ 41 წუთის 1 წუთის სიმღერა 23 მბ ადგილს იკავებდა.)

შეცვალეთ სიმღერის სახელი და სიგრძე თქვენი სიმღერის სახელისა და ხანგრძლივობის შესაბამისად.

და შეინახეთ C კოდის ფაილი.

გააკეთეთ ეს ყველა იმ სიმღერაზე, რომელზეც გსურთ არდუინოსთან ერთად დაკვრა

ნაბიჯი 6: შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux

შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux
შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux
შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux
შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux
შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux
შექმენით საბოლოო ფაილი და გაუშვით თქვენი Linux

დაამატეთ თქვენი ყველა გარდაქმნილი სიმღერა ამ ბმულზე მოცემულ ფაილში.

და მიჰყევით სურათებს.

ატვირთეთ კოდი Arduino– ში, რომელიც მე დავამატე.

დაიმახსოვრეთ C კოდის ფაილის სახელები.

ბოლოს აანთეთ თქვენი Fedora Live USB ან სხვა და დააინსტალირეთ gcc შემდგენელი და შემდეგ საქაღალდედან შემდგენელი ინსტრუქციის გამოყენებით შეადგინეთ პროგრამა და გაუშვით.

საბოლოო ჯამში, თქვენ გექნებათ შესაძლებლობა მოუსმინოთ სიმღერებს Speaker ან Flyback– დან.

გმადლობთ რომ კითხულობთ ამ სასწავლო ინსტრუქციას და გთხოვთ მოგვწეროთ თუ მოგეწონებათ.

ATTENTIONI მე გავაკეთე ამ ინსტრუქციის მეორე ნაწილი, რაც ბევრად უფრო ადვილია და მუშაობისთვის მინიმალური უბედურებაა საჭირო. მეორე ნაწილის ბმული (უმარტივესი)

გირჩევთ: