Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Инструкция, как создать таймер для кабинета.
Шаг 1. Интерактивное видео
drive.google.com/file/d/12z5zQR52AXILX2AGb3EplfbmZWANZiCl/view?usp=drivesdk
Шаг 2: Постановка проблемы
Большую часть времени всегда занимают учебные комнаты. Это происходит потому, что людям нравится оставаться в комнате намного дольше, чем им нужно. Мы разработали таймер, который позволяет каждому человеку в общей сложности 2 часа и людям, ожидающим возможности запросить комнату для следующей группы. Использование RGB на Neopixels будет выражать количество оставшегося времени.
Шаг 3. Обзор того, как это работает
Таймер состоит из деталей, вырезанных лазерным резаком, 3 кнопок, 1 светодиода, 1 потенциометра.
Neopixels и потенциометр подключены к NodeMCU. NodeMCU запрограммирован на определение того, насколько повернут потенциометр, чтобы изменить количество светодиодов, которые горят на круглой полосе Neopixel. Кнопка Request останавливает функции Start, Stop и Set time. Цвет светодиодов на таймере внутри комнаты совпадает с цветом светодиода на боковой стороне коробки. Неопиксель на боковой стороне коробки представляет собой дисплей в вестибюле здания, чтобы узнать, какая комната занята и сколько времени осталось. Для каждой комнаты предписано 2 светодиода, один светодиод показывает, занята ли комната, а другой светодиод отражает цвет светодиодов на таймере (зеленый - больше времени, затем желтый, затем красный - меньше времени).
Шаг 4: Список материалов и инструментов
-Прозрачный акрил
-Кабель MicroUSB
www.digikey.com/product-detail/en/stewart-…
- макетная плата
www.amazon.com/gp/product/B01EV6LJ7G/ref=o…
-Потенциометр
www.alliedelec.com/honeywell-380c32500/701…
-3 кнопки
www.digikey.com/product-detail/en/te-conne…
-NodeMCU
www.amazon.com/gp/product/B07CB4P2XY/ref=o…
- 2 полоски Neopixel
www.amazon.com/Lighting-Modules-NeoPixel-W…
-Резисторы
www.digikey.com/product-detail/en/te-conne…
- Провода
www.digikey.com/product-detail/en/sparkfun…
-1 светодиод
www.mouser.com/ProductDetail/Cree-Inc/C512…
-Пистолет для горячего клея
www.walmart.com/ip/AdTech-Hi-Temp-Mini-Hot…
-Липкие полоски на липучке
www.amazon.com/VELCRO-Brand-90076-Fastener…
Шаг 5: начните сборку с макетной платы
A0 к среднему контакту на потенциометре
Vin для включения кольца Neopixel
3v3 сбоку от потенциометра
Все основания для заземления на NodeMCU
D1 для кнопки запроса
D2 для запроса светодиода
D3 к кнопке пуска
D4 к кнопке остановки
D5 к резистору к входу Neopixel на кольце
D6 к резистору к входной полосе Neopixel
Шаг 6: запуск кода
Это код, чтобы убедиться, что ваш проект работает до сих пор. Таймер должен составлять всего пару секунд на каждый светодиод на Neopixel Ring. Как только вы узнаете, что он работает до этого момента, все, что вам нужно сделать, это изменить приведенные ниже операторы time if на указанный диапазон. Я добавлю "#Change time" к каждому из операторов time if, которые вам нужно изменить в соответствии с вашим временным распределением.
Пробуем код:
импортировать utime
время импорта
из машинного импорта АЦП
импортная машина
импортный неопиксель
adc = ADC (0)
pin = machine. Pin (14, machine. Pin. OUT)
np = neopixel. NeoPixel (вывод, 12)
pin2 = machine. Pin (12, machine. Pin. OUT)
np2 = neopixel. NeoPixel (pin2, 8)
l1 = machine. Pin (4, machine. Pin. OUT)
b1 = machine. Pin (5, machine. Pin. IN, machine. Pin. PULL_UP)
b3 = machine. Pin (2, machine. Pin. IN, machine. Pin. PULL_UP)
b2 = machine. Pin (0, machine. Pin. IN, machine. Pin. PULL_UP)
l1.value (0)
def tglled (): # переключить функцию светодиода 'request'
если l1.value () == 0:
l1.value (1)
еще:
l1.value (0)
х = 0
b1temp1 = 0
b1temp2 = 0
t = 0
b2temp1 = 0
b2temp2 = 0
b3temp1 = 0
b3temp2 = 0
s = 0
в то время как True:
# Это кнопка, которая включает светодиод запроса.
b1temp2 = b1.value ()
если b1temp1, а не b1temp2:
tglled ()
время сна (0,05)
b1temp1 = b1temp2
# Это сетка
np2 [0] = np [11]
если l1.value () == 1:
np2 [1] = (30, 0, 0)
еще:
np2 [1] = (0, 0, 30)
np2.write ()
# Здесь мы выбираем, сколько времени нам нужно
если t == 0:
для i в диапазоне (-1, 12):
если (l1.value () == 0):
если (adc.read ()> = (85,34 * (i + 1))):
np = (0, 0, 0)
np [11] = (0, 0, 30)
s = (я + 1)
еще:
np = (0, 0, 30)
np.write ()
еще:
np = (0, 0, 0)
np.write ()
# Это кнопка для запуска таймера
если (l1.value () == 0) и (t == 0):
b2temp2 = b2.value ()
если b2temp1, а не b2temp2:
х + = 1
т + = (с * 100)
время сна (0,05)
b2temp1 = b2temp2
# Эта кнопка завершает таймер
если (l1.value () == 0):
b3temp2 = b3.value ()
если b3temp1, а не b3temp2:
х = 0
t = 0
время сна (0,05)
b3temp1 = b3temp2
# Это таймер
если x> 0:
т + = 1
if (t> 0) и (t <= 100): # Время изменения
np [0] = (5, 30, 0)
np [1] = (5, 30, 0)
np [2] = (5, 30, 0)
np [3] = (5, 30, 0)
np [4] = (5, 30, 0)
np [5] = (5, 30, 0)
np [6] = (5, 30, 0)
np [7] = (5, 30, 0)
np [8] = (5, 30, 0)
np [9] = (5, 30, 0)
np [10] = (5, 30, 0)
np [11] = (5, 30, 0)
np.write ()
if (t> 100) and (t <= 200): # Время изменения
np [0] = (0, 0, 0)
np [1] = (10, 30, 0)
np [2] = (10, 30, 0)
np [3] = (10, 30, 0)
np [4] = (10, 30, 0)
np [5] = (10, 30, 0)
np [6] = (10, 30, 0)
np [7] = (10, 30, 0)
np [8] = (10, 30, 0)
np [9] = (10, 30, 0)
np [10] = (10, 30, 0)
np [11] = (10, 30, 0)
np.write ()
if (t> 200) и (t <= 300): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (15, 30, 0)
np [3] = (15, 30, 0)
np [4] = (15, 30, 0)
np [5] = (15, 30, 0)
np [6] = (15, 30, 0)
np [7] = (15, 30, 0)
np [8] = (15, 30, 0)
np [9] = (15, 30, 0)
np [10] = (15, 30, 0)
np [11] = (15, 30, 0)
np.write ()
if (t> 300) and (t <= 400): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (20, 30, 0)
np [4] = (20, 30, 0)
np [5] = (20, 30, 0)
np [6] = (20, 30, 0)
np [7] = (20, 30, 0)
np [8] = (20, 30, 0)
np [9] = (20, 30, 0)
np [10] = (20, 30, 0)
np [11] = (20, 30, 0)
np.write ()
if (t> 400) и (t <= 500): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (25, 30, 0)
np [5] = (25, 30, 0)
np [6] = (25, 30, 0)
np [7] = (25, 30, 0)
np [8] = (25, 30, 0)
np [9] = (25, 30, 0)
np [10] = (25, 30, 0)
np [11] = (25, 30, 0)
np.write ()
if (t> 500) и (t <= 600): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (30, 30, 0)
np [6] = (30, 30, 0)
np [7] = (30, 30, 0)
np [8] = (30, 30, 0)
np [9] = (30, 30, 0)
np [10] = (30, 30, 0)
np [11] = (30, 30, 0)
np.write ()
if (t> 600) и (t <= 700): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (30, 25, 0)
np [7] = (30, 25, 0)
np [8] = (30, 25, 0)
np [9] = (30, 25, 0)
np [10] = (30, 25, 0)
np [11] = (30, 25, 0)
np.write ()
if (t> 700) и (t <= 800): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (30, 20, 0)
np [8] = (30, 20, 0)
np [9] = (30, 20, 0)
np [10] = (30, 20, 0)
np [11] = (30, 20, 0)
np.write ()
if (t> 800) и (t <= 900): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (30, 15, 0)
np [9] = (30, 15, 0)
np [10] = (30, 15, 0)
np [11] = (30, 15, 0)
np.write ()
if (t> 900) and (t <= 1000): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (30, 10, 0)
np [10] = (30, 10, 0)
np [11] = (30, 10, 0)
np.write ()
if (t> 1000) и (t <= 1100): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (0, 0, 0)
np [10] = (30, 5, 0)
np [11] = (30, 5, 0)
np.write ()
if (t> 1100) and (t <= 1200): # Время изменения
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (0, 0, 0)
np [10] = (0, 0, 0)
np [11] = (30, 0, 0)
np.write ()
if t> = 1300: # Время изменения
t = 0
х = 0
Шаг 7: завершающие штрихи
Теперь, когда вы зашли так далеко, у вас должен быть загружен рабочий код в NodeMCU и все части подключены к макетной плате. После того, как вы попробовали код и вырезали все детали, которые у вас есть для внешнего вида, например, корпус, вырезанный лазером, теперь вы можете припаять провода к NodeMCU. Пайка не является обязательной, но может сделать ее более безопасной и компактной для вашего корпуса. Вот некоторые детали, вырезанные лазером, которые мы сделали.