Светодиодные часы Arduino RTC
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 15 | |||
![]() |
| × | 15 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 190 | |||
![]() |
| × | 10 | |||
![]() |
| × | 12 | |||
![]() |
| × | 4 | |||
![]() |
| × | 1 |
Необходимые инструменты и машины
![]() |
| |||
![]() |
| |||
![]() |
|
Об этом проекте
Сначала вам необходимо загрузить следующие библиотеки (ссылка находится в конце этой страницы) 1. Wire.h
2. RTClib.h Список деталей

Посмотреть видео
Это модуль часов RTC

Это схема Arduino

Подключение проводов RTC

Переключатели RTC

Определите анод и катод

Принципиальная схема (ОБЩИЙ АНОД)




ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ОБЩИЙ ИНДИКАТОР КАТОДА, ИЗМЕНЯЙТЕ СЛЕДУЮЩИЕ ИЗМЕНЕНИЯ





ИСТОЧНИК ПИТАНИЯ












Код
- КОДЫ светодиодных часов
Коды светодиодных часов Arduino
Загрузите этот код и загрузите в проект/ * 4-значный 7-сегментный дисплей:http://www.sparkfun.com/products/9483 Лист данных:http://www.sparkfun.com/datasheets/Components/LED/ 7-Segment / YSD-439AR6B-35.pdf * /// измененное соединение niq_ro из http://nicuflorica.blogspot.com// набор данных:http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4 -563XSA.pdf // Код изменен BMIAK Basnayaka // http://www.setnfix.comint digit1 =11; целое число2 =10; число целое число3 =9; целое число4 =6; число целое число5 =5; int digit6 =3; // Отображение контактов от Arduino к ATmega DIP28, если оно вам нужно // http://www.arduino.cc/en/Hacking/PinMappingint segA =0; // Отображаем вывод 11int segB =1; // Отображение вывода 7int segC =2; // Отображение вывода 4int segD =4; // Отображение вывода 2int segE =7; // Отображаем вывод 1int segF =8; // Отображаем вывод 10int segG =12; // Отображение вывода 5int segDP =13; // Отображение вывода 3 # include#include "RTClib.h" RTC_DS1307 RTC; // Функции даты и времени с использованием DS1307 RTC, подключенного через I2C и Wire lib // оригинальный эскиз из http://learn.adafruit .com / ds1307-real-time-clock-breakout-board-kit /// добавить часть с SQW =1Hz из http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the- i2c-bus /// добавить часть с ручной настройкой http://www.bristolwatch.com/arduino/arduino_ds1307.htmbyte SW0 =A0; byte SW1 =A2; byte SW2 =A1; byte SWT =A3; int Adhr =0; int Admnt =0; int D =0; int Z =0; // использовать для преобразования шестнадцатеричного числа в десятичное long zh, uh, ore; long zm, um, miniti; void setup () {//Serial.begin(57600); Wire.begin (); RTC.begin (); // RTC.adjust (DateTime (F (__ DATE__), F (__ TIME __))); // если вам нужно установить часы ... просто удалите // строку над этой // частью кода для мигания LEDWire.beginTransmission (0x68); Wire.write (0x07); // перемещаем указатель на адрес SQW // Wire.write (0x00); // отключает вывод SQW Wire.write (0x10); // отправляет 0x10 (шестнадцатеричный) 00010000 (двоичный) в регистр управления - включает меандр с частотой 1 Гц // Wire.write (0x13); // отправляет 0x13 (шестнадцатеричный) 00010011 (двоичный) 32kHzWire.endTransmission (); pinMode (сегА, ВЫХОД); pinMode (segB, ВЫХОД); pinMode (segC, ВЫХОД); pinMode (сегД, ВЫХОД); pinMode (сегмент, ВЫХОД); pinMode (segF, ВЫХОД); pinMode (сегГ, ВЫХОД); pinMode (segDP, ВЫХОД); pinMode (цифра1, ВЫХОД); pinMode (цифра2, ВЫХОД); pinMode (цифра3, ВЫХОД); pinMode (цифра4, ВЫХОД); pinMode (цифра 5, ВЫХОД); pinMode (digit6, OUTPUT); // Serial.begin (9600); pinMode (SW0, INPUT); // НЕТ. кнопка switchpinMode (SW1, INPUT); // НЕТ. кнопка switchpinMode (SW2, INPUT); // НЕТ. кнопка switchpinMode (SWT, INPUT); // НЕТ. кнопочный переключатель цифровой записи (SW0, HIGH); // подтягивания ondigitalWrite (SW1, HIGH); digitalWrite (SW2, HIGH); digitalWrite (segDP, LOW);} void loop () {DateTime now =RTC.now (); длинный ЧСС =now.hour () * 1000; long timp =(ЧСС * 10) + now.minute () * 100 + now.second (); Adhr =now.hour (); Admnt =now.minute (); int DIM =0; if (timp> =250000) timp =timp-240000; // ---------------------- -------------------------------- // 12/24 часов гудит // --------- --------------------------------------------- if (timp <130000 ) {digitalWrite (segDP, LOW);} если (digitalRead (SWT) ==0) {задержка (300); if (D ==0) {D =1; delay (200);} else {D =0;}} if (D ==0) {if (timp> =130000) {timp =timp-120000; digitalWrite ( segDP, HIGH);}} if (timp> =130000) {digitalWrite (segDP, LOW);} if ((D ==1) &(timp <130000)) digitalWrite (segDP, LOW); // --- -------------------------------------------------- - // int timp =(now.minute (), DEC); // displayNumber (12); // это число для отображения (int i =100; i> 0; i--) {if (timp> =100000) displayNumber01 (timp); иначе displayNumber02 (тимп); } for (int i =100; i> 0; i--) {если (timp> =100000) displayNumber03 (timp); иначе displayNumber04 (тимп); } for (int i =100; i> 0; i--) {если (timp> =100000) displayNumber05 (timp); иначе displayNumber06 (тимп); } если (digitalRead (SW0) ==0) {задержка (100); Z =1; установить время(); } // удерживаем переключатель, чтобы установить время} void set_time () {byte minutes1 =0; байт часов1 =0; байтовые минуты =0; байтовые часы =0; часы =Adhr; minutes =Admnt; если ((часы &0x0f)> 9) часы =часы + 6; если (часы> 0x24) часы =1; // Середина ночи 12.00 будет отображаться как 12:00 (при включенном индикаторе PM) или 24:00 // if (hours> 0x24) hours =1; // Середина ночи 12.00 будет отображаться как 0:00 if ((minutes &0x0f)> 9) minutes =minutes + 6; если (минут> 0x59) минут =0; while (! (Z ==0)) {// для выхода необходимо отпустить установленный переключатель времени int TST =digitalRead (SW2); while (TST ==0) // устанавливаем часы {hours ++; // преобразование шестнадцатеричного числа в десятичное:zh =hours / 16; ээ =часы - 16 * ж; руда =10 * ж + ух; zm =минут / 16; um =минуты - 16 * zm; минити =10 * мкм + мкм; если ((часы &0x0f)> 9) часы =часы + 6; если (часы> 0x24) часы =1; // Середина ночи 12.00 будет отображаться как 12:00 (при включенном индикаторе PM) или 24:00 // if (hours> 0x24) hours =1; // Середина ночи 12.00 будет отображаться как 0:00 if (hours <=9) delay (1); for (int i =400; i> 0; i--) {displayNumber01 (ore * 10000 + miniti * 100); } TST =digitalRead (SW2); } while (! (digitalRead (SW1))) // устанавливаем минуты {minutes ++; // преобразование шестнадцатеричного числа в десятичное:zh =hours / 16; ээ =часы - 16 * ж; руда =10 * ж + ух; zm =минут / 16; um =минуты - 16 * zm; минити =10 * мкм + мкм; for (int i =400; i> 0; i--) {displayNumber01 (ore * 10000 + miniti * 100); } if ((minutes &0x0f)> 9) minutes =minutes + 6; если (минут> 0x59) минут =0; если (минут> =9) задержка (1); } Wire.beginTransmission (0x68); // активируем DS1307 Wire.write (0); // с чего начать Wire.write (0x00); // секунды Wire.write (минуты); // минуты Wire.write (0x80 | часы); // часы (24 часа) Wire.write (0x06); // День 01-07 Wire.write (0x01); // Дата 0-31 Wire.write (0x05); // месяц 0-12 Wire.write (0x09); // Год 00-99 Wire.write (0x10); // Элемент управления 0x10 создает прямоугольный сигнал частотой 1 Гц на выводе 7. Wire.endTransmission (); // преобразование шестнадцатеричного числа в десятичное:zh =hours / 16; ээ =часы - 16 * ж; руда =10 * ж + ух; zm =минут / 16; um =минуты - 16 * zm; минити =10 * мкм + мкм; for (int i =400; i> 0; i--) {displayNumber01 (ore * 10000 + miniti * 100); } задержка (100); //Serial.print(digitalRead(SW0));if (digitalRead (SW0) ==0) Z =0; задержка (300); } // Serial.print (SW2);} void displayNumber01 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифра для короткого промежутка времени (цифра) {case 1:digitalWrite (digit1, DIGIT_ON); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); // digitalWrite (segDP, LOW); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} void displayNumber02 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифру для короткого промежутка времени (цифра) {case 1:lightNumber (10); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); // digitalWrite (segDP, LOW); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} void displayNumber03 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифру для короткого промежутка времени (цифра) {case 1:digitalWrite (digit1, DIGIT_ON); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} void displayNumber04 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифру для короткого промежутка времени (цифра) {case 1:lightNumber (10); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} void displayNumber05 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифру для короткого промежутка времени (цифра) {case 1:digitalWrite (digit1, DIGIT_ON); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} void displayNumber06 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25 # define DIGIT_ON HIGH # define DIGIT_OFF LOW for (int digit =6; digit> 0; digit--) {// Включить цифру для кратковременного переключения времени (цифра) {case 1:// digitalWrite (digit1, DIGIT_ON); ломать; случай 2:digitalWrite (цифра2, DIGIT_ON); ломать; случай 3:digitalWrite (digit3, DIGIT_ON); ломать; случай 4:digitalWrite (digit4, DIGIT_ON); ломать; случай 5:digitalWrite (digit5, DIGIT_ON); ломать; случай 6:digitalWrite (digit6, DIGIT_ON); ломать; } lightNumber (toDisplay% 10); toDisplay / =10; delayMicroseconds (DISPLAY_BRIGHTNESS); // Выключаем все сегменты lightNumber (10); // Отключить все цифры digitalWrite (digit1, DIGIT_OFF); digitalWrite (цифра2, DIGIT_OFF); digitalWrite (цифра 3, DIGIT_OFF); digitalWrite (цифра4, DIGIT_OFF); digitalWrite (цифра 5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} // Для данного числа включает эти сегменты // Если number ==10, то выключаем numbervoid lightNumber (int numberToDisplay) {// Общий анод ********* **************** #define SEGMENT_ON HIGH #define SEGMENT_OFF LOW / * Общий катод **************** #define SEGMENT_ON LOW # определить SEGMENT_OFF HIGH * / switch (numberToDisplay) {case 0:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, сегмент_он); digitalWrite (segF, SEGMENT_ON); digitalWrite (сегмент, SEGMENT_OFF); ломать; случай 1:digitalWrite (segA, SEGMENT_OFF); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); ломать; случай 2:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_OFF); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, сегмент_он); digitalWrite (segF, SEGMENT_OFF); digitalWrite (segG, SEGMENT_ON); ломать; случай 3:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite (segG, SEGMENT_ON); ломать; случай 4:digitalWrite (segA, SEGMENT_OFF); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_ON); digitalWrite (segG, SEGMENT_ON); ломать; случай 5:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_OFF); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_ON); digitalWrite (segG, SEGMENT_ON); ломать; случай 6:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_OFF); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, сегмент_он); digitalWrite (segF, SEGMENT_ON); digitalWrite (segG, SEGMENT_ON); ломать; случай 7:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); ломать; случай 8:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, сегмент_он); digitalWrite (segF, SEGMENT_ON); digitalWrite (segG, SEGMENT_ON); ломать; случай 9:digitalWrite (segA, SEGMENT_ON); digitalWrite (segB, SEGMENT_ON); digitalWrite (segC, SEGMENT_ON); digitalWrite (segD, SEGMENT_ON); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_ON); digitalWrite (segG, SEGMENT_ON); ломать; // все сегменты включены case 10:digitalWrite (segA, SEGMENT_OFF); digitalWrite (segB, SEGMENT_OFF); digitalWrite (segC, SEGMENT_OFF); digitalWrite (segD, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite (сегмент, SEGMENT_OFF); ломать; } // Конец кодирования, BUDHUSARANAI, удачи. }
Схема
Это проводка SSD со светодиодом
Производственный процесс
- Часы видения Arduino pov
- Простые часы со словами (Arduino)
- DIY Простой осциллограф Arduino 20 кГц на ЖК-дисплее Nokia 5110
- Основные часы
- Умные жалюзи
- Итальянские часы со словами
- Arduino с Bluetooth для управления светодиодом!
- Четвероногий Arduino
- 7-сегментный массив часов
- Изолированный аналоговый вход для Arduino