Шаг 5: Что получилось и возможные улучшения

Часы в коробке для бумажных салфеток

В этом руководстве я покажу вам, как вы можете превратить пустую коробку из-под салфеток в классные часы на базе Arduino, которые могут показывать время, дату, текущую температуру и влажность в комнате.

Часы в коробке для бумажных салфеток

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

Принадлежности для корпусов:

  • Пустая коробка для салфеток
  • Универсальный нож / ножницы
  • Горячий клеевой пистолет / клей

Электроника:

  • Светодиодная матрица 32×8 – для отображения часов
  • DS3231 RTC – для функций, связанных со временем
  • Датчик температуры и влажности DHT11 – для измерения внутренней температуры и влажности Резистор 10 кОм – используется в качестве подтягивающего резистора для DHT11
  • Старовый набор Arduino UNO (я использовал UNO, но вы должны иметь возможность использовать любой клон Arduino / Arduino) – мозг проекта
  • Макетная плата
  • Провода перемычки Ноутбук и Arduino IDE для программирования кода на Arduino
  • Power Bank / батарея 9 В для питания

Шаг 1. Давайте сделаем корпус

Шаг 1. Давайте сделаем корпус

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

Шаг 2: Подключим электронику

Шаг 2: Подключим электронику

Шаг 2: Подключим электронику

Шаг 2: Подключим электронику

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

Если вы не понимаете схему, то это пошаговое руководство по подключению каждого модуля:

 

Подключение светодиодной матрицы:

Для этого проекта я использую светодиодную матрицу 32×8 на базе HT1632, и вот как я подключил ее к Arduino UNO.

Arduino 5V -> вывод VCC светодиодной матрицы

Arduino GND -> контакт GND светодиодной матрицы

Цифровой вывод 9 Arduino -> вывод CS светодиодной матрицы

Цифровой вывод 10 Arduino -> вывод WR светодиодной матрицы

Цифровой вывод 11 Arduino -> вывод данных светодиодной матрицы

 

Подключение модуля RTC:

Для этого проекта я использую модуль DS3231 RTC. Этот модуль использует шину I2C для связи, и именно так я подключил его к Arduino. Если вы не уверены, какие контакты являются I2C, просто погуглите.

Arduino 5V -> вывод VCC модуля RTC

Arduino GND -> контакт GND модуля RTC

Arduino SDA (рядом с AREF) -> вывод SDA модуля RTC

Arduino SCL (рядом с SDA) -> контакт SCL модуля RTC

 

Подключение датчика температуры и влажности:

Arduino 5V -> вывод VCC DHT11

Arduino GND -> GND контакт DHT11

Цифровой вывод 2 Arduino -> вывод DATA_OUT DHT11

Arduino 5V -> резистор 10 кОм -> вывод DATA_OUT DHT11

(подключите один конец резистора 10 кОм к данным из DHT11, а один конец резистора к Arduino 5V)

Шаг 3. Теперь програмируем

1. Установите библиотеки для модулей:

– Для рисования светодиодных матричных изображений я использую эту библиотеку от Gaurav Manek. Вы можете скачать в виде ZIP-архива и добавить его в библиотеки Arduino с помощью Arduino IDE.

– Для модуля DS3231 RTC я использую ds3231FS от Petre Rodan Library. Его можно установить с помощью параметра «Управление библиотеками» в Arduino IDE.

– Для датчика температуры и влажности DHT11 я использую библиотеку датчиков DHT от Adafruit. Это также можно установить с помощью параметра «Управление библиотеками» в Arduino IDE.

2. Скопируйте код и загрузите его в Arduino.

#include <HT1632.h>
#include <font_5x4.h>
#include <font_8x4.h>
#include <images.h>
#include <Wire.h>
#include <ds3231.h>
#include <DHT.h>

// Temperature and Humidity Sensor (DHT11) Settings
#define DHTPIN 2
#define DHTTYPE DHT11

// LED Matrix Pins
#define CSPIN 9
#define WRPIN 10
#define DATAPIN 11

// Space in ASCII is 32
#define PADDING 32

#define DOT 67
#define PERCENTAGE 37
#define COLON 58
#define FORWARDSLASH 47

char time_char[8];
char day_char[8];
char temp_char[9];
char hum_char[9];

struct ts t;
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
HT1632.begin(CSPIN, WRPIN, DATAPIN);

Wire.begin();
DS3231_init(DS3231_INTCN);
dht.begin();
}

void loop()
{
// This delay is added cause the DHT11 needs 2sec to give reliable values
delay(2000);

// Get the current time and date
DS3231_get(&t);

// Extract the time digits
int lh = ((t.hour / 10) % 10);
int rh = (t.hour % 10);
int lm = ((t.min / 10) % 10);
int rm = (t.min % 10);

// Extract the date digits
int ldt = ((t.mday / 10) % 10);
int rdt = (t.mday % 10);
int lmt = ((t.mon / 10) % 10);
int rmt = (t.mon % 10);
int y3d = ((t.year / 10) % 10);
int y4d = ((t.year % 10));
int y2d = (((t.year / 10) / 10) % 10);
int y1d = ((((t.year / 10) / 10) / 10) % 10);

// Fill in the time and date array with some padding
time_char[0] = char(lh) + 48;
time_char[1] = char(rh) + 48;
time_char[2] = COLON;
time_char[3] = char(lm) + 48;
time_char[4] = char(rm) + 48;
time_char[5] = PADDING;
time_char[6] = PADDING;
time_char[7] = PADDING;

day_char[0] = char(ldt) + 48;
day_char[1] = char(rdt) + 48;
day_char[2] = FORWARDSLASH;
day_char[3] = char(lmt) + 48;
day_char[4] = char(rmt) + 48;
day_char[5] = PADDING;
day_char[6] = PADDING;

// Read temp and humidity
int hum = dht.readHumidity();
int temp = dht.readTemperature();

// Extract the temp and humidity digits
int ltemp = ((temp / 10) % 10);
int rtemp = (temp % 10);
int lhum = ((hum / 10) % 10);
int rhum = (hum % 10);

// Fill in the temp and hum array with padding
temp_char[0] = PADDING;
temp_char[1] = PADDING;
temp_char[2] = char(ltemp) + 48;
temp_char[3] = char(rtemp) + 48;
temp_char[4] = DOT;
temp_char[5] = PADDING;
temp_char[6] = PADDING;
temp_char[7] = PADDING;
temp_char[8] = PADDING;
temp_char[9] = PADDING;

hum_char[0] = char(lhum) + 48;
hum_char[1] = char(rhum) + 48;
hum_char[2] = PERCENTAGE;
hum_char[3] = PADDING;
hum_char[4] = PADDING;
hum_char[5] = PADDING;
hum_char[6] = PADDING;

// Every 30 sec show the date, temp and humidity
if (int(t.sec) == 30 || int(t.sec) == 0)
{
draw_image(day_char, 5);
delay(3000);
draw_image(temp_char, 5);
delay(3000);
draw_image(hum_char, 9);
delay(5000);
}
else
{
draw_image(time_char, 5);
}
}

void draw_image(char *imageToDraw, int startFrom)
{
HT1632.clear();

HT1632.drawText(imageToDraw, startFrom, 0, FONT_8X4, FONT_8X4_END, FONT_8X4_HEIGHT);

HT1632.render();
}

Шаг 4: Соединяем все вместе

Шаг 4: Соединяем все вместе

Шаг 4: Соединяем все вместе

Я использовал горячий клей, чтобы надежно закрепить светодиодную матрицу в вырезе. Затем я осторожно открыл коробку с салфетками и поместил внутрь макетную плату и Arduino. Для питания всей схемы можно использовать несколько вариантов:

1. Батарея 9 В, подключенная через штекер

2. Внешний аккумулятор, подключенный к USB-порту Arduino.

3. Arduino подключил к ноутбуку (мой вариант)

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

Шаг 5: Что получилось и возможные улучшения

Шаг 5: Что получилось и возможные улучшения

Шаг 5: Что получилось и возможные улучшения

Шаг 5: Что получилось и возможные улучшения

Шаг 5: Что получилось и возможные улучшения

Наконец-то он готов! Я очень доволен тем, что получилось. Я все еще планирую улучшить кое-что в будущем, например:

  •  Добавить светодиодную матрицу RGB
  • Добавьте ESP32 для отображения информации из Интернета 
  • Добавить больше датчиков

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

Спасибо за чтение!

Рекомендуем почитать

  • ВЫКЛЮЧАТЕЛЬ-ЭКОНОМВЫКЛЮЧАТЕЛЬ-ЭКОНОМ
    «Лампы послужат дольше» — так назывался материал, опубликованный в шестом номере журнала за 1993 год. Нисколько не сомневаюсь в правильности всего, что там изложено, но... Я бы этот...
  • В ПОДАРОК БАБУШКЕВ ПОДАРОК БАБУШКЕ
    Сейчас многие бабушки снова взялись за рукоделие: что-то заштопать внучатам, а то и сшить молодым родителям... Да вот обидно — сказываются годы, зрение не то, что раньше, не так...
Тут можете оценить работу автора: