katse 6 Katse Buzzer
Töö kirjeldus:
Looda Pieso muusikat mängida
Komponendid:
Pieso
Juhtmed 4 tk
Ühendus skeem:

Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | // Этот скетч использует зуммер для воспроизведения мелодий. // Команда Arduino tone() будет издавать звуки определенной частоты. // Мы создаем функцию, которая сопоставляет символ нотной гаммы // ("До-ре-ми-фа...До") соответствующей частоте из следующей таблицы: // note frequency // c 262 Hz // d 294 Hz // e 330 Hz // f 349 Hz // g 392 Hz // a 440 Hz // b 494 Hz // C 523 Hz const int buzzerPin = 9 ; // Мы создали массив с нотами, которые хотим воспроизвести, измените эти значения, чтобы создать свои мелодии! // Длина должна равняться общему количеству нот и пауз const int songLength = 18 ; // Обозначение нот представляет собой массив из текстовых символов, // соответствующим нотам в песне. Пробел означает паузу (пустую ноту) char notes[] = "cdfda ag cdfdg gf " ; // пробелы означают паузы // Ритм задается массивом из длительности нот и пауз между ними. // "1" - четвертная нота, "2" - половинная, и т.д. // Не забывайте, что пробелы должны быть тоже определенной длинны. int beats[] = { 1 , 1 , 1 , 1 , 1 , 1 , 4 , 4 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 4 , 4 , 2 }; // "tempo" это скорость проигрывания мелодии. // Для того, чтобы мелодия проигрывалась быстрее, вы // должны уменьшить следующее значение. int tempo = 150 ; void setup () { pinMode (buzzerPin, OUTPUT ); } void loop () { int i, duration; for (i = 0 ; i < songLength; i + + ) // пошаговое воспроизведение из массива { duration = beats[i] * tempo; // длительность нот/пауз в ms if (notes[i] = = ' ' ) // если нота отсутствует? { delay (duration); // тогда не большая пауза } else // в противном случае играть { tone (buzzerPin, frequency(notes[i]), duration); delay (duration); // ждать пока проигрывается } delay (tempo / 10 ); // маленькая пауза между нотами } // Мы хотим, чтобы мелодия проиграла всего один раз, так что здесь остановимся окончательно: while ( true ){} // Если же вы хотите, чтобы мелодия играть снова и снова, Удалить вышеуказанное заявление } int frequency( char note) { // Эта функция принимает символ ноты (a-g), и возвращает // частоту в Гц для функции tone(). int i; const int numNotes = 8 ; // количество хранимых нот char names[] = { 'c' , 'd' , 'e' , 'f' , 'g' , 'a' , 'b' , 'C' }; int frequencies[] = { 262 , 294 , 330 , 349 , 392 , 440 , 494 , 523 }; // Теперь мы будем искать во всем массиве, символ ноты и если находим, возвращаем частоту для этой ноты. for (i = 0 ; i < numNotes; i + + ) // пошаговый перебор нот { if (names[i] = = note) // если находим { return (frequencies[i]); // возвращаем частоту } } return ( 0 ); // Поиск символа не дал результата? Но, необходимо вернуть какое-то значение, так вернем 0. } |
Foto:
Pieso mängid heli
Ülesanne 6 Muusikaline piiksutaja
Töö kirjeldus:
Muusikaline piiksutaja mängib muusikat
Komponendid:
Arduino Uno
Arendusplaat
Potentsioometr 1tk
LCD ekraan 1602
Nupp
Pieso
Takisti 220 Om
Juhtmed 20 tk
Ühendus skeem:

Seletus:
Pieso mängib alguses 1 muusikat, nuppu all hoides ja vabastades vahetab muusikat, LCD ekraan näitab praegu muusika ja number
Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include <LiquidCrystal.h> LiquidCrystal lcd( 12 , 11 , 5 , 4 , 3 , 2 ); const int piezoPin = 7 ; const int buttonPin = 6 ; int mode = 1 ; // Alg režiim int currentTrack = 0 ; // Määrame siin oma muusikapalad const int tracks[][ 8 ] = { // Music 1 { 261 , 196 , 196 , 220 , 196 , 0 , 247 , 261 // Hz }, // Music 2 { 329 , 329 , 349 , 392 , 392 , 349 , 329 , 293 // Hz }, // Music 3 { 261 , 329 , 392 , 523 , 392 , 329 , 261 , 196 // Hz } }; // Määrame muusikapalade iga noodi kestus const int durations[][ 8 ] = { // Muusikapala 1 kestused { 4 , 8 , 8 , 4 , 4 , 4 , 4 , 4 }, // Muusikapala 2 kestused { 8 , 8 , 4 , 4 , 4 , 4 , 4 , 4 }, // Muusikapala 3 kestust { 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 } }; void playMusic( const int * notes, const int * durations, int numNotes) { for ( int i = 0 ; i < numNotes; i + + ) { int noteDuration = 1000 / durations[i]; tone (piezoPin, notes[i], noteDuration); delay (noteDuration * 1.30 ); // Lisame rütmi jaoks väike viivitus nootide vahele noTone(piezoPin); } } void setup () { lcd.begin( 16 , 2 ); pinMode (buttonPin, INPUT_PULLUP); } void loop () { int buttonState = digitalRead (buttonPin); if (buttonState = = LOW ) { mode + + ; if (mode > 3 ) { mode = 1 ; // Tagasi esimesse režiimi } delay ( 100 ); // Tagasilöögi viivitus } switch (mode) { case 1 : currentTrack = 0 ; lcd.clear(); lcd.setCursor( 0 , 0 ); lcd.print( "Playing track:" ); lcd.setCursor( 0 , 1 ); lcd.print( "Track 1" ); playMusic(tracks[ 0 ], durations[ 0 ], sizeof (tracks[ 0 ]) / sizeof (tracks[ 0 ][ 0 ])); break ; case 2 : currentTrack = 1 ; lcd.clear(); lcd.setCursor( 0 , 0 ); lcd.print( "Playing track:" ); lcd.setCursor( 0 , 1 ); lcd.print( "Track 2" ); playMusic(tracks[ 1 ], durations[ 1 ], sizeof (tracks[ 1 ]) / sizeof (tracks[ 1 ][ 0 ])); break ; case 3 : currentTrack = 2 ; lcd.clear(); lcd.setCursor( 0 , 0 ); lcd.print( "Playing track:" ); lcd.setCursor( 0 , 1 ); lcd.print( "Track 3" ); playMusic(tracks[ 2 ], durations[ 2 ], sizeof (tracks[ 2 ]) / sizeof (tracks[ 2 ][ 0 ])); break ; default : break ; } delay ( 100 ); // LCD-ekraani uuendamine } |
Video:
https://drive.google.com/drive/folders/1QIIOFeZJeWjZsU1fwYtt2furDs4VmduP
Kus seda võib kasutada:
Mp3 mängija
Nutikõlar
Mikrolaineahi
Variant mis töötas videos:
Ühendamis skeem:

Seletus:
Potentsiomeetri väärtuse vahetamisel alam, kesk ja kõrg muusika pala vahetab vastavalt potentsimeetri väärtusele, ehk alam – pala 1, kesk – pala 2, kõrg – pala3. Iga pala mängimisel põleb oma LED diood, et saame näha mis pala praegu mängib.
Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | const int RedPin = 10; const int YellowPin = 9; const int GreenPin = 8; const int Potentiometer = A0; const int PiezoPin = 6; int currentTrack = 0; // Määratleme muusikapalad const int tracks[][8] = { // Music 1 { 261, 196, 196, 220, 196, 0, 247, 261 // Hz }, // Music 2 { 329, 329, 349, 392, 392, 349, 329, 293 // Hz }, // Music 3 { 261, 329, 392, 523, 392, 329, 261, 196 // Hz } }; // Määrame lugude iga noodi kestused const int durations[][8] = { // Muusika 1 pikkus { 4, 8, 8, 4, 4, 4, 4, 4 }, // Muusika 2 pikkus { 8, 8, 4, 4, 4, 4, 4, 4 }, // Muusika 3 pikkus { 4, 4, 4, 4, 4, 4, 4, 4 } }; void setup() { pinMode(RedPin, OUTPUT ); pinMode(YellowPin, OUTPUT ); pinMode(GreenPin, OUTPUT ); pinMode(Potentiometer, INPUT); pinMode(PiezoPin, OUTPUT ); // Initsialiseerime jadaside Serial. begin (9600); } void loop() { // Loeme potentsiomeetri väärtust int potValue = analogRead(Potentiometer); // Printime potentsiomeetri väärtus serial monitorile Serial.println(potValue); // Määrame praegune rada potentsiomeetri väärtuse põhjal if (potValue < 341) { currentTrack = 0; } else if (potValue >= 341 && potValue < 682) { currentTrack = 1; } else { currentTrack = 2; } // Seadistame LED-viigud praeguse raja alusel digitalWrite(RedPin, currentTrack == 0); digitalWrite(YellowPin, currentTrack == 1); digitalWrite(GreenPin, currentTrack == 2); // Mängime muusikapala playTrack(currentTrack); delay(100); // Viivitus sujuvamaks tööks } void playTrack( int trackIndex) { // Korrame määratud loo noote ja kestus for ( int i = 0; i < 8; i++) { int note = tracks[trackIndex][i]; int duration = durations[trackIndex][i]; // Mängime noot tone(PiezoPin, note, duration * 100); // Viivitus nootide vahel delay(duration * 100); } // Pärast loo esitamist lülitage pieso välja noTone(PiezoPin); } |