Оглавление:

Проект будильника Arduino: 14 шагов
Проект будильника Arduino: 14 шагов

Видео: Проект будильника Arduino: 14 шагов

Видео: Проект будильника Arduino: 14 шагов
Видео: Бионический будильник на Arduino Uno за 5 простых шагов. Мини-проекты Амперки 2024, Июль
Anonim
Проект будильника Arduino
Проект будильника Arduino

В этом проекте мы будем использовать Arduino Uno для управления ЖК-экраном, чтобы отображать текущее время и время, на которое установлен будильник. Мы будем использовать кнопки для установки каждый раз.

Материалы:

  • Arduino Uno -
  • Макетная плата -
  • Провода перемычки (x13 +) -
  • Резисторы 10 кОм (x4) -
  • ЖК-экран -
  • 7 кнопок -
  • Пьезо-динамик -

Шаг 1. Инструкции по подключению

Инструкции по подключению
Инструкции по подключению

1. Подключите перемычку от контакта 5V на Arduino к одной из шин + на макетной плате.

Шаг 2:

Изображение
Изображение

2. Подключите перемычку от контакта GND на Arduino к шине - рядом с шиной +, которую вы выбрали на макетной плате.

Шаг 3:

Изображение
Изображение

3. Подключите ЖК-экран к источнику питания, заземлению и контакту TX (контакт 1).

Шаг 4:

Изображение
Изображение

4. Поместите 7 кнопок на макетную плату так, чтобы ножки попали в щель в макете.

Шаг 5:

Изображение
Изображение

5. Поместите резисторы 10 кОм от шины - с подключенным к ней контактом GND к нижним левым контактам кнопок.

Шаг 6:

Изображение
Изображение

6. Поместите перемычки между нижним правым контактом кнопок и шиной 5 В на макетной плате.

Шаг 7:

Изображение
Изображение

7. Поместите перемычки между контактами 6, затем 8-13 и контактом кнопки, к которой подключен резистор.

Шаг 8:

Изображение
Изображение

8. Затем поместите пьезо-динамик на макетную плату и подключите контакт 7 к контакту питания, а затем резистор 100 Ом к земле.

Шаг 9: Инструкции по программированию

1. Обзор: этот проект попросит пользователя установить текущее время при первоначальном включении на дисплее, текущее время и время, на которое установлен будильник. Подключенные выше кнопки будут использоваться для настройки каждый раз. Слева направо они устанавливают текущий час, устанавливают текущую минуту, устанавливают текущее AM или PM, устанавливают время будильника, устанавливают минуты сигнала будильника, устанавливают будильник AM или PM. Последняя кнопка используется для отключения звука будильника, когда он срабатывает.

Шаг 10:

2. Первое, что нам нужно сделать, это инициализировать нашу переменную, которую мы собираемся использовать.

// Инициализируем переменные для использования int hour = 0; // Час для текущего времени int minute = 0; //

Минуты текущего времени int second = 0; // Секунда на текущее время

int hour_a = 0; int // Час для будильника

минута_а = 0; // Минута времени будильника

bool am_pm = false; // Флаг переключения AM / PM. False - AM, True - PM

bool am_pm_a = false; // Флаг переключения AM / PM для будильника. False - AM, True - PM

int set_hr = 13; // Используйте вывод 13, чтобы установить час

int set_min = 12; // Используйте вывод 12 для установки минутного интервала

set_am_pm = 11; // Используйте контакт 11 для установки am / pm

int set_hr_a = 10; // Используйте контакт 10, чтобы установить час для будильника int set_min_a = 9; // Используйте вывод 9 для установки минут для будильника int set_am_pm_a = 8; // Используйте контакт 8, чтобы установить am / pm для будильника

int динамик = 7; // Пин для использования в Speakerint quiet = 6; // Закрепить, чтобы остановить динамик

bool alarm = false; // Флаг для переключения, чтобы продолжать тревогу

bool quieted = false; // Флаг, показывающий, что тихо, не был нажат

int cur_time = 0; // Переменная текущего времени

int etime = 0; // Переменная прошедшего времени

Шаг 11:

3. Затем нам нужно настроить ЖК-экран и сказать пользователю, что нужно установить текущее время. Поскольку это нужно сделать только один раз, мы сделаем это в процессе настройки.

void setup () {

// Настраиваем ЖК-экран

Serial.begin (9600); // Инициализируем последовательный порт на скорости 9600 бод

Serial.write (17); // Включаем подсветку

Serial.write (24); // Включаем дисплей с курсором и без мигания

Serial.write (12); // Очистить экран

Serial.write (128); // Перемещаем курсор в верхний левый угол // Устанавливаем pinModes pinMode (set_hr, ВХОД); pinMode (set_min, ВХОД);

pinMode (set_am_pm, INPUT);

pinMode (set_hr_a, ВХОД);

pinMode (set_min_a, ВХОД);

pinMode (set_am_pm_a, ВХОД);

pinMode (динамик, ВЫХОД);

pinMode (тихий, ВХОД);

// При начальном питании пользователь устанавливает текущее время. Serial.print («Установить текущее время»); задержка (2000);

Serial.write (12);

printTimes ();

cur_time = миллис (); // Сохраняем текущее время}

Шаг 12:

4. Затем в цикле мы отслеживаем время и считываем статус кнопки, чтобы узнать, устанавливает ли пользователь какое-либо время.

void loop () {

// Подождите немного

подождите немного();

// Проверяем, не пора ли тревожить!

if ((час == час_a && минута == минута_a &&! quieted) || будильник) {тон (динамик, 2000, 500); // Вывод звука 2000 Гц на динамик в течение 500 мс

задержка (500); // Задержка 500 мс if (! Alarm) {// Если будильник выключен, включите его

}

}

// Если пользователь отключает сигнал будильника, нажимая кнопку отключения звука, перестанет сигнализировать if (alarm &&! Quieted && digitalRead (quiet)) {

тревога = ложь;

quieted = true; }

// Сбросить сигнал тревоги, если (! Alarm && quieted && minute! = Minute_a) {quieted = false;

}

// Проверяем, идут ли установленные контакты на высокий уровень, и если да, увеличиваем соответствующее значение if (digitalRead (set_hr) && hour <12) {

час ++;

printTimes ();

debounce ();

}

иначе, если (digitalRead (set_hr) && час == 12) {час = 1;

printTimes ();

debounce ();

}

еще{}

if (digitalRead (set_min) && minute <59) {

минута ++; printTimes ();

debounce ();

}

иначе, если (digitalRead (set_min) && minute == 59) {minute = 0;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = ложь;

printTimes ();

debounce ();

}

иначе, если (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

debounce ();

}

else {} if (digitalRead (set_hr_a) && hour_a <12) {

hour_a ++;

printTimes ();

debounce ();

}

иначе, если (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_min_a) && minute_a <59) {

минута_а ++;

printTimes ();

debounce ();

}

иначе, если (digitalRead (set_min) && minute_a == 59) {minute_a = 0;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = ложь;

printTimes ();

debounce ();

}

иначе, если (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

еще{}

}

Шаг 13:

5. Здесь вы заметите пару подпрограмм, которые я создал - debounce () и printTimes (). Debounce () используется, чтобы убедиться, что мы читаем кнопки только один раз. Поскольку Arduino сканирует тысячи раз в секунду, он может подумать, что кнопка была нажата несколько раз, когда вы предполагали, что она будет прочитана только один раз. Debounce () заморозит программу до тех пор, пока кнопка не будет отпущена. printTimes () обновляет ЖК-экран, но, поскольку это было несколько команд, я набрал их один раз, а затем могу вызвать подпрограмму в любое время, когда значение времени изменится.

// Пока какая-либо из кнопок нажата, оставайтесь в этой функции, затем задержите 250 мс.

void debounce () {

while (digitalRead (set_hr) || digitalRead (set_min) ||

digitalRead (set_am_pm) || digitalRead (set_hr_a) ||

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} задержка (250);

}

// Печатает обновленное время, если есть какие-то изменения

void printTimes () {

Serial.write (12);

Serial.print ("Текущее время:");

Serial.write (148);

if (hour <10) {

Serial.print («0»);

}

Serial.print (час);

Serial.print (":");

if (минута <10) {

Serial.print («0»);

}

Serial.print (минута); Serial.print (":");

if (second <10) {

Serial.print («0»);

}

Serial.print (второй);

if (am_pm) {

Serial.print («ПМ»);

}

еще{

Serial.print («AM»);

}

Serial.write (168);

Serial.print («Будильник установлен для:»);

Serial.write (188);

if (hour_a <10) {

Serial.print («0»);

}

Серийный.печать (час_а);

Serial.print (":");

if (minute_a <10) {

Serial.print («0»);

}

Серийный.печать (минута_а);

if (am_pm_a) {

Serial.print («ПМ»);

}

еще{

Serial.print («AM»);

}

}

// Увеличиваем временные параметры void

подождите немного(){

etime = millis () - cur_time;

if (etime> = 1000 && second <59) {

второй ++;

cur_time = миллис ();

printTimes ();

}

иначе, если (время> = 1000 && секунда == 59 && минута <59) {секунда = 0;

минута ++;

cur_time = миллис ();

printTimes ();

}

else if (etime> = 1000 && second == 59 && minute == 59 && hour <12) {

второй = 0; минута =

0; час ++; cur_time =

миллис (); printTimes ();

}

else if (etime> = 1000 && second == 59 && minute == 59 && hour == 12) {

второй = 0; минута =

0; час = 1; am_pm =

!до полудня после полудня;

cur_time = миллис ();

printTimes ();

}

еще{}

}

Шаг 14:

6. Вот и все!

Скомпилируйте и загрузите, и все готово!

Рекомендуемые: