Мазмуну:

Ардуино менен ырды санариптештирүү: 6 кадам
Ардуино менен ырды санариптештирүү: 6 кадам

Video: Ардуино менен ырды санариптештирүү: 6 кадам

Video: Ардуино менен ырды санариптештирүү: 6 кадам
Video: Saadat - Комуз менен ырды эзип салды - МЫНА САГА ГОЛОС 2024, Ноябрь
Anonim
Ардуино менен ырды санариптештирүү
Ардуино менен ырды санариптештирүү

Мен сүйүктүү эки предметимди бириктирген долбоор түзгүм келди: илим жана музыка. Мен бул эки доменди айкалыштыруунун бардык жолдорун ойлодум, жана Герцте нотанын бийиктигин көрсөтүп жатканда Arduino Fur Elise пьесасын тартуу кызыктуу болот деп ойлогом. Эми, курулушту баштайлы!

Сизге бир Arduino Uno же Mega, көптөгөн секирүүчү кабелдер, Piezo ызылчасы, нан плитасы, 16*2 ЖК экраны, бардык тазалагычтары бар, жана 10k потенциометр керек болот (сиз аларды потметр деп да угушуңуз мүмкүн)). Курулушту баштоодон мурун бул материалдардын бардыгын чогултканыбыз жакшы.

1 -кадам: Музыкалык эсепти санарип ноталарга айландыруу: баалуулуктарды кечиктирүү

Музыкалык баллды санарип ноталарга айландыруу: баалуулуктарды кечиктирүү
Музыкалык баллды санарип ноталарга айландыруу: баалуулуктарды кечиктирүү

Эсепти санариптик эквивалентине санарип түрдө көчүрүү үчүн эки кадам бар. Биринчиден, биз нота миллисекунд менен созулган убакытты жазышыбыз керек. Бул тапшырманы аткаруу үчүн интернеттен табылган диаграмманы колдондум. Нотанын жарым нотасы, чейрек нотасы, сегизинчи нотасы ж.б болгонуна негизделип, мен нота узундугун миллисекундка котордум. Сиз бул сандарды менин кодумдан delay () катары көрө аласыз; функциясы жана кашаанын ичиндеги сан бул кадамда биз аныктаган миллисекундтардагы кечигүү мааниси болот.

2 -кадам: Музыкалык эсепти санарип ноталарга айландыруу: Hertz баалуулуктары

Музыкалык баллды санарип ноталарга айландырыңыз: Hertz баалуулуктары
Музыкалык баллды санарип ноталарга айландырыңыз: Hertz баалуулуктары

Бул кадамды баштоодон мурун, мен кээ бир техникалык терминдерди аныктап алайын. Нотанын "мааниси" "чайыр", "баалуулук" жана "нота" деген сөздөр менен алмаштырылышы мүмкүн. Эми, ырдын ар бир нотасын партитурадан окуу керек. Сиз андан кийин интернеттен оңой таба турган Hertz столуна музыка аркылуу ар бир нотаны Герцке которушуңуз керек болот. Эстен чыгарбоо керек болгон нерсе, ортоңку C столдо C4 катары жазылган, ал эми октаванын бийиктиги C5 жана башкалар. Бул ноталардын баары Герцке жазылып алынган соң, сиз маанилерди функциянын тонусуна жайгаштырасыз (x, y, z); бул жерде X - пин номери же const int, өзгөрмөлөрдү аныктоо жолу, мен кийинчерээк түшүндүрөм. Y сиз транскрипциялаган Hertz мааниси болот, ал эми Z нотанын миллисекундтарда жүздүн жакындыгына тегеректелген узактыгы болот. Кечигүү (); баалуулуктар нотанын узактыгы болот. Эми, музыканы ойной турган схеманы иштеп чыгалы.

3 -кадам: Райондук дизайн

Райондук дизайн
Райондук дизайн

Эми биз бардык ноталарды компьютер түшүнө турган санариптик баалуулуктарга котордук, бул схеманы курууга убакыт келди. Нан тактасын алып, ЖК экранды биринчи пин (GND) менен катар 14кө коюңуз. Максат - бардыгын тизип коюу, зымдардын тыгылышын азайтуу. Ардуинону нан тактасынын жанына койгула, жана 5в пинди нандын оң темир жолуна, жер казыгын терс темир жолго туташтыргыла. Эми биз Arduino менен компоненттердин ортосундагы секиргичтерди туташтырууга даярбыз.

Эми, ЖКдагы казыктар жана аларды зым менен жабуу жөнүндө сүйлөшөлү.

GND жерди билдирет, бул түз агымдагы терс зым. Нан тактасынын терс темир жолуна GND зымы.

VCC Жалпы Коллектордогу Чыңалуу дегенди билдирет жана бул жерде сиз 5 вольттук энергия булагыңызды (оң электр темир жолун) туташтырасыз.

VO Контрастты билдирет, муну потенциометрдин ортоңку пинине туташтырыңыз. Потенциометрдин сол пинин оң электр темир жолуна, ал эми оң казыкты жерге электр темир жолуна туташтырыңыз.

RS "Register Select" дегенди билдирет жана муну Arduino дисплейге маалыматтарды кайда сактоо керектигин айтуу үчүн колдонот. Бул пинти Arduinoдогу 12 -пинге туташтырыңыз.

RW "Окуу/Жазуу" дегенди билдирет, бул Arduino экраны сиз көрсөтө турган нерсени көрсөтүп жаткандыгын текшерүү үчүн колдонулат. Бул пинди нан тактасындагы терс темир жолго туташтырыңыз.

E - иштетүү дегенди билдирет, ал ЖКга кайсы пикселдерди иштетүү (күйгүзүү) же өчүрүү (өчүрүү) керектигин айтат. Бул пинти Arduino пин 11ге туташтырыңыз.

D4, D5, D6 жана D7 - бул дисплей казандары, алар көрсөтүлгөн тамгаларды жана тамгаларды көзөмөлдөйт. Аларды 5, 4, 3 жана 2 Arduino казыктарына туташтырыңыз.

Pin A, кээде LED деп белгиленет, арткы жарык үчүн LED аноду. Муну оң электр темир жолуна зым менен же 220 омдук резистор менен туташтырыңыз. Резистор ЖКны аябагандай, узак убакытка колдонуу үчүн жакшы, бирок эгерде түзмөк күнү -түнү колдонулбаса, анда резистордун кереги жок.

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

4-кадам: Кодду жүктөө: Кантип

Ардуинону компьютериңиздин USB портуна туташтырыңыз. Arduino IDE программистин жардамы менен төмөнкү кодду жүктөңүз.

#кошуу

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

жараксыз орнотуу () {

// ЖКнын мамычаларынын жана катарларынын санын орнотуу: lcd.begin (16, 2); // ЖКга билдирүү басып чыгаруу. lcd.print ("Hertz Pitch:!"); кечигүү (1000); void loop () {// e4 кечиктирүүнү ойнотуу (600); // 0.6 секунддук тыныгуу обону (10, 329.63, 300); // e -зонду 10 -пиндеги, 3 сек. lcd.print (" 329.63 "); //" 329.63 "ЖКда билдирүүнү көрсөтүү

кечигүү (350); //.35 секундга кечиктирүү

lcd.clear (); // LCDди тазалоо жана кийинки билдирүү үчүн баштапкы абалга келтирүү // d4# тонун ойнотуу (10, 311.13, 300); lcd.print ("311.13"); кечигүү (350); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (350); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (350); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (350); lcd.clear (); // b3 обонун ойноо (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // d4 обонун ойнотуу (10, 293.66, 300); lcd.print ("293.66"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // play d3 tone (10, 146.83, 300); lcd.print ("146.63"); кечигүү (350); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); lcd.print ("174.61"); кечигүү (400); lcd.clear (); // a3 обонун ойноо (10, 220, 300); lcd.print ("220"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 900); lcd.print ("246.94"); кечигүү (1000); lcd.clear ();

// e3 ойноо

тон (10, 164.81, 300); lcd.print ("164.81"); кечигүү (400); lcd.clear (); // ойноо g3# тон (10, 207.65, 300); lcd.print ("207.65"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 900); lcd.print ("261.63"); кечигүү (1000); lcd.clear (); // e ton ойноо (10, 164.81, 300); lcd.print ("164.81"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.66, 300); lcd.print ("293.66"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); // d3 обонун ойнотуу (10, 146.83, 300); lcd.print ("146.83"); кечигүү (400); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); // eeprom 20--6 ооба, жарк 65–0 noyes lcd.print ("174.61"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 300); lcd.print ("220.0"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 900); lcd.print ("246.94"); кечигүү (1000); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); lcd.print ("174.61"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // b3 обонун ойноо (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); // b3 обонун ойноо (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.66, 300); lcd.print ("293.66"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 900); lcd.print ("329.63"); кечигүү (1000); lcd.clear (); // g3 тонун ойнотуу (10, 196, 300); lcd.print ("196.0"); кечигүү (400); lcd.clear (); // ойноо f4 обону (10, 349.23, 300); lcd.print ("349.23"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.23, 300); lcd.print ("329.23"); кечигүү (400); lcd.clear (); // d4 обонун ойнотуу (10, 293.63, 900); lcd.print ("293.63"); кечигүү (1000); lcd.clear (); // e3 тонун ойнотуу (10, 164.81, 300); lcd.print ("164.81"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.63, 300); lcd.print ("293.63"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 900); lcd.print ("261.63"); кечигүү (1000); lcd.clear (); // d3 обонун ойноо (10, 146.83, 300); lcd.print ("146.83"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.63, 300); lcd.print ("293.63"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 900); lcd.print ("246.94"); кечигүү (1000); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (350); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (350); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (350); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (350); lcd.clear (); // b3 обонун ойноо (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.66, 300); lcd.print ("293.66"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); // d3 обонун ойноо (10, 146.83, 300); lcd.print ("146.83"); кечигүү (350); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); lcd.print ("174.61"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 300); lcd.print ("220.0"); кечигүү (400); // b3 lcd.clear () ойнотуу; тон (10, 246.94, 900); lcd.print ("246.94"); кечигүү (1000); lcd.clear (); // e3 тонун ойнотуу (10, 164.81, 300); lcd.print ("164.81"); кечигүү (400); lcd.clear (); // ойноо g#3 обону (10, 207.65, 300); lcd.print ("207.65"); кечигүү (400); lcd.clear (); // b3 обонун ойноо (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 900); lcd.print ("261.63"); кечигүү (1000); кечигүү (300); lcd.clear (); // e3 тонун ойнотуу (10, 164.81, 300); lcd.print ("164.81"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // play d4# tone (10, 311.13, 300); lcd.print ("311.13"); кечигүү (400); lcd.clear (); // e4 обонун ойнотуу (10, 329.63, 300); lcd.print ("329.63"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // d4 обонун ойноо (10, 293.66, 300); lcd.print ("293.66"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); // d3 обонун ойнотуу (10, 146.83, 300); lcd.print ("146.83"); кечигүү (400); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); lcd.print ("174.61"); кечигүү (400); lcd.clear (); // a3 обонун ойноо (10, 220, 300); lcd.print ("220.0"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 900); lcd.print ("246.94"); кечигүү (1000); lcd.clear (); // ойноо f3 тону (10, 174.61, 300); lcd.print ("174.61"); кечигүү (400); lcd.clear (); // c4 обонун ойнотуу (10, 261.63, 300); lcd.print ("261.63"); кечигүү (400); lcd.clear (); // b3 обонун ойнотуу (10, 246.94, 300); lcd.print ("246.94"); кечигүү (400); lcd.clear (); // ойноо a3 тон (10, 220, 900); lcd.print ("220.0"); кечигүү (1000); lcd.clear (); }

5 -кадам: Кодду жүктөө: Мунун баары эмнени билдирет?

Келгиле, кодду түшүнүү үчүн англис тилиндеги кээ бир функцияларды аныктайлы.

тон (x, y, z); = y Герцтин үнү менен, x миллисекунд үчүн x пинзиндеги сигналга ойноо.

lcd.print ("XYZ"); = LCD экранга XYZ белгилери бар билдирүүнү басып чыгаруу. (мисалы, Hertz чайырын көрсөтүү)

кечигүү (x); = x миллисекунд үчүн тыным.

const int X = Y = Y өзгөрмөлүү X өзгөрмөсүн орнотуп, же X же Y түзмөгүнө тапшырмаларды берүү үчүн колдонуңуз.

lcd.clear (); = ЖК экранды тазалап, жаңы дисплей үчүн баштапкы абалга келтирүү

pinMode (X, OUTPUT); = чыгуу режими үчүн пин X орнотуу

Бул функциялардын бардыгын түшүнгөндөн кийин, сиз ырды которууда чогулткан маалыматтарыңыз менен өзгөрмөлөрдү оңой алмаштыра аласыз, анан өзүңүздүн ырыңызды коддой аласыз!

6 -кадам: Бүттү !

Бүттү !!!
Бүттү !!!
Бүттү !!!
Бүттү !!!

Сизде Fur Elise ойногон жана Герцте нота баалуулуктарын көрсөтүүчү Arduino бар, же сиз тандаган ырдын обонун ойногон жана көрсөткүңүз келген текстти көрсөтүүчү Arduino жасадыңыз. Бул үйрөткүчкө барганыңыз үчүн рахмат жана мен сизге Arduinoдогу бул долбоорду үмүттөнөм.

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