Obsah:

Správce úloh - systém správy domácí chore: 5 kroků (s obrázky)
Správce úloh - systém správy domácí chore: 5 kroků (s obrázky)

Video: Správce úloh - systém správy domácí chore: 5 kroků (s obrázky)

Video: Správce úloh - systém správy domácí chore: 5 kroků (s obrázky)
Video: Omylem Jsem Odhalila Prsa! - Andrea Nguyen 2024, Červenec
Anonim
Správce úloh - systém správy domácí chore
Správce úloh - systém správy domácí chore
Správce úloh - systém správy domácí chore
Správce úloh - systém správy domácí chore

Chtěla jsem se pokusit vyřešit skutečný problém, s nímž se v naší domácnosti potýkáme (a domnívám se, že i u mnoha dalších čtenářů), a to jak rozdělit, motivovat a odměnit své děti za pomoc s domácími pracemi.

Až dosud jsme nechali laminovaný list papíru formátu A4 přilepený k boku chladničky. Je na něm vytištěna mřížka úkolů se souvisejícími částkami kapesného, které lze vydělat na splnění tohoto úkolu. Myšlenka je taková, že pokaždé, když jedno z našich dětí vypomáhá s fuškou, dostane do toho políčka zaškrtnutí a na konci každého týdne sečteme vydělané peníze, setřeme desku a začneme znovu. Seznam úkolů je však zastaralý a těžko se mění, někdy si nepamatujeme, že bychom desku každý týden otírali a některé úkoly je třeba provádět s různými frekvencemi-některé by se v ideálním případě prováděly denně, zatímco ostatní mohou být jen jednou za měsíc. Začal jsem tedy vytvářet zařízení založené na Arduinu, které bude tyto problémy řešit - mým záměrem bylo vytvořit něco, co by umožňovalo snadné přidávání/odebírání/aktualizaci úkolů, zjednodušený mechanismus pro zaznamenávání, kdy byl úkol splněn, a přidělování kreditu vhodnou osobu a způsob, jak sledovat různé plány a frekvenci, s nimiž je třeba provádět různé úkoly, a upozornit na zpožděné úkoly. A tento instruktáž ukáže, jak vzniklo výsledné zařízení „Správce úloh“.

Krok 1: Hardware

Hardware
Hardware
Hardware
Hardware

Projekt využívá několik dobře používaných a zdokumentovaných hardwarových komponent:

  • Arduino UNO/Nano - to jsou „mozky“systému. Integrovaná paměť EEPROM bude použita k uložení stavu úkolů, i když je systém vypnutý. Pro snadnější zapojení jsem Nano namontoval na šroubový štít, ale pokud chcete, můžete místo toho pájet nebo použít krimpované spoje na kolíky GPIO.
  • Modul RTC (Real -Time Clock) - slouží k zaznamenávání časového razítka, ve kterém byly úkoly prováděny, a porovnáním posledního času s aktuálním časem určuje, které úkoly jsou po splatnosti. Jednotka, kterou jsem obdržel, byla navržena pro použití s dobíjecí baterií LiPo (LIR2032). Používám však nenabíjecí baterii CR2032, takže jsem potřeboval provést několik úprav, abych deaktivoval nabíjecí obvod (nechcete se pokoušet dobít nenabíjecí baterii, jinak hrozí výbuch …). Konkrétně jsem odstranil odpory R4, R5 a R6 a diodu označenou D1. Poté jsem vytvořil pájecí můstek, který překročil místo, kde byla R6. Tyto změny jsou znázorněny na fotografii níže.
  • ISO14443 RFID čtečka + jeden tag na uživatele- jako způsob „gamifikace“systému má každé z mých dětí svůj vlastní jedinečný RFID tag. Mechanismus používaný k označení úkolu jako dokončeného bude výběr úkolu a poté přejetí jeho značky přes čtečku
  • 16x2 LCD displej - slouží k poskytování uživatelského rozhraní systému. Pomocí desky, která má integrovaný batoh PCF8574A, může být deska připojena přes rozhraní I2C k Arduinu, což výrazně zjednodušuje zapojení.
  • Rotary Encoder - bude hlavním ovládacím knoflíkem, kterým uživatelé otáčejí pro výběr různých dostupných úkolů
  • Konektory Wago - tyto západkové konektory představují pohodlný způsob, jak propojit součásti dohromady nebo vytvořit jednoduché sběrnice pro několik modulů, z nichž každý vyžaduje společné uzemnění nebo napájení 5V.

Krok 2: Zapojení

Elektrické vedení
Elektrické vedení

Displej 16x2 LCD a DS1307 RTC využívají rozhraní I2C, což je výhodné, protože kabeláž je mnohem jednodušší a vyžaduje pouze dvojici vodičů vedoucích na piny Arduino A4 (SDA) a A5 (SCL)

Čtečka RFID MFRC-522 využívá rozhraní SPI, které využívá pevné hardwarové piny 11 (MOSI), 12 (MISO) a 13 (SCK). Vyžaduje také řádek pro výběr a reset slave, který jsem přiřadil pinům 10 a 9

Rotační kodér vyžaduje dvojici pinů. Pro optimální výkon je nejlepší, když tyto piny zvládnou externí přerušení, takže používám digitální piny 2 a 3. Můžete také kliknout na kodér jako přepínač a zapojil jsem to do pinu 4. I když to není aktuálně používané v kódu, může být užitečné pro přidání dalších funkcí

Pro pohodlí používám blokové konektory řady WAGO 222. Jedná se o rychloupínací konektory, které poskytují robustní a snadný způsob připojení kdekoli mezi 2 a 8 vodiči dohromady, a jsou velmi výhodné pro projekty Arduino, které vyžadují sdílení několika modulů uzemňovací nebo 5V linky nebo kde máte více zařízení na stejná sběrnice I2C nebo SPI, řekněme

Diagram ukazuje, jak je vše propojeno dohromady.

Krok 3: Konstrukce

Vytvořil jsem velmi základní 3D tištěné pouzdro pro uložení elektroniky. Na zadní stranu jsem umístil nějaké magnety, aby bylo možné jednotku připevnit na stranu chladničky, stejně jako předchozí tištěný seznam. Nechal jsem také odhalenou zásuvku USB, protože by se používala v případě, že by do systému bylo třeba přidat nové úkoly nebo se přihlásit a stáhnout sadu dat zobrazujících dokončené úkoly atd.

Po vytištění jsem soubory STL neuložil, ale podobných (a pravděpodobně ještě lepších!) Případů je na thingiverse.com k dispozici dost. Alternativně můžete postavit pěknou dřevěnou krabici nebo jen použít starou lepenkovou krabici nebo nádobu z tupperwaru k uložení elektroniky.

Krok 4: Kód

Kód
Kód

Níže uvedený kód ke stažení je přiložen ke stažení. Zde je několik důležitějších bodů, které je třeba poznamenat:

Vytvořil jsem vlastní strukturu, „task“, což je jednotka dat, která zapouzdřuje všechny vlastnosti úkolu do jedné entity. Úkoly se skládají ze jména, kterým bude jejich zobrazení na LCD displeji (a tedy omezeno na 16 znaků), frekvence, se kterou je třeba provádět, a kdy a kým byly naposledy dokončeny

strukturní úkol {

char taskName [16]; // Krátký „přátelský“název pro tento úkol, který se zobrazí na displeji int repeatEachXDays; // Pravidelnost, ve dnech, se kterou se tento úkol opakuje. 1 = denně, 7 = týdně atd. Bez znaménka dlouhý lastCompletedTime; // Časové razítko, ve kterém byl tento úkol naposledy dokončen int lastCompletedBy; // ID osoby, která naposledy dokončila tento úkol};

Hlavní datová struktura se nazývá „taskList“, což je jednoduše pole samostatných úkolů. Zde můžete definovat libovolné úkoly, které chcete inicializovat s hodnotou 0 pro dobu, kdy byly naposledy dokončeny, a -1 pro ID uživatele, který je naposledy provedl

task taskList [numTasks] = {

V sekci konstant v horní části kódu je hodnota jednoho bajtu s názvem „eepromSignature“. Tato hodnota se používá k určení, zda jsou data uložená v paměti EEPROM platná. Pokud změníte strukturu položky taskList přidáním nebo odebráním úkolů nebo přidáním dalších polí, řekněme, měli byste tuto hodnotu zvýšit. Můžete si to představit jako základní systém číslování verzí pro data

konstantní bajt eepromSignature = 1;

Při spuštění se program pokusí načíst data uložená v paměti EEPROM, pouze pokud odpovídá podpisu dat definovaných v kódu.

void restoreFromEEPROM () {

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

LCD displej a modul RTC ke komunikaci s Arduinem používají rozhraní I2C. To vyžaduje, aby každé zařízení mělo jedinečnou adresu I2C. Zkoušel jsem několik různých zobrazovacích desek 16x2 a některé zřejmě používají adresu 0x27, zatímco jiné zdánlivě identické desky používají 0x3f. Pokud zjistíte, že váš displej zobrazuje pouze řadu čtverců a žádný text, zkuste změnit hodnotu adresy definovanou v kódu zde:

LiquidCrystal_PCF8574 lcd (0x27);

Když je detekován tag RFID, kód přečte 4bajtový identifikátor a použije se k pokusu vyhledat příslušného uživatele z tabulky známých uživatelů. Pokud není značka rozpoznána, bude do konzoly sériového monitoru odeslán identifikátor 4 bajtů:

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 ("Zjištěna neznámá karta RFID:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }

Aby bylo možné přiřadit značku uživateli, měli byste zkopírovat zobrazené ID a vložit 4bajtovou hodnotu do pole users v horní části kódu vedle příslušného uživatele:

const user userList [numUsers] = {{1, "Ginny", {0x00, 0x00, 0x00, 0x00}}, {2, "Harry", {0x12, 0x34, 0x56, 0x78}}, {3, "Ron", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermiona", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

Krok 5: Použití

Používání
Používání
Používání
Používání

Pokud jste se dostali až sem, mělo by být použití systému z kódu poměrně implicitní; uživatelé mohou kdykoli otáčet otočným knoflíkem a procházet seznamem dostupných úkolů. Zpožděné práce jsou po názvu označeny hvězdičkou.

Po výběru práce, kterou je třeba provést, mohou uživatelé naskenovat svůj vlastní jedinečný RFID fob přes čtečku a označit úkol jako dokončený. Jejich ID a aktuální čas budou zaznamenány a uloženy do EEPROM Arduina.

Abyste mohli nejprve nastavit správné RFID tagy, měli byste skicu spustit s připojeným sériovým monitorem Arduino. Naskenujte každý tag a poznamenejte si 4bajtovou hexadecimální hodnotu UID zobrazenou na sériovém monitoru. Poté upravte seznam uživatelů deklarovaný v horní části kódu, aby bylo přiřazeno ID této značky příslušnému uživateli.

Zvažoval jsem přidání funkce k vytištění sestavy zobrazující všechny úkoly dokončené uživatelem během posledního týdne, abych každý týden přidělil příslušnou odměnu do kapesného. Jak se však stává, zdá se, že moje děti jsou s novinkou používání systému spokojené, že na odměny za kapesné úplně zapomněly! Toto by však bylo docela jednoduché doplnění a je ponecháno jako cvičení pro čtenáře:)

Doporučuje: