0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

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

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

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

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

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

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

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

Большие часы на адресных светодиодах WS2812B

  • Форумы
  • Мастерская
  • Проекты в разработке

ViVant

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

Как-то раз на просторах зарубежного интернета я нашел вот такой проект часов на базе светодиодной ленты WS2812B: Big, Auto Dim, Room Clock, и мне захотелось его повторить. Часы устроены как семи сегментный циферблат и работают на RTC модуле DS3231 . Часы умеют показывать температуру, имеют кнопки для настройки и перевода на зимнее время и обратно, позже я добавил датчик влажности DHT11. Температура уже вместе с влажностью считывалась с этого датчика и выводилась раз в минуту. Хоть и в модуле часов есть температурный датчик, но похоже он показывал температуру не корректно из-за самонагрева (ИМХО).



Когда все было собрано, повозившись с библиотеками, все заработало. И тут возникло одно большое НО: положения яркости в только в двух позициях меня не устраивало. Тем более на границе значений происходило мерцание. Установка яркости на статичном значении меня тоже не очень устраивала ибо днем при установленном тусклом свете ничего не было видно, а ночью даже со значениями близким к минимуму можно было осветить всю Москву. Поинтересовавшись как в других проектах с этим справляется Alex было решено заменить такой код настройки яркости.

Тут стоит упомянуть что программистом я не являюсь и большинство проблем я пытаюсь решить методом тыка и перебора.

Читать еще:  Переделка люминисцентного светильника времён СССР в светодиодный

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

Что касается кода вот сылка на GitHub. Кое-что я перевел для лучшего понимания.

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

Thug Robot

Thug Robot

ViVant

Рисуя схему допустил ошибку. Да, на фоторезисте используется резистор на 10 кОм. Схему перезалил.

Промониторив значения на выходе фоторезистора заметил, что при слабом освещении происходили скачки этих самых значений.

Перебрав пару способов, получилось убрать мерцание и отключение ленты. Мерцание я поборол добавив в код строчку с округлением значения кратному 10, а полное отключение разрешилось добавлением единицы к значению яркости. Ибо иногда на выходе функции получалось 0. Хотя как там получался ноль я не представляю, потому что из-за наличия функций map и constrain, этого происходить не должно. Хоть и это, наверное, костыли, но это работает.

Доброй ночи, решил я сделать тоже часы на WS2812B и Arduino, перепробовал несколько скетчей из сети, но ни один так и не смог запустить. Потом нашел этот форум и здешние не запускаются. Спаял по схеме, но поставил по 1 светодиоду на сегмент, направление как у автора.
Подскажите, пожалуйста, что в скетче еще надо изменить помимо #define NUM_LEDS на свое количество светодиодов, в byte digits[13][28] = в строках цифр ставлю значения для одного светодиода, а вот в // 1*7*4 +2 количество светодиодов в ленте здесь мне поставить 1*7*4 или 4*7*1?
Ну, и все же, если я ничего не изменю в скетче, а использую под количество светодиодов автора, хоть что-то должно светиться? У меня при запуске ничего не светится вообще, компилируется и загружается, правда пишет:
C:Program Files (x86)ArduinolibrariesFastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.005

# pragma message «FastLED version 3.001.005»
но это ж вроде не ошибка?

ViVant

Доброй ночи, решил я сделать тоже часы на WS2812B и Arduino, перепробовал несколько скетчей из сети, но ни один так и не смог запустить. Потом нашел этот форум и здешние не запускаются. Спаял по схеме, но поставил по 1 светодиоду на сегмент, направление как у автора.
Подскажите, пожалуйста, что в скетче еще надо изменить помимо #define NUM_LEDS на свое количество светодиодов, в byte digits[13][28] = в строках цифр ставлю значения для одного светодиода, а вот в // 1*7*4 +2 количество светодиодов в ленте здесь мне поставить 1*7*4 или 4*7*1?
Ну, и все же, если я ничего не изменю в скетче, а использую под количество светодиодов автора, хоть что-то должно светиться? У меня при запуске ничего не светится вообще, компилируется и загружается, правда пишет:
C:Program Files (x86)ArduinolibrariesFastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.005

Читать еще:  USB светодиодный светильник

# pragma message «FastLED version 3.001.005»
но это ж вроде не ошибка?

Шаг 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 на устройстве — простые часы на светодиодных матрицах готовы!

    Проект 11. Часы

    Устройство часы в представлении не требуется. Устройство показывает текущее время.

    Описание работы:

    Для начала работы подключите питание к Arduino. На индикаторе появится текущее время. Для настройки времени, нажмите любую кнопку, либо зеленую, либо красную. Уменьшится яркость индикатора, значит можно настраивать время. При нажатии или удержании зеленой кнопки будут увеличиваться минуты до 59. При нажатии или удержании красной кнопки будут уменьшаться минуты до 0. При достижении минут 59, увеличивается количество часов, а значение минут установится в 0. При достижении минут 0, уменьшится количество часов, а значение минут установится в 59. При достижении часов 23, значение часов сбросится в 0, а при достижении часов 0, значение часов установится в 23. После установки нужного времени, необходимо подождать две секунды. Тогда выбранное время сохранится, индикатор увеличит свою яркость, а время пойдет как прежде.

    Нам понадобится:

    • Arduino Uno х 1шт.
    • Trema Set Shield х 1шт.
    • Trema-модуль красная кнопка х 1шт.
    • Trema-модуль зеленая кнопка х 1шт.
    • Trema-модуль часы реального времени, RTC х 1шт.
    • Trema-модуль четырехразрядный LED индикатор х 1шт.
    Читать еще:  Светодиодный прожектор на дешевом светодиодном чипе 220 В (без драйвера) и сравнение характеристик с другими светодиодами

    Для реализации проекта нам необходимо установить следующие библиотеки:

    О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

    Схема сборки:

    • Устанавливаем Trema Set Shield в Arduino Uno.
    • Устанавливаем Trema-модуль Четырехразрядный LED индикатор во 2 посадочную площадку.

    • Устанавливаем Trema-модуль часы реального времени, RTC в 3 посадочную площадку, в верхнюю I2C колодку.

    • Устанавливаем Trema-модуль зеленую кнопку в 5 посадочные площадки.

    • Устанавливаем Trema-модуль красную кнопку в 6 посадочные площадки.

    • Полученные результат представлен ниже на рисунке.

    Код программы:

    Алгоритм работы:

    В начале скетча (до кода setup) выполняются следующие действия:

    • Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
    • Объявляем объект dispLED, с указанием выводов дисплея.
    • Подключаем библиотеку iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
    • Объявляем объект time для модуля на базе чипа DS3231.
    • Объявляем пины для работы с Trema-модуль красной кнопкой и Trema-модуль зеленой кнопкой.
    • Объявляем переменные и функции задействованные в скетче.

    В коде setup выполняются следующие действия:

    • Переводим выводы pinKeyGreen для зеленой кнопки и pinKeyRed для красной кнопки в режим выхода.
    • Инициируем LED дисплей.
    • Инициируем RTC модуль.
    • Задаем событие 1.

    В коде loop выполняются следующие действия:

    • Читаем время, с модуля часов реального времени.
    • Устанавливаем максимальную яркость свечения индикатора.
    • Событию 1.
    • Проверяем нажата зеленая или красная кнопка. Если одна из кнопок нажата, то сохраняем текущее значение времени в переменные времени и разрешаем переход к событию 2.
    • Каждую секунду включаем и выключаем вторую точку на индикаторе. Для этого проверяем четность/нечетность приходящих секунд с модуля реального времени. Если нечетное, включаем вторую точку на индикаторе и гасим двоеточие на индикаторе, если оно присутствует на индикаторе. Если четное, то выводим на индикатор текущее время.
    • Событие 2.
    • Уменьшаем яркость свечения индикатора.
    • Включаем вторую точку на индикаторе.
    • Проверяем нажата зеленая кнопка. Если нажата, то заходим в цикл нажатия зеленой кнопки. Там фиксируем, как долго удерживается зеленая кнопка: если дольше 2 секунд , то увеличиваем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, увеличение прекратится. Если же нажата один раз зеленая кнопка, то увеличение минут произойдет один раз. Обнуляем переменную счета.
    • Проверяем нажата красная кнопка. Если нажата, то заходим в цикл нажатия красной кнопки. Там фиксируем, как долго удерживается красная кнопка: если дольше 2 секунд , то уменьшаем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, уменьшение прекратится. Если же нажата один раз красная кнопка, то уменьшение минут произойдет один раз. Обнуляем переменную счета.
    • Проверяем совершалось изменение минут. Если предыдущее значение минут совпадает с нынешним значением минут, то увеличиваем переменную счета, иначе обнуляем переменную счета.
    • Если переменная счета больше 150, то разрешаем переход к событию 1. Обнуляем переменную счета.
    • Сохраняем нынешнее значение минут в переменную предыдущего значения минут.
  • Ссылка на основную публикацию
    Статьи c упоминанием слов:
    Adblock
    detector