Подключение пищалки к Arduino
Зуммер (активный и пассивный)
Пищалка к Arduino Uno и Nano включается между цифровым выводом и землёй. tone(pin, частота) задаёт высоту тона, noTone(pin) выключает звук.
Схема подключения пищалки к Arduino
| Пьезопищалка | Arduino Uno |
|---|---|
| 1 | D8 |
| 2 | GND |
Схема из примера «Arduino Uno: азбука Морзе — текст из порта вспышками и писком».
Выводы Пьезопищалка
| Вывод | Назначение |
|---|---|
| 1 | плюс (у полярных зуммеров помечен «+») |
| 2 | минус — к GND |
Код для Arduino
// Азбука Морзе: текст из монитора порта — вспышками и писком.
//
// Точка — одна единица времени, тире — три, пауза внутри буквы — одна,
// между буквами — три, между словами — семь. Скорость задаёт UNIT:
// 120 мс — это десять слов в минуту, темп начинающего радиста.
const int LED = 13, BUZZER = 8;
const int UNIT = 120;
const int TONE_HZ = 700;
// Буквы A…Z и цифры 0…9: точки и тире.
const char *LETTERS[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
"-..-", "-.--", "--.."};
const char *DIGITS[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...",
"---..", "----."};
void signal(int units) {
digitalWrite(LED, HIGH);
tone(BUZZER, TONE_HZ);
delay(units * UNIT);
digitalWrite(LED, LOW);
noTone(BUZZER);
}
void sendChar(char c) {
const char *code = nullptr;
if (c >= 'a' && c <= 'z') c -= 32;
if (c >= 'A' && c <= 'Z') code = LETTERS[c - 'A'];
else if (c >= '0' && c <= '9') code = DIGITS[c - '0'];
else if (c == ' ') { Serial.print(F("/ ")); delay(4 * UNIT); return; } // 3 уже прошло + 4 = 7
if (!code) return;
Serial.print(code);
Serial.print(' ');
for (const char *p = code; *p; p++) {
signal(*p == '.' ? 1 : 3);
delay(UNIT); // пауза внутри буквы
}
delay(2 * UNIT); // до трёх единиц между буквами
}
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println(F("Напишите текст латиницей — отстучу его морзянкой"));
}
void loop() {
if (!Serial.available()) return;
String text = Serial.readStringUntil('\n');
text.trim();
if (!text.length()) return;
Serial.print(text);
Serial.print(F(": "));
for (unsigned i = 0; i < text.length(); i++) sendChar(text[i]);
Serial.println();
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
tone()занимает Timer2: пока она работает, ШИМ на D3 и D11 недоступен.- Пьезопищалка берёт единицы миллиампер и подключается напрямую, громкому зуммеру нужен транзистор.
Частые ошибки при подключении к Arduino
- Играть
tone()и использоватьanalogWrite()на D3 или D11: ШИМ ломается. - Не задать длительность:
tone(pin, f)звучит, пока не вызванnoTone(). tone()с активным зуммером — звук хриплый, частота не та: он пищит сам по себе.digitalWrite(HIGH)с пассивным — один щелчок и тишина.- Громкий зуммер прямо на вывод — вывод перегружен, звук тихий.
tone()мешает ШИМ на других выводах — на Uno она занимает таймер 2 (выводы 3 и 11).
Ещё по теме
Другие детали для Arduino
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595Шаговый двигательКнопкаПотенциометрСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D