На сегодняшний день существует большое количество различных типов дверных звонков: от самых простых однотоновых до музыкальных. Иногда дверной звонок дает первое впечатление гостям о некоторых предпочтениях хозяина жилища.

Какой-нибудь необычный дверной звонок можно купить в магазине, отдав за такой немало денег, а можно сделать самому с помощью популярной платы для прототипирования Arduino.
Данный проект на Arduino предполагает создание звукового многотонового дверного звонка с цветовой индикацией, выполненной на основе трех светодиодов. Принцип работы такого дверного звонка заключается в следующем: после нажатия кнопки мелодия запускается и затем через некоторое время автоматически останавливается, а светодиоды светятся ритмично во время звучания мелодии. Схема подключения элементов для создания дверного звонка на основе Arduino представлена ниже. Здесь пьезозуммер подключается к восьмому контакту Arduino, кнопка активации звонка через резистор 1 КОм подключается к двенадцатому контакту Arduino, а светодиоды подключаются через резисторы 221 Ом к контактам 3, 4 и 5 платы Arduino.

Основной код программы (main code) приведен далее. Но здесь следует заметить, что данный скетч основан на официальном примере ToneMelody (arduino.cc/en/Tutorial/ToneMelody), а точнее на файле констант тонов под заголовком Public Constants. Для использования этих констант помимо вкладки с основным кодом откройте новую вкладку, назовите ее pitches.h и скопируйте в нее содержимое (все константы) из Public Constants примера ToneMelody, иначе при компиляции кода вы получите сообщение об ошибке, связанной с pitches.h. Основной скетч программы:
#include "pitches.h" // добавление библиотеки констант тонов
//ноты в мелодии
int melody[]={NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4};
// кнопка дверного звонка подключается к линии 12
int buttonPin= 12;
const int rPin = 5; // красный светодиод
const int gPin = 4; // зеленый светодиод
const int bPin = 3; // синий светодиод
int ledState = 0;
int ledOn = false;
// продолжительность ноты, 4 = четверть ноты / 8 = одна восьмая ноты
int noteDurations[]={4, 8, 8, 4, 4, 4, 4, 4};
void setup(){
// линия с подключенной кнопкой настраивается на вход
pinMode(buttonPin, INPUT);
pinMode(rPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(bPin, OUTPUT);
}
void loop(){
// считываем вход
int buttonState = digitalRead(buttonPin);
// если кнопка нажата
if (buttonState == 1){
// перебираем ноты мелодии
for (int thisNote=0; thisNote <8; thisNote++){
// мигаем светодиодами с определенной последовательностью
if (thisNote%3==0){
digitalWrite(rPin, HIGH);
digitalWrite(gPin, LOW);
digitalWrite(bPin, LOW);
}
else if (thisNote%3==1){
digitalWrite(rPin, LOW);
digitalWrite(gPin, HIGH);
digitalWrite(bPin, LOW);
}
else if (thisNote%3==2){
digitalWrite(rPin, LOW);
digitalWrite(gPin, LOW);
digitalWrite(bPin, HIGH);
}
// для вычисления длительности ноты потребуется одна секунда
int noteDuration = 1000 / noteDurations [thisNote];
tone(8, melody [thisNote], noteDuration);
// чтобы различать ноты, установим минимальное время между ними
// длительность ноты +30% звучит хорошо
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// остановить воспроизведение нот
noTone(8);
}
}
}
© digitrode.ru