Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Самодельные простейшие часы Numitron IV9 с Arduino

Компоненты и расходные материалы

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, часы реального времени I2C
× 1
сдвиговый регистр TPIC6C595
× 4
Трубка IV9 Numitron
× 4
LED (общий)
× 2
Конденсатор 100 нФ
× 4
1N4007 - высоковольтный диод с высоким номинальным током
× 2
Ползунковый переключатель
× 1
Резистор 1 кОм
× 1

Необходимые инструменты и машины

Паяльник (общий)
Проволока для припоя, без свинца

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

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

Идея сделать эти часы пришла ко мне с указанной страницы Github:https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

Сначала я сделал проект в соответствии с инструкциями на сайте и обнаружил, что в нем много недостатков.

Вот как выглядел первый прототип с 74HC595

Для микросхемы 74HC595 общий максимальный ток в соответствии с таблицей данных составляет 70 миллиампер, что в данном случае превышено в несколько раз (около 160 миллиампер для цифры 8), так что через некоторое время микросхема перегревается и не работает должным образом. Другой недостаток заключается в том, что в цикле кода слишком много задержек, поэтому время считывается только один раз в 60 секунд. На картинке вы видите готовые часы, выполненные в первую очередь по инструкции на странице выше. Вначале он работает полностью нормально, но через некоторое время активируются случайные сегменты, и микросхемы, нумитроны или микроконтроллер могут очень легко сгореть. В первом случае проблема решилась за счет использования микросхемы TPIC6C595 вместо 74HC595, которая предусмотрена для больших токов. Также следует позаботиться о том, чтобы эти две интегральные схемы не были совместимы по выводам.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

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

Для изготовления этих часов необходимо всего несколько компонентов:

- Четыре лампы Numitron IV9

- Четыре интегральных схемы TPIC6C595

- микроконтроллер Arduino

- Модуль часов реального времени DS3231

- Два светодиода на секунды

- Переключатель

- и четыре развязывающих конденсатора

Модуль реального времени также содержит термометр, поэтому для более точного отображения температуры он расположен вне коробки, защищен сеткой. Во-первых, желательно синхронизировать часы реального времени с часами ПК, и мы делаем это с помощью библиотеки DS1307RTC. Затем мы загружаем код, и на этом устройство готово. Осталось изменить код, чтобы мы могли установить время с помощью кнопок, и оно будет в следующем периоде как обновление проекта.

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

Код

  • Код Arduino
Код Arduino C / C ++
 #include  // rtc с температурой для ds3231RTC_DS3231 rtc; // установка того, какой модуль rtc используется # include  // wiring # include  // time lib # include  // функция времени # include  // rtc #include  #define led 7const int latchPin =13; // latchconst int clockPin =10; // clockconst int dataPin =11; // dataunsigned long previousMillis =0; // запоминает время последнего мигания светодиода long interval =30000; // интервал мигания (миллисекунды) unsigned long previousMillisDiode =0; // запоминает время последнего мигания светодиода long intervalDiode =500; // интервал, с которым будет мигать (миллисекунды) const int nums [12] ={// установка отображаемого массива - согласно документам:pin1 общий, pin2 - точка (не используется в скетче), остальные должны быть подключены к регистрам сдвига по очереди один 0b10111110, // 0 0b00000110, // 1 0b01111010, // 2 0b01101110, // 3 0b11000110, // 4 0b11101100, // 5 0b11111100, // 6 0b00001110, // 7 0b11111110, // 8 0b11101110, // 9 0b11001010, // ул. 0b10111000 //celz.};int hour1; // первое число часа int hour2; // час секунда numberint minute1; // первое число минут int minute2; // второе число минут int day1; // номер первого дня int day2; // второе число дня int month1; // номер первого месяцаint month2; // второй номер месяцаint year1; // первое число года - константа 2int year2; // второе число года - константа 0 (вы хотите прожить столько времени, чтобы это изменить?) int year3; // год третий номерint year4; // четвертое число годаint hourDecimal; // десятичный разбор hourint minuteDecimal; // десятичный разбор minuteint dayDecimal; // десятичный разбор dayint monthDecimal; // десятичный разбор monthint year70; // год после unix epochint temp1; // первое температурное число int temp2; // второе температурное число int tempDecimal; // десятичный разбор температуры (первые два числа) void setup () {pinMode (led, OUTPUT); pinMode (latchPin, ВЫХОД); // устанавливаем выводы для вывода, чтобы вы могли управлять регистром сдвига pinMode (clockPin, OUTPUT); // устанавливаем выводы для вывода, чтобы вы могли управлять регистром сдвига pinMode (dataPin, OUTPUT); // устанавливаем выводы для вывода, чтобы вы могли управлять регистром сдвига Serial.begin (9600); // инициализируем SPI:SPI.begin (); // установите низкий уровень на выводе SS, чтобы выбрать микросхему:digitalWrite (clockPin, LOW); } void loop () {tmElements_t tm; // именование из библиотеки DS1307RTC RTC.read (tm); // считываем rtc время / дату / год minuteDecimal =tm.Minute / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять часовDecimal =tm.Hour / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять dayDecimal =tm.Day / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять месяцевDecimal =tm.Month / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять year70 =tm.Year - 30; // отображение реального года путем вычитания из unix epoch (1970) hour1 =hourDecimal; // все просто hour2 =tm.Hour - 10 * hourDecimal; // производим вычисления для отображения только второго числа из двух цифр string minute1 =minuteDecimal; // простая минута2 =tm.Minute - 10 * minuteDecimal; // производим вычисления для отображения только второго числа из двух цифр string day1 =dayDecimal; // простой day2 =tm.Day - 10 * dayDecimal; // производим вычисления для отображения только второго числа из двухзначной строки month1 =monthDecimal; // простой month2 =tm.Month - 10 * monthDecimal; // производим вычисления для отображения только второго числа из двухзначной строки year1 =2; // номер первого года, действительно ли вам нужно это изменить? у вас есть летающие машины и тд? год2 =0; // номер второго года, если вам нужно изменить, что вы должны играть с внуками, а не год3 =год70 / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять year4 =year70 - 10 * year3; // производим вычисления для отображения только второго числа из двухзначной строки tempDecimal =rtc.getTemperature () / 10; // анализируем вывод для удобства чтения (короче) путем деления на десять temp1 =tempDecimal; // простой temp2 =rtc.getTemperature () - 10 * tempDecimal; // производим вычисления для отображения только второго числа из двухзначной строки if (millis () - previousMillisDiode> =intervalDiode) {previousMillisDiode =millis (); digitalWrite (светодиод,! digitalRead (светодиод)); // изменение состояния светодиода} if (millis () - previousMillis> =interval) {previousMillis =millis (); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); задержка (500); // numitron отключен на 0,5 секунды для создания эффекта «дыхания» digitalWrite (clockPin, LOW); SPI.transfer (число [месяц2]); SPI.transfer (число [месяц1]); SPI.transfer (число [день2]); SPI.transfer (число [день1]); digitalWrite (clockPin, HIGH); задержка (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); задержка (500); // numitron отключен на 0,5 секунды для создания эффекта «дыхания» digitalWrite (clockPin, LOW); SPI.transfer (число [год4]); SPI.transfer (число [год3]); SPI.transfer (число [год2]); SPI.transfer (число [год1]); digitalWrite (clockPin, HIGH); задержка (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); задержка (500); // numitron отключен на 0,5 секунды для создания эффекта «дыхания» digitalWrite (clockPin, LOW); SPI.transfer (0b10111000); SPI.transfer (0b11001010); SPI.transfer (число [temp2]); SPI.transfer (число [temp1]); digitalWrite (clockPin, HIGH); задержка (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); задержка (500); // numitron отключен на 0,5 секунды для создания эффекта «дыхания»} else {digitalWrite (clockPin, LOW); SPI.transfer (число [минута2]); SPI.transfer (число [минута1]); SPI.transfer (число [час2]); SPI.transfer (число [час1]); digitalWrite (clockPin, HIGH); }} 

Схема


Производственный процесс

  1. Игра с гироскопом Arduino с MPU-6050
  2. Часы Arduino с исламским временем молитв
  3. Основные часы
  4. Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
  5. DIY вольтметр с Arduino и дисплеем Nokia 5110
  6. MobBob:самостоятельный робот Arduino, управляемый смартфоном Android
  7. Простое измерительное колесо с поворотным энкодером, сделанное своими руками
  8. Датчик Интернета вещей с Arduino, Yaler и IFTTT
  9. Перекидные часы Arduino с одной светодиодной матрицей
  10. Простой будильник с DS1302 RTC