Оглавление:

Диспетчер задач - система управления домашними делами: 5 шагов (с изображениями)
Диспетчер задач - система управления домашними делами: 5 шагов (с изображениями)

Видео: Диспетчер задач - система управления домашними делами: 5 шагов (с изображениями)

Видео: Диспетчер задач - система управления домашними делами: 5 шагов (с изображениями)
Видео: Как планировать свой день? Лучшие приемы тайм-менеджмента 2024, Июль
Anonim
Диспетчер задач - система управления домашними делами
Диспетчер задач - система управления домашними делами
Диспетчер задач - система управления домашними делами
Диспетчер задач - система управления домашними делами

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

До сих пор мы приклеивали ламинированный лист бумаги формата А4 к боковой стенке холодильника. На нем напечатана сетка задач с соответствующими суммами карманных денег, которые можно заработать за выполнение этой задачи. Идея состоит в том, что каждый раз, когда один из наших детей помогает по хозяйству, они ставят галочку в этом поле, и в конце каждой недели мы складываем заработанные деньги, протираем доску и начинаем заново. Однако список задач устарел и его трудно изменить, иногда мы не забываем очищать доску каждую неделю, и некоторые задачи необходимо выполнять с разной частотой - некоторые в идеале должны выполняться ежедневно, тогда как другие могут быть только раз в месяц. Итак, я приступил к созданию устройства на базе Arduino для решения этих проблем - моим намерением было создать что-то, что позволяло бы легко добавлять / удалять / обновлять задачи, оптимизированный механизм для записи, когда задача была выполнена, и выделения кредита для подходящего человека и способ отслеживать различные графики и частоту, с которой необходимо выполнять разные задачи, и выделять просроченные задачи. И это руководство покажет, как получилось получившееся устройство «Диспетчер задач».

Шаг 1. Аппаратное обеспечение

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

В проекте используются несколько хорошо используемых и задокументированных аппаратных компонентов:

  • Arduino UNO / Nano - это «мозги» системы. Встроенная память EEPROM будет использоваться для сохранения состояния задач, даже когда система выключена. Для простоты подключения я установил Nano на винтовой экран, но вы можете припаять или использовать гофрированные соединения с выводами GPIO, если хотите.
  • Модуль часов реального времени (RTC) - используется для записи отметки времени, когда были выполнены задачи, и, сравнивая последнее время с текущим временем, определяет, какие задачи просрочены. Обратите внимание, что полученное мной устройство было разработано для использования с перезаряжаемой литий-полимерной батареей (LIR2032). Однако я использую неперезаряжаемую батарею CR2032, поэтому мне нужно было внести несколько изменений, чтобы отключить цепь зарядки (вы не хотите пытаться перезарядить неперезаряжаемую батарею, иначе вы можете столкнуться с взрывом …). В частности, я удалил резисторы R4, R5 и R6, а также диод с пометкой D1. Затем я создал перемычку из припоя, чтобы закоротить место, где был R6. Эти изменения показаны на фото ниже.
  • Считыватель RFID ISO14443 + одна метка на пользователя - в качестве способа "геймификации" системы у каждого из моих детей есть свой уникальный RFID-тег. Выбор задачи и последующее прохождение их тега через считыватель будет механизмом, используемым для отметки задачи как выполненной.
  • ЖК-дисплей 16x2 - используется для обеспечения пользовательского интерфейса системы. Используя плату со встроенным рюкзаком PCF8574A, плату можно подключить через интерфейс I2C к Arduino, что значительно упрощает проводку.
  • Rotary Encoder - это основная ручка управления, которую пользователи будут поворачивать для выбора различных доступных задач.
  • Разъемы Wago - эти разъемы с защелкой - удобный способ соединить компоненты вместе или создать простые шины для нескольких модулей, каждый из которых требует общего заземления или питания 5 В.

Шаг 2: Подключение

Проводка
Проводка

ЖК-дисплей 16x2 и DS1307 RTC используют интерфейс I2C, что удобно, поскольку он значительно упрощает проводку, требуя только пары проводов, идущих к контактам A4 (SDA) и A5 (SCL) Arduino

Считыватель RFID MFRC-522 использует интерфейс SPI, который использует фиксированные аппаратные контакты 11 (MOSI), 12 (MISO) и 13 (SCK). Также требуется линия выбора и сброса ведомого, которую я назначил контактам 10 и 9 соответственно

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

Для удобства я использую соединительные блоки WAGO серии 222. Это разъемы с защелкой, которые обеспечивают надежный и простой способ соединения от 2 до 8 проводов вместе и очень удобны для проектов Arduino, которые требуют, чтобы несколько модулей использовали общую линию заземления или 5 В, или когда у вас есть несколько устройств на одной линии. скажем, та же шина I2C или SPI

На схеме показано, как все соединено вместе.

Шаг 3: Строительство

Я создал очень простой корпус для электроники, напечатанный на 3D-принтере. Я разместил несколько магнитов сзади, чтобы устройство можно было закрепить на стенке холодильника, как и в предыдущем распечатанном списке. Я также оставил USB-разъем незащищенным, так как он будет использоваться, если необходимо добавить новые задачи в систему, или для входа в систему и загрузки набора данных, показывающих выполненные задачи и т. Д.

Я не сохранял файлы STL после печати, но на сайте thingiverse.com есть множество похожих (и, возможно, лучше!) Случаев. В качестве альтернативы вы можете построить красивую деревянную коробку или просто использовать старую картонную коробку или контейнер для посуды для размещения электроники.

Шаг 4: Код

Код
Код

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

Я создал настраиваемую структуру «задача», которая представляет собой единицу данных, которая инкапсулирует все свойства задачи в единую сущность. Задачи состоят из имени, которое будет отображаться на ЖК-дисплее (и, следовательно, ограничено 16 символами), частоты, с которой они должны выполняться, а также когда и кем они были выполнены в последний раз

struct task {

char taskName [16]; // Краткое, «понятное» имя этой задачи, которое будет отображаться на экране int repeatEachXDays; // Регулярность в днях, с которой эта задача повторяется. 1 = ежедневно, 7 = еженедельно и т. Д. Беззнаковое long lastCompletedTime; // Отметка времени, когда эта задача была завершена в последний раз int lastCompletedBy; // ID человека, который последний раз выполнил эту задачу};

Основная структура данных называется «taskList», которая представляет собой просто массив отдельных задач. Здесь вы можете определить любые задачи, которые вы хотите, которые инициализируются значением 0 для времени последнего выполнения и -1 для идентификатора пользователя, который выполнял их последним

task taskList [numTasks] = {

В разделе констант в верхней части кода есть однобайтовое значение, называемое «eepromSignature». Это значение используется, чтобы определить, действительны ли данные, хранящиеся в EEPROM. Если вы изменяете структуру элемента taskList, добавляя или удаляя задачи или добавляя дополнительные поля, скажем, вы должны увеличить это значение на единицу. Вы можете думать об этом как о базовой системе нумерации версий для данных

const byte eepromSignature = 1;

При запуске программа будет пытаться загрузить данные, хранящиеся в EEPROM, только если они соответствуют подписи данных, определенных в коде.

void restoreFromEEPROM () {

int checkByte = EEPROM.read (0); если (checkByte == eepromSignature) {EEPROM.get (1, taskList); }}

ЖК-дисплей и модуль RTC используют интерфейс I2C для связи с Arduino. Это требует, чтобы у каждого устройства был уникальный адрес I2C. Я пробовал несколько разных плат дисплея 16x2, и некоторые из них, похоже, используют адрес 0x27, в то время как другие, казалось бы, идентичные платы используют 0x3f. Если вы обнаружите, что на вашем дисплее просто отображается серия квадратов без текста, попробуйте изменить значение адреса, определенное в приведенном здесь коде:

LiquidCrystal_PCF8574 lcd (0x27);

При обнаружении RFID-метки код считывает 4-байтовый идентификатор и использует его для поиска соответствующего пользователя в таблице известных пользователей. Если тег не распознается, 4-байтовый идентификатор будет отправлен на консоль последовательного монитора:

int GetUserFromRFIDTag (byte RFID ) {

for (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {if (memcmp (userList .rfidUID, RFID, sizeof userList .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Обнаружена неизвестная RFID-карта:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }

Чтобы назначить тег пользователю, вы должны скопировать отображаемый идентификатор и вставить 4-байтовое значение в массив пользователей в верхней части кода рядом с соответствующим пользователем:

const user userList [numUsers] = {{1, "Джинни", {0x00, 0x00, 0x00, 0x00}}, {2, "Гарри", {0x12, 0x34, 0x56, 0x78}}, {3, "Рон", {0xE8, 0x06, 0xC2, 0x49}}, {4, «Гермиона», {0x12, 0x34, 0x56, 0x78}}, {5, «Alastair», {0x12, 0x34, 0x56, 0x78}},};

Шаг 5: использование

использование
использование
использование
использование

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

Выбрав задание для выполнения, пользователи могут сканировать свой уникальный RFID-брелок через считыватель, чтобы отметить задачу как выполненную. Их ID и текущее время будут записаны и сохранены в EEPROM Arduino.

Чтобы сначала настроить правильные метки RFID, вы должны запустить скетч с подключенным последовательным монитором Arduino. Отсканируйте каждый тег и обратите внимание на 4-байтовое шестнадцатеричное значение UID, отображаемое на последовательном мониторе. Затем измените список пользователей, объявленный в верхней части кода, чтобы назначить этот идентификатор тега соответствующему пользователю.

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

Рекомендуемые: