Агуулгын хүснэгт:

Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах: 6 алхам (зурагтай)
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах: 6 алхам (зурагтай)

Видео: Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах: 6 алхам (зурагтай)

Видео: Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах: 6 алхам (зурагтай)
Видео: REAL RACING 3 LEAD FOOT EDITION 2024, Долдугаар сарын
Anonim
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) -ыг Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах
Дуу (MP3) -ыг Arduino -тай PWM ашиглан чанга яригч эсвэл Flyback трансформатор дээр тоглуулах

Сайн уу залуусаа, Энэ бол миний анхны зааварчилгаа, танд таалагдана гэж найдаж байна !!

Үндсэндээ энэ төсөлд би зөөврийн компьютерээсээ Arduino руу хөгжмийн өгөгдлийг дамжуулахын тулд Arduino болон зөөврийн компьютер хоёрын хоорондох цуваа холболтыг ашигласан болно. Arduino TIMERS ашиглан өгөгдлийг ХОУХД -ийн дохио болгон тоглуулах.

Энэ төсөл нь эхлэгчдэд зориулагдаагүй гэдгийг би дурдахыг хүссэн юм. !!!

Үнэндээ энэ төсөл бол хамгийн урт хугацааны төслүүдийн нэг байсан, учир нь бид үүнийг ажиллуулахын тулд олон зүйлийг хийх ёстой.

АНХААР

Би энэ зааварчилгааны хоёр дахь хэсгийг хийсэн бөгөөд энэ нь илүү хялбар бөгөөд ажиллахад хамгийн бага бэрхшээл шаардагддаг

Хоёрдахь хэсгийн холбоос (хамгийн хялбар).

Алхам 1: Энэхүү төсөлд бидэнд хэрэгтэй зүйлс (шаардлага)

1. Arduino Board (бид ямар ч самбар ашиглаж болно (328, 2560), өөрөөр хэлбэл Mega, Uno, Mini гэх мэт, гэхдээ өөр өөр тээглүүртэй)

2. Линукс бүхий компьютер эсвэл зөөврийн компьютер (би Fedora 29 ашигласан) эсвэл Linux -тэй Live USB

3. Breadboard эсвэл Perfboard

4. Утас холбох

5. TC4420 (Mosfet драйвер эсвэл ийм зүйл)

6. Power Mosfet (N эсвэл P суваг, дараа нь утсаар холбоно уу) (би N суваг ашигласан)

7. Чанга яригч эсвэл Flyback трансформатор (Тийм ээ, та үүнийг зөв уншсан !!)

8. Тохиромжтой цахилгаан хангамж (0-12V) (би өөрийн ATX цахилгаан хангамжийг ашигласан)

9. Дулаан шингээгч (би хуучин компьютерээсээ аварсан)

10. Windows болон үзэг хөтлөгчтэй компьютер.

Бүрэлдэхүүн хэсэг тус бүрийн нарийвчилсан ажлын талаар болон энэ төслийн талаар мэдэхийн тулд дараагийн алхамыг уншина уу.

Би энэ зааварчилгааны хоёр дахь хэсгийг хийсэн бөгөөд энэ нь илүү хялбар бөгөөд ажиллахад бага зэрэг бэрхшээл шаардагддаг. Хоёр дахь хэсгийг холбоно уу (хамгийн хялбар нь).

Алхам 2: Ажлын зарчмыг ойлгох

Аххх !! Энэ хэсгийг унших, бичих нь хамгийн уйтгартай байдаг.

Юуны өмнө бид энэ зүйл хэрхэн ажилладаг талаар ерөнхий тоймыг олж авах хэрэгтэй.

Бид энд юу хийж байна вэ гэхээр эхлээд бид линк дээрх програм хангамжийг ашиглан MP3 дуугаа WAV файл болон энэ файлыг C толгой файл болгон хөрвүүлж байна. Энэхүү C код нь үнэндээ 8 битийн (яагаад 8 битийн талаар уншина уу) өгөгдлийн дээжийг агуулдаг бөгөөд бидний Arduino ашиглан тогтмол хурд эсвэл хурдаар тоглох шаардлагатай байдаг бөгөөд үүнийг манай дээж авах хурдны дагуу зааж өгсөн болно.

Аудио дохионы онол.

Түүврийн хэмжээ эсвэл битийн хурд гэж юу болохыг мэдэхгүй хүмүүст:-

Дээж авах түвшинг бид нэг секундын дотор тоглодог дээжийн тоогоор тодорхойлдог (ихэвчлэн Гц эсвэл КГц -ээр хэмждэг).

Дэлгэрэнгүй мэдээллийг: -Энд дарна уу

Стандарт дээж авах хурд нь 44100 Гц (хамгийн сайн чанар), 32000 Гц, 22050 Гц гэх мэт

Үүний дагуу долгион үүсгэхийн тулд 44100 дээжийг нэг секундын дотор ашигладаг гэсэн үг юм.

Жишээлбэл, дээж бүрийг 1/44100 = 22.67 uS гэсэн тогтмол интервалаар тоглох шаардлагатай.

Дараа нь аудио дохионы битийн гүн ирдэг бөгөөд энэ нь ихэвчлэн дууг дижитал аудионд хэрхэн зөв тусгаж байгааг хэмждэг. Битийн гүн өндөр байх тусам дижитал дуу илүү нарийвчлалтай болно.

Гэхдээ 16Mhz цагтай Arduino эсвэл бусад микро хянагчийн тусламжтайгаар биднийг зөвхөн 8 бит хүртэл ашиглах боломжийг олгодог. Би яагаад гэдгийг тайлбарлах болно.

1028-р хуудасны 328p өгөгдлийн хүснэгтэд томъёо байна:- Мэдээллийн хуудас

Би яагаад энэ томъёог ашиглаж байгаа талаар дэлгэрэнгүй ярихгүй.

Дохионы давтамж = Цагийн дохио / 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 секундын аудиотой 44 кодтой файл, 1 КГц-ийн дээж нь 23 МБ хүртэл зай эзэлдэг). Мөн манай Arduino Mega нь ойролцоогоор 256 Kb хэмжээтэй орон зайг өгдөг.

Тэгэхээр бид Arduino ашиглан дууг хэрхэн тоглох вэ. Энэ боломжгүй. Энэхүү заавар нь хуурамч юм. Уншигчид бүү санаа зов

Тиймээс бид Arduino руу аудио өгөгдлийг илгээхдээ маш өндөр хурдтай (1 Mb/s хүртэл) Arduino -ийн хооронд ямар нэгэн харилцаа холбоо ашиглах хэрэгтэй.

Гэхдээ үүнийг хийхийн тулд бидэнд хичнээн хурд хэрэгтэй вэ?

Хариулт нь нэг секундэд 44000 байт бөгөөд энэ нь 44000*8 = 325, 000 Бит/с -ээс дээш хурдтай гэсэн үг юм.

Энэхүү өгөгдлийг манай Arduino руу илгээхэд бидэнд том хэмжээтэй өөр захын төхөөрөмж хэрэгтэй болно. Энэ бол бидний Линукс бүхий компьютер байх болно (яагаад Линукстэй компьютер юм бэ? Энэ талаар илүү ихийг мэдэхийн тулд цааш нь уншина уу.)

Ахаа… Энэ нь бид Цуваа холболтыг ашиглаж болно гэсэн үг юм … Гэхдээ хүлээгээрэй … цуврал нь ердөө 115200 бит/сек хүртэл хурдтай байх боломжтой бөгөөд энэ нь (325000/115200 = 3) шаардлагатай хэмжээнээс гурав дахин удаан гэсэн үг юм.

Үгүй ээ, найзууд минь, тийм биш. Бид шаардагдах хэмжээнээс 1.5 дахин хурдан 20-30 см хүртэл кабелиар 500,000 бит/сек хурд эсвэл Baud Rate ашиглах болно.

Яагаад Линукс, Windows биш ???

Тиймээс бид дээжийг PC -тэй хамт 1/44100 = 22.67 uS интервалтайгаар (дээр дурдсан болно) илгээх шаардлагатай байна.

Тиймээс бид үүнийг яаж програмчлах вэ?

Бид C ++ - ийг ашиглан унтах функцийг ашиглан серийн интервалаар өгөгдлийн байтыг илгээх боломжтой

nanosleep, Chrono гэх мэт.

for (int x = 0; x

илгээх өгөгдөл (x);

нано унтах (22000); // 22uS

}

ГЭХДЭЭ ЦОНХОНД АЖИЛЛАГААГҮЙ БАЙГАА нь Линукс дээр ийм байдлаар ажиллаагүй (гэхдээ миний кодоос харж болох өөр аргыг би олсон.)

Учир нь бид цонх ашиглан ийм нарийн ширийн зүйлийг олж авч чадахгүй. Ийм нарийн ширийн зүйлийг олж авахын тулд танд Linux хэрэгтэй болно.

Линукс дээр ч гэсэн олсон асуудлууд …

Бид Линукс ашиглан ийм нарийн ширийн зүйлийг олж авах боломжтой боловч 22uS програмыг унтраах ийм функц олдсонгүй.

Nanosleep, Chrono nanosleep гэх мэт функцууд ажиллахгүй, учир нь тэд зөвхөн 100 -аас дээш амралттай унтдаг. Гэхдээ надад яг 22 uS хэрэгтэй байсан. Би google дээрх хуудас бүрийг судалж, C/C ++ дээр боломжтой бүх функцийг туршиж үзсэн боловч надад юу ч тус болоогүй. Дараа нь би өөрийн гэсэн функцийг гаргаж ирсэн бөгөөд энэ нь надад жинхэнэ сэтгэл татам болсон юм.

Миний код одоо яг 1uS ба түүнээс дээш унтах боломжийг олгодог !!!

Тиймээс бид хэцүү хэсгийг нь даван туулсан, үлдсэн хэсэг нь амархан …

Мөн бид тодорхой давтамжтай дамжуулагч долгионы давтамжтай Arduino ашиглан PWM дохио үүсгэхийг хүсч байна.

Тиймээс бид PWM үүсгэхийн тулд Arduino-ийн TIMERS гэж нэрлэгдэх хэрэгслийг ашиглах хэрэгтэй. Дашрамд хэлэхэд би энэ талаар дэлгэрэнгүй мэдээлэл өгөхгүй, учир нь та TIMERS сэдвээр олон хичээлийг олох болно, гэхдээ хэрэв та олохгүй бол доор коммент бичих болно.

Заримдаа MOSFET жолоодохын тулд маш их гүйдэл дамжуулж чаддаггүй тул би Arduino Pins -ээ аврахын тулд би TC4420 Mosfet драйвер ашигласан.

Энэ бол энэ төслийн бараг онол байсан, одоо бид схемийг харж болно.

АНХААРАЛД АНХААРАХ

Үнэн хэрэгтээ энэ төслийг санаатайгаар маш хэцүү болгосон (яагаад гэдгийг нь би хэлье), noPC -ийг шаарддаг өөр нэг арга бий. Дараагийн зааварт Arduino болон чанга яригч энд байна.

*Энэхүү төслийн гол зорилго нь Цуваа холбоог ашиглах, түүний хүч чадлыг мэдэх, компьютерээ ийм нарийн интервалтайгаар яг нарийн програмчлах програмыг сурах явдал юм.

Алхам 3: Схем

Схем
Схем

Схемд үзүүлсэн шиг бүх бүрэлдэхүүн хэсгүүдийг холбоно уу. Тиймээс танд хоёр сонголт байна:-

1. Чанга яригчийг холбоно уу (5V -тэй холбогдсон)

2. Flyback трансформаторыг холбоно уу (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 болгон хөрвүүлэх болно. (Зургийг дагана уу, төслийн хурд 44100Hz байх ёстой)

Дараагийн алхамд бид wav файлыг C Code болгон хөрвүүлэх болно.

Алхам 5: C-код руу WAV хийх

C-код руу WAV хийх
C-код руу WAV хийх
C-код руу WAV хийх
C-код руу WAV хийх
C-код руу WAV хийх
C-код руу WAV хийх

Зургуудыг дагана уу.

Сүүлийн хоёр зургийг үзнэ үү, өөрчлөлтүүд яг ижил байх ёстой, Том үсэг том, жижиг үсэг жижиг байх ёстой, Эсвэл эмхэтгэх явцад синтаксийн алдаа гарах болно.

(Та 1мин 41 -ийн дуу 23MB зай эзэлснийг харж болно.)

Дууны нэр, уртыг дууныхаа нэр, үргэлжлэх хугацаатай тохируулан өөрчил.

Мөн C Code файлыг хадгална уу.

Үүнийг Arduino -той тоглохыг хүссэн бүх дуунд хий

Алхам 6: Эцсийн файл хийж, Линуксээ асаагаарай

Эцсийн файл хийж, Линуксээ асаагаарай
Эцсийн файл хийж, Линуксээ асаагаарай
Эцсийн файл хийж, Линуксээ асаагаарай
Эцсийн файл хийж, Линуксээ асаагаарай
Эцсийн файл хийж, Линуксээ асаагаарай
Эцсийн файл хийж, Линуксээ асаагаарай

Хөрвүүлсэн бүх дуунуудаа энэ линк дээр байгаа Файл руу нэмээрэй.

Тэгээд зургуудыг дагана уу.

Кодыг миний хавсаргасан Arduino руу оруулна уу.

С кодын файлын нэрийг санаарай.

Эцэст нь Fedora Live USB эсвэл бусад төхөөрөмжөө асаагаад gcc хөрвүүлэгчийг суулгаад дараа нь хавтаснаас эмхэтгэх зааврыг ашиглан програмыг хөрвүүлж ажиллуулна уу.

Эцэст нь та Speaker эсвэл Flyback -ийн дуунуудыг сонсох боломжтой болно.

Энэхүү зааварчилгааг уншсанд баярлалаа, таалагдсан бол сэтгэгдлээ үлдээнэ үү.

Анхаарна уу, энэ зааварчилгааны хоёрдахь хэсгийг илүү хялбар болгож, ажиллахад бага зэргийн бэрхшээл шаардагдлаа. Хоёр дахь хэсгийн холбоос (хамгийн хялбар)

Зөвлөмж болгож буй: