Статьи » Разработки |
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 "уплывёт", процедуру следует повторить. Проверить, правильные ли получились углы поворота, при необходимости скорректировать. Осталось позвать в гости кого-нибудь, кто недавно изготовил никси-часы, и показать ему эту штуку. Обратить внимание, что способ индикации более винтажный, но компоненты - доступные. Гость вспомнит, с каким трудом он нашёл дешифраторы и лампы, а результат всё равно вышел менее винтажно выглядящим, чем у вас.
Посмотрите еще эти статьи
Управляем вытяжкой на кухне пультом от телевизора на Arduino Вывод картинки на дисплей 128x64 Детектор микронаушников Ethernet shield w5100 таймер включения на веб странице Вывод различных данных на дисплей LCD 128x64 Обзор макетной платы 830 точек и модуля питания MB-102 Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 3701. Оценка статьи: 0.0 из 5. Уже оценило 0 читателей |
Всего комментариев: 0 | |