INHOUDSOPGAWE:

Taakbestuurder - 'n huishoudelike taakbestuurstelsel: 5 stappe (met foto's)
Taakbestuurder - 'n huishoudelike taakbestuurstelsel: 5 stappe (met foto's)

Video: Taakbestuurder - 'n huishoudelike taakbestuurstelsel: 5 stappe (met foto's)

Video: Taakbestuurder - 'n huishoudelike taakbestuurstelsel: 5 stappe (met foto's)
Video: Wet Bestuur en Toezicht Rechtspersonen (WBTR) uitgelegd | KVK 2024, Julie
Anonim
Taakbestuurder - 'n huishoudelike taakbestuurstelsel
Taakbestuurder - 'n huishoudelike taakbestuurstelsel
Taakbestuurder - 'n huishoudelike taakbestuurstelsel
Taakbestuurder - 'n huishoudelike taakbestuurstelsel

Ek wou probeer om 'n werklike probleem in ons huishouding (en, dink ek, die van baie ander lesers), aan te spreek, naamlik hoe om my kinders toe te ken, te motiveer en te beloon omdat hulle gehelp het met huishoudelike take.

Tot dusver het ons 'n gelamineerde vel A4 -papier aan die kant van die yskas gehou. Dit bevat 'n rooster met take, met gepaardgaande bedrae sakgeld wat verdien kan word om die taak te voltooi. Die idee is dat elke keer as een van ons kinders help met 'n taak, hulle 'n regmerkie in die boks kry, en aan die einde van elke week tel ons die geld bymekaar, vee die bord af en begin weer. Die lys van take is egter verouderd en moeilik om te verander; ons kan soms nie onthou om die bord elke week skoon te vee nie, en sommige take moet met verskillende frekwensies uitgevoer word-sommige sou verkieslik daagliks gedoen word, terwyl ander is dalk net een keer per maand. Ek het dus begin met die skep van 'n Arduino -gebaseerde toestel om hierdie probleme aan te spreek - my bedoeling was om iets te skep wat dit makliker maak om take by te voeg/te verwyder/by te werk, 'n vaartbelynde meganisme om op te teken wanneer 'n taak uitgevoer is en krediet toe te ken aan die geskikte persoon, en 'n manier om by te hou van verskillende skedules en frekwensie waarmee verskillende take uitgevoer moet word, en om agterstallige take uit te lig. En hierdie instruksies sal wys hoe die gevolglike 'Taakbestuurder' -toestel uitgekom het.

Stap 1: Hardeware

Hardeware
Hardeware
Hardeware
Hardeware

Die projek maak gebruik van verskeie goed gebruikte en gedokumenteerde hardeware-komponente:

  • Arduino UNO/Nano - dit is die 'brein' van die stelsel. Die ingeboude EEPROM -geheue sal gebruik word om die toestand van take te bespaar, selfs as die stelsel afgeskakel is. Om die bedrading makliker te maak, het ek die Nano op 'n skroefskerm gemonteer, maar u kan eerder soldeer of krimpverbindings met die GPIO -penne gebruik as u dit verkies.
  • Real -time Clock (RTC) module - word gebruik om die tydstempel op te teken waarop take uitgevoer is, en om te bepaal watter take agterstallig is deur die laaste tyd met die huidige tyd te vergelyk. Let daarop dat die eenheid wat ek ontvang het, ontwerp is om saam met 'n herlaaibare LiPo -battery (LIR2032) gebruik te word. Ek gebruik egter 'n nie-herlaaibare CR2032-battery, so ek moes 'n paar aanpassings aanbring om die laaikring uit te skakel (u wil nie 'n nie-herlaaibare battery herlaai nie, anders kan u 'n ontploffing ondervind).). Spesifiek het ek weerstande R4, R5 en R6 verwyder, en die diode gemerk D1. Ek het toe 'n soldeerbrug geskep om te kort oor waar R6 was. Hierdie veranderinge word in die onderstaande foto geïllustreer.
  • ISO14443 RFID-leser + een etiket per gebruiker- as 'n manier om die stelsel te "spel", het elkeen van my kinders hul eie unieke RFID-tag. Om 'n taak te kies en dan hul etiket oor die leser te vee, is die meganisme wat gebruik word om 'n taak as voltooi te merk
  • 16x2 LCD -skerm - word gebruik om die gebruikerskoppelvlak van die stelsel te voorsien. Deur 'n bord met 'n integrale PCF8574A -rugsak te gebruik, kan die bord via 'n I2C -koppelvlak aan die Arduino gekoppel word, wat die bedrading aansienlik vereenvoudig.
  • Rotary Encoder - sal die hoofknoppie wees wat gebruikers kan draai om verskillende beskikbare take te kies
  • Wago -verbindings - hierdie snap -sluit -verbindings is 'n maklike manier om komponente saam te dra of eenvoudige busse te skep vir verskeie modules wat elk 'n gemeenskaplike of 5V -toevoer benodig.

Stap 2: Bedrading

Bedrading
Bedrading

Die 16x2 LCD -skerm en DS1307 RTC gebruik albei 'n I2C -koppelvlak, wat gerieflik is, aangesien dit die bedrading baie eenvoudiger maak, en slegs 'n paar drade nodig is na die A4 (SDA) en A5 (SCL) penne van die Arduino

Die MFRC-522 RFID-leser gebruik 'n SPI-koppelvlak wat vaste hardeware-penne 11 (MOSI), 12 (MISO) en 13 (SCK) gebruik. Dit benodig ook 'n slawe -kies- en herstellyn, wat ek aan penne 10 en 9 onderskeidelik toegewys het

Die roterende enkodeerder benodig 'n paar penne. Vir optimale prestasie is dit die beste as hierdie penne eksterne onderbrekings kan hanteer, dus gebruik ek digitale penne 2 en 3. U kan ook op die encoder as 'n skakelaar klik, en ek het dit in pen 4 gekoppel. Alhoewel dit nie die geval is nie wat tans in die kode gebruik word, is dit moontlik nuttig om bykomende funksies by te voeg

Vir die gemak gebruik ek die verbindingsblokke van die WAGO 222-reeks. Dit is snap-sluit-verbindings wat 'n robuuste, maklike manier bied om tussen 2 en 8 drade aan mekaar te koppel, en is baie gerieflik vir Arduino-projekte wat verskeie modules benodig om 'n grond- of 5V-lyn te deel, of waar u verskeie toestelle op die dieselfde I2C- of SPI -bus, sê

Die diagram illustreer hoe alles aan mekaar gekoppel is.

Stap 3: Konstruksie

Ek het 'n baie basiese 3D -gedrukte kas gemaak om die elektronika te huisves. Ek plaas 'n paar magnete op die agterkant sodat die eenheid aan die kant van die yskas vasgemaak kan word, net soos die vorige gedrukte lys. Ek het ook die USB -aansluiting blootgestel, aangesien dit gebruik sou word as nuwe take by die stelsel gevoeg moes word, of om aan te meld en 'n stel data af te laai wat die voltooide take, ens.

Ek het nie die STL -lêers gestoor nadat ek dit gedruk het nie, maar daar is baie soortgelyke (en waarskynlik beter!) Gevalle beskikbaar op thingiverse.com. Alternatiewelik kan u 'n mooi houtkas bou, of 'n ou kartondoos of tupperwarehouer gebruik om die elektronika te huisves.

Stap 4: Kode

Kode
Kode

Die volledige kommentaar word hieronder afgelaai as 'n aflaai. Hier is 'n paar van die meer belangrike punte om op te let:

Ek het 'n pasgemaakte struktuur, 'taak', 'n data -eenheid wat al die eienskappe van 'n taak in 'n enkele entiteit saamvat, geskep. Take bestaan uit 'n naam, naamlik hoe dit op die LCD -skerm verskyn (en dus beperk tot 16 karakters), die frekwensie waarmee dit uitgevoer moet word, en wanneer en deur wie dit laas voltooi is

struktuur taak {

char taakName [16]; // Die kort, 'vriendelike' naam vir hierdie taak, soos dit op die skerm sal verskyn int repeatEachXDays; // Gereeldheid, in dae, waarmee hierdie taak herhaal word. 1 = Daagliks, 7 = Weekliks ens. Ongetekende lang lastCompletedTime; // Tydstempel waarop hierdie taak laas voltooi is int lastCompletedBy; // ID van die persoon wat laas hierdie taak voltooi het};

Die belangrikste datastruktuur word 'taskList' genoem, wat bloot 'n verskeidenheid afsonderlike take is. U kan hier die take definieer wat u wil initialiseer met 'n waarde van 0 vir die tydstip waarop dit laas voltooi is, en -1 vir die ID van die gebruiker wat dit laas uitgevoer het

taak taskList [numTasks] = {

In die konstante -afdeling bo -aan die kode is daar 'n enkele greepwaarde wat 'eepromSignature' genoem word. Hierdie waarde word gebruik om te bepaal of die data wat op EEPROM gestoor is, geldig is. As u die struktuur van die taaklyslys -item verander, deur take by te voeg of te verwyder, of bykomende velde by te voeg, moet u hierdie waarde verhoog. U kan daaraan dink as 'n basiese weergawe -nommeringstelsel vir die data

const byte eepromSignature = 1;

By die aanvang sal die program slegs probeer om data wat in EEPROM gestoor is, te laai as dit ooreenstem met die handtekening van die data wat in die kode gedefinieer is.

leemte herstelFromEEPROM () {

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

Die LCD -skerm en die RTC -module gebruik 'n I2C -koppelvlak om met die Arduino te kommunikeer. Dit vereis dat elke toestel 'n unieke I2C -adres het. Ek het 'n paar verskillende 16x2 skermborde probeer, en sommige gebruik die adres 0x27, terwyl ander oënskynlik identiese borde 0x3f gebruik. As u vind dat u skerm net 'n reeks vierkante toon en geen teks nie, probeer dan om die adreswaarde wat hier gedefinieer is, te verander:

LiquidCrystal_PCF8574 lcd (0x27);

As 'n RFID-merker opgespoor word, lees die kode die 4-byte identifiseerder en gebruik dit om die ooreenstemmende gebruiker uit die tabel met bekende gebruikers te soek. As die merker nie herken word nie, word die 4 byte -identifiseerder na die seriële monitorkonsole gestuur:

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 ("Onbekende RFID -kaart opgespoor:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": "")); Serial.print (RFID , HEX); } terugkeer -1; }

Om 'n merker aan 'n gebruiker toe te ken, moet u die vertoonde ID kopieer en die waarde van 4 byte in die gebruikersreeks bo-aan die kode plaas, langs die ooreenstemmende gebruiker:

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}},};

Stap 5: Gebruik

Gebruik
Gebruik
Gebruik
Gebruik

As u dit tot dusver bereik het, moet die gebruik van die stelsel redelik implisiet wees van die kode; gebruikers kan te eniger tyd aan die draaiknop draai om deur die lys beskikbare take te blaai. Agterstallige take word gemerk met 'n sterretjie ná hul titel.

Nadat hulle 'n taak gekies het om uit te voer, kan gebruikers dan hul eie unieke RFID -fob deur die leser skandeer om die taak as voltooi te merk. Hulle ID en die huidige tyd word aangeteken en gestoor in die EEPROM van die Arduino.

Om eers die korrekte RFID -etikette op te stel, moet u die skets uitvoer met die Arduino -seriële monitor daarby. Skandeer elke etiket en let op die hex-UID-waarde van 4 byte wat op die seriële monitor verskyn. Verander dan die gebruikerslys wat bo -aan die kode verklaar is om hierdie etiket -ID aan die toepaslike gebruiker toe te ken.

Ek het dit oorweeg om funksies by te voeg om 'n verslag uit te druk waarin alle take wat die gebruiker gedurende die afgelope week voltooi het, gedruk word om elke week die gepaste sakgeldbeloning toe te ken. Maar soos dit gebeur, blyk dit dat my kinders tevrede is met die nuwigheid om die stelsel te gebruik om die sakgeldbelonings heeltemal te vergeet! Dit is egter 'n redelik eenvoudige toevoeging, en word as 'n oefening vir die leser oorgelaat:)

Aanbeveel: