Ырларды (MP3) Arduino менен PWMди динамикте же Flyback трансформаторунда колдонуу: 6 кадам (сүрөттөр менен)
Ырларды (MP3) Arduino менен PWMди динамикте же Flyback трансформаторунда колдонуу: 6 кадам (сүрөттөр менен)
Anonim
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу
Ардуино менен PWMди динамикте же Flyback трансформаторунда колдонуу менен ырларды (MP3) ойнотуу

Салам балдар, Бул менин биринчи көрсөтмөм, сизге жагат деп ишенем !!

Негизинен, бул долбоордо мен ноутбуктан Arduinoго музыкалык маалыматтарды берүү үчүн Arduino менен ноутбугумдун ортосундагы сериялык байланышты колдондум. Жана маалыматтарды PWM сигналы катары ойнотуу үчүн Arduino TIMERSти колдонуу.

Мен белгилегим келгени, бул долбоор жаңы баштагандар үчүн эмес !!!.

Чынында, бул долбоор эң узун долбоорлордун бири болду, анткени биз аны иштетүү үчүн көп нерселерди жасашыбыз керек.

ДИККАТ

Мен бул көрсөтмөнүн экинчи бөлүгүн жасадым, ал бир топ оңой жана иштөө үчүн минималдуу кыйынчылыктарды талап кылат

Экинчи бөлүккө шилтеме (эң оңой).

1 -кадам: Бул долбоорго керектүү нерселер (талаптар)

1. Arduino Board (биз каалаган тактаны (328, 2560) колдоно алабыз, башкача айтканда Mega, Uno, Mini ж.б.

2. Linux менен PC же ноутбук (мен Fedora 29ду колдонгом) Же Linux менен Live USB

3. Breadboard же Perfboard

4. Зымдарды туташтыруу

5. TC4420 (Mosfet айдоочусу же башка нерсе)

6. Power Mosfet (N же P каналы, сураныч, ошого жараша өткөрүңүз) (мен N-каналды колдондум)

7. Динамик же Flyback Transformer (Ооба, сиз туура окудуңуз !!)

8. Ылайыктуу Power Supply (0-12V) (Мен өз ATX Power Supply колдонгон)

9. Жылуулук чөгүүчү (мен эски компьютеримден куткардым)

10. Windows жана калем диск менен PC.

Ар бир компоненттин деталдуу иштешин жана бул долбоорду билүү үчүн кийинки кадамды окуңуз.

Мен бул көрсөтмөнүн экинчи бөлүгүн түздүм, ал оңой жана минималдуу кыйынчылыктарды талап кылат. Экинчи бөлүккө шилтеме (эң оңой).

2 -кадам: Иштөө принцибин түшүнүү

Ahhh !! инструктивдүү бөлүмдүн эң узун бөлүгү окуу жана жазуу кызыксыз.

Биринчиден, биз бул нерсенин иш жүзүндө кандайча иштээрин карап чыгышыбыз керек.

биз бул жерде эмне кылып жатканыбыз, биринчиден, биз MP3 ырыбызды WAV файлына жана бул файлды шилтемедеги программаны колдонуу менен C баш файлына айландырып жатабыз. Бул C коду чынында 8 биттик (эмне үчүн 8 биттик? Андан ары окуу) маалымат үлгүлөрүн камтыйт, аларды биздин Ардуинону колдонуу менен ойнотуу керек, бул биздин ылдамдык ченибизге ылайык белгиленген ылдамдыкта же ылдамдыкта.

Аудио сигналдын теориясы.

Sampling Rate же Bit Rate эмне экенин билбегендер үчүн:-

Тандоо ылдамдыгы үлгүлөрдүн саны катары аныкталат, биз секундада ойнойбуз (көбүнчө Гц же КГц менен өлчөнөт).

Кененирээк билүү үчүн:-Бул жерди басыңыз

Стандарттык тандоо ылдамдыгы 44100 Гц (эң жакшы сапат), 32000 Гц, 22050 Гц ж.б.

бул 44100 үлгүлөрү секундасына жараша толкун жаратуу үчүн колдонулат дегенди билдирет.

б.а. ар бир үлгү 1/44100 = 22.67 uS белгиленген интервалда ойнотулушу керек.

Андан кийин аудио сигналдын бит тереңдиги келет, бул, адатта, үн санариптик аудиодо канчалык так берилгенин өлчөөчү нерсе. Бит тереңдиги канчалык жогору болсо, санариптик үн ошончолук так болот.

Бирок Arduino же башка 16 МГц сааты бар башка микроконтроллер менен бизди 8-битке чейин колдонууга мүмкүндүк берет. Мен муну эмне үчүн түшүндүрүп берем.

1028-беттеги 328p маалымат барагында 102-бетте формула бар:- Маалыматтар жадыбалы

Мен майда -чүйдөсүнө чейин айтпайм, эмне үчүн мен бул формуланы колдонуп жатам.

Сигналдын жыштыгы = Саат Сигнал / N x (1+TOP)

Саат сигналы = 16МГц (Arduino тактасы)

N = prescaler (1 биздин долбоордун мааниси)

TOP = мааниси 0дон 2^16га чейин (16-бит таймер үчүн) (255 = 2^8 (8-бит) биздин долбоор үчүн)

биз сигналдын жыштыгынын маанисин алабыз = 62,5 кГц

Бул ташуучу толкундун жыштыгы Бит тереңдигине көз каранды дегенди билдирет.

Айталы, эгер биз TOP маанисин колдонсок = 2^16 = 65536 (б.а. 16-бит тереңдиги)

анда биз сигналдын жыштыгынын маанисин алабыз = 244 Гц (биз колдоно албайбыз)

OKK … Ошентип, аудио сигналдардын иштешинин теориясы жетиштүү, ошондуктан Долбоорго кайталы.

Ыр үчүн түзүлгөн C коду Arduinoго көчүрүлүп, ойнотулушу мүмкүн, бирок биз 8000 Гц ылдамдыкта ылдамдыкта 3 секундага чейин аудио ойнотууга чейин чектелгенбиз. Анткени бул C коду текст файлы жана демек кысылган эмес, тескерисинче. Жана өтө көп орунду ээлейт. (мисалы, 43-сек аудиосу бар C код файлы, 44 КГц үлгүлөрү 23 Мб чейин орун алат). Ал эми биздин Arduino Mega бизге болжол менен 256 Кб мейкиндик берет.

Ошентип, биз кантип Arduino аркылуу ырларды ойнойбуз. Бул мүмкүн эмес. Бул көрсөтмө жасалма. Окурмандар, кабатыр болбо

Мына ошондуктан биз Arduinoго аудио маалыматтарды жөнөтүү үчүн жогорку ылдамдыкта (1 Mb/s чейин) Arduino ортосундагы кандайдыр бир байланышты колдонушубуз керек.

Бирок муну аткаруу үчүн бизге канча ылдамдык керек?

Жооп секундасына 44000 байт, бул 44000*8 = 325, 000 Бит/сек жогору ылдамдыкты билдирет.

Бул маалыматты биздин Arduinoго жөнөтүү үчүн бизге чоң сактагычы бар башка периферия керек. Жана бул Linux менен иштеген компьютерибиз болот (эмне үчүн Linux менен PC ??? бул тууралуу көбүрөөк билүү үчүн андан ары окуңуз.)

Аааа … Бул биз сериялык байланышты колдоно алабыз дегенди билдирет … Бирок күтө туруңуз … сериал 115200 бит/сек чейин ылдамдыкта мүмкүн, бул (325000/115200 = 3), бул талап кылынгандан үч эсе жай экенин билдирет.

Жок, досторум, андай эмес. Биз ылдамдыкты же Байдын ылдамдыгын 500, 000 Бит/с ылдамдыгын 20-30 см максималдуу кабель менен колдонобуз. Бул талап кылынгандан 1,5 эсе тез.

Эмнеге Windows эмес, Linux ???

Ошентип, биз үлгүлөрдү PCбиз менен 1/44100 = 22.67 uS интервалында (жогоруда да көрсөтүлгөн) жөнөтүшүбүз керек.

Ошентип, биз муну кантип программалай алабыз?

Биз уйку функциясын колдонуп, интервалда серия аркылуу маалымат байтын жөнөтүү үчүн C ++ колдоно алабыз

nanosleep, Chrono, ж.

үчүн (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

БИРОК ВИНДОУСТА ИШТЕБЕЙТ, Linuxта да мындай иштеген эмес (бирок менин кодумда тиркелген башка жолду таптым.)

Анткени биз терезелерди колдонуу менен мындай майда -барат нерсеге жете албайбыз. Мындай гранулярдуулукка жетүү үчүн Linux керек.

Мен Linux менен тапкан көйгөйлөр …

биз Linuxтун жардамы менен мындай майда -барат нерсеге жете алабыз, бирок мен программамды 22uS үчүн уктатуучу функция тапкан жокмун.

Nanosleep, Chrono nanosleep ж. Бирок мага так, так 22 АКШ керек болчу. Мен гуглдагы ар бир баракты изилдеп көрдүм жана C/C ++ тилинде жеткиликтүү болгон бардык функцияларды сынап көрдүм, бирок мен үчүн эч нерсе иштеген жок. Андан кийин мен өзүмдүн функциямды ойлоп таптым, бул мага чыныгы тумар катары иштеди.

Менин кодум азыр так, так 1uS же андан жогору уктоону камсыздайт !!!

Ошентип, биз оор бөлүгүн басып өттүк, калганы оңой …

Жана биз белгилүү бир жыштык менен Arduino аркылуу PWM сигналын түзгүбүз келет, ошондой эле ташуучу толкун жыштыгы. (62.5KHz (жогоруда эсептелгендей) Сигналдын жакшы иммунитети үчүн).

Ошентип, биз PWM түзүү үчүн Arduino деп аталган TIMERSти колдонушубуз керек. Айтмакчы, мен бул боюнча майда -чүйдөсүнө чейин барбайм, анткени сиз TIMERS темасында көптөгөн окуу куралдарын таба аласыз, бирок эгер таппасаңыз, төмөндө комментарий калтырам.

Мен TC4420 Mosfet драйверин колдондум, биздин Arduino Pinsти сактап калуу үчүн, анткени алар кээде MOSFETти айдап кетүү үчүн ушунчалык көп токту жеткире алышпайт.

Ошентип, бул долбоордун дээрлик теориясы болчу, биз азыр схеманы көрө алабыз.

КӨҢҮЛ БУРУУ

Чындыгында, бул долбоор атайылап кыйын болуп калды (мен эмне үчүн айтып коёюн), noPCди талап кылган дагы бир ыкма бар, менин кийинки instructable. Link бул жерде Arduino жана спикер.

*Бул долбоордун негизги максаты - сериялык байланышты колдонуу жана анын күчүн билүү жана компьютерибизди ушундай так аралыкта тапшырмаларды так аткарууга кантип программалай аларыбызды билүү*.

3 -кадам: схемалык

Схемалык
Схемалык

Бардык компоненттерди схемада көрсөтүлгөндөй туташтырыңыз. Демек, бул жерде сизде эки вариант бар:-

1. Динамикти туташтыруу (5V менен туташкан)

2. Flyback Transformer туташтыруу (12V менен туташкан)

Мен экөөнү тең сынап көрдүм. Анан экөө тең абдан жакшы иштейт.

Жоопкерчиликтен баш тартуу:-

*Мен Flyback трансформаторун сактык менен колдонууну сунуштайм, анткени ал коркунучтуу болушу мүмкүн, анткени ал жогорку чыңалуу жаратат. Ошондо мен эч кандай зыян тартпайм*.

4 -кадам: Audacity колдонуп MP3 файлын WAVга айландыруу

Audacity колдонуп MP3ти WAV файлына айландырыңыз
Audacity колдонуп MP3ти WAV файлына айландырыңыз
Audacity колдонуп MP3ти WAV файлына айландырыңыз
Audacity колдонуп MP3ти WAV файлына айландырыңыз
Audacity колдонуп MP3ти WAV файлына айландырыңыз
Audacity колдонуп MP3ти WAV файлына айландырыңыз

Ошентип, биринчи кезекте, программаны жүктөп алыңыз

1. Audacity, издөө жана Google'дан жүктөө

2. WAV файлын C-кодго айландыруу үчүн WAVToCode деп аталган терезе тиркемесин жүктөп алыңыз

Бул шилтемеден WAVToCode программасын колдонууну үйрөнүп, бул шилтемеден жүктөп алсаңыз болот.

Мен ошондой эле эки программаны кантип колдонуу керектиги боюнча деталдуу кадамдарды берем.

Сураныч, бул көрсөтмө менен байланышкан сүрөттөрдү караңыз.

Бул кадамда биз MP3ны Wavга айландырабыз. (Сүрөттөрдү ээрчиңиз, Долбоордун ылдамдыгы 44100Гц болушу керек)

Кийинки кадамда, биз wav файлын C кодексине айландырабыз.

5-кадам: WAVга C-Code

WAVга C-Code
WAVга C-Code
WAVга C-Code
WAVга C-Code
WAV C-Code
WAV C-Code

Сүрөттөрдү ээрчиңиз.

Акыркы эки сүрөттү караңыз, өзгөртүүлөр так бирдей болушу керек, баш тамгалар баш тамга, кичине тамга кичине болушу керек, болбосо сиз компиляция учурунда синтаксистик ката аласыз.

(1мин 41с ыр 23мб орун алганын көрө аласыз.)

Ырдын атын жана узактыгын ырыңыздын аты жана узактыгы менен өзгөртүңүз.

Жана C Code файлын сактаңыз.

Муну Arduino менен ойногусу келген бардык ырларга жасаңыз

6 -кадам: Акыркы файлды түзүңүз жана Linuxту күйгүзүңүз

Акыркы файлды түзүңүз жана Linuxту күйгүзүңүз
Акыркы файлды түзүңүз жана Linuxту күйгүзүңүз
Акыркы файлды түзүп, Linuxту күйгүзүңүз
Акыркы файлды түзүп, Linuxту күйгүзүңүз
Акыркы файлды түзүп, Linuxту күйгүзүңүз
Акыркы файлды түзүп, Linuxту күйгүзүңүз

Бардык которулган ырларыңызды бул шилтемеде берилген Файлга кошуңуз.

Жана сүрөттөрдү ээрчиңиз.

Мен тиркеген кодду Arduinoго жүктөңүз.

C Code файлынын аталыштарын унутпаңыз. (Мисалы, жашоо образы, доллар, кийүү), анткени биз кодубузга так ошол аттарды регистрди эске алуу менен жазышыбыз керек.

Акырында Fedora Live USB же башка күйгүзүңүз жана gcc компиляторун орнотуңуз, андан кийин папкадан компиляциялоо көрсөтмөлөрүн колдонуп программаны түзүңүз жана иштетиңиз.

Акыр -аягы, сиз Speaker же Flybackтин ырларын уга аласыз.

Бул көрсөтмөнү окугандыгыңыз үчүн рахмат жана сизге жакса комментарий жазыңыз.

ЭСКЕРТҮҮ Мен бул көрсөтмөнүн экинчи бөлүгүн түздүм, ал бир топ оңой жана иштөө үчүн минималдуу кыйынчылыктарды талап кылат. Экинчи бөлүккө шилтеме (эң оңой)

Сунушталууда: