RGB-светодиод
1
2
+
G
- Сигнал
- Общий вывод (GND)
  • Существует два вида пьезодинамиков - активный и пассивный. Активный динамик звучит громче, но с постоянной высотой тона (около 2,5 кГц). Пассивный динамик звучит менее убедительно, зато высота тона может управляться с помощью Arduino. Это нам и нужно.
  • Схема подключения пьезодинамика предельно проста. Вывод, обозначенный, как + надо подключить к пину с ШИМ (~), а второй вывод подключить к земле.
  • Принцип работы пьезодинамика такой же, как и у обычного динамика. При подаче положительного напряжения на выводы мембрана выгибается, а при снятии напряжения, становится в исходное положение (как показано на рисунке выше). Если переключать два этих состояния достаточно часто (например 100 раз в секунду), то мембрана начнет производить звуковые волны соответствующей частоты (100 Гц).
  • Можно организовать переключение вручную с помощью функций digitalWrite и delay, однако, для этого предусмотрена специальная функция tone. Используя её, можно значительно сократить код.
Типовая схема подключения
Функции для работы с пьезодинамиком:
tone(pin, freq, time); воспроизводить звуковой сигнал на пине pin с частотой freq в течение времени time .
Пьезодинамик позволяет воспроизводить простенькие мелодии. Для этого необходимо знать соответствие частот и обозначение нот.
Немного музыки
Последнее, что нужно знать, чтобы записать мелодию на языке Arduino, что в музыке помимо нот иногда звучит тишина - это называется пауза. Паузы, как и ноты бывают разных длительностей.
Попробуем запрограммировать Arduino на проигрывание такого произведения. Для удобства воспользуемся циклами и массивами.
А так ноты обозначаются на нотном стане, у каждой своё место.
Пример кода
#define PIN 11

#define DO0 131
#define DOd0 139
#define RE0 147
#define REd0 156
#define MI0 165
#define FA0 175
#define FAd0 185
#define SOL0 196
#define SOLd0 208
#define LA0 220
#define LAd0 233
#define SI0 247

#define DO1 262
#define DOd1 277
#define RE1 294
#define REd1 311
#define MI1 330
#define FA1 349
#define FAd1 370
#define SOL1 1392
#define SOLd1 415
#define LA1 440
#define LAd1 466
#define SI1 494

#define DO2 523
#define DOd2 554
#define RE2 587
#define REd2 622
#define MI2 659
#define FA2 698
#define FAd 740
#define SOL2 784
#define SOLd2 831
#define LA2 880
#define LAd2 932
#define SI2 988

#define DO3 1047
#define DOd3 1109
#define RE3 1175
#define REd3 1245
#define MI3 1319
#define FA3 1397
#define FAd3 1480
#define SOL3 1568
#define SOLd3 1661
#define LA3 1760
#define LAd3 1865
#define SI3 1975

#define cel 2000
#define pol 1000
#define chet 500
#define vos 250
#define shes 125

const int note1[7]={LA2,MI2,LA2,MI2,LA2,SOLd2,SOLd2};
const int times1[7]={vos,vos,vos,vos,vos,vos,vos};

const int note2[7]={SOLd2,MI2,SOLd2,MI2,SOLd2,LA2,LA2};
const int times2[7]={vos,vos,vos,vos,vos,vos,vos};

const int note3[15]={LA2,SI2,SI2,SI2,SI2,SI2,DO3,DO3,DO3,DO3,DO3,DO3,SI2,LA2,SOLd2};
const int times3[15]={vos,vos,shes,shes,vos,vos,vos,shes,shes,vos,vos,vos,vos,vos,vos};

void setup() {
  pinMode (11,OUTPUT);

}

void loop() {
  for (int i=0;i<7;i++){
    tone(PIN,note1[i],times1[i]);
    delay(times1[i]);
    delay(20);
  }
  delay(vos);
  for (int i=0;i<7;i++){
    tone(PIN,note2[i],times2[i]);
    delay(times1[i]);
    delay(20);
  }
  delay(vos);
  for (int i=0;i<7;i++){
    tone(PIN,note1[i],times1[i]);
    delay(times1[i]);
    delay(20);
  }
  delay(vos);
  for (int i=0;i<6;i++){
    tone(PIN,note2[i],times2[i]);
    delay(times1[i]);
    delay(20);
  }
  delay(chet);
//Представьте себе
  for (int i=0;i<15;i++){
    tone(PIN,note3[i],times3[i]);
    delay(times3[i]);
    delay(20);
  }
  tone(PIN,SI2,vos);delay(vos);
  delay(20);
  tone(PIN,LA2,vos);delay(vos);
  delay(vos);
//Представьте себе
  for (int i=0;i<15;i++){
    tone(PIN,note3[i],times3[i]);
    delay(times3[i]);
    delay(20);
  }
  tone(PIN,LA2,pol+chet);delay(pol+chet);
  delay(20);
}