Статьи » Разработки |
2020-02-09 в 19:32 (последнее изменение 2020-02-29 в 10:06)
Вы мечтаете собрать часы на индикаторных лампах типа "Никси", но те с каждым годом становятся всё дороже, а встречаются - всё реже? Ничего страшного. Существует способ показа цифр, придуманный ещё раньше. Тогда, когда ламп этих даже в проекте не было - он уже существовал. Речь идёт об индикации при помощи колец с цифрами, написанными на их торцах. Для этого проекта нам понадобиться: Давайте вспомним, где применялась и применяется такая индикация. Арифмометры, старые контрольно-кассовые машины, аркадные автоматы, шагомеры, счётчики магнитофонов, одометры... Из нынешнего - водомеры и некоторые электросчётчики (а когда-то - вообще все). И в отличие от "Никси", для такой индикации не потребуются компоненты, снятые с производства. Так, автор сайта Arduino Project Hub применил в своих часах стандартные сервоприводы SG90, которые выпускаются в огромных количествах, сравнительно недороги и ничуть не дефицитны. Модифицровав код, можно приспособить и другие аналогичные сервоприводы. Свой проект разработчик выложил по адресу https://create.arduino.cc/project....ffset=9 на условиях лицензии GPL версии 3 или выше на ваш выбор. Правда, получилась вещь, почти неотличимая от винтажной? Первым делом мастер берёт RTC-модуль на микросхеме DS1307 и три сервопривода, которые подключает к Arduino согласно схеме в формате Fritzing: https://hacksterio.s3.amazonaws.com/uploads....X4V.fzz Берём, значит, обыкновенную ПВХ-трубу с внутренним диаметром в 76,2 мм, а внешним - в 88,9 мм. Вырезаем, значит, из неё два кольца шириной в 6,35 мм - одно для десятков минут, другое - для единиц. Для часов (в смысле, не железок, а единиц измерения) делаем одно кольцо побольше - шириной в 25,4 мм, там две цифры ведь в некоторых положениях. Из чего-нибудь пористого делаем во все кольца вставки, диаметр которых выбираем чуть больше внутреннего, чтобы туго входили. Приклеиваем переходники для установки колец со вставками на валы сервоприводов. Помещаем и вклеиваем вставки в минутные кольца так: А в часовое кольцо - так: Теперь надо напечатать полоски с числами. Скетч рассчитан на кольца указанных выше размеров и цифры высотой в 18 пунктов, напечатанные в масштабе 1:1, иначе придётся корректировать в программе углы поворота. На часовое кольцо печатаем в столбик числа от 1 до 12, на кольцо десятков минут - от 0 до 5, на кольцо единиц минут - от 0 до 9. Если модифицировать скетч, можно переделать часы в 24-часовые, тогда потребуются четыре сервопривода, и на кольцо десятков часов придётся напечатать числа от 0 до 2, а на кольцо единиц часов - от 0 до 9. Все кольца в этом случае будут одинаковой, малой толщины. Кольца нужно установить на валы сервоприводов правильно. Привод единиц минут устанавливаем на 0 градусов, десятков минут - на 120, часов - на 132. Устанавливаем кольца: Далее из листового металла (работаем с ним в перчатках) склеиваем (или спаиваем, если металл поддаётся лужению) такую конструкцию: Прикручиваем её саморезами к деревянной подставке: Сервоприводы с вставками и кольцами закрепляем обычными кабельными стяжками: И наконец, изготавливаем переднюю панель с прорезями и размещаем её перед кольцами: При желании приобретаем или изготавливаем корпус произвольной конструкции. Заливаем в Arduino скетч: Код
#include <SPI.h>
#include <Wire.h> #include "RTClib.h" #include <Servo.h> Servo myservo1; // single minute servo connects to arduino pin 9 Servo myservo2; // tem minute servo connects to arduino pin 8 Servo myservo3; // hour servo connects to arduino pin 7 int pos1 = 0; int pos2 = 0; int pos3 = 0; RTC_DS1307 rtc; void setup() { // put your setup code here, to run once: myservo1.attach(9); myservo2.attach(8); myservo3.attach(7); Serial.begin(9600); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } } void loop() { DateTime now = rtc.now(); int h=now.hour(); int m=now.minute(); int nm; // variable used to convert to minute single digit // following line converts from 24 hour to 12 hour if (h>12) { h=h-12; } Serial.print(h); // following lines position the hour disc if(h==1){ pos3=132; } if (h==2){ pos3=120; } if (h==3){ pos3=108; } if (h==4){ pos3=96; } if (h==5){ pos3=84; } if (h==6){ pos3=72; } if (h==7){ pos3=60; } if (h==8){ pos3=48; } if (h==9){ pos3=36; } if (h==10){ pos3=24; } if (h==11){ pos3=12; } if (h==12){ pos3=0; } Serial.print(":"); Serial.print(m); //following lines position the minutes discs if (m<10){ nm=(m); pos2=120; } if (m>9){ nm=(m-10); pos2=108; } if (m>19){ nm=(m-20); pos2=96; } if (m>29){ nm=(m-30); pos2=84; } if (m>39){ nm=(m-40); pos2=72; } if (m>49){ nm=(m-50); pos2=60; } Serial.println(); Serial.print(nm); pos1=(nm * 12); // this line determines the servo 1 movement myservo1.write(pos1); myservo2.write(pos2); myservo3.write(pos3); Serial.println(); Serial.println(); Serial.print(pos1); Serial.println(); delay (1000); } Время в компьютере перед компиляцией должно быть выставлено правильно, лучше всего - по NTP-серверу, так как оно запишется в RTC в момент пуска скетча. Если RTC "уплывёт", процедуру следует повторить. Проверить, правильные ли получились углы поворота, при необходимости скорректировать. Осталось позвать в гости кого-нибудь, кто недавно изготовил никси-часы, и показать ему эту штуку. Обратить внимание, что способ индикации более винтажный, но компоненты - доступные. Гость вспомнит, с каким трудом он нашёл дешифраторы и лампы, а результат всё равно вышел менее винтажно выглядящим, чем у вас. Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 3964. Оценка статьи: 0.0 из 5. Уже оценило 0 читателей |
Всего комментариев: 0 | |