Turinys:

Mikrokontrolerio audinio tonų generatorius C kodu: 8 žingsniai (su paveikslėliais)
Mikrokontrolerio audinio tonų generatorius C kodu: 8 žingsniai (su paveikslėliais)

Video: Mikrokontrolerio audinio tonų generatorius C kodu: 8 žingsniai (su paveikslėliais)

Video: Mikrokontrolerio audinio tonų generatorius C kodu: 8 žingsniai (su paveikslėliais)
Video: 3 5 1 Microcontroller modules for smart textile 2024, Liepa
Anonim
Mikrokontrolerio audinio tonų generatorius C kodu
Mikrokontrolerio audinio tonų generatorius C kodu

Praėjusių metų spalio pabaigoje instrukcijų naudotojas carmitsu atsiuntė man žinutę pamatęs mano pietų dėžutės sintezatorių. Iš jo žinutės: pradinėje mokykloje dėstau muziką. Mes grojame daug įrašų muzikos. y., vaikai groja mažomis fleitomis …… Turiu keletą specialių poreikių turinčių vaikų, kurie gali naudotis šiomis juodomis plakatų lentomis su apskritimais, ant kurių yra užrašo pavadinimas. Šie mokiniai stumia ratus su užrašų pavadinimais tuo pačiu metu, kai kiti mokiniai groja dainą….. Dauguma specialiųjų poreikių vaikų tai gali padaryti gana gerai ir laiku su muzika. Aš noriu sukurti labai paprastą garso generatorių, kad šie vaikai galėtų groti tą patį skambesį, kurį žaidžia studentai savo magnetofonais. Būčiau tik keletas aikštelių. Pagalvojau, kad prie jų apvalių apskritimų apačios galiu pritvirtinti kažkokį mažą mygtuką, kad juos paspaudus garsas sklistų iš mažo garsiakalbio, pakankamai garsiai, kad jie galėtų girdėti. Jei turėčiau motiną, kuri yra mokytoja ir patiko mokykla, kaip galėčiau atsispirti? Tiesą pasakius, negalėjau. Tai beveik projekto kronika ir instrukcijos, kaip sukurti savo.

1 žingsnis: pradžia arba kodėl negalėjau laikytis analogo

Pradžia arba kodėl negalėjau laikytis analogo
Pradžia arba kodėl negalėjau laikytis analogo

Geri dalykai prasideda kitame puslapyje. Jei norite sužinoti, kaip aš galiausiai panaudojau dalis, kurias padariau, skaitykite toliau. Tikras laikmatis: Po projekto apmąstymo iš karto pagalvojau apie pjezo tonų generatorių iš savo knygos „Mim Mims III“. Atrodė geras kelias, tai tik pjezo, 741 IC ir pora pasyvių komponentų. Nėra didelio dalyko, tiesa? Na, tai turi 2 problemas, 1) kai paspaudžiate jungiklį, galima pakeisti žingsnį 2) sureguliuoti beveik neįmanoma. Pirmąjį greičiausiai būtų galima įveikti naudojant tam tikrą debounce technologiją, nors aš nežinojau, kaip tai padaryti nepridėjus kito skaitiklio. Taip pat gali kilti problemų naudojant pjezo. Antrasis klausimas tapo sunkus, kai pradėjote pataikyti į tam tikrą aikštę. O kaip 555? Duomenų lape rodoma laiko atidėjimo funkcija, pagrįsta rezistoriais ir kondensatoriais. Tai puiku, kol nepradėsite rašyti faktinių realių pasaulio dalių verčių, tada pastebėsite, kad pataikyti į 440 Hz dažnį tampa šiek tiek sunku. Norėdami sureguliuoti, galite naudoti apdailos puodus, tačiau laikui bėgant jie linkę judėti. Nuolat derindamas instrumentą, sudarytą greitam didėjančiam dalių kainai ir kiekiui, o mano žmona, pakeisdama žingsnį, paspaudus mygtuką, užmušė 555 šiam projektui. op-amps nuo tada, kai gimiau. Kaip sunku būtų padaryti tikrai paprastą, su keliomis dalimis ir konkrečiomis pastabomis? Sunkiau nei maniau. Dauguma projektų yra labai sudėtingi šiam projektui. „Synth“dizaineriai siekia tobulos bangos formos/tono. Tai tiesiogiai prieštarauja projektui, kuris turėtų būti pakankamai pigus mokyklų ar mokytojų biudžetui. Sukurti klaviatūrą yra pakankamai paprasta, tai tik krūva rezistorių ir galios arba krūva diodų ir galios. Tai yra likusioji grandinės konstrukcija ir pasirinktinių plokščių kaina, kuri pradės klysti iš rankų elektronikos pradžioje. Projekto apibrėžimas iš naujo: Taigi projektas buvo iš naujo apibrėžtas, kol aš dar tikrai nespėjau. Man reikėjo kažko, kas spustelėjus mygtuką laiku galėtų perjungti garsiakalbio kaištį. Aš nenorėjau, kad turėčiau kurti ir pirkti PCB. Tam reikėjo naudoti kuo mažiau komponentų ir surinkti kaip pradedančiųjų rinkinį. Visą laiką tai žiūrėjo man į veidą. Duh !! Mikrovaldiklis! Mikrokontroleris: Taigi nusipirkęs „Modern Devices Bare Bones Arduino“rinkinį ir „Evil Mad Scientist Simple Target Board“ir leisdamas jiems kelis mėnesius sėdėti ant mano stalo nenaudojamas, turėjau puikų įvadinį projektą. Pradėjau žiūrėti į laiką, kurį reikia sudėti, kodo mokymosi kreivę, kainą, reikalingas papildomas dalis ir priversti ją daryti tai, ko noriu, ir įsitaisiau tikslinėje lentoje. Kaina buvo gana lygi, 15 USD plius 20 USD FTDI kabelis „Arduino“, 12 USD plius 22 USD USBtinyISP programuotojas. Aš jau žinojau C ++ iš mažo koledžo, kurį galėjau stovėti, ir supratau, kad mikrokontrolerių C nebus toks blogas, tačiau, išskyrus tai, kad mirksi lemputė, kad įsitikinčiau, ar tinkamai sudėjau savo rinkinį, neturėjau „Arduino“patirties. Abu galėjo būti sumontuoti. Tai buvo beveik metimas, todėl nusprendžiau dėl mažiau dviejų dalių, tikslinės lentos.

2 žingsnis: ko jums reikia 1 rev

Ko jums reikia Rev 1
Ko jums reikia Rev 1

„UsbtinyISP AVR“programuotojų rinkinys („USB SpokePOV Dongle“) v2.0 $ 22.00 https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 5 pk 2,75 USDhttps://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8 omų mini) 2,79 USD 5) 3,49 USD (4 pakuotės) https://www.radioshack.com/product/index.jsp?productId=2062539 „AAA“akumuliatoriaus laikiklis 1,79 USD „Submini“skaidrių jungiklis (pasirenkamas maitinimo jungikliui) 2,69 USD (2 paketai) https://www.radioshack.com/product/index.jsp?productId=2062490LED ir rezistorius (neprivaloma, jei norite maitinimo lemputės) jei jie guli aplink, laidas $ taip pat turėtų gulėti aplink sidabro lydmetalį (jei tai vyksta bet kur šalia vaikų, tikriausiai neturėtumėte naudoti švino, tėvai tampa gana keistai dėl tokio dalyko;)) Alkoholio trynimas (norint Jei norite, kad kai kuriose vietose sutaupytumėte pinigų, jums nereikia gauti dalių iš „RadioShack“. Aš tai padariau, nes jie yra artimi ir nuspėjami.

3 žingsnis: surinkimas 1 red

Asamblėja Rev 1
Asamblėja Rev 1
Asamblėja Rev 1
Asamblėja Rev 1

Sudėkite dalis, kaip parodyta. Kai baigsite, būtinai naudokite trynimo alkoholį ir srauto šepetėlį, kad pašalintumėte litavimo srautą. Žemiau pateikiama schema tiems, kurie nori. D1 ir R1 gali būti tokie, kokių norite, tai tik maitinimo lemputė. C1 yra skirtas tik tam, kad galia būtų šiek tiek nuoseklesnė. Aš naudojau 10uF. Ši schema yra tokia pati ir vėlesnėse versijose, tiesiog pakeiskite audinio jungiklių mygtukus. paskutinėje peržiūroje pridėjau jungiklius prie PC4 ir PC5 arba 27 ir 28 kaiščių.

4 žingsnis: ko jums reikia Rev 2

Ko jums reikia Rev 2
Ko jums reikia Rev 2

Taigi iš esmės „Radio Shack“mygtukus keičiate rankomis pagamintais audiniais. Jums reikia: kelių spalvų audinio arba vienos spalvos, jei norite, kad kiekviena pastaba būtų tos pačios spalvos. Artimiausios audinių parduotuvės skiautinių skyrius yra geriausia vieta pigiai įsigyti. Dygsniavimo ketvirčiai yra 1,50 USD, o iš vieno galite gauti daugybę jungiklių. Laikingas audinys, siūlau „LessEMF“„Flectron“audinį, tai yra 20 USD už 12 colių x 54 colių gabalą. Pigiai juos galite įsigyti daugelyje audinių parduotuvių. „JoAnn“turi įrankį ir 25 už 2 USD. Tam jums reikės plaktuko. Laidai, aš naudoju 22AWG, siūlau mažesnį, jei jį turite. Lydymas, kad spalvotas ir laidus audinys laikytųsi. Paklauskite parduotuvėje ir tikriausiai galite nusipirkti kieme. Tikriausiai tai gerai veiktų, nors siūlau paklausti ko nors, kas šukuojasi, iš pradžių naudojau tikrai laisvus daiktus, o paskui perėjau prie kažko tvirtesnio trikotažo. Aš siūlau jums tiesiog išbandyti keletą skirtingų, kol rasite tai, kas geriausiai tinka. Šilumos susitraukimo vamzdžiai, todėl viskas tapo daug lengviau valdoma. kartu susitraukiantys termiškai susitraukiantys laidai, jie išliks daug geriau.

5 žingsnis: Surinkimas 2 red

Asamblėja Rev 2
Asamblėja Rev 2
Asamblėja Rev 2
Asamblėja Rev 2
Asamblėja Rev 2
Asamblėja Rev 2

Uždėkite daugiaspalvį audinį vienas ant kito ir iškirpkite kvadratą, jis neturi būti tobulas. Lyginkite audinį, kad išlenktų, vėl sluoksniuokite vienas ant kito ir įsitikinkite, kad kraštai sutampa. Iškirpkite bet kokius kraštus. Nupjaukite viršutinę ir apatinę dalis, palikdami kairę ir dešinę puses tiesiai. Siuvę ketinate apversti jungiklį, todėl nesuapvalinkite šonų per daug apvalių ir palikite pakankamai aukštį plokščiose pusėse, kad lengvai baigtumėte jungiklį. Suapvalinkite pirmojo ir paskutinio jungiklio plokščią pusę. Uždėkite savo siuvimo mašiną ir sudėkite du raundus kartu, kad gera pusė būtų viena prieš kitą, ir siūkite siūlę ant plokščių dalių. siuvami, iš laidžiojo audinio iškirpkite kvadratus ir vieną pusę sutraukite. Nupjaukite vielą iki ilgio ir nuimkite vieną galą. lituokite laidą aplink vieną kilpą. (lydmetalis greičiausiai nelips prie kilpos) Viename kampe nupjaukite nedidelį audinio gabalėlį ir plaktuku pritvirtinkite kilpą, kad pritvirtintumėte audinį ir vielą. nuimkite pagrindą nuo lydiklio ir laidųjį audinį prijunkite prie spalvoto audinio galo. Pakartokite visus jungiklius. Kad viskas būtų lengviau, galite kaitinti susitraukiančio vamzdžio laidus kartu, kai vienas laidas praeina kito jungiklio laidą. Gaukite arba pagaminkite audinio gabalėlį, kurio ilgis yra jungiklis, ir supjaustykite laidų audinio juostelę. Skirtingai nuo spalvotų jungiklių, tai yra vienas ilgas gabalas. Tai bus mygtukai, kuriuos paliečia prisijungimas. Iškirpkite nedidelį plyšį ir pritvirtinkite prie jo vielą su kilpute, pavyzdžiui, spalvotų jungiklių viršūnių. Sujunkite jį su apatinio audinio nugarėle. Siuvinėkite viršutinę ir apatinę dalis kartu su laidžiu audiniu į išorę, naudokite kiemo lazdelę, kad apverstumėte komplektą po to, kai jis bus pasiūtas. Iškirpkite keletą mažų skylių vatinėje, aš naudoju lazdelę, kad gaučiau apskritimą, tada tiesiog nuimkite lazdelę ir supjaustykite. Supjaustykite juos pagal formą ir įdėkite į jungiklius. Tai atskiria laidųjį audinį. Gali būti lengviau įdėti vatą, kai apversite jungiklius, o ne po to. Daiktai, kuriuos naudojau, suplyšo gana blogai, kol aš jį įkišau, ir aš turėjau gauti skirtingą vatą. Galiausiai prijunkite laidus prie tikslinės plokštės ir viskas paruošta. Ilga apatinė juostelė bus sumalta.

6 žingsnis: ko jums reikia 3 red

Ko jums reikia Rev 3
Ko jums reikia Rev 3

3 versijoje aš padariau jungiklius nepriklausomus nuo laidų. Tai sutaupė daugybę laiko. Man taip pat labiau patinka gatavo rezultato išvaizda. Taigi, štai jums reikalingos naujos dalys: „Snaps“, ką tik gavau iš „JoAnn“. Jie buvo komplektuojami su diegimo įrankiu, kuris neblogai kainuoja 7 USD. Vietoj to aš siūlau vieną iš replių įrankių, nes turėjau išardyti savo įrankį, kad sumontuotų spaustukus viduryje. Siuvamosios medžiagos būtų gera alternatyva, nors jų laikymasis užtrunka ilgiau. Laidus siūlas, „Spark Fun“turi dalykų, kurie gali patekti į jūsų siuvimo mašiną. Savo mašinoje turėjau eiti labai lėtai, kitaip siūlas nutrūks. Jūsų rida gali skirtis

7 žingsnis: Surinkimas 3 red

Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3
Asamblėja Rev 3

Šis pakeitimas buvo daug geresnis už ankstesnį laiko atžvilgiu iki pastatymo. Be to, nuimami jungikliai ne kartą išsaugojo mano sveikatą. Pradėkite nuo pagrindo. Tai tik vienas antklodžių ketvirtis, sulankstytas per pusę. Ant viršaus uždėkite vatos sluoksnį ir siūkite, palikdami skylę apversti. Stumkite daiktą per skylę ir iš esmės turite pagalvės tipo daiktą. Aš jį dygsniavau, kad būtų lengviau dirbti. Naudokite paprastą siūlą ir riešutus. Aš padariau deimantus ant šio, bet galbūt kitą kartą aš įdėsiu drakoną atgal ar kažką šaunaus. Dabar pereikite prie jungiklių. Man patinka šis dizainas, nes iš esmės galite padaryti daugybę jų iš anksto ir tiesiog naudoti tai, ko norite. pirmiausia naudokite kartono, popieriaus ar audinio gabalėlį ir iškirpkite iš jo kriaušės formą. Naudokite tai kaip vadovą, kad supjaustytumėte kiekvieno jungiklio viršutinę ir apatinę dalis. Aš iškirpiau vieną spalvą kiekvienam dugnui ir kitą spalvą viršūnėms, bet jūs galite būti kūrybingi ir daryti tai, ko norite. Iškirpkite savo vadovą į ledinukų formą, kuri lengvai tilps jungiklio viduje. Pailginkite „pagaliuką“, kad jis galėtų apsivyti „kriaušės“kraštą. Iškirpkite formą iš lydančio ir laidžiojo audinio ir sulydykite vieną laidžiojo audinio pusę. Nuimkite pagrindą nuo lydymosi medžiagos ir pritvirtinkite prie audinio viršaus, kuris bus apačioje, ir audinio apačioje, kuri bus viršuje. Apvyniokite papildomą gabalėlį viršuje. Eikite į savo siuvimo mašiną ir padėkite vatą su skylėmis tarp viršutinio ir apatinio audinio. Siuvinėkite nelaidų audinį ir praleiskite jungiklio „lazdos“dalį. Radau, kad galima siūti viršutinį laidų audinį prie apačios, sukuriant trumpą. Geriau ne siūti per laidų audinį. Pritvirtinkite spaustukus ir perjungimas baigtas. Man buvo lengviau naudoti vyrišką užraktą visoms apatinėms/GND jungtims, o moteriškąjį - visiems viršūnėms. Dėl to visi jungikliai yra keičiami. Grandinė: Pjovimo raundų dalykas yra tas, kad turite daug papildomų bitų. Aš paėmiau savo atraižas, sujungiau didelius lydalo gabalus į didelius laidžiojo audinio gabalus ir panaudojau juos mažesniems stačiakampiams, kuriuos naudojau kaip pagalvėlės, iškirpti. Apytiksliai išdėstykite jungiklius ir pritvirtinkite trinkeles prie pagrindo, palikdami pakankamai vietos, kad prie jų prisiūtumėte liniją ir spragtelėtumėte. Siuvamosios mašinos koja, kurią naudoju, nebuvo malonu būti labai arti spragtelėjimo, todėl turėkite tai omenyje ir suteikite sau šiek tiek vietos. Kadangi gavau laidų siūlą, kuris galėtų patekti į mano siuvimo mašiną, aš tiesiog siuvau liniją nuo pagalvėlės iki pagalvėlės ir atgal. Turėjau eiti lėtai arba siūlas nutrūks, bet tai buvo tona greičiau nei siuvimas rankomis. Taip pat su laidžiu siūlu ant ritės ir adatos gavau tikrai gerą tvirtą jungtį. Daiktai lūžta kaip pašėlę, tačiau šiek tiek amatų klijų ar „Elmers“tai išsprendžia. Stenkitės, kad linijos būtų toli viena nuo kitos, ir jums neturėtų kilti problemų. Galutinis surinkimas: užfiksuokite visus jungiklius, prijunkite plokštę, įkelkite kodą ir baigsite. Aš naudoju vielą, kad pasiekčiau nuo lentos iki trinkelės, o tada tiesiog ranka siuvau vielą prie pagrindo. Kitoje versijoje plokštę sumontuosiu plastikinėje dėžutėje su spaustukais, kad pritvirtinčiau prie pagrindo, kad tuščiosios eigos pirštai neatplėštų.

8 žingsnis: kodas

Kodas
Kodas

Jei niekada anksčiau neužprogramavote lusto, tai yra šiek tiek bauginanti užduotis. Tai nepadeda, kad įrankiai yra pleiskanojantys ir dažniausiai tą pačią operaciją turite atlikti kelis kartus. Du geriausi ištekliai, kuriuos radau, kad suprasčiau, kas vyksta, yra „USBtinyISP“puslapis, https://www.ladyada.net/make/usbtinyisp/ ir triukšmo žaislo programavimo kursas, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Tai turėtų padėti jums pradėti.

Daugeliui žmonių patinka „Arduino“dėl šio kodavimo ir nėra nieko blogo naudojant jį, išskyrus tai, kad manau, kad tai prideda daug išsipūtimo prie paprastai paprastos programos. Be to, aš pažinojau C ir nežinau Arduino. Galbūt vieną dieną, jei bus laiko.:) Kodas: {{{#include // Naudodami smeigtuką įjunkite SPK /// 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); // Nustatykite SPK išėjimui PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Nustatyti aukštą mygtuką PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Nustatykite laikmatį, kai (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); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Apversti SPK kaištį TCNT2 = 0; }}}}}}} Iš kur aikštės? Reikėjo šiek tiek matematikos. „Atmega 168“laikmačio laikrodis veikia 1 MHz dažniu. Garsui tai per daug greita, todėl turime naudoti prescaler /8. Kadangi, norėdami atlikti 1 ciklą, išvesties kaištį turime apversti aukštai, tada žemai, atsakymą turime padalyti iš 2, kad gautume tinkamą žingsnį. Formulė atrodo taip: Pitch, kad įvestumėte kodą = (1000000/8)/(Tikslinis dažnis*2) A (440) atveju mūsų tikslams tai būtų 125000/880 = 142,045 arba 142, nes vertė turi būti sveikasis skaičius. Tikslinius užrašų dažnius galima rasti beveik bet kur internete ir paprastai jie yra vienodi. Aš vis dar noriu pridėti atvejo pareiškimą, o ne naudoti krūvą „Ifs“ir naudoti PWM, kad geriau valdyčiau garsiakalbio garsumą ir garsą, tačiau kol kas tai veikia.

Rekomenduojamas: