Мелодии для Ардуино. Проекты. Ардуино

Мелодии для Ардуино
Звук в Ардуино
Звук в Ардуино

Привет! Мы уже знаем как извлечь из Ардуино звук. И даже собрали простое пианино с помощью Ардуино. А сегодня посмотрим как написать готовые мелодии на Ардуино в программе. А также, какие мелодии уже есть на просторах интернета.

В предыдущем уроке мы научились генерировать звук. Посмотрите этот урок, если уже забыли его или пропустили. Сегодня мы будем использовать его опять.

Звук в ардуино. Урок 7. Ардуино

Для выполнения этого урока нам понадобятся

  • Ардуино Uno
  • Макетная плата
  • Перемычки
  • 1 резистор номиналом 150 Ом
  • Потенциометр 10 кОм
  • Динамик 8 Ом
  • Кабель USB

Программа и схема

Соберем ту же схему из предыдущего урока. Она довольно проста.

Принципиальная схема подключения динамика к ардуино
Принципиальная схема подключения динамика к ардуино

Мы уже знаем, что такое звук, как работает динамик и, в конце концов, знаем как извлечь звук из Ардуино.

Теперь осталось написать программу, которая будет генерировать мелодию на Ардуино и воспроизводить ее на динамике. Например, простая мелодия из книги Джереми Блюма.

#include "pitches.h"
const int SPEAKER=9;

int notes[] = {
 NOTE_A4, NOTE_E3, NOTE_A4, 0, 
 NOTE_A4, NOTE_E3, NOTE_A4, 0,
 NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C4, NOTE_D4,
 NOTE_E4, NOTE_E3, NOTE_A4, 0
};

int times[] = {
 250, 250, 250, 250, 
 250, 250, 250, 250,
 125, 125, 125, 125, 125, 125, 125, 125,
 250, 250, 250, 250 
};

void setup(){
 for (int i = 0; i < 20; i++)
 {
  tone(SPEAKER, notes[i], times[i]);
  delay(times[i]);
 }
}
void loop(){
}

Динамик подключается к 9 пину через сопротивление. И, к тому же, не забудьте подключить файл с нотами. Он должен находиться рядом с файлом программы в одной папке.

В этом примере ноты и длительность их звучания собраны в массивы. А в главный функции setup() управление мелодией происходит в цикле for(). Такой способ намного удобнее, чем запись мелодии построчно.

Другие мелодии

Посмотрим какие еще мелодии можно сыграть на Ардуино.

Главная тема супер братьев Марио

const int SPEAKER=9;
int notes[] = {
 1318, 1318, 1318, 1046, 1318, 1568, 784,
 1046, 784, 659, 880, 987, 932, 880, 784,
 1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
 1046, 784, 659, 880, 987, 932, 880,
 784, 1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
 1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174,
 0, 1568, 1480, 1396, 1244, 1318, 2093, 2093, 2093,
 1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174, 1244, 1174, 1046, 
};
int times[] = {
 150, 300, 150, 150, 300, 600, 600,
 450, 150, 300, 300, 150, 150, 300, 210,
 210, 150, 300, 150, 150, 300, 150, 150, 450,
 450, 150, 300, 300, 150, 150, 300,
 210, 210, 150, 300, 150, 150, 300, 150, 150, 450,
 150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150,
 0, 150, 150, 150, 300, 150, 300, 150, 600,
 150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150, 300, 450, 600,
};
int delays[] = {
 150, 300, 300, 150, 300, 600, 600,
 450, 450, 450, 300, 300, 150, 300, 210,
 210, 150, 300, 150, 300, 300, 150, 150, 450,
 450, 450, 450, 300, 300, 150, 300,
 210, 210, 150, 300, 150, 300, 300, 150, 150, 600,
 150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 150,
 300, 150, 150, 150, 300, 300, 300, 150, 600,
 150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 450, 450, 450, 1200,
};
void setup(){
 for (int i = 0; i < 75; i++){
  tone(SPEAKER, notes[i], times[i]);
  delay(delays[i]);
 }
 noTone(SPEAKER);
}
void loop(){}

Имперский марш из Звездных войн

const int SPEAKER=9;
int notes[] = {
  392, 392, 392, 311, 466, 392, 311, 466, 392,
  587, 587, 587, 622, 466, 369, 311, 466, 392,
  784, 392, 392, 784, 739, 698, 659, 622, 659,
  415, 554, 523, 493, 466, 440, 466,
  311, 369, 311, 466, 392
};
int times[] = {
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 250, 100, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 750
};
void setup(){
 for (int i = 0; i < 39; i++){
  tone(SPEAKER, notes[i], times[i]*2);
  delay(times[i]*2);
  noTone(SPEAKER);
 }
}
void loop(){} 

В лесу родилась елочка

#include "pitches.h"
int SPEAKER=9;

int notes[] = {
  NOTE_C4, NOTE_A4, NOTE_A4, NOTE_G4,
  NOTE_A4, NOTE_F4, NOTE_C4, NOTE_C4,
  NOTE_C4, NOTE_A4, NOTE_A4, NOTE_AS4,
  NOTE_G4, NOTE_C5, 0, NOTE_C5, NOTE_D4,
  NOTE_D4, NOTE_AS4,NOTE_AS4,NOTE_A4,
  NOTE_G4, NOTE_F4, NOTE_C4, NOTE_A4,
  NOTE_A4, NOTE_G4, NOTE_A4, NOTE_F4
};

int times[] = {
  400,400,400,400,
  400,400,400,400,
  400,400,400,400,
  400,600,20,400,400,
  400,400,400,400,
  400,400,400,400,
  400,400,400,600
};

void setup(){
 for (int i = 0; i < 29; i++){
  tone(SPEAKER, notes[i],times[i]);
  delay(times[i]);
  noTone(SPEAKER);
 }
}
void loop(){} 

Гимн СССР

int tonePin = 9;// пин пищалки

void setup() {
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 374.999625);
    delay(416.66625);
    tone(tonePin, 195, 124.999875);
    delay(138.88875);
    tone(tonePin, 220, 499.9995);
    delay(555.555);
    tone(tonePin, 146, 249.99975);
    delay(277.7775);
    tone(tonePin, 146, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 374.999625);
    delay(416.66625);
    tone(tonePin, 155, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 499.9995);
    delay(555.555);
    tone(tonePin, 116, 249.99975);
    delay(277.7775);
    tone(tonePin, 116, 249.99975);
    delay(277.7775);
    tone(tonePin, 130, 499.9995);
    delay(555.555);
    tone(tonePin, 130, 374.999625);
    delay(416.66625);
    tone(tonePin, 146, 124.999875);
    delay(138.88875);
    tone(tonePin, 155, 499.9995);
    delay(555.555);
    tone(tonePin, 155, 374.999625);
    delay(416.66625);
    tone(tonePin, 174, 124.999875);
    delay(138.88875);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 374.999625);
    delay(416.66625);
    tone(tonePin, 233, 124.999875);
    delay(138.88875);
    tone(tonePin, 261, 749.99925);
    delay(833.3325);
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 293, 499.9995);
    delay(555.555);
    tone(tonePin, 261, 374.999625);
    delay(416.66625);
    tone(tonePin, 233, 124.999875);
    delay(138.88875);
    tone(tonePin, 261, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 374.999625);
    delay(416.66625);
    tone(tonePin, 195, 124.999875);
    delay(138.88875);
    tone(tonePin, 220, 499.9995);
    delay(555.555);
    tone(tonePin, 146, 374.999625);
    delay(416.66625);
    tone(tonePin, 146, 124.999875);
    delay(138.88875);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 374.999625);
    delay(416.66625);
    tone(tonePin, 155, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 499.9995);
    delay(555.555);
    tone(tonePin, 116, 374.999625);
    delay(416.66625);
    tone(tonePin, 116, 124.999875);
    delay(138.88875);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 374.999625);
    delay(416.66625);
    tone(tonePin, 195, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 999.999);
    delay(1111.11);
    tone(tonePin, 293, 999.999);
    delay(1111.11);
    tone(tonePin, 261, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 249.99975);
    delay(277.7775);
    tone(tonePin, 220, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 249.99975);
    delay(277.7775);
    tone(tonePin, 261, 749.99925);
    delay(833.3325);
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 174, 999.999);
    delay(1111.11);
    tone(tonePin, 233, 999.999);
    delay(1111.11);
    tone(tonePin, 220, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 249.99975);
    delay(277.7775);
    tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 249.99975);
    delay(277.7775);
    tone(tonePin, 220, 749.99925);
    delay(833.3325);
    tone(tonePin, 146, 249.99975);
    delay(277.7775);
    tone(tonePin, 146, 999.999);
    delay(1111.11);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 195, 374.999625);
    delay(416.66625);
    tone(tonePin, 220, 124.999875);
    delay(138.88875);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 195, 374.999625);
    delay(416.66625);
    tone(tonePin, 220, 124.999875);
    delay(138.88875);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 195, 374.999625);
    delay(416.66625);
    tone(tonePin, 233, 124.999875);
    delay(138.88875);
    tone(tonePin, 311, 999.999);
    delay(1111.11);
    tone(tonePin, 311, 999.999);
    delay(1111.11);
    tone(tonePin, 293, 249.99975);
    delay(277.7775);
    tone(tonePin, 261, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 249.99975);
    delay(277.7775);
    tone(tonePin, 261, 249.99975);
    delay(277.7775);
    tone(tonePin, 293, 749.99925);
    delay(833.3325);
    tone(tonePin, 233, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 999.999);
    delay(1111.11);
    tone(tonePin, 261, 999.999);
    delay(1111.11);
    tone(tonePin, 233, 249.99975);
    delay(277.7775);
    tone(tonePin, 220, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 249.99975);
    delay(277.7775);
    tone(tonePin, 220, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 749.99925);
    delay(833.3325);
    tone(tonePin, 195, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 999.999);
    delay(1111.11);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 374.999625);
    delay(416.66625);
    tone(tonePin, 195, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 499.9995);
    delay(555.555);
    tone(tonePin, 116, 374.999625);
    delay(416.66625);
    tone(tonePin, 116, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 999.999);
    delay(1111.11);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 499.9995);
    delay(555.555);
    tone(tonePin, 233, 1999.998);
    delay(2222.22);
}
void loop() {}

Заключение

Как видите, на Ардуино можно сыграть почти любую мелодию. Но на этом музыкальные возможности Ардуино не исчерпываются. И если подключить дополнительные модули, то можно проиграть и mp3 аудио файлы. В будущем мы попробуем это сделать.

2 комментария на “Мелодии для Ардуино. Проекты. Ардуино

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *