Шаг 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 для отображения информации из Интернета 
  • Добавить больше датчиков

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

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

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

  • МОТОНАРТЫ ОТ «А» ДО «Я»МОТОНАРТЫ ОТ «А» ДО «Я»
    Что должен знать любитель, принимающийся за создание «зимнего мотоцикла»? Типовая конструкция (рис. 1). Обратите внимание на необходимость как можно ниже расположить центр тяжести и...
  • ОПУБЛИКОВАНО В ЖУРНАЛЕ В 2011 ГОДУОПУБЛИКОВАНО В ЖУРНАЛЕ В 2011 ГОДУ
    ФОТОПАНОРАМА РЕПОРТАЖ НОМЕРА А.Полибин. АВТОЭКЗОТИКА-2009 ОБЩЕСТВЕННОЕ КОНСТРУКТОРСКОЕ БЮРО A.Матвейчук. ПОСЛЕДНЯЯ «МЫСЛЬ» B.Мурников. СТРОИМ ЯХТУ...