Mündəricat:

C-kodda Mikrokontrolör Kumaş Ton Generatoru: 8 Addım (Şəkillərlə birlikdə)
C-kodda Mikrokontrolör Kumaş Ton Generatoru: 8 Addım (Şəkillərlə birlikdə)

Video: C-kodda Mikrokontrolör Kumaş Ton Generatoru: 8 Addım (Şəkillərlə birlikdə)

Video: C-kodda Mikrokontrolör Kumaş Ton Generatoru: 8 Addım (Şəkillərlə birlikdə)
Video: Kendini tornaci sanan mal 2024, Iyul
Anonim
C-kodunda Mikrokontrolör Kumaş Ton Generatoru
C-kodunda Mikrokontrolör Kumaş Ton Generatoru

Ötən ilin oktyabr ayının sonunda, carmitsu istifadəçisi, yemək qutusu synthimi gördükdən sonra mənə bir mesaj göndərdi. Mesajından: Mən ibtidai sinifdə musiqi öyrədirəm. Çoxlu səsyazma musiqisi çalırıq. yəni uşaqlar kiçik fleyta çalırlar …… Bu qara plakat lövhələrindən üzərində notun adı olan dairələri olan bir neçə xüsusi ehtiyacı olan uşaqlarım var. Bu şagirdlər eyni zamanda notlar yazan dairələri itələyirlər, qalan şagirdlər isə mahnı oxuyurlar …. Xüsusi ehtiyaclı uşaqların əksəriyyəti bunu musiqi ilə kifayət qədər yaxşı və vaxtında edə bilərlər. Aradığım şey, çox sadə bir səs generatoru qurmaqdır ki, bu uşaqlar şagirdlərin səs yazıcılarında oxuduqları ilə eyni meydançada oynaya bilsinlər. Mən yalnız bir neçə meydança olardım. Dairəvi dairələrinin altına bir növ kiçik düymə bağlaya biləcəyimi düşündüm ki, onları itələdikləri zaman səsləri eşitmək üçün kifayət qədər yüksək səslə kiçik bir dinamikdən çıxsın. Müəllim olan və məktəbi sevən bir ananın olması, necə müqavimət göstərə bilərdim? Doğrusu, bacarmadım. Bu, demək olar ki, layihənin bir salnaməsidir və öz əlinizlə necə qurulacağınıza dair təlimatlardır.

Addım 1: Başlanğıc və ya Niyə Analogda qala bilmədim

Başlanğıc və ya Niyə Analogda qala bilmədim
Başlanğıc və ya Niyə Analogda qala bilmədim

Yaxşı işlər növbəti səhifədə başlayır. Etdiyim hissələri necə istifadə etdiyimi bilmək istəyirsinizsə, oxuyun. Həqiqi taymer: Layihəni verdikdən sonra dərhal fikir verdim ki, dərhal mənim op-amps Forest Mims III kitabımdakı piezo ton generatorunu düşündüm. Getmək üçün yaxşı bir yol kimi göründü, bu yalnız bir piezo, 741 IC və bir neçə passiv komponentdir. Böyük bir şey yoxdur, elə deyilmi? Yaxşı, 2 problemi var, 1) düyməni basdığınız zaman meydançanı dəyişdirmək mümkündür 2) tənzimləmək demək olar ki, mümkün deyil. Birincisi, çox güman ki, bəzi geri çəkmə texnologiyası ilə aradan qaldırıla bilər, baxmayaraq ki, başqa bir sayğac əlavə etmədən bunu necə edəcəyimi bilmirdim. Bir piezo istifadə etmək də bir problem ola bilər. Müəyyən bir meydançanı vurmağa başladığınız zaman ikinci məsələ çətinləşdi. Bəs 555? Məlumat cədvəli, rezistorlara və kondansatörlərə əsaslanan bir zaman dlay funksiyasını göstərir. Həqiqi dünya hissələrinin həqiqi dəyərlərini yazmağa başlayana qədər əladır, o zaman 440Hz tezliyə çatmaq bir az çətinləşməyə başlayacaq. Ayarlamaq üçün bəzək qablarından istifadə edə bilərsiniz, ancaq zaman keçdikcə hərəkət etməyə meyllidirlər. Parçaların dəyəri və miqdarının sürətlə artması üstündə tərtib edilən aləti daim tənzimləyirik və həyat yoldaşım bu layihə üçün düyməni basaraq 555-i öldürdü. op-amps mən doğulmamışdan əvvəl. Bir neçə hissədən və xüsusi qeydlərdən ibarət olan həqiqətən sadə bir iş görmək nə qədər çətin ola bilər? Düşündüyümdən daha çətindir. Oradakı dizaynların çoxu bu layihə üçün çox mürəkkəbdir. Synth dizaynerləri mükəmməl dalğa/ton üçün hazırdırlar. Bu birbaşa məktəb və ya müəllim büdcəsi üçün kifayət qədər ucuz olduğu bir layihə ilə ziddiyyət təşkil edir. Klaviatura qurmaq kifayət qədər asandır, sadəcə bir dəstə rezistor və güc və ya bir dəstə diod və gücdür. Dövr dizaynının qalan hissəsi və başlanğıc elektronika səviyyəsində kimsə üçün əlindən çıxmağa başlayan xüsusi pcblərin dəyəri. Layihənin yenidən tərifi: Həqiqətən getməmişdən əvvəl layihə yenidən təyin olundu. Vaxtında bir düyməni basaraq dinamikin pimini dəyişə biləcək bir şeyə ehtiyacım var idi. Bir PCB dizayn etmək və almaq istəmirdim. Bu mümkün qədər az komponentdən istifadə etməli və yeni başlayanlar üçün bir dəst kimi yığılmalıdır. Bütün vaxt üzümə baxdı. Duh !! Mikro nəzarətçi! Mikro nəzarətçi: Beləliklə, həm Müasir Cihazlar Çılpaq Sümüklər Arduino dəsti, həm də Evil Mad Scientist Sadə Hədəf Lövhəsi aldıqdan və aylarca istifadə edilmədikdə masamda oturmalarına icazə verdikdən sonra mükəmməl bir təqdimat layihəm oldu. Hər ikisini bir araya gətirmək üçün lazım olan vaxta, kod üçün öyrənmə əyrisinə, xərclərə, lazım olan əlavə hissələrə və istədiklərimi yerinə yetirməyə və hədəf lövhəsinə yerləşməyə başladım. Qiymət olduqca bərabər idi, 15 dollar üstəgəl Arduino üçün 20 dollarlıq FTDI kabeli, 12 dollar üstəgəl 22 dollarlıq USBtinyISP proqramçısı. Dayana biləcəyim kiçik kollecdən C ++ bilirdim və mikro nəzarətçilər üçün C -nin o qədər də pis olmayacağını düşündüm, dəstimi düzgün bir yerə yığdığımdan əmin olmaq üçün işıq yandırmaqdan başqa Arduino təcrübəm yox idi. Hər ikisi quraşdırıla bilər. Bu, çox çətin idi, buna görə də ikisinin daha az hissəsinə, hədəf lövhəsinə qərar verdim.

Addım 2: Ehtiyacınız olan Rev 1

Lazım olanlar Rev 1
Lazım olanlar Rev 1

Parçaların QiymətiUSBtinyISP AVR Proqramlaşdırıcı Kiti (USB SpokePOV Dongle) v2.0 $ 22.00 5-pk $ 2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) 2.79 $ 5) $ 3.49 (4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Batareya Tutucusu $ 1.79https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Submini Slide Switch (güc açarı üçün isteğe bağlı) 2.69 dollar (2 paket) https://www.radioshack.com/product/index.jsp?productId=2062490LED və rezistor (isteğe bağlı, güc işığı istəyirsinizsə) $ pulsuz olmalıdır etrafında yatırlarsa Tel $ da gümüş lehiminin ətrafında yatmalıdır (əgər bu uşaqların yanına gedirsə, yəqin ki, qurğuşundan istifadə etməməlisiniz, valideynlər bu cür şeylər haqqında çox qəribədirlər)) Move flux) Bəzi yerlərə qənaət etmək istəyirsinizsə, RadioShack -dan hissələr almaq lazım deyil. Yaxın və proqnozlaşdırıla biləcəyi üçün etdim.

Addım 3: Montaj Rev 1

Məclis Rev 1
Məclis Rev 1
Məclis Rev 1
Məclis Rev 1

Parçalarınızı göstərildiyi kimi bir yerə yığın. Lehimdən hər hansı bir axını qurtarmaq üçün bitirdiyiniz zaman sürtmək üçün spirt və bir fırça istifadə etməyinizə əmin olun. Şematik, üstünlük verənlər üçündür. D1 və R1 istədiyiniz kimi ola bilər, sadəcə güc işığıdır. C1, gücün bir az daha tutarlı olmasına kömək etmək üçündür. 10 uF istifadə etdim. Bu sxem, sonrakı versiyalar üçün eynidır, yalnız parça açarları üçün düymələri dəyişdirin. son versiyada PC4 və PC5 -ə keçidlər və ya 27 və 28 pinləri əlavə etdim.

Addım 4: Nə Lazımdır Rev 2

Lazım olanlar Rev 2
Lazım olanlar Rev 2

Radio Shack düymələrini əl istehsalı parçalar üçün əvəz edirsiniz: Ehtiyacınız var: Birdən çox rəngli parça və ya hər bir notun eyni rəngdə olmasını istəyirsinizsə. Ən ucuz parça mağazanızın yorğan bölməsi bunu ucuz almaq üçün ən yaxşı yerdir. Kapitone dörddə biri 1.50 dollardır və bir tondan çox keçid əldə edə bilərsiniz. Keçirici parçadan, LessEMF -dən Flectron parça təklif edirəm ki, telin parçaya yapışdırılması üçün 12 "x54" parça Eyelets üçün 20 dollardır. Onları əksər parça mağazalarında ucuz qiymətə əldə edə bilərsiniz. JoAnn'ın aləti və 25 dollar üçün 2 dollar lazımdır. Bunun üçün bir çəkicə ehtiyacınız olacaq. Tel, 22AWG istifadə etdim, əgər varsa daha kiçik təklif edirəm. Rəngli və keçirici parçanın bir -birinə yapışmasını təmin etmək üçün. Mağazadan soruşun və yəqin ki, həyətdən ala bilərsiniz. Yəqin ki, yaxşı işləyərdi, amma kiməsə məsləhət görməyinizi məsləhət görürəmBatting, əvvəlcə həqiqətən boş bir şey istifadə etdim, sonra daha sıx toxunmuş bir şeyə keçdim. Mən sizə ən uyğun olanı tapana qədər bir neçə fərqli cəhd etməyi təklif edirəm. tellər bir -birindən keçdikcə bir yerdə yığılır və daha yaxşı qalacaqlar.

Addım 5: Montaj Rev 2

Məclis Rev 2
Məclis Rev 2
Məclis Rev 2
Məclis Rev 2
Məclis Rev 2
Məclis Rev 2

Çox rəngli parçanı bir-birinin üstünə qoyun və bir kvadrat kəsin, mükəmməl olmaq lazım deyil. Parçaları çıxarmaq üçün parçanı ütüləyin, yenidən üst -üstə qoyun və kənarların hamısının uyğun olduğundan əmin olun. Sol və sağ tərəfləri düz qoyaraq yuxarı və aşağı dairəni kəsin. Tikişdən sonra açarı ters çevirəcəksiniz, buna görə də yuvarlaq tərəfləri çox yuvarlaqlaşdırmayın və bitirdikdən sonra açarı asanlıqla keçmək üçün düz tərəflərdə kifayət qədər yüksəklik buraxın. İlk və son açarın düz tərəfini yuvarlaqlaşdırın. Dikiş maşınınıza keçin və iki döngəni bir yerə qoyun ki, yaxşı tərəfi bir -birinə baxsın və düz hissələrə dikiş tiksin. dikilmiş, keçirici parçadan kvadratlar kəsilmiş və bir tərəfi əridilmiş. Telin uzunluğunu kəsin və bir ucunu soyun. telləri göz qapaqlarından birinin ətrafına lehimləyin. (lehim çox güman ki, gözcüyə yapışmayacaq) Bir küncdəki parçadan kiçik bir yarıq kəsin və parça və teli bərkitmək üçün gözü çəkin. əritmədən dəstəyi çıxarın və keçirici parçanı rəngli parçanın arxasına birləşdirin. Bütün açarlar üçün təkrarlayın. Hər şeyi asanlaşdırmaq üçün, bir tel sonrakı keçid üçün teldən keçdikdə, büzüşmə borusundakı telləri bir yerdə qızdıra bilərsiniz. Alın və ya keçid dəsti uzunluğunda bir parça parça düzəldin və uzunluğunda bir keçirici parça zolağı kəsin. Rəngli açarlardan fərqli olaraq, bu uzun bir parçadır. Bağlantı qurmaq üçün düymələrin toxunduğu şey budur. Kiçik bir yarıq kəsin və rəngli açarın üst hissələri kimi bir deşik ilə tel bağlayın. Alt parçanın arxasına yapışdırın. Üstü və altını keçirici parça ilə birlikdə dikin, tikildikdən sonra dəsti ters çevirin. sonra bir çubuq çıxarın və kəsin. Forma vermək üçün kəsin və açarlara daxil edin. Keçirici parçanı ayıran şey budur. Ardından düymələri ters çevirərkən vuruşu taxmaq daha asan ola bilər. Daxil edərkən istifadə etdiyim əşyalar çox pis yıxıldı və fərqli vuruşlar almalı oldum. Nəhayət telləri hədəf lövhəsinə bağlayın və hamınız hazırsınız. Uzun alt zolaq torpaqlanacaq.

Addım 6: Nə lazımdır Rev 3

Lazım olan şey Rev 3
Lazım olan şey Rev 3

Rev 3 -də açarları naqildən asılı olmayan hala gətirdim. Bu bir çox vaxta qənaət etdi. Bitmiş nəticənin görünüşünü də daha çox bəyənirəm. Beləcə sizə lazım olan yeni hissələr: Snaps, Onları JoAnn -dan aldım. 7 dollara pis olmayan bir quraşdırma vasitəsi ilə gəldilər, ortasında tutacaqları quraşdırmaq üçün alətimi ayırmaq məcburiyyətində qaldığım üçün kəlbətin alətlərindən birini təklif edərdim. Dikişlər daha yaxşı bir alternativ olardı, amma yapışması daha uzun çəksə də, keçirici iplik olan Spark Fun, tikiş maşınınıza girə biləcək şeylərə malikdir. Maşında çox yavaş getməli idim, yoxsa ip qırılacaqdı. Yürüşünüz fərqli ola bilər

Addım 7: Montaj Rev 3

Məclis Rev 3
Məclis Rev 3
Məclis Rev 3
Məclis Rev 3
Məclis Rev 3
Məclis Rev 3
Məclis Rev 3
Məclis Rev 3

Bu düzəliş, tikilənə qədər vaxt baxımından əvvəlkindən daha yaxşı idi. Üstəlik, çıxarıla bilən açarların olması ağlımı bir dəfədən çox xilas etdi. Baza hazırlayaraq başlayın. Yarım qatlanmış dörddə bir çarxdır. Üstünə bir təbəqə qoyun və tikmək üçün bir deşik buraxın. Şeyi çuxurdan itələyin və əsasən yastıq tipli bir şeyə sahibsiniz. Mən onu işlətməyimi asanlaşdırdığım üçün toxudum. Düz ipdən istifadə edin və çılpaqlaşın. Mən bunun üzərində brilyant etdim, amma bəlkə də növbəti dəfə əjdahanı arxaya və ya sərin bir şey qoyacağam. Bu dizaynı bəyənirəm, çünki əsasən bunlardan bir ton əvvəlcədən hazırlaya və istədiyinizi istifadə edə bilərsiniz. Bir karton, kağız və ya parça parçasından istifadə edərək başlayın və armud şəklini kəsin. Bunu hər bir keçid üçün yuxarı və aşağı kəsmək üçün bələdçi olaraq istifadə edin. Hər bir alt üçün bir rəng və üstlər üçün fərqli bir rəng kəsdim, ancaq yaradıcı ola bilərsiniz və istədiyinizi edə bilərsiniz. Bələdçinizi açarın içərisinə asanlıqla uyğunlaşacaq bir lolipop şəklində kəsin. "Çubuğu" uzatın ki, "armudun" kənarına sarılsın. Birləşdirici və keçirici parçadan forma kəsin və keçirici parçanın bir tərəfini əridin. Füzyon materialından dəstəyi çıxarın və altdakı parçanın üstünə və üstdə olacaq parçanın altına birləşdirin. Əlavə hissəni yuxarıya sarın. Dikiş maşınınıza keçin və üst və alt parça arasında deşiklər vurun. Keçirici parçadan kənarda tikin və açarın "çubuq" hissəsini atlayın. Qısa bir parça yaratmaq üçün üst keçirici parçanı aşağıya tikmək mümkün olduğunu gördüm. Keçirici parça vasitəsilə tikməmək daha yaxşıdır. Çubuqları bağlayın və keçid tamamlandı. Bütün alt/GND əlaqələri üçün kişi çəngəlini və bütün zirvələr üçün qadın çəngəlini istifadə etməyi daha asan tapdım. Bu, bütün açarları bir -birini əvəz edir. Dövrə: Dairələri kəsməklə bağlı olan şey, bir çox əlavə bitinizin olmasıdır. Qalıqlarımı götürdüm, əridilən böyük parçaları böyük keçirici parçalara birləşdirdim və yastıq kimi istifadə etdiyim daha kiçik düzbucaqlıları kəsmək üçün istifadə etdim. Açarlarınızı kobud bir şəkildə düzəldin və yastiqcikləri bazaya bağlayın ki, onlara bir xətt tiksin və yaxalasın. İstifadə etdiyim tikiş maşınının ayağı lap yaxınlıqda olmağı xoş qarşılamadı, buna görə bunu unutmayın və özünüzə bir az yer verin. Tikiş maşınınıza girə biləcək keçirici iplik aldığım üçün paddən yastığa və arxaya bir xətt tikdim. Yavaş getməli idim, yoxsa ip qırılacaqdı, amma əl tikişindən bir ton daha sürətli idi. Bobin və iynədəki keçirici iplə, həqiqətən yaxşı bir möhkəm əlaqə əldə etdim. Əşyalar dəli kimi çürüyür, amma kiçik bir sənətkarlıq yapışqanı və ya Elmers bunu dərhal təmizləyir. Xətləri bir -birindən uzaq tutmağa çalışın və heç bir probleminiz olmayacaq. Son montaj: Bütün açarlarınızı bağlayın, lövhəni bağlayın, kod yükləyin və işiniz bitdi. Lövhədən yastığa çatmaq üçün tel istifadə etdim və sonra teli əllə bazaya tikdim. Növbəti versiya üçün lövhəni boş barmaqların bir -birindən ayırmaması üçün bazaya yapışdırmaq üçün sıxacları olan plastik bir qutuya quraşdıracağam.

Addım 8: Kod

Kod
Kod

Daha əvvəl heç bir çip proqramlamamısınızsa, bu bir qədər çətin bir işdir. Alətlərin ləkələnməsinə kömək etmir və əksər hallarda eyni əməliyyatı bir neçə dəfə yerinə yetirməlisiniz. Baş verənləri anlamaq üçün tapdığım ən yaxşı iki qaynaq, USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ səhifəsi və səs -küy oyuncağının proqramlaşdırılmasındakı qəza kursudur http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Bunlar işə başlamağınızı təmin etməlidir.

Bu kodlaşdırma üçün Arduino kimi bir çox insan var və normal bir proqrama çoxlu şişkinlik əlavə etdiyini hiss etməyimdən başqa onu istifadə etməyin heç bir günahı yoxdur. Həm də C -ni tanıyırdım və Arduino -nu tanımıram. Vaxt olsa bəlkə bir gün.:) Kod: {{{#include // SPK açmaq üçün bir pin istifadə edin /// Typedefs ////////// typedef unsigned char u8; int main (void) {u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // PORTD = (1 << PD0) çıxışı üçün SPK təyin edin | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Yüksək PORTC Düyməsini Ayarla = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Zamanlayıcı qurun (1) {btnState0 = ~ PINC & (1 << PC5); btnState1 = ~ PINC & (1 << PC4); btnState2 = ~ PIND & (1 << PD0); btnState3 = ~ PIND & (1 << PD1); btnState4 = ~ PIND & (1 << PD2); btnState5 = ~ PIND & (1 << PD3); btnState6 = ~ PIND & (1 << PD4); if (btnState0) {if (TCNT2> = 190) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // SPK Pinini çevirin TCNT2 = 0; }}}}}}} Meydançalar haradan gəlir? Bir az riyaziyyat lazımdı. Atmega 168 -dəki taymer saatı 1MHz -də işləyir. Səs üçün çox sürətlidir, buna görə prescaler /8 istifadə etməliyik. Çıxış pimini 1 döngə etmək üçün yuxarı və aşağı çevirməyimiz lazım olduğundan, düzgün meydança çıxarmaq üçün cavabı 2 -yə bölməliyik. Düstur belə görünür, Pitch kodunu qoymaq üçün = (1000000/8)/(Hədəf tezliyi*2) A (440) üçün bu, 125000/880 = 142.045 və ya 142 olar, çünki dəyər tam ədəd olmalıdır. Notların hədəf tezliklərini demək olar ki, hər yerdə onlayn olaraq tapmaq olar və ümumiyyətlə eynidır. Bir dəstə Ifs istifadə etmək əvəzinə bir hal ifadəsi əlavə etmək və dinamikin səs səviyyəsini və səs səviyyəsini daha yaxşı idarə etmək üçün PWM istifadə etmək istəyirəm, amma hələlik bu işləyir.

Tövsiyə: