Курс Arduino - Звук

Пищалка

Давайте спробуємо реалізувати звукову сигналізацію якогось явища. Для цього ми будемо використовувати п'єзодинамік або буззер.

Нам понадобяться

  • П'єзодинамік
  • Фоторезистор
  • Термістор
  • Резистор 10 кОм
  • Потенціометр
  • З'єднувальні дроти «Тато-Тато»

Пищалка V.1

Для початку зробимо пристрій, яке виводить за запитом, для кожного датчика його значення і, якщо значення вище/нижче заданого порогу, видає звуковий сигнал.

Зберемо схему:

Код до схеми

#define TERM A0
#define FOTO A1
#define POT A2
#define BUZZ 3

void setup()
{
  Serial.begin(9600);
  Serial.println("Привіт!");
  
  pinMode(TERM, INPUT);
  pinMode(FOTO, INPUT);
  pinMode(POT, INPUT);
  pinMode(BUZZ, OUTPUT);
}

void loop() 
{
  int temp = analogRead(TERM);
  int light = analogRead(FOTO);
  int value = analogRead(POT);

  
   if(Serial.available() > 0) //Перевіряємо, чи прийшла команда.
  {
   char cmd = Serial.read(); //Оголосимо змінну, в яку будемо запам'ятовувати команду.

   //Щоб почути звук - затисни термістор пальцями. Одночасно надішли команду
   if (cmd == 'T' || cmd == 't')      //Якщо прийшла команда "Режим термістора"
    {
      Serial.println( temp);  
      
      if(temp < 450)  //Увімкнемо режим термістора.          
          {
            tone(BUZZ, 3000, 1000);  
            delay(600);
          }
     }
      
      //Щоб почути звук - закрий фоторезистор рукою. Одночасно надішли команду
      if (cmd == 'f' || cmd == 'F')     //Якщо прийшла команда "Режим фоторезистора"
      {
        Serial.println(light);
         if(light > 400)                //Увімкнемо режим фоторезистора
           {
            
             tone(BUZZ, 4000, 1000);  
             delay(600);
           }
    
      }

      //Щоб почути звук, викрути термістор до значення більше 700 і надішли команду.
      if( cmd == 'p' || cmd == 'P')     //Якщо прийшла команда "Режим потенціометра"
      {  
        Serial.println(value);         //Увімкнемо режим потенціометра.
         if( value > 700)
          {
            tone(BUZZ, 5000, 1000);  
            delay(600);
          }
      }
          
  }  
}

Пояснення

Tone – Функція генерує на п'єзопищалці звукову хвилю. В загальному вигляді функція записується так. Tone(Номер пина, Частота, Тривалість)

Номер пина – це номер пина, до якого підключений буззер. 

Частота – частота звуку, що подається на пищалку.

Тривалість – тривалість поданого сигналу в мілісекундах. Її можна не задавати, але тоді звук не буде припинятися поки ви не викличете функцію noTone(Номер пина)

Так собі?

Так, наше пристрій не знайде практичного застосування, оскільки перевірка умов проводиться тільки за запитом. Давайте трохи покращимо наше пристрій і зробимо його більш правильним.

Пищалка V.2

#define TERM A0
#define FOTO A1
#define POT A2
#define BUZZ 3

void setup()
{
  Serial.begin(9600);
  Serial.println("Привіт!");
  
  pinMode(TERM, INPUT);
  pinMode(FOTO, INPUT);
  pinMode(POT, INPUT);
  pinMode(BUZZ, OUTPUT);
}

void loop() 
{
  int temp = analogRead(TERM);
  int light = analogRead(FOTO);
  int value = analogRead(POT);

  
 if(temp < 450)
 {
  Serial.println("Увага! Занадто гаряче!");
  Serial.println("Температура:");
  Serial.println(temp);
  tone(BUZZ, 3000, 1000);
  delay(2000);
 }

 if(light > 400)
 {
  Serial.println("Настає ніч!");
  Serial.println("Світло:");
  Serial.println(light);
  tone(BUZZ, 4000, 1000);
  delay(2000);
 }

  if(value > 700)
  {
    Serial.println("Вимкніть, будь ласка");
    Serial.println("Значення:");
    Serial.println(value);
    tone(BUZZ, 3000, 1000);
    delay(2000);
  }
  
}

Краще?

Тепер звуковий сигнал при критичних значеннях від нас не залежить. При перевищенні нашого порогу значень, видається писк, і виводиться повідомлення в Serial Monitor, причому, подача сигналу не припиниться, поки значення не повернеться в нормальні рамки. Таким чином, можна сигналізувати різні ситуації з нашим пристроєм.

Можна рухатися далі.

Список радіоелементів

Обозначення Тип Номінал Кількість Примітка
Плата Arduino
Arduino Uno
1
Резистор
10 кОм
2
Термістор B57164-K 103-J 1
Фоторезистор VT90N2 1
З'єднувальні дроти "Тато-Тато" 1
Макетна плата "Тато-Тато" 1
Змінний резистор 10кОм 1
П'єзозв'язувач Пасивний 1
Макетна плата Breadboard-half 1

Прикріплені файли:

Top