Поиск по этому блогу

24 февр. 2021 г.

Деревянные часы на базе дисплея 128х64, arduino

Уже давненько, я заказал этот дисплей и все лежал он и ждал своей очереди уйти в дело. Этот момент настал. Обзор очень большой, включает все этапы сборки и разные технические решения.

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

Также в него встроена сразу же функция общения используя SPI интерфейс, что очень облегчает построение уст-в на нем.

Характеристики:
Питание: 5В
Контроллер: ST7920
Разрешение: 128х64 точек
Питание подсветки: 3.3В
Интерфейсы: параллельный 8 -битный и последовательный интерфейсы.





За выбор интерфейса отвечает контакт PSB подключенный к земле.



Размеры модуля:



Деревянные часы
Нам потребуется:

1. Дисплей 128х64.
2. Ардуино, любая не обязательно UNO.
3. Плата c микросхемой времени RTC tiny или аналог.
4. Ацетон.
5. Деревянные доски/фанера/рейки.
6. Поляризатор с монитора (необязательно).
7. Два аккумулятора 18650 (можно больше).
8. Плата повышения до 5В.
9. Плата заряда лития.
10. Выключатель, желательно двойной.
11. Датчик DHT11 или аналог.
12. Скотч алюминиевый.
13. Клей ПВА.
14. Клей цианокрилат или космофен.
15. Полиэтиленовые стики для пистолета.

Подключение к ардуино
Схема подключения модулей в ардуино UNO:



Скетч для часов выглядит так:
#include "U8glib.h"    //библиотека для работы с LCD дисплеем
#include <Wire.h>      //библиотека для работы с I2C интерфейсом
#include "RTClib.h"    //библиотека для работы с модулем RTC
#include "dht11.h"     //библиотека для работы с датчиком температуры и влажности
#include <Time.h>      //библиотека для работы со временем

U8GLIB_ST7920_128X64_4X u8g
(10);  // rs-10, rw-11, e-13

RTC_DS1307 rtc
;
dht11 DHT
;
int chk;
#define DHT11_PIN 2
bool isTimeSet = false; //флаг, указывающий на то, была ли уже задана дата

void setup() {
 
Wire.begin();
 
Serial.begin(9600); //Оставил для отладки
  setSyncProvider
(RTC.get);   // получаем время с RTC
   
//u8g.setRot180(); //Команда для поворота дисплея на 180 градусов
   rtc
.begin();  
 
}

void loop () {
 
DateTime now = rtc.now();
    u8g
.firstPage();// Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ ... команды ... }while(u8g.nextPage());
 
do {  
    u8g
.setFont(u8g_font_gdr30);
    u8g
.setColorIndex(1);

    u8g
.setPrintPos( 16, 45); u8g.print(now.hour() / 10);
    u8g
.setPrintPos( 39, 45); u8g.print(now.hour() % 10);
    u8g
.setPrintPos( 60, 45); u8g.print(":");
    u8g
.setPrintPos( 71, 45); u8g.print(now.minute() / 10);
    u8g
.setPrintPos( 94, 45); u8g.print(now.minute() % 10);

    chk
= DHT.read(DHT11_PIN);
   
    u8g
.setColorIndex(1);//Инвертируем цвет
    u8g
.drawBox(0, 54, 128, 10);//Рисуем прямоугольник
    u8g
.setFont(u8g_font_5x8);//Выставляем размер шрифта для температуры и влажности
    u8g
.setColorIndex(0);//Инвертируем цвет шрифта
   
//------------Выводим влажность------------
    u8g
.setPrintPos( 2,  62); u8g.print("B");
    u8g
.setPrintPos( 10, 62); u8g.print("=");
    u8g
.setPrintPos( 18, 62); u8g.print(DHT.humidity, 1);
    u8g
.setPrintPos( 40, 62); u8g.print("%");
   
//------------Выводим температуру-----------
    u8g
.setPrintPos( 79,  62); u8g.print("T");
    u8g
.setPrintPos( 87, 62); u8g.print("=");
    u8g
.setPrintPos( 95, 62); u8g.print(DHT.temperature, 1);
    u8g
.setPrintPos( 122, 62); u8g.print("C");
    u8g
.setColorIndex(1);//Инвертируем цвет
    u8g
.drawBox(0, 0, 128, 10);//Рисуем прямоугольник
    u8g
.setFont(u8g_font_5x8);//Выставляем размер шрифта для даты
    u8g
.setColorIndex(0);//Инвертируем цвет шрифта
   
//------------Выводим первую цифру дня-------
    u8g
.setPrintPos( 37, 8); u8g.print(now.day() / 10);
   
//------------Выводим вторую цифру дня-------
    u8g
.setPrintPos( 43, 8); u8g.print(now.day() % 10);
   
//------------Выводим разделитель------------
    u8g
.setPrintPos( 48, 8); u8g.print(".");
   
//------------Выводим первую цифру месяца----
    u8g
.setPrintPos( 53, 8); u8g.print(now.month() / 10);
   
//------------Выводим вторую цифру месяца----
    u8g
.setPrintPos( 58, 8); u8g.print(now.month() % 10);
   
//------------Выводим разделитель------------
    u8g
.setPrintPos( 63, 8); u8g.print(".");
   
//---------------Выводим год-----------------
    u8g
.setPrintPos( 69, 8); u8g.print(now.year(), DEC);
 
}    
   
while (u8g.nextPage());
}

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

Корпус
Корпус я решил делать из цельных досок, но вот незадача их у меня не оказалось. Зато оказалось немного толстых реек. Склеив рейки в две дощечки я получил две половинки корпуса. Клей используется ПВА.



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

За основу решил взять прямоугольник и просто вырезать окно в полученном корпусе:



Зажав две дощечки обрезал и придал им форму.

Далее буду лицевую дощечку фрезеровать, а вторую тыльную буду опустошать, делая из нее рамку часов. Для всех этих процедур потребуется фреза и насадка для фрезерования:





Использовал в работе вот эти биты. Это не просто качественные фрезы, а чет совсем супер-качественное. Я решив раскошелиться не прогадал. Режут и мягкие металлы, и дерево, не забиваясь:



Вот так выглядела поверхность до фрезеровки:



А вот так после + прохождение 200й наждачной бумагой:



Затем размечаем место окна и лобзиком (конечно же ручным) вырезаем:





Далее выбираем материал под контроллер и дисплей + добавил ложе под акб:



После из второй дощечки выбираем весь материал оставляя рамку в 5 мм (конечно же ручным лобзиком, люблю я монотонный ручной труд):



Далее все склеиваем:





После снова берем в руки 200ю наждачку и шлифуем все стороны до ровных краев. Я столько раз подумал о реймусе в эти моменты, боже. Отшлифовано было много…

В итоге получился вот такой корпус:









А потом его надо покрыть. Покрывать я буду оливковым маслом в два слоя и последующим втиранием с использованием войлока. Результат очень порадовал, я подчеркнул фактуру дерева и получил блеск волокон:





Параллельно я готовил начинку.

Начинка
Показав домочадцам, что дисплей будет светиться ярко-зеленой подсветкой, они послали меня далеко. Будем менять.

Для того что бы поменять цвет дисплея нам понадобиться поляризатор, можно снять со старого монитора:



Я человек запасливый, поэтому он у меня есть.

Затем ацетон и дикое желание очистить поляризатор от клея ацетоном. (снова тереть...)

Далее нам надо снять старый поляризатор с дисплея.



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



Поэтому просто аккуратно отскоблил его.

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

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

Я вырезал два куска поляризатора, два на случай если один сломается 8)

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



По прошествии 20 минут вынимаем и расслаиванием их:



А затем матовую пленку выбрасываем и используем глянец — поляризатор:



Вот так выглядит на дисплее:



Затем мне понадобилось допилить модуль часов. Не знаю какие модули изготавливают сейчас, но этот покупался в 10м году и имеет проблему. Он рассчитан на работу с АКБ, но в комплекте поставляется с простой батарейкой. Жрет он батареи не в себя просто, поэтому требуется переделка — удаление зарядки батареи. D1, R5, R4 требуется удалить, на резистор R6 поставить перемычку.



И все — равно батареи жрал не в себя, либо батареи я ставил в него плохие в итоге я психанул и засунул туда АКБ на 1.5А, лет 5-7 продержится явно. И еще момент, кварц я заменил спустя две недели тестирования устройства, по причине того, что в этом паршивом модуле, за две недели время ушло аж на 4 минуты вперед. После замены кварца убегание перестало быть заметным, но думаю, что за год — будет. Но это проблема решаемая заменой на приличный модуль.



После надо было подготовить место под датчик DHT11, сделал углубление в корпусе сверху и просверлил отверстия, датчик само-собой разбирался.







Датчик в обязательном порядке надо заклеить скотчем металлизированным, чтобы лишнее тепло отводить от датчика:






Далее вытачиваем посадочное место под USB зарядку:



Крышка была изготовлена из ДВП края всех отверстий и ребра крышки были для жесткости обработаны цианокрилатом:



Сверлим отверстия по контуру и забиваем гвоздями (либо закручиваем саморезы, но у меня были только мелкие гвозди):



Готовое изделие
Вот так выглядят готовые часы:













Вот такие углы обзора получились:











Пример в интерьере

При свете:



Ночью:





Вывод
Дисплей очень годный, ну просто очень. Для всяких поделок очень хорош. Как продукт — часы, тоже зарекомендовали себя хорошо и самое важное я пустил в дело то, что лежало очень давно. Мне нравится, как выглядит конечный результат, ничего лишнего. Время жизни от одного заряда составило 4 дня, что считаю очень хорошим показателем для этой самоделки. И да, с платы уно были удалены в итоге все светодиоды и спустя неделю для отладки платы я распаял USB от уно прямо в порт зарядки лития. При выключении аппарата, часы продолжают исправно идти, тем самым можно продлить срок работы от одного заряда, если работа дисплея не требуется. Также можно внедрить датчик освещенности и регулировать яркость подсветки, до меня к сожалению это дошло уже после сборки в корпус, но датчик у меня есть и дописать под него код не составит какого-либо труда.

Результатом крайне доволен я и домочадцы.

Большое спасибо за просмотр. Надеюсь кому-то помог с выбором.

Комментариев нет:

Отправить комментарий

Создайте свой комментарий.