Главная » Arduino
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

Похожие статьи:


Arduino UNO урок 7 - Пьезоизлучатель

В данном уроке рассмотрим работу с пьезоизлучателем для генерирования звуков. Мы будем использовать пьезодатчик (Piezo Transducer), который позволяет генерировать звуковые волны в диапазоне частот 20 Гц - 20 000 Гц. Не путайте с пьезобиперами и т.п., которые генерируют звук только определенной частоты при подаче на них постоянного напряжения.

Мы будем использовать ШИМ-генератор Arduino для генерирования звука на пьезоизлучателе.

Для данного урока, мы не будем использовать стандартную функцию tone() по нескольким причинам:
- может использоваться только на одной ноге Arduino в одно время;
- использование tone() мешает использовать ШИМ на ногах 3 и 11

Используйте данную функцию, когда вам необходима какая-либо частота и не нужен ШИМ на 3 и 11 ножках Arduino.

ШИМ Arduino запускается на частоте 500 Гц, это вполне хороший звуковой тон для нашего примера.

Пьезоизлучатель

Для работы схемы подсоедините пьезодатчик к ноге 9 и 0V Arduino.

В скетче, показанном ниже, мы сделали альтернативную функцию beep(), которая посылает ШИМ-сигнал на пьезо, затем идет небольшая задержка, затем сигнал с пьезо снимается и опять задержка. В результате чего издается непродолжительный звук. Переменная delayms используется в функции для задания времени звучания в миллисекундах. Продолжительность ШИМ (20 в нашем примере) не очень важна.

Скетч ниже, при запуске программы издает 3 непродолжительных, а затем один продолжительный звуковой сигнал.

/*
 Пьезо
 
 Данный пример показывает управление Пьезо на 9 ножке Arduino,
 используя функцию analogWrite()
 
 При запуске издается 3 коротких звуковых сигнала, затем пауза в 1 сек,
 а затем продолжительный звуковой сигнал
 
 */

void setup()  { 
  pinMode(9, OUTPUT);	// устанавливаем 9 ногу как выход 
  beep(50);
  beep(50);
  beep(50);
  delay(1000);
} 

void loop()  { 
  beep(200); 
}

void beep(unsigned char delayms){
  analogWrite(9, 20);      // значение должно находится между 0 и 255
                           // поэкспериментируйте для получения хорошего тона
  delay(delayms);          // пауза delayms мс
  analogWrite(9, 0);       // 0 - выключаем пьезо
  delay(delayms);          // пауза delayms мс   
}

Оригинал статьи

Теги:

Колтыков А.В. Опубликована: 2011 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (7) | Я собрал (0) | Подписаться

0
Рустам #
Ошибка в коде и у вас и в оригинальной статье. Зачем-то запихнули эту часть:
beep(50);
beep(50);
beep(50);
delay(1000);
в void setup. Эта часть кода должна стоять вначале цикла void loop, иначе просто будет бить три такта по 50мс.
Ответить
0
tolyanich #
И в чем ошибка то? Это так и задумано. При включении или после сброса пропищать 3 раза.
Ответить
0
Nodit #
А мы можем использовать пьезоизлучатель в качестве приемника и читать сигнал с его ножек?
Ответить
0
Nodit #
Извините, а что это за излучатель? Половину ночи рылся в нете, только простейшие зумы нашел. Ничего даже близкого к диапазону 20-20000.
Ответить
0
talibanich #
Обычный зуммер
Ответить
0
Fedor #
"void beep(unsigned char delayms) " нужно наверно unsigned int ?
Ответить
0
dany #
А вот скетч без delay
void setup()
{
}
int powo, powoo = 3;
unsigned long prev, interval = 100;
unsigned long prev1, interval1 = 5000;
void loop() {
unsigned long now = millis();
if(powo != 0)
{
if (now - prev > interval)
{
beep(50, 700, 11, 0);
prev = now;
powo--;
}
}
else
{
if (now - prev1 > interval1)
{
prev1 = now;
powo = powoo;
}
}
}
void beep(int v, int h, int pin, int t)
{
int d;
tone(pin, h);
if(t)
{
d = t;
}
else
{
d = millis();
}
if(millis() - d > v)
{
noTone(pin);
}
else
{
beep(v, h, pin, d);
}
}
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Металлоискатель MD3010II Макетная плата для пайки (10 шт)
вверх