Греется Зуммер

orcsin
Offline
Зарегистрирован: 12.06.2015

Купил такой ПС-спикер http://freedelivery.in.ua/shop/details/2328/137/arduino/moduli/zummer-modul-zvuka-zvukoizluchatel-dlya-arduino.html

Использую такой код

tone(pinDigitalBuzzer, 3000, 10);
tone(pin, frequency, duration)

После вызова этой строки, воспроизводится звук, но резистор и транизистор на зумере начинает калится.

Попробовал в сетап добавить

pinMode(pinDigitalBuzzer, OUTPUT);

стал калится с самого начала.

Походу пин не выключается после 10 миллисекунд. Не пищит, но транзистор походу не закрылся. Осцилографа нет, простым мультиметром показывает на контакте управления от Ардуино 0,02 В. Ток через питание после включения зумера 180 мА.

Что это за фигня? Чё делать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вариантов несколько:

1. Уменьшить напряжение питания. Например, до 3.3В.

2. Поставить в цепь питания дополнительный резистор.

Чтобы не грелся при простое, после выключения звука переводить пин в "HIGH". Естественно, то же самое и при первоначальном включении.

Еще я бы увеличил номинал резистора в модуле минимум в 10 раз. Вероятно, Вы не обратили внимание, что Ардуино после такого подключения тоже стал греться.

orcsin
Offline
Зарегистрирован: 12.06.2015

Оба варианта это борьба с поледствиями. Надо заставить транзистор закрыться.

Про 3.3 вольта думал, в принципе они у меня есть.

Я просто не знаю, толи транзистор не закрываетя сам, толи с пина после команды Тоне не исчезает сигнал.

ПОчитал внимательнее, в дока вобще указано что из-за зумера будут плохо работать ШИМ 3 и 11.

ПРобовал noTone(pin) - не помогает.

Пробовал это:

void loop() {
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(20);              // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(5000);              // wait for a second
}

Ток при LOW не исчезает.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

orcsin пишет:

Оба варианта это борьба с поледствиями. Надо заставить транзистор закрыться.

...

Ток при LOW не исчезает.

Еще раз перечитайте 4-ю строку моего предыдущего сообщения.

orcsin
Offline
Зарегистрирован: 12.06.2015

andriano, да при digitalWrite(2, HIGH); транзистор закрывается.

void setup() {
  Serial.begin(9600); 
  pinMode(2, OUTPUT); 
}

void loop() {
  digitalWrite(2, HIGH); 
  Serial.println("HIGH"); 
  delay(5000);              
  digitalWrite(2, LOW); 
  Serial.println("LOW"); 
  delay(5000);              
}

Получается команда tone() полная хрень, прийдётся переписывать, единственное, что в таком режиме щелчки очень тихие, а мне нужна индикация нажатия кнопок.

Как сделать погромче?

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

orcsin пишет:

andriano, да при digitalWrite(2, HIGH); транзистор закрывается.

void setup() {
  Serial.begin(9600); 
  pinMode(2, OUTPUT); 
}

void loop() {
  digitalWrite(2, HIGH); 
  Serial.println("HIGH"); 
  delay(5000);              
  digitalWrite(2, LOW); 
  Serial.println("LOW"); 
  delay(5000);              
}

Получается команда tone() полная хрень, прийдётся переписывать, единственное, что в таком режиме щелчки очень тихие, а мне нужна индикация нажатия кнопок.

Как сделать погромче?

 

orcsin, есть такая штука - называется "Закон сохранения энергии". Вы уж определитесь, что именно Вам нужно, чтобы поменьше грелось или чтобы звучало погромче.

Впрочем, если сильно греется и почти не слышно, это может означать (на выбор):

- устройство неисправно,

- устройство неправильно используется,

- устройство вообще не предназначено для генерации звука.

Кстати, зачем Вы привели фрагмент кода, не относящийся к генерации звука, мне непонятно. Так что если Вы хотите, чтобы что-то работало, то не могу не согласиться:

orcsin пишет:
полная хрень, прийдётся переписывать

Но прежде, чем переписывать, я бы Вам посоветовал четко сформулировать, чего же Вы хотите добиться. По русски. На бумаге.

orcsin
Offline
Зарегистрирован: 12.06.2015

andriano, вы иногда читайте посты внимательно, что бы не писать чушь!! ЗАчем писать по русски, если вы по русски читать не умеете.

Этот код генерирует звук (щелчки), не верите - проверте! Расширите свой кругозор.

void setup() {
  Serial.begin(9600); 
  pinMode(2, OUTPUT); 
}

void loop() {
  digitalWrite(2, HIGH); 
  Serial.println("HIGH"); 
  delay(5000);              
  digitalWrite(2, LOW); 
  Serial.println("LOW"); 
  delay(5000);              
}

Когда я использую Tone, то играет громко, но греется бузер.

А когда даю щелчок через digitalWrite(2, LOW);, то звук тихий.

Прийдётся писать таймер для Tone, и вырубать его digitalWrite(2, HIGH); Судя по докам, работат Tone влияет на работу 3 и 11 выхода, поэтому от Tone видимо прийдётся отказаться. Остаётся только как то усилить звук  режиме digitalWrite(2, LOW);

orcsin
Offline
Зарегистрирован: 12.06.2015

DIYMan пишет:

orcsin пишет:

Как сделать погромче?

95 дБ хватит, надеюсь? http://ru.aliexpress.com/item/Brand-New-3-24V-12V-95DB-Electronic-Buzzer-Beep-Alarm-Intermittent-for-Arduino/32429503858.html?spm=2114.13010608.0.101.7PQAkP

Может сразу купить колонки S90?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

orcsin пишет:

Может сразу купить колонки S90?

Ага, можно, покупай, разрешаю.

bwn
Offline
Зарегистрирован: 25.08.2014

Активный

Не ерничать, а предложение DIYMan применить творчески.

AlexZZZ
Offline
Зарегистрирован: 22.07.2016

хотелось бы отметить несколько вещей:

1. баззер по ссылке никак греться не может (пьезокерамика)

2. номинал резистора в базовой цепи транзистора неоправданно занижен ( с данным номиналом никак не достичь ограничения тока на уровне допустимых 20-40мА на выводе однокристальника)

3. транзистор р-п-р что означает что открывается он  нулевым логическим уровнем.

Если на эмиттер Т5 подать 12В (Vcc),  а управлять 5ти вольтовой ардуинкой - транзистор никогда не закроется! ток, практически не ограниченный базовым сопротивлением, уйдет в преход база-эмиттер.

как-то так