МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ
«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»
Методическая разработка
«Проект «Часы реального времени»
к дополнительной общеобразовательной
общеразвивающей программе
технической направленности
«Лаборатория робототехники»
Возраст детей: 10-15 лет
Автор: Костычев Вадим Александрович
г. Заречный Пензенской области
2022 г.
В ходе изучения робототехники, схемотехники и программирования на основе платформы Arduino большую роль играет разработка проектов. Они позволяют отработать как навыки программирования, так и сборки электрических цепей устройств. Данная разработка призвана в первую очередь отработать навыки разработки алгоритмов, работы с часами реального времени и дисплея с 7-сегментными индикаторами.
Целью данной разработки является повышение интереса учащихся к техническому творчеству посредством работы с платформой Arduino.
Данная методическая разработка используется как обучающий пример для работы по дополнительной общеобразовательной общеразвивающей программе технической направленности «Лаборатория робототехники». С их помощью учащиеся смогут применить теоретические знания на практике, построив сложные алгоритмы, с модулем реального времени, дисплеем с 7-сегментными индикаторами.
Для работы с данными модулями нужны специальные библиотеки stdio.h, DS1302.h, TM1637.h. С их помощью мы объявляем подключения и инициализацию наших устройств: модуля часов - DS1302 и дисплея на базе TM1637. Установка времени происходит пользователем через серийный порт однократно, записывая время слитно, например, 1530. Далее время сохраняется в модуле и идет при помощи батарейки.
Вывод на экран времени осуществляется через массив из 4 элементов – каждой из цифр чисел времени. Для этого необходимо использовать целочисленное деление и деление с остатком переменных часов и минут.
Принципиальная схема
Листинг программы «прошивки»
#include // подключение библиотеки часов
#include // подключение библиотеки часов
#include "TM1637.h" // подключение библиотеки экрана
int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00}; // массив символов на дисплее
int minute = 0; // переменная для минут
int hour = 0; // переменная для часов
boolean ifPoint; // создаем флаг для отрисовки точки на дисплее
TM1637 tm1637(9, 8); // подключаем дисплей к arduino: CLK - 9 пин, DIO - 8 пин
DS1302 rtc(5, 6, 7); // подключение часов rct(rst, dat, clk)
void setup() { // однократная функция настройки платы
Serial.begin(9600); // подключение серийного порта
Serial.println("ready"); // выводим в серийный порт
tm1637.set(); // инициализация дисплея
tm1637.init(); // инициализация дисплея
}
void loop() { // повторяющаяся фунция
Time t = rtc.time(); // создаем экземпляр класса Time и пишем в него данные из модуля часов.
if (Serial.available() 0) { // можно установить время через серийный порт, время пишется слитно, например, 1530
int num = Serial.parseInt(); // сохраняем число из серийного порта
rtc.writeProtect(false);
t.hr = num / 100; // переменная сохраняющая часы
t.min = num % 100; // переменная сохраняющая минуты
t.sec = 0; // секунды выставим равными нулю
rtc.writeProtect(false); // отключаем функцию защиты от перезаписи на часах
num = Serial.parseInt();
rtc.time(t); // записываем в модуль часов все значения экземпляра класса Time (часы, секунды, минуты)
rtc.writeProtect(true); // устанавливаем защиту от перезаписи
}
minute = t.min; // в переменную заносим время в минутах
hour = t.hr; // в переменную заносим время в часах
if (ifPoint) {
tm1637.point(POINT_ON);
} // если точка отключена - включим
else {
tm1637.point(POINT_OFF); // иначе выключаем
}
ifPoint = !ifPoint; // меняем значения флага точки
TimeDisp[0] = hour / 10 // записываем в массив 1 цифру числа времени часов
TimeDisp[1] = hour % 10; // аналогично записываем 2 цифру
TimeDisp[2] = minute / 10; // записываем первую цифру минут
TimeDisp[3] = minute % 10; // записываем вторую цифру минут
tm1637.display(TimeDisp); // выводим на дисплее время
delay(500); // выставляем задержку для моргания точки
}