Arduone kit
Урок №11 Зуммер, Пищалка
Мы будем использовать зуммер (пищалку), который делает небольшой «щелчок»
В этом опыте, мы снова будем преодолевать разрыв между миром цифровым и аналоговым. Мы будем использовать зуммер (пищалку), который делает небольшой «щелчок», если дотронутся, кратковременно, его контактами до питания +5 вольт и "землей", попробуйте! Само по себе это не очень интересно, но если вы подадите на него напряжение и тут же отключите, со скоростью 100 раз в секунду, зуммер начнет пищать. И если собрать сотни строк тонов вместе, у вас появится музыка!
В этом опыте схема, вместе со скетчем, будет играть классическую музыку. Во всяком случае мы на это надеемся!
Схема подключения
Скетч
// Этот скетч использует зуммер для воспроизведения мелодий.
// Команда 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;  // количество хранимых нот
  
  // Следующие массивы содержат символы нот и соответствующие им
  // частоты. Последний символ "C" (нота "ДО") в верхнем регистре
  // (большая), это сделано для того чтобы отличить ее от первой
  // ноты "с", более низкого тона. Если вы хотите добавить больше
  // нот, вы должны будете использовать уникальный символ для
  // каждой новой ноты.

  // Каждый "char" (символ), мы заключаем в одинарные кавычки.

  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.
}
Что вы должны увидеть:
Что же вы должны увидеть? Ничего, но вы должны услышать! Ваша пищалка будет играть "Twinkle, Twinkle Little Star", или что то подобное. Если этого не происходит, проверьте правильность всех соединений, проверьте загружен ли код в плату Arduino. Или воспользуйтесь подсказками ниже.
Возможные трудности:
Нет звука
Учитывая размер и форму пищалки легко промахнуться мимо нужного отверстия в плате. Попробуйте еще раз проверить его размещение.
Все равно не работает, не пойму почему
Попробуйте вытянуть пищалку из платы и снова воткнуть, и перезагрузите программу в Arduino.
Устали от Twinkle Twinkle Little Starir
Код написан так, что вы легко можете добавить свои собственные мелодии
Применение в жизни:
Многие мегафоны используют подобный метод усиления сигнала, хотя качество звука оставляет желать лучшего.