Часы на ардуино

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–;

Как сделать часы lcd на ардуино

С момента приобретения arduino, все никак не было или возможности или времени что-то сделать, начать “изучать” это дело. Но всегда был интерес к любому программированию будь то C, VHDL и прочее.

И вот однажды попал мне в руки экранчик lcd1602, где-то раньше читал, что его под ардуинку собирают. А у меня как раз с распайкой под пины, наверное от какого-нибудь ардуновского набора. Ну и решил, что надо бы его проверить, но проверить его простым включением и выводом текста не слишком интересно. Так и появилась идея написать банально часы и выводить это всё на экранчик.

Наверное стоит обговорить еще тот факт, что это самые простые часы, без кнопок, будильников, погоды и прочего.

После чтения даташитов и изучения информации по подключению экрана к ардуинке получил следующую схему:

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

Приступим к написанию кода. Логика программы думаю понятна всем, она ровным счетом такая же, как и в любых часах. То есть: Считаем секунды, дошли до 60 — прибавляем минуту, секунды обнуляем, минуты дошли до 60, прибавляем час, обнуляем минуты и секунды.

Вот собственно и сам код программы, с подробнейшими комментариями:

Всё! Готово, прошиваемся и смотрим что получилось:

Всё, работает. Надеюсь что статья поможет кому-нибудь. Если будет интересно, то напишу следуюущую статью, где сделаем часы + дата. Спасибо за внимание.

Я сам еще новичек, совсем зеленый. Поэтому мой пост будет полезен таким же начинающим))

С ардуиной познакомился с месяц назад, заказал деталек — стали приходить — начал потихоньку вникать. Вообще — глобально я хочу собрать бортовой компьютер в авто — для вывода оперативной информации и сброса ошибок. Ну а пока тернеруюь на кошках__)

Решил собрать часы.

Сначала пришел LCD экран 1602 символов, стандартный экран, инстсрукций по подключению в интернете масса. www.dreamdealer.nl/tutorials/connecting_a_1602a_lcd_display_and_a_light_sensor_to_arduino_uno.html
Подключил-посмотрел, мдя, проводов много(( Запустил на нем простейшие софтовые часы, все ничего, но как только отключаешь питание — продавает и время( А так как кнопок еще нету — то установка происходит через комп по ком порту через Процессинг, вообщем тот еще геморой.

Потом пришел заранее заказанный модуль I2C — символьный LCD. Модуль этот основан на микрухе которая расширяет порты ввода вывода. тоесть по 2м проводам данные входят — а по 8 выводам расходятся на экран. Вещь дюже полезная, на ибээ их полно.

Стало совсем красиво.

Есть некоторая загвоздка. дело в том что в библиотеке с которой работает экран по i2c протоколу — нерабочие примеры((( Это у меня отняло какое-то время для понимания сути процессов))

Кратенько для тех кто купит переходник — в каждом переходнике зашит его адрес, адрес можно узнать с помощью сканера адресов или аналитическим методом. На платке есть перемычки — если ихзапаять, адрес будет 0x20, а если перемычки сводобные — адрес будет 0x27. Адресация нужна для правильной инициализации переходника и работы с LCD экраном.

Сразу понятно будет не все, но после суток-двух копания в инете, прийдет понимание.

Вообщем суть такая, по двум проводам можно подключить любое количество экранов! Главное чтобы у каждого был свой адрес, а менять адрес можно если менть перемычки на переходничке i2c lcd. Если экранчик один, то можно выяснить аэрес перебором или найти сканер и посмотреть все доступные адреса по протоколу i2c. Адрес зависит от типа переходника, про типы подробно вот тут arduino-info.wikispaces.com/LCD-Blue-I2C

У меня оказался Третий вариант как по ссылке. Разобравшись что куда, выяснил что адрес у него 0x27, эта цифра нужна для обращения к экрану.

А теперь важное.

Есть 2 рабочих варианта (может даже больше)

Перая библиотека с примерами качается по ссылке arduino-info.wikispaces.com/LCD-Blue-I2C
Сама библиотка https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Примеры брать не из библиотки а из блога выше.

Второй вариант, arduino-info.wikispaces.com/file/detail/LiquidCrystal_I2C1602V1.zip/341635514
Мой пример работает на этой библиотеке. Она старее, но мне показалось достаточной использовать ее.

Обе эти библиотеки НЕ СОВМЕСТИМЫ!

Так что ставим второй вариант, если не заработает — ставим первый и переписываем пример под свою библиотеку, благо там не много.

Я честно уже не помню почему выбрал второй вариант и где взял примеры, главное, что все работает))

После настройки экрана по двум проводам, пришли RTC модуль — часы реального времени на микрухе 1307. Общаются они по тем же 2м проводам, то есть портов на ардуине не занимают вообще.

Рабочую библиотеку нашел не сразу, заработала вот эта https://github.com/adafruit/RTClib

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

Теперь при отключении питания, часы не сбрасываются)))

Итак, особенностью часов является отображение 3х чисел в виде столбиков, секундыи минуты слева -направо, часы — наоборот справа-налево.

Используется 8 собственных символов, которые создают индикацию. Сначала сдеал 9 — начали скакать символы, смотрел — думал — оказалось что максимальное количество собственных символов — 8. Поэтому в качестве полного закрашенного квадрата используется системный знак по коду, а процентное заполнение — нарисовано в массиве битами.

Я думаю что в коде все понятно.

Функция Map — «растягивает» отображаемый промежуток в 24 часа на то количество клеток, которое нужно. так же и с минутами и секундами, но там растягивается другой диапазон.

Сначала делал без мапа — не смог найти функцию округления, коэффициенты были целыми числами — и растягивался диапазон всегда то больше — то меньше чем нужно. А мап меня спас))

В остальном все довольно просто, не забываем стирать квадраты, когда цикл часов начинается занова.

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

Часы на Ардуино на основе ЖК-дисплея и часов реального времени

Цель первого урока показать, как сделать простые часы на основе Arduino с использованием ЖК-дисплея и часов реального времени.

Комплектующие

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

  • Arduino UNO и Genuino UNO
  • PCF8563 (часы реального времени)
  • Кристалл 32 кГц
  • 10К потенциометры
  • Резистор 10k 1/4w
  • Резистор 220 Ом
  • LCD 16×2
  • Макет с набором проводов

В этом уроке будут использованы ЖК-дисплей и часы реального времени. Если вы хотите знать больше теме взаимодействия Arduino и ЖК-дисплеев — изучите уроки, которые мы публиковали ранее на нашем сайте.

Схема соединения

Схема очень проста. PCF8563 связывается с Arduino с помощью TWI, и когда данные принимаются, ЖК-дисплей обновляется, показывая новое время.

Установка даты и времени

Чтобы установить дату и время, используйте следующий скетч:

Код проекта

Теперь вы сможете использовать свои часы, загрузив этот скетч на Arduino:

Часы с выводом на экран Nokia 5110

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

В этом уроке используются лишь несколько компонентов — только перемычки, Arduino и дисплей Nokia 5110/3110.

Комплектующие

Детали, используемые в этом проекте ниже.

Оборудование

  • Arduino UNO и Genuino UNO × 1
  • Adafruit дисплей Nokia 5110 × 1
  • Соединительные провода (универсальные) × 1
  • Резистор 221 Ом × 1

Программное обеспечение

Схема соединения

Соединяем детали часов на Ардуино как на схеме выше:

  • контакт pin 3 — последовательный тактовый выход (SCLK) // pin 3 — Serial clock out (SCLK)
  • контакт pin 4 — выход серийных данных (DIN) // pin 4 — Serial date out (DIN)
  • контакт pin 5 — дата / выбор команды (D / C) // pin 5 — date/Command select (D/C)
  • контакт pin 6 — выбор ЖК-чипа (CS / CE) // pin 6 — LCD chip select (CS/CE)
  • контакт pin 7 — сброс ЖК (RST) // pin 7 — LCD reset (RST)

Код урока

Код второй версии часов вы можете скачать или скопировать ниже.

Часы с будильником, гигрометром и термометром

Эти часы сделаны с использованием платы Arduino Uno, датчика AM2302, модуля RTC DS3231 и TFT-дисплей 1,8″ с ST7735.

Комплектующие

Компоненты, используемые в третьей версии часов на Ардуино перечислены ниже.

Компоненты оборудования

  • Arduino UNO и Genuino UNO × 1
  • Часы реального времени (RTC) × 1
  • Датчик температуры DHT22 × 1
  • Кнопочный переключатель 12мм
  • SparkFun Кнопочный переключатель 12 мм × 4
  • Соединительные провода (универсальные) × 1
  • Макет (универсальный) × 1
  • Adafruit ST7735 1,8 “дисплей × 1

Программное обеспечение

Схема соединения

Соедините все детали часов согласно схеме ниже.

Код урока

Скачайте или скопируйте код часов для Ардуино ниже и загрузите на плату используя Arduino IDE.

Часы без RTC

Для начала мы должны понимать, что такое RTC. Из Википедии:

В итоге в данной версии мы сделаем часы без RTC с индикатором температуры и влажности на Arduino с помощью модуля DHT11. Также мы используем 3 кнопки для установки часов.

Комплектующие

Вам понадобятся эти кусочки для этого проекта:

  • Arduino Uno плата
  • Кнопки 3 шт.
  • Потенциометр
  • Модуль LCD 1602
  • Модуль температуры и влажности DHT11
  • Макетная плата
  • Перемычки

Схема соединения

Соедините комплектующие часов как на схеме ниже.

Вы можете скопировать или скачать код часов на Ардуино ниже.

На этом пока всё. Мы постарались описать все основные варианты реализации часов на Ардуино.

Делаем электронные часы на Ардуино своими руками

Существует множество способов собрать электронные часы своими руками: схемы широко представлены в литературе и сети Интернет. Большинство современных реализаций построено на основе микроконтроллеров. Выполнение таких проектов зачастую требует обширных практических навыков и теоретических знаний в области электроники: умения пользоваться специализированным программным обеспечением, создавать в домашних условиях печатные платы методом травления в хлорном железе, хорошо паять. Также необходимо иметь множество инструментов и расходных материалов.

Однако существует простой и доступный способ собрать электронные часы своими руками в домашних условиях: использовать платформу Arduino. Она представляет собой программно-аппаратный комплекс, специально предназначенный для обучения основам программирования и электроники. C помощью Arduino любой человек, даже без специальной предварительной подготовки, сможет построить электронные часы своими руками: схемы принципиальные, инженерные программы и даже паяльник не понадобятся!

Соединение всех электронных компонентов проводится на специальной контактной («беспаячной») макетной плате, что исключает риск получения ожогов, порезов и других травм — поэтому заниматься с конструктором Arduino можно и вместе с детьми. А наглядный способ представления принципиальной схемы поможет не ошибиться при сборке устройства.

Шаг 1. Список компонентов

Чтобы собрать простые часы на светодиодных матрицах вам потребуется всего несколько дешёвых компонентов:

  • платформа Arduino. Подойдут самые простые модели — Arduino Nano или Micro;
  • контактная макетная плата;
  • соединительные провода для макетной платы;
  • модуль часов реального времени Adafruit DS3231;
  • светодиодный матричный модуль 32×8 MAX7219;
  • две кнопки.

Также понадобится персональный компьютер и USB—mini-USB кабель для загрузки программы управления в память Arduino IDE. Вот и всё — паяльник, щипцы для снятия изоляции, монтажные ножи и прочие профессиональные инструменты не нужны: все операции выполняются руками. Разве что в некоторых случаях удобнее использовать пинцет, но можно обойтись и без него.

Детали для сборки электронных часов на Arduino

Шаг 2. Сборка электронной схемы

Схема электронных часов с индикацией на светодиодах с применением Arduino даже для неопытных радиолюбителей покажется довольно простой. Для сборки требуется всего несколько проводников. Таблица подключений:

Модуль Arduino → светодиодная матрица 32×8 MAX7219

Модуль Arduino → часы реального времени Adafruit DS3231

Модуль Arduino → кнопки

Второй вывод кнопок соединяется с землёй GND.

Следует лишь обратить внимание и запомнить, каким образом замкнуты между собой контактные отверстия на макетной плате. Следующая схема иллюстрирует способ внутреннего соединения контактных отверстий:

Схема электрических подключений макетной платы

Два ряда (1 и 4) с обеих сторон замкнуты горизонтально — обычно они используются как линия питания +5V и земля GND. Все внутренние контакты (2 и 3) замкнуты вертикально. При этом монтажная плата как вертикально, так и горизонтально разделена на две независимые друг от друга симметричные части. Это позволяет, например, собрать два разных устройства на одной плате.

Схема электронных часов с индикацией на светодиодах, а также расположение элементов на монтажной плате представлена на иллюстрации:

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

Внешний вид собранного устройства

Шаг 3. Прошивка Arduino

После того как сборка и проверка схемы завершена, можно приступать к загрузке управляющей программы (или «прошивки») в память Arduino.

Интерфейс среды разработки Arduino IDE

Для этого нужно установить бесплатную официальную среду разработки — Arduino IDE [https://www.arduino.cc/en/Main/Software]. Также вам потребуется исходный код проекта, который вы можете скачать ниже в архиве со всеми библиотеками и скетчем, а если вам нужен просто скетч – его можно скопировать отдельно:

Теперь для завершения работы над устройством потребуется выполнить лишь ряд простых операций:

  1. подсоедините Arduino к USB-порту компьютера. Если модуль подключается впервые, то необходимо будет дождаться определения устройства операционной системой и установки драйвера;
  2. скопируйте содержимое папки libraries из архива в одноимённую папку в каталоге Arduino IDE;
  3. запустите средство разработки Arduino IDE;
  4. настройте тип Arduino в соответствии с имеющимся у вас модулем. Так, если вы используете Arduino Nano, в меню необходимо выбрать Tools -> Board: “Arduino Nano”. Также убедитесь в том, что модель процессора соответствует микроконтроллеру на вашей плате:

Выбор модели Arduino в среде Arduino IDE

  • откройте исходный код (файл clock_8x32.ino): File -> Open. Arduino IDE предложит вам автоматически создать отдельную директорию под проект — ответьте утвердительно;
  • загрузите программу в память Arduino: Sketch -> Upload.
  • Компиляция программного кода и дальнейшая загрузка в память микроконтроллера займёт некоторое время, обычно не более одной минуты. Об успешном завершении операции будет сообщено в консоли Arduino IDE. После чего остаётся лишь перезагрузить Arduino с помощью кнопки Reset на устройстве — простые часы на светодиодных матрицах готовы!

    Готовые часы на Arduino

    Настройка часов осуществляется с помощью двух кнопок. Устройство поддерживает 12- и 24-часовой формат вывода времени, показ даты и дня недели, отображение времени с секундами и без. Также имеется возможность менять яркость свечения светодиодов.

    Вариант корпуса для светодиодных часов

    Вероятно, в дальнейшем вам захочется добавить больше функций (например, термометр), или же установить устройство в корпус собственного дизайна — хороших результатов можно добиться с помощью изготовления на станках с лазерной резкой. Но уже сейчас вы сможете смело сказать, что собрали полноценные электронные часы своими руками!

    Программная реализация стрелочных часов на Arduino

    Реализовать программно стрелочные часы – задание, которое часто дают школьникам на уроке информатики. Так преподаватель убеждается, что ученик хорошо знает не только изучаемый язык программирования, но и тригонометрию. Но тот компьютер, на котором школьник решает эту задачу, слишком мощен для неё, даже если это древний 386-й, не говоря уж о современных. Со всей задействованной там математикой справится и Arduino – так решил автор Instructables под ником thescientistformerlyknownasNaegeli. Вот он берёт Arduino Pro Mini на 3,3 В, однобитный дисплей для телефона Nokia 5110, модуль часов реального времени на микросхеме DS3231, аккумулятор и контроллер заряда, различные принадлежности:


    Всё это он собирает по такой схеме:

    И вот что у него получается:

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

    Усложняя себе задачу, мастер реализует стрелки, более сложные, чем отрезки прямых, школьники на уроках информатики до такого усложнения доходят редко, а потом, когда вырастают – навёрстывают.

    Мастер останавливается на наиболее сложном варианте, где стрелка состоит из четырёх точек, и показывает формулы для расчёта координат этих точек на примере двух времён: 9:25 и 2:05.

    Угол наклона минутной стрелки в градусах рассчитать просто: достаточно умножить число минут на 6. Только сам угол откладывать по часовой стрелке, а не против, как это обычно делают. Для часовой стрелки угол рассчитать сложнее, если учесть, что она не перепрыгивает с деления на деление, а перемещается между ними плавно:

    угол = (часы x 30°) + (минуты x 0.5°)

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

    Профессиональная деформация программиста – штука сильная, она может даже заставить человека программировать на пляже вместо отдыха:

    Но вот скетч готов, мастер выкладывает его сюда. После скачивания нужно сменить расширение файла с unknown на ino.

    Ну а поскольку при повторении конструкции вы вряд ли будете прорабатывать всю математику заново, хорошо бы изготовить своими руками, со своей математикой (учёт толщины стенок, и так далее), хотя бы корпус, например, из фанеры или оргстекла, а не брать готовый или 3D-печатный.

    Часы, повторённые участником Instructables под ником rescueseven:

    Источники:

    http://moreremonta.info/strojka/kak-sdelat-chasy-lcd-na-arduino/

    http://arduinoplus.ru/arduino-elektronnie-chasi/

    http://usamodelkina.ru/16491-programmnaja-realizacija-strelochnyh-chasov-na-arduino.html

    http://arduino.ru/forum/apparatnye-voprosy/otklyuchenie-arduinki-ot-kompyutera

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