
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36


Исках да се опитам да се справя с реалния проблем, с който се сблъскваме в нашето домакинство (и, предполагам, този на много други читатели), който е как да разпределя, мотивирам и възнаграждавам децата си за помощ в домакинските задължения.
Досега сме държали ламиниран лист хартия А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 стойност, показана на серийния монитор. След това променете списъка с потребители, деклариран в горната част на кода, за да присвоите този идентификатор на маркер на съответния потребител.
Обмислих да добавя функционалност за разпечатване на отчет, показващ всички задачи, изпълнени от потребителя през последната седмица, за да разпределя съответната награда за джобни пари всяка седмица. Въпреки това, както се случва, моите деца изглежда са доволни от новостта да използват системата, за да забравят напълно наградите за джобни пари! Това обаче би било доста просто допълнение и се оставя като упражнение за читателя:)
Препоръчано:
HUNIE-Робот шаси за домашни задължения на открито: 6 стъпки

HUNIE-Робот шаси за домашни задължения на открито: По-горе е първата ми конструкция на робот. Доста съм сръчен с електрониката, занимавал съм се с компютърно програмиране преди три десетилетия и съм търсил ново хоби, тъй като RC Airplanes вече не се вписва в начина ми на живот (твърде далеч от полето). Строя
Управлявайте домакинските уреди чрез Alexa с ESP8266 или ESP32: 8 стъпки

Управлявайте домашните уреди чрез Alexa с ESP8266 или ESP32: Хей, какво става, момчета! Akarsh тук от CETech. Този мой проект ще помогне на живота ви да стане лесен и ще се почувствате като крал, след като контролирате уредите в къщата си, като просто дадете команда на Alexa. Основното нещо зад този p
Контролирайте домакинските уреди с помощта на Node MCU и Google Assistant - IOT - Blynk - IFTTT: 8 стъпки

Контролирайте домакинските уреди с помощта на Node MCU и Google Assistant | IOT | Blynk | IFTTT: Прост проект за контрол на уредите с помощта на Google Assistant: Предупреждение: Работата с електрическата мрежа може да бъде опасна. Работете с изключително внимание. Наемете професионален електротехник, докато работите с отворени вериги. Няма да поема отговорности за да
Контролирайте домакинските уреди над LoRa - LoRa в домашната автоматизация - LoRa дистанционно управление: 8 стъпки

Контролирайте домакинските уреди над LoRa | LoRa в домашната автоматизация | Дистанционно управление LoRa: Управлявайте и автоматизирайте електрическите си уреди от големи разстояния (километри) без наличието на интернет. Това е възможно чрез LoRa! Хей, какво има, момчета? Akarsh тук от CETech. Тази печатна платка също има OLED дисплей и 3 релета, които
8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно управление и приложение за Android: 5 стъпки (със снимки)

8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно и приложение за Android: Управление на 8 релейни превключвателя с помощта на nodemcu и IR приемник през wifi и дистанционно и приложение за android. Дистанционното работи независимо от wifi връзката. ТУК