Пищало
Давайте попробуем реализовать звуковую сигнализацию какого-либо явления. Для этого мы будем использовать пьезодинамик или buzzer.
Нам понадобятся
- Пьезодинамик
- Фоторезистор
- Термистор
- Резистор 10 кОм
- Потенциометр
- Соединительные провода «Папа-Папа»
Пищало V.1
Для начала сделаем устройство, которое выводит по запросу, для каждого датчика его значение и, если значение выше/ниже заданного порога, издает звуковой сигнал.
Соберем схему:
Код к схеме
#define TERM A0
#define FOTO A1
#define POT A2
#define BUZZ 3
void setup()
{
Serial.begin(9600);
Serial.println(«Privet!»);
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’) //Если пришла команда «Termistor mode»
{
Serial.println( temp);
if(temp < 450) //Включаем режим термистора.
{
tone(BUZZ, 3000, 1000);
delay(600);
}
}
//Чтобы услышать звук- закрой фоторезистор рукой.Одновременно отправь команду
if (cmd == ‘f’ || cmd == ‘F’) //Если пришла команда «Fotorezistor mode»
{
Serial.println(light);
if(light > 400) //Включаем режим фоторезистора
{
tone(BUZZ, 4000, 1000);
delay(600);
}
}
//Чтобы услышать звук выкрути термистор до значения больше 700 и отправь команду.
if( cmd == ‘p’ || cmd == ‘P’) //Если пришла команда «Potentiometr mode»
{
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(«Privet!»);
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(«Achtung!It’s too hot!»);
Serial.println(«Temperature:»);
Serial.println(temp);
tone(BUZZ, 3000, 1000);
delay(2000);
}
if(light > 400)
{
Serial.println(«Night is coming!»);
Serial.println(«Light:»);
Serial.println(light);
tone(BUZZ, 4000, 1000);
delay(2000);
}
if(value > 700)
{
Serial.println(«Turn it off pls»);
Serial.println(«Value:»);
Serial.println(value);
tone(BUZZ, 3000, 1000);
delay(2000);
}
}
Лучше?
Теперь звуковой сигнал при критических значениях от нас не зависит. При преодолении нашего порога значений, издается писк, и выводится сообщение в Serial Monitor, причем, подача сигнала не прекратится, пока значение не вернется в нормальные рамки. Таким образом, можно сигнализировать разные ситуации с нашим устройством.
Можно двигаться дальше.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Плата ArduinoArduino Uno1
Резистор10 кОм2
ТермисторB57164-K 103-J1
ФоторезисторVT90N21
Соединительные провода"Папа-Папа"1
Макетная плата"Папа-Папа"1
Переменный резистор10кОм1
ПьезоизлучательПассивный1
Макетная платаBreadboard-half1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- Buzzer.ino (2 Кб)
- Buzzer2.ino (1 Кб)