Indholdsfortegnelse:
Video: Task Manager - et husholdningsopgavehåndteringssystem: 5 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Jeg ville forsøge at løse et reelt problem i vores husstand (og jeg kan forestille mig mange andre læsere), som er hvordan man tildeler, motiverer og belønner mine børn for at hjælpe med huslige gøremål.
Indtil nu har vi holdt et lamineret ark A4 -papir fast på siden af køleskabet. Det har et gitter med opgaver trykt på det med tilhørende mængder lommepenge, der kan tjene til at fuldføre opgaven. Ideen er, at hver gang et af vores børn hjælper til med en opgave, får de et kryds i feltet, og i slutningen af hver uge lægger vi de tjente penge sammen, tørrer tavlen og starter igen. Listen over opgaver er imidlertid forældet og svær at ændre, vi husker nogle gange ikke at tørre tavlen ren hver uge, og nogle opgaver skal udføres med forskellige frekvenser-nogle ville ideelt set blive udført dagligt, hvorimod andre er måske kun en gang om måneden. Så jeg gik i gang med at oprette en Arduino -baseret enhed til at løse disse problemer - min hensigt var at skabe noget, der muliggjorde let tilføjelse/fjernelse/opdatering af opgaver, en strømlinet mekanisme til registrering af, når en opgave var blevet udført og tildele kredit til passende person og en måde at holde styr på forskellige tidsplaner og hyppighed, hvormed forskellige opgaver skal udføres, og fremhæve forfaldne opgaver. Og denne instruktive vil vise, hvordan den resulterende "Task Manager" -enhed kom ud.
Trin 1: Hardware
Projektet gør brug af flere velanvendte og dokumenterede hardwarekomponenter:
- Arduino UNO/Nano - dette er systemets "hjerner". Den indbyggede EEPROM -hukommelse bruges til at gemme status for opgaver, selv når systemet er slukket. For at lette ledningerne har jeg monteret Nano på et skrueskærm, men du kan i stedet lodde eller bruge krympede forbindelser til GPIO -benene, hvis du foretrækker det.
- Real -time ur (RTC) -modul - bruges til at registrere det tidsstempel, hvor opgaver blev udført, og ved at sammenligne sidste gang med det aktuelle tidspunkt bestemme, hvilke opgaver der er forsinket. Bemærk, at den enhed, jeg modtog, var designet til at blive brugt med et genopladeligt LiPo -batteri (LIR2032). Jeg bruger imidlertid et ikke-genopladeligt CR2032-batteri, så jeg var nødt til at foretage et par ændringer for at deaktivere opladningskredsløbet (du vil ikke prøve at genoplade et ikke-genopladeligt batteri, ellers kan du blive udsat for en eksplosion….). Specifikt fjernede jeg modstande R4, R5 og R6, og dioden markeret D1. Jeg skabte derefter en loddebro til kort over, hvor R6 havde været. Disse ændringer er illustreret på billedet herunder.
- ISO14443 RFID-læser + et mærke pr. Bruger- som en måde at "gamificere" systemet på, har hvert af mine børn deres eget unikke RFID-tag. Valg af en opgave og derefter stryge deres tag over læseren vil være den mekanisme, der bruges til at markere en opgave som fuldført
- 16x2 LCD -display - bruges til at levere brugergrænsefladen til systemet. Ved at bruge et kort, der har en integreret PCF8574A -rygsæk, kan kortet tilsluttes via et I2C -interface til Arduino, hvilket forenkler ledningerne betydeligt.
- Rotary Encoder - vil være hovedbetjeningsknappen, som brugerne vil dreje for at vælge forskellige tilgængelige opgaver
- Wago -stik - disse snap -lukke stik er en bekvem måde at koble komponenter sammen eller oprette enkle busser til flere moduler, der hver kræver fælles jord eller 5V forsyning.
Trin 2: Ledningsføring
16x2 LCD -displayet og DS1307 RTC bruger begge en I2C -grænseflade, hvilket er praktisk, da det gør ledningerne meget enklere, hvilket kun kræver et par ledninger, der går til A4 (SDA) og A5 (SCL) benene på Arduino
MFRC-522 RFID-læseren bruger en SPI-grænseflade, der bruger faste hardware-pins 11 (MOSI), 12 (MISO) og 13 (SCK). Det kræver også en slave vælg og nulstil linje, som jeg har tildelt henholdsvis ben 10 og 9
Den roterende encoder kræver et par ben. For optimal ydeevne er det bedst, hvis disse ben kan håndtere eksterne afbrydelser, så jeg bruger digitale ben 2 og 3. Du kan også klikke på encoderen som en switch, og jeg har forbundet dette til pin 4. Selvom det ikke er det bruges i øjeblikket i koden, kan det være nyttigt at tilføje yderligere funktioner
For nemheds skyld bruger jeg WAGO 222-serie stikblokke. Disse er snap-lukke stik, der giver en robust, let måde at forbinde hvor som helst mellem 2 og 8 ledninger sammen, og er meget praktisk til Arduino-projekter, der kræver flere moduler for at dele en jord- eller 5V-linje, eller hvor du har flere enheder på samme I2C- eller SPI -bus, siger
Diagrammet illustrerer, hvordan alt er koblet sammen.
Trin 3: Konstruktion
Jeg lavede en meget grundlæggende 3D -trykt sag til at huse elektronikken. Jeg placerede nogle magneter på bagsiden, så enheden kunne fastgøres på siden af køleskabet, ligesom den tidligere trykte liste var. Jeg forlod også USB -stikket udsat, da dette ville blive brugt, hvis der skulle tilføjes nye opgaver til systemet, eller for at logge på og downloade et sæt data, der viser gennemførte opgaver osv.
Jeg gemte ikke STL -filerne efter udskrivning, men der er masser af lignende (og sandsynligvis bedre!) Sager tilgængelige på thingiverse.com. Alternativt kan du konstruere en flot trækasse eller bare bruge en gammel papkasse eller tupperware -beholder til at huse elektronikken.
Trin 4: Kode
Den fuldt kommenterede kode er vedhæftet som download herunder. Her er et par af de mere vigtige punkter at bemærke:
Jeg har oprettet en brugerdefineret struktur, "opgave", som er en dataenhed, der indkapsler alle egenskaberne for en opgave i en enkelt enhed. Opgaver består af et navn, som vil være, hvordan de vises på LCD -displayet (og dermed begrænset til 16 tegn), den hyppighed, de skal udføres med, og hvornår og af hvem de sidst blev gennemført
struktur opgave {
char taskName [16]; // Det korte, "venlige" navn for denne opgave, som vil blive vist på displayet int repeatEachXDays; // Regelmæssighed i dage, hvormed denne opgave gentages. 1 = Dagligt, 7 = Ugentlig etc. usigneret lang lastCompletedTime; // Tidsstempel, hvor denne opgave sidst blev udført int lastCompletedBy; // ID for den person, der sidst gennemførte denne opgave};
Hoveddatastrukturen kaldes "taskList", som simpelthen er en række separate opgaver. Du kan definere, hvilke opgaver du ønsker her, som initialiseres med værdien 0 for det tidspunkt, hvor de sidst blev afsluttet, og -1 for ID'et for den bruger, der senest udførte dem
task taskList [numTasks] = {
I sektionen konstanter øverst i koden er der en enkelt byteværdi kaldet "eepromSignature". Denne værdi bruges til at afgøre, om de data, der er gemt på EEPROM, er gyldige. Hvis du ændrer strukturen for taskList -elementet ved at tilføje eller fjerne opgaver eller tilføje yderligere felter, skal du f.eks. Øge denne værdi. Du kan tænke på det som et grundlæggende versionsnummereringssystem for dataene
const byte eepromSignature = 1;
Ved opstart vil programmet kun forsøge at indlæse data, der er gemt i EEPROM, hvis det matcher signaturen af de data, der er defineret i koden.
void restoreFromEEPROM () {
int checkByte = EEPROM.read (0); hvis (checkByte == eepromSignature) {EEPROM.get (1, taskList); }}
LCD -displayet og RTC -modulet bruger en I2C -grænseflade til at kommunikere med Arduino. Dette kræver, at hver enhed har en unik I2C -adresse. Jeg har prøvet et par forskellige 16x2 display boards, og nogle synes at bruge adressen 0x27, mens andre tilsyneladende identiske boards bruger 0x3f. Hvis du finder, at din skærm bare viser en række firkanter og ingen tekst, kan du prøve at ændre den adresseværdi, der er defineret i koden her:
LiquidCrystal_PCF8574 lcd (0x27);
Når et RFID-tag detekteres, læser koden 4-byte-id'et og bruger det til at forsøge at slå den tilsvarende bruger op fra tabellen over kendte brugere. Hvis tagget ikke genkendes, sendes 4 -byte -id'et til den serielle skærmkonsol:
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 ("Ukendt RFID -kort fundet:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }
For at tildele en bruger et tag, skal du kopiere det viste ID og indsætte 4-byte-værdien i brugergruppen øverst i koden ved siden af den tilsvarende bruger:
const user userList [numUsers] = {{1, "Ginny", {0x00, 0x00, 0x00, 0x00}}, {2, "Harry", {0x12, 0x34, 0x56, 0x78}}, {3, "Ron", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermione", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};
Trin 5: Brug
Hvis du har nået det så langt, bør brugen af systemet være temmelig implicit fra koden; når som helst kan brugerne dreje på drejeknappen for at rulle gennem listen over tilgængelige opgaver. Opgaver, der er forsinket, er markeret med en stjerne efter deres titel.
Efter at have valgt en opgave at udføre, kan brugerne derefter scanne deres egen unikke RFID -fob henover læseren for at markere opgaven som fuldført. Deres ID og den aktuelle tid vil blive registreret og gemt i EEPROM i Arduino.
For først at konfigurere de korrekte RFID -tags, skal du køre skitsen med Arduino seriel skærm tilsluttet. Scan hvert mærke, og noter den 4-byte hex-UID-værdi, der vises på den serielle skærm. Rediger derefter brugerlisten, der er angivet øverst i koden, for at tildele dette tag -id til den relevante bruger.
Jeg overvejede at tilføje funktionalitet til at udskrive en rapport, der viser alle opgaver udført af brugeren i løbet af den sidste uge for at tildele den passende lommepenge belønning hver uge. Men som det sker, ser mine børn ud til at være tilfredse med nyheden ved at bruge systemet for helt at have glemt lommepengebelønningerne! Dette ville dog være en ret simpel tilføjelse og efterlades som en øvelse for læseren:)
Anbefalede:
TOYL Task Tracker: 3 trin (med billeder)
TOYL Task Tracker: Må du ikke bare hader det, når du planlægger at arbejde eller værre, er midt i en arbejdssession, og der kommer en underretning på din telefon - en "hurtig kontrol" bliver timer senere. Ved du også, hvor meget tid du arbejder på bestemte opgaver i forhold til
Task Giving Arduino Machine (aka: Making Your Own Bop-it!): 5 trin
Task Giving Arduino Machine (aka: Making Your Own Bop-it!): Til det studie, jeg i øjeblikket følger, fik jeg til opgave at lave noget med en Arduino. Jeg havde skaffet mig en standard problemstilling af materialer fra skolen og tænkt på noget, der ville omgå dem, med minimal yderside
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Password Manager, Typer, Makro, nyttelast Alt i ét !: 11 trin (med billeder)
Password Manager, Typer, Makro, nyttelast … Alt i ÉN !: OBS: Hvis du har problemer med fremstillingen af denne enhed (pcb, lodning eller andre) er du velkommen til at sende mig en privat besked her eller en e -mail til [email protected]. Jeg sender gerne en af de pcb'er eller enheder, jeg allerede producerer
Social Circle Relationship Manager: 7 trin (med billeder)
Social Circle Relationship Manager: Hvad er det? Det kan være svært at holde kontakten med alle de vigtige mennesker i din sociale cirkel, især når du bor i en storby, en arbejdsnarkoman, en studerende eller alt det ovenstående. Social Circle tilbyder en måde at holde alle dine kære i ét