Приветствую всех любителей паяльников и микроконтроллеров! Сегодня будем собирать простые часы на светодиодной матрице (MAX7219) и Arduino Nano с ручной настройкой времени.
Для этого на понадобится:
1. Светодиодная матрица на MAX7219.
2. Плата Arduino Nano (хотя в идеале взять Pro Mini)
3. Модуль часов реального времени DS1302.
4. Тонкий провод (в моём случае это МГТФ-0,25).
5. Стойки, винты и гайки к ним.
6. Двухсторонний скотч.
7. Термоклей и клеевой пистолет.
8. Ненужный USB провод.
9. Два разъёма типа "мама".
10. Три тактовые кнопочки, кусочек макетной платы.
11. Три SMD резистора по 10 кОм.
12. Паяльник, припой, канифоль и т.д.
1. Прошивка микроконтроллера
Я постарался максимально понятно написать код с комментариями. Единственное, что вам нужно будет сделать перед прошивкой, это скачать три библиотеки и в функции watch.settime(0,36,13); (15 строчка кода) изменить время, в которое вы будете прошивать МК, хотя это не обязательно т.к. время потом можно будет настроить кнопками.
Собственно вот сам код:
#include <SPI.h> // библиотеки
#include <Wire.h>
#include <Adafruit_GFX.h> // эти 3 скачиваем из итернета
#include <Max72xxPanel.h>
#include <iarduino_RTC.h> // эта библиотека версии 1.3.4 от 09.01.2020
uint8_t h,m,s; // переменные для хранения времени
Max72xxPanel matrix = Max72xxPanel(10, 1, 4); // пин CS, кол-во матриц по вертикали, кол-во матриц по горезонтали
iarduino_RTC watch(RTC_DS1302,2,3,4); //rst clk dat модуля часов
void setup(void) {
matrix.setIntensity(1); // Яркость от 0 до 15
matrix.setRotation(matrix.getRotation()+1); // положение матриц +1 - 90 +2 - 180 +3 - 270 градусов
watch.begin(); // запуск часов
watch.settime(0,36,13); // установка текущего времени (сек, мин, час)
pinMode(8, OUTPUT); // настройка пинов для кнопок
digitalWrite(8,1);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
}
void loop(void){
Display();
watch.gettime();
if(millis()%1000==0){ // если прошла 1 секунда
h = watch.Hours; // Получаем текущие часы
m = watch.minutes; // Получаем текущие минуты
s = watch.seconds; // Получаем текущие секунды
delay(2);
}
bool button_setup = digitalRead(7); // считываем состояние кнопок
bool button_plus = digitalRead(6);
bool button_minus = digitalRead(5);
//Проверка нажатий
int regim=1;
int flag=0;
if(button_setup==1&&flag==0)
{
regim++;
flag=1;
if(regim>3) regim=1;
}
if(button_setup==0&&flag==1) flag=0;
if(regim==1)//настройка часов
{
if(button_plus==1){
h++;
if(h>23) h=0;
watch.settime(0,m,h);
delay(300);
}
if(button_minus==1){
h--;
if(h<=0) h=0;
watch.settime(0,m,h);
delay(300);
}
}
if(regim==2)//настройка минут
{
if(button_plus==1){
m++;
if(m>59) m=0;
watch.settime(0,m,h);
delay(300);
}
if(button_minus==1){
m--;
if(m<=0) m=0;
watch.settime(0,m,h);
delay(300);
}
}
}
void Display(){
matrix.fillScreen(0);
int y = (matrix.height() - 8) / 2; // центрирование по вертикали
if(watch.seconds & 1) // мигающее двоеточие
{
matrix.drawChar(14, y, (String(":"))[0], HIGH, LOW, 1);
}
else
{
matrix.drawChar(14, y, (String(" "))[0], HIGH, LOW, 1);
}
String hour1 = String (h/10); // преобразовываем числа для вывода
String hour2 = String (h%10);
String min1 = String (m/10);
String min2 = String (m%10);
String sec1 = String (s/10);
String sec2 = String (s%10);
int xh = 2;
int xm = 19;
matrix.drawChar(xh, y, hour1[0], HIGH, LOW, 1);
matrix.drawChar(xh+6, y, hour2[0], HIGH, LOW, 1);
matrix.drawChar(xm, y, min1[0], HIGH, LOW, 1);
matrix.drawChar(xm+6, y, min2[0], HIGH, LOW, 1);
matrix.write(); // Вывод на дисплей
}
2. Сборка, пайка
После успешной прошивки переходим к сборке часов. Прикручиваем стойки к матрице по краям для крепления в корпус. Крепим Arduino, модуль часов и кнопки на двухсторонний скотч к обратной стороне платы матрицы. Кстати о кнопках, их припаиваем к кусочку макетной платы, припаиваем резисторы с обратной стороны и соединяем по схеме. Конечно, кнопки можно "вынести" на длинных проводах, но для моего корпуса удобнее так. Соединяем всё проводами. Схема:
Сборка:
Чтобы провода не торчали закрепим их термоклеем к плате.
3. Провод питания
Берём ненужный USB-провод от зарядки и откусываем разъём микро-USB (в моём случае). Теперь зачищаем провода и аккуратно припаиваем разъёмы "мама". Места спайки изолируем термоусадкой. Соблюдая полярность питания подключаем провод к разъёму ISP для программатора.
4. Настройка часов
Настройка осуществляется тремя кнопками.
При нажатии кнопки 2, увеличиваем час на 1.
При нажатии кнопки 3, уменьшаем час на 1.
Для настройки минут тоже самое, только нужно удерживать кнопку 1.
На этом у меня всё, удачных всем проектов и самоделок!