Съдържание:

Task Manager - система за управление на домакинските задължения: 5 стъпки (със снимки)
Task Manager - система за управление на домакинските задължения: 5 стъпки (със снимки)

Видео: Task Manager - система за управление на домакинските задължения: 5 стъпки (със снимки)

Видео: Task Manager - система за управление на домакинските задължения: 5 стъпки (със снимки)
Видео: Беслан. Помни / Beslan. Remember (english & español subs) 2024, Юли
Anonim
Task Manager - Система за управление на домакинските задължения
Task Manager - Система за управление на домакинските задължения
Task Manager - Система за управление на домакинските задължения
Task Manager - Система за управление на домакинските задължения

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

Досега сме държали ламиниран лист хартия А4, залепен отстрани на хладилника. На него е отпечатана мрежа от задачи, със свързани суми джобни пари, които биха могли да бъдат спечелени за изпълнението на тази задача. Идеята е, че всеки път, когато едно от децата ни помага с домакинска работа, те получават отметка в тази кутия и в края на всяка седмица ние събираме спечелените пари, изтриваме дъската и започваме отново. Списъкът със задачи обаче е остарял и трудно се променя, понякога не си спомняме да изтриваме дъската всяка седмица, а някои задачи трябва да се изпълняват с различни честоти-някои в идеалния случай биха се извършвали ежедневно, докато други може да са само веднъж месечно. И така, аз се заех да създам устройство, базирано на Arduino, за да се справя с тези проблеми - намерението ми беше да създам нещо, което позволява лесно добавяне/премахване/актуализиране на задачи, рационализиран механизъм за запис, когато дадена задача е била изпълнена, и разпределяне на кредит към подходящ човек и начин за проследяване на различни графици и честота, с които трябва да се изпълняват различни задачи, и подчертаване на просрочени задачи. И тази инструкция ще покаже как излезе полученото устройство "Task Manager".

Стъпка 1: Хардуер

Хардуер
Хардуер
Хардуер
Хардуер

Проектът използва няколко добре използвани и документирани хардуерни компонента:

  • Arduino UNO/Nano - това е "мозъкът" на системата. Вградената EEPROM памет ще се използва за запазване на състоянието на задачите, дори когато системата е изключена. За по -лесно окабеляване, монтирах Nano върху винтов щит, но вместо това можете да запоявате или да използвате кримпвани връзки към щифтовете GPIO, ако предпочитате.
  • Модул Часовник в реално време (RTC) - използва се за записване на времевата отметка, при която са изпълнени задачите, и чрез сравняване на последното време с текущото време, определя кои задачи са просрочени. Обърнете внимание, че устройството, което получих, е проектирано да се използва с акумулаторна LiPo батерия (LIR2032). Използвам обаче не акумулаторна батерия CR2032, така че трябваше да направя няколко модификации, за да деактивирам веригата за зареждане (не искате да се опитвате да презареждате батерия, която не се презарежда, или може да се сблъскате с експлозия …).). По -конкретно, премахнах резистори R4, R5 и R6 и диода с маркировка D1. След това създадох мост за спойка, за да прекъсна мястото, където беше R6. Тези промени са илюстрирани на снимката по -долу.
  • ISO14443 RFID четец + един етикет на потребител- като начин за „геймифициране“на системата, всяко от децата ми има свой собствен уникален RFID етикет. Избирането на задача и след това плъзгане на техния маркер през четеца ще бъде механизмът, използван за маркиране на задача като завършена
  • 16x2 LCD дисплей - използва се за предоставяне на потребителски интерфейс към системата. Използвайки платка, която има интегрирана раница PCF8574A, платката може да бъде свързана чрез I2C интерфейс към Arduino, което значително опростява окабеляването.
  • Ротационен енкодер - ще бъде основното копче за управление, което потребителите ще завъртят, за да изберат различни налични задачи
  • Съединители Wago - тези съединители със затваряне са удобен начин за свързване на компоненти заедно или създаване на прости шини за няколко модула, всеки от които изисква общо заземяване или 5V захранване.

Стъпка 2: Окабеляване

Електрически инсталации
Електрически инсталации

16x2 LCD дисплеят и 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, които изискват няколко модула за споделяне на заземяване или 5V линия, или където имате няколко устройства на същата I2C или SPI шина, да речем

Диаграмата илюстрира как всичко е свързано заедно.

Стъпка 3: Строителство

Създадох много елементарен 3D принтиран калъф за помещение на електрониката. Поставих някои магнити на гърба, за да може устройството да бъде фиксирано отстрани на хладилника, точно както беше предишният отпечатан списък. Също така оставих USB гнездото изложено, тъй като това ще се използва, ако трябва да се добавят нови задачи към системата, или за влизане и изтегляне на набор от данни, показващи изпълнени задачи и т.н.

Не запазих STL файловете след отпечатване, но има много подобни (и вероятно по -добри!) Случаи, налични на thingiverse.com. Като алтернатива можете да конструирате хубава дървена кутия или просто да използвате стара картонена кутия или контейнер с тупер за съхранение на електрониката.

Стъпка 4: Код

Код
Код

Изцяло коментираният код е приложен като изтегляне по-долу. Ето някои от по -важните моменти, които трябва да се отбележат:

Създадох персонализирана структура, "задача", която е единица данни, която капсулира всички свойства на задача в едно цяло. Задачите се състоят от име, което ще бъде как ще се появят на LCD дисплея (и следователно ограничено до 16 знака), честотата, с която трябва да бъдат изпълнени, и кога и от кого са изпълнени за последно

struct task {

char taskName [16]; // Краткото "приятелско" име за тази задача, което ще се появи на дисплея int repeatEachXDays; // Редовност, в дни, с които тази задача се повтаря. 1 = Ежедневно, 7 = Седмично и т.н. без подписа дълго longCompletedTime; // Времева отметка, при която тази задача е изпълнена за последно int lastCompletedBy; // ИД на лицето, което последно е изпълнило тази задача};

Основната структура на данните се нарича "taskList", която е просто масив от отделни задачи. Тук можете да дефинирате каквито задачи искате, които се инициализират със стойност 0 за времето, в което са изпълнени за последно, и -1 за идентификатора на потребителя, който ги е изпълнявал последно

task taskList [numTasks] = {

В секцията за константи в горната част на кода има единична байтова стойност, наречена "eepromSignature". Тази стойност се използва, за да се определи дали данните, съхранявани в EEPROM, са валидни. Ако промените структурата на елемента taskList, като добавите или премахнете задачи или добавите допълнителни полета, да речем, трябва да увеличите тази стойност. Можете да го мислите като основна система за номериране на данните за данните

const байт eepromSignature = 1;

При стартиране програмата ще се опита да зареди данни, съхранени в EEPROM, само ако съвпада с подписа на данните, дефинирани в кода.

void restoreFromEEPROM () {

int checkByte = EEPROM.read (0); if (checkByte == eepromSignature) {EEPROM.get (1, taskList); }}

LCD дисплеят и RTC модулът използват I2C интерфейс за комуникация с Arduino. Това изисква всяко устройство да има уникален I2C адрес. Опитах няколко различни 16x2 дисплея и някои изглежда използват адреса 0x27, докато други на пръв поглед идентични платки използват 0x3f. Ако установите, че дисплеят ви показва само поредица от квадратчета и няма текст, опитайте да промените стойността на адреса, определена в кода тук:

LiquidCrystal_PCF8574 lcd (0x27);

Когато се открие RFID маркер, кодът чете 4-байтовия идентификатор и го използва, за да се опита да потърси съответния потребител от таблицата с известни потребители. Ако маркерът не е разпознат, 4 -байтовият идентификатор ще бъде изпратен до конзолата за сериен монитор:

int GetUserFromRFIDTag (байт 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 (байт i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } връщане -1; }

За да присвоите маркер на потребител, трябва да копирате показания идентификатор и да вмъкнете 4-байтовата стойност в потребителския масив в горната част на кода, до съответния потребител:

const 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 fob в четеца, за да отбележат задачата като завършена. Техният идентификационен номер и текущото време ще бъдат записани и записани в EEPROM на Arduino.

За да настроите първо правилните RFID тагове, трябва да стартирате скицата с прикачен сериен монитор Arduino. Сканирайте всеки маркер и обърнете внимание на 4-байтовата шестнадесетична UID стойност, показана на серийния монитор. След това променете списъка с потребители, деклариран в горната част на кода, за да присвоите този идентификатор на маркер на съответния потребител.

Обмислих да добавя функционалност за разпечатване на отчет, показващ всички задачи, изпълнени от потребителя през последната седмица, за да разпределя съответната награда за джобни пари всяка седмица. Въпреки това, както се случва, моите деца изглежда са доволни от новостта да използват системата, за да забравят напълно наградите за джобни пари! Това обаче би било доста просто допълнение и се оставя като упражнение за читателя:)

Препоръчано: