Цифровые часы совместимые с ардуино своими руками

Самые недорогие цифровые часы своими руками

В этом небольшом уроке мы создадим очень недорогие цифровые часы, совместимые с Arduino, своими руками. Очень интересный проект, который довольно легко повторить. Мы предполагаем, что у вас есть дополнительное зарядное устройство для питания. В этом случае проект будет стоить дороже, если вам нужно дополнительно купить адаптер питания micro USB. Обратите внимание, что эскиз для платы сделан так, что в нем 24-часовой режим отображения времени (без AM и PM).

Шаг 1. Комплектующие

Для этих простеньких Ардуино совместимых часов нам понадобятся:

  • Плата ATtiny85 (Digispark)
  • Светодиодный дисплей TM1637
  • Модуль RTC DS3231
  • Провода-перемычки
  • Батарея (аккумулятор) CR2032

Шаг 2. Добавляем поддержку платы Digispark

На этом шаге гам нужно добавить поддержку плат Digispark в Arduino IDE.

Перейдите в меню «Файл» и выберите «Настройки».

В поле с надписью «URL-адреса дополнительных контроллеров» введите: http://digistump.com/package_digistump_index.json и нажмите «ОК».

Перейдите в меню «Инструменты» (Tools), а затем «Платы» (Board) выберите «Диспетчер плат» (Boards Manager), а затем из раскрывающегося списка выберите «Contributed»: выберите пакет «Digistump AVR Boards» и нажмите кнопку «Установить».

После завершения установки закройте окно «Диспетчер плат» (Boards Manager) и выберите «Digispark (по умолчанию – 16,5 МГц)» (Digispark (Default – 16.5mhz)) в меню Сервис → Платы (Tools → Boards).

Шаг 3. Схема соединения

Вам нужно будет сделать небольшую пайку для установки штыревых наконечников на модули.

  • Вставьте аккумулятор CR2032 в модуль DS3231 RTC;
  • Подключите перемычку от P0 на SCL на модуле RTC;
  • Затем подключите P2 к SDA на модуле RTC;
  • Подключите P3 к CLK на модуле дисплея TM1637;
  • Затем P4 на DIO на дисплее;
  • Затем VCC и Ground модуля дисплея на модуль RTC, чтобы включить его.

Шаг 4. Программируем с помощью Arduino IDE

Откройте файл эскиза ниже (или используйте приведенный код) и установите правильное время в строке rtc.adjust. Цифры: (Год, Месяц, День, Час, Минуты, Секунды)

Эти платы от Digispark работают иначе, чем платы Ардуино. Сначала вы нажмете на загрузку, а затем включаете плату, когда будет предложено. Они программируются в течение нескольких секунд после подключения.

Oled часы с выводом температуры на Arduino своими руками.

Я люблю разрабатывать различные часы на Arduino . Свои первые часы делал на сдвиговых регистрах , светодиодах и Arduino. Вторая версия светодиодных часов уже была сделана на адресных светодиодах (данные часы до сих пор работают и висят у меня в коридоре). С ребёнком делали часы из Лего, семисегментного индикатора и digispark. Последние, четвёртые, реализованы на Arduino и дисплее Nextion. Подписчики написали мне, что часы получаются достаточно дорогие и собирать их нецелесообразно. Согласен, что дисплей Nextion дорогой, поэтому решил собрать часы на OLED дисплее и Arduino.

Для реализации данного проекта нам понадобится:

Электронную часть OLED часов собрал на макетной плате вот по такой схеме.

Описание работы часов OLED часы на Arduino.

Часы имеют стандартный функционал. Вывод текущего дня недели, даты, времени и температуры. Две тактовые кнопки помогают нам настраивать дату и время.

Как видим, дни недели у нас выводятся на русском языке. Вы скажете, что в интернете достаточно много проектов с данным дисплеем и с выводом информации на русском языке. Да, так оно и есть, информации много, но в 90% случаев русские буквы выводятся с помощью перекодировки символов. И просматривая код непонятно, какое слово будет на дисплее. В данном примере русский текст прописан в коде в точно таком же виде, как он выводится на дисплей.

Устанавливаем и настраиваем библиотеки.

1. Установить библиотеки Adafruit : библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX . Как их установить, я рассматривал в уроке.

2. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:UsersUSERDocumentsArduinolibrariesAdafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы можете скачать, библиотеку подготовленную для вывода русского текста, внизу статьи в разделе материалы для скачивания.

3. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно внизу кода.

4. Добавить в блок void setup() <> следующую строчку кода.

5. При выводе русского текста использовать функцию utf8rus() .

Библиотеки, которые используются в проекте , Вы можете скачать внизу статьи в разделе материалы для скачивания.

Код OLED часы на Arduino.

Рассказывать, как устроена программа часов полностью не буду. Тем более у меня на сайте достаточно уроков и примеров по реализации функционалов на дисплеях и работы с часами реального времени. Рассмотрим только основную особенность данного кода – это вывод русского языка в том виде, как он прописан в самом коде. Библиотеку для вывода символов на дисплей мы установили и настроили. Как же сейчас её использовать так, чтобы постоянно не прописывать перекодировку символов? Для этого сделаем функцию, которая будет выводить наш текст с нужным размером шрифта по указанным координатам.

В данной функции и укажем перекодировку символов. Благодаря этому можно вывести информацию на дисплей на русском языке.

Благодаря таким несложным манипуляциям можно выводить текст на дисплей на русском языке и в других проектах, необязательно это должны быть часы.

Пишите в комментариях, какие проекты на данном дисплее вы бы хотели видеть.

Возможности OLED часов на arduino.

Две тактовые кнопки позволяют настраивать время и дату. Первая кнопка переключает необходимый параметр, вторая кнопка увеличивает данное значение. Настройка дней недели работает аналогично, просто вместо названия меняется порядковый номер, а программа уже выводит день недели на русском языке.

В связи с тем, что используем модуль реального времени ds3231 , в котором встроен датчик температуры, мы можем вывести температуру в помещении. Самая нижняя строчка на дисплее выводит данную информацию.

Это достаточно распространённый функционал любых часов, и поэтому данный проект не получил собственный корпус. На мой взгляд, проект должен быть более серьезным, чтобы заморачиваться с разработкой корпуса. Пишите в комментариях ваше предложение, чтобы вы хотели видеть реализованного на данном дисплее. Может, расширенные возможности данных часов, или совсем другой проект.

На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока. До встречи в новом проекте.

Понравилась статья? Поделитесь ею с друзьями:

Arduino DIY Watch — самодельные часы на Arduino

После нескольких лет знакомства с Arduino захотелось сделать что-то действительно интересное и полезное. Было решено сделать наручные часы. Но не просто часы, а действительно компактные, удобные, внешне не очень страшные и самое главное с длительным временем автономной работы часы.
И так встречайте самодельные часы на Arduino или DIY Arduino Watch!

DIY Arduino Watch – это компактные и лёгкие наручные часы с дисплеем размером 1,3 дюйма выполненным по технологии OLED. Часы можно легко программировать в среде Arduino через micro USB разъем, с помощью внешнего программатора. При программировании часов в настройках среды необходимо выбрать плату Arduino pro mini 3.3V 8MHz. Часы обладают низким энергопотреблением, что позволяет проработать более 6 месяцев от одной батарейки CR2032 ( при условии, что время отображается в течении 3 секунд, а в сутки владелец просматривает время 12 раз). Ток в режиме ожидания составляет около 7-8 мкA, в режиме отображения времени 10-12 мA. Так же часы позволяют измерять напряжение питания используя встроенный источник опорного напряжения на 1,1В.

Для максимально экономного расходования энергии все время пока часы не отображают время микроконтроллер находится в состоянии глубокого сна. Разбудить его может только внешним прерыванием (кнопкой 1). Экран тоже отправляется в режим сна и будиться микроконтроллером, когда последний проснется.

Поговорим о задействованных пинах микроконтроллера:
А0 – измерение напряжения батареи часов
2 — Кнопка 1 ( будит часы из режима сна)
А1 – Кнопка 2
3 — Кнопка 3

Компоненты необходимые для изготовления часов:
1. Микроконтроллер atmega328p в корпусе QFP32;
2. OLED Display 128×64 1.3” (SH1106);
3. Часы реального времени DS1337 в корпусе SOP-8;
4. Тактовые кнопки;
5. Разьёмы micro USb мама и папа;
6. Батарейка CR2032;
7. SMD конденсаторы, резисторы и кварцы на 8MHz и 32kHz;
8. Двухсторонняя печатная плата;
9. Корпус, состоящий из 3-х деталей, напечатанный на 3D-принтере.

Принципиальная схема часов

Когда в наличии есть все необходимые детали, можно приступать к изготовлению печатной платы. Я делал плату методом ЛУТ, но только с одной оговоркой – вместо глянцевой бумаги я использовал прозрачную (можно и цветную, просто с прозрачной удобнее) виниловую самоклеющуюся пленку Oracl, которая позволяет идеально перенести весь тонер на текстолит. Технология следующая. Сначала на обычной бумаге печатаете рисунок платы, затем вырезаете виниловую пленку размером чуть больше чем сам рисунок и наклеиваете на напечатанный рисунок платы на бумаге. Затем снова на этом же листе бумаги печатаете рисунок платы, так, что бы печать получилась на самой виниловой пленке. Ну а дальше по отработанной схеме. Держать рисунок под утюгом около минуты — как правило за это время тонер успевает прилипнуть к текстолиту, а пленка успевает размягчиться, благодаря чему тонер полностью отстает от винила. В итоге получается отличный перенос рисунка без ворсинок и белого налета.

Схема расположения элементов на плате

На рисунке печатной платы сверху и снизу есть точки, которые позволяют точно совместить рисунки на разных сторонах платы.

Следующий шаг – прошивка бутлоадера в микроконтроллер. Бутлоадер используется от Arduino pro mini 3.3V 8MHz с небольшими изменениями. Для того что бы сделать потребление микроконтроллера в режиме сна около 1мкА а также позволить микроконтроллеру работать при напряжении ниже 1.8В необходимо отключить Brown-out Detection (BOD). Для этого необходимо открыть файл boards.txt, который лежит в папке с Arduino по следующему пути hardware/arduino/avr. В файле нужно найти строку

«## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328»

ниже которой указаны настройки фьюзов для бутлоадера для Arduino Pro or Pro Mini (3.3V, 8 MHz). Ниже находим строку:
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0x05
И заменяем её на
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0x07

Сохраняем boards.txt и прошиваем загрузчик в микроконтроллер.

Напаиваем все детали на печатную плату согласно рисунку с расположением элементов.

Дисплей можно купить как отдельно, так и на плате. В последнем случае его придется отпаять, за то с платы можно взять необходимую обвязку для дисплея.

Корпус печатался на 3D-принтере ABS пластиком. Для часов подойдут любые подходящие ремешки шириной 20мм.

Привожу полный скетч программы для часов. В данный момент часы могут отображать текущие время и дату, а так производить их настройку. С текущим функционалом размер скетча составляет около 20 кб.

// Arduino DIY Watch
// Ivan Grishin
// e-mail: arduinowatch@mail.ru
//
//
// Button 1 >>>> 2
// Button 2 >>>> A1
// Button 3 >>>> 3
// Vbat >>>>>>>> A0;

#include
DS1337 RTC = DS1337();

int val=0;
const int b1=2;
const int b2=A1;
const int b3=3;
const int vb=A0;
int mode=1;
int modest=0;
int h=0;
int m=0;
int s=0;
int d=0;
int mo=0;
int y=0;
int lock=0;
int volt=0;
float vbat=0;
int timebat=1;
int voltTime=1;

//#define BAT_HEIGHT 16
//#define BAT_GLCD_WIDTH 7
static const unsigned char PROGMEM bat_bmp0[] =
< B00111111,B11111111,
B00100000,B00000001,
B11100000,B00000001,
B11100000,B00000001,
B11100000,B00000001,
B00100000,B00000001,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp1[] =
< B00111111,B11111111,
B00100000,B00000011,
B11100000,B00000011,
B11100000,B00000011,
B11100000,B00000011,
B00100000,B00000011,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp2[] =
< B00111111,B11111111,
B00100000,B00000111,
B11100000,B00000111,
B11100000,B00000111,
B11100000,B00000111,
B00100000,B00000111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp3[] =
< B00111111,B11111111,
B00100000,B00001111,
B11100000,B00001111,
B11100000,B00001111,
B11100000,B00001111,
B00100000,B00001111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp4[] =
< B00111111,B11111111,
B00100000,B00011111,
B11100000,B00011111,
B11100000,B00011111,
B11100000,B00011111,
B00100000,B00011111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp5[] =
< B00111111,B11111111,
B00100000,B00111111,
B11100000,B00111111,
B11100000,B00111111,
B11100000,B00111111,
B00100000,B00111111,
B00111111,B11111111,>;
static const unsigned char PROGMEM bat_bmp6[] =
< B00111111,B11111111,
B00100000,B01111111,
B11100000,B01111111,
B11100000,B01111111,
B11100000,B01111111,
B00100000,B01111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp7[] =
< B00111111,B11111111,
B00100000,B11111111,
B11100000,B11111111,
B11100000,B11111111,
B11100000,B11111111,
B00100000,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp8[] =
< B00111111,B11111111,
B00100001,B11111111,
B11100001,B11111111,
B11100001,B11111111,
B11100001,B11111111,
B00100001,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp9[] =
< B00111111,B11111111,
B00100011,B11111111,
B11100011,B11111111,
B11100011,B11111111,
B11100011,B11111111,
B00100011,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp10[] =
< B00111111,B11111111,
B00100111,B11111111,
B11100111,B11111111,
B11100111,B11111111,
B11100111,B11111111,
B00100111,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp11[] =
< B00111111,B11111111,
B00100111,B11111111,
B11100111,B11111111,
B11100111,B11111111,
B11100111,B11111111,
B00100111,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp12[] =
< B00111111,B11111111,
B00101111,B11111111,
B11101111,B11111111,
B11101111,B11111111,
B11101111,B11111111,
B00101111,B11111111,
B00111111,B11111111,>;

static const unsigned char PROGMEM bat_bmp13[] =
< B00111111,B11111111,
B00111111,B11111111,
B11111111,B11111111,
B11111111,B11111111,
B11111111,B11111111,
B00111111,B11111111,
B00111111,B11111111,>;

void setup() <
display.begin(SH1106_SWITCHCAPVCC, 0x3c);
RTC.start();
pinMode(b1, INPUT);
pinMode(b2, INPUT);
pinMode(vb, INPUT);
analogReference(INTERNAL);
display.setRotation(2); // поворот изображения на 180 градусов

display.SH1106_command(SH1106_DISPLAYOFF);
mode=1;
attachInterrupt(0,wakeUp, HIGH);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
detachInterrupt(0);
display.clearDisplay();
delay(10);
display.SH1106_command(SH1106_DISPLAYON);

for ( val; val =24)

if (modest==7)
<
RTC.setSeconds(s);
RTC.setMinutes(m);
RTC.setHours(h);
RTC.setDays(d);
RTC.setMonths(mo);
RTC.setYears(y);
RTC.writeTime();
delay(1);
lock=0;
modest=1;
mode=1;
val=0;
>
>
val++;

void battery(void)
<
if (voltTime==1)
<
volt=analogRead(vb);
vbat=volt*0.0045;
voltTime=5;
>
voltTime–;

Как сделать своими руками светящиеся настенные электронные часы на Ардуино с большими цифрами

В этой пошаговой инструкции расскажу как сделать настенные часы своими руками.

  • Большие цифры (каждая цифра примерно равна размеру листа формата А4).
  • Тонкие стенки (можно вставить в рамку для картины).
  • Автоматическая регулировка в зависимости от яркости освещения в комнате.
  • Выделенная кнопка переключения летнего времени.

Шаг 1: Необходимые материалы

Что я использовал для настенных электронных часов с большими цифрами.

  • Arduino nano V3.0 (к сожалению, поскольку я не могу позволить себе оригинальный ардуино, я использовал китайский клон) — 150 рублей.
  • Цифровой модуль измерения интенсивности света Фоторезистор для Arduino — 60 рублей.
  • DS3231 AT24C32 IIC-модуль памяти для точного времени для Arduino — 60 рублей.
  • DC-DC преобразователь LM2596, Выходная мощность 1.23В-30В — 50 рублей.
  • 4 метра WS2811 светодиодной ленты 30 диодов / м — 700 рублей. (один WS2811 контролирует 3 светодиодных чипа)

Общая стоимость электроники: 900 рублей.

  • Термоусадочная трубка — 400 рублей (33м в ассортименте)
  • 20 шт. 5 x 7 см печатная плата — 200 рублей.
  • 3 шт. Микропереключатель — 60 рублей.
  • Припой — 50 рублей
  • Флюс — 50 рублей.
  • Кабель UTP (неэкранированная витая пара)
  • ЖК-шрифт (http://www.dafont.com/lcd-lcd-mono.font) — бесплатно.
  • Картон — бесплатно в супермаркете.
  • Полистирольная панель — 100 рублей.

А также различные инструменты.

Шаг 2: Подготовка — шаблоны цифр

  1. Скачайте и установите шрифт для часов
  2. Откройте Word или другую программу, и создайте шаблон, как на первом фото.
  • Размер шрифта

    800,

  • Шрифт белого цвета с черным контуром,
  • Серые полосы там, где будут светодиодные ленты

Напечатайте шаблон и вырежьте полосы канцелярским ножом (как на втором фото)

Шаг 3: Подготовка — режем картон и светодиодную ленту

Используя цифровой шаблон, вырежьте картон по размеру (не забудьте оставить место для точек между часами и минутами)

Если ваши светодиодные полосы поставляются с разъемами на каждом конце (как у меня), отсоедините разъем и разрежьте их по 3 штуки.

Шаг 4: Крепим светодиодную ленту

Используя шаблон, наклейте светодиодную ленту на картон.

Это не обязательно, но я использовал карандаш, чтобы отметить, где должны быть размещены светодиодные полосы.

Намного удобнее клеить их, когда видишь конечную форму. Благодаря этому я заметил, что оставил слишком много места для точек между цифрами и вовремя это исправил.

Шаг 5: Паяем светодиодную ленту

Теперь начинается долгий процесс пайки.

Спаяйте светодиодную ленту, чтобы сформировать непрерывную полосу. Обратите внимание на порядок припаивания полосок на фото. Для точек я использовал один кусок ленты, которой посередине заклеил скотчем.

Цвета, которые я выбрал:

  • Синий для земли
  • Зеленый для data
  • Красный для +12В

Шаг 6: Установка Ардуино на печатной плате

Я попытался сделать эскиз в Fritzing, но не смог найти все детали

Итак, на первом фото схема подключения проводов, а на втором то, как это выглядит у меня.

Шаг 7: Проверка LED

Прежде чем загружать код (к которому я не имею никакого отношения), не забудьте установить библиотеку FastLED.

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

Шаг 8: Запрограммируйте часы

Спустя некоторое время мне удалось сделать часы, которые меня полностью устраивают. Однако, каждый найдет для себя, что можно улучшить.

Код хорошо прокомментирован, поэтому с ним не должно возникнуть никаких проблем.

Все сообщения отладки также прокомментированы.

Чтобы изменить используемый цвет, вы должны изменить переменную в строке 22 (int ledColor = 0x0000FF; // Используемый цвет (в шестнадцатеричном формате)). Вы можете найти список цветов в нижней части этой страницы

Если ссылка не работает, вот зеркало.

Шаг 9: Делаем формы для цифр из полистирола

  1. Вырежьте все сегменты по шаблонам, сделанным вначале.
  2. Сформируйте каждую цифру в полистироле, используя скальпель (очень жесткий) или горячий резак.
  3. На фото можно увидеть, как это сделал я.
  4. Если у вас нет гитарной струны, подойдет практически любой тонкий стальной провод.
  5. Для питания горячего резака я использовал 12-вольтовый блок питания.
  6. Также есть фото с готовым вырезом (извините, что забыл снимать в процессе).

Шаг 8: Приклейте цифры и установите рассеиватель

Когда все 4 цифры и точки будут готовы, приклейте их на картон со светодиодной лентой (я использовал двусторонний скотч)

Чтобы рассеять свет светодиодов, я наложил 2 листа бумаги поверх полистирола. Для удобства и красоты я взял один лист формата А2 и сложил его пополам.

В самом конце я вставил светящиеся электронные настенные часы в большую картинную рамку.

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Источники:

http://portal-pk.ru/news/242-oled-chasy-s-vyvodom-temperatury-na-arduino-svoimi-rukami.html

http://m.habr.com/ru/post/368101/

http://masterclub.online/topic/15686-nastennye-elektronnye-chasy

http://arduinoplus.ru/umnaia-kruhzka-arduino/

Ссылка на основную публикацию