Turinys:

Užduočių tvarkyklė - namų ruošos darbų valdymo sistema: 5 žingsniai (su paveikslėliais)
Užduočių tvarkyklė - namų ruošos darbų valdymo sistema: 5 žingsniai (su paveikslėliais)

Video: Užduočių tvarkyklė - namų ruošos darbų valdymo sistema: 5 žingsniai (su paveikslėliais)

Video: Užduočių tvarkyklė - namų ruošos darbų valdymo sistema: 5 žingsniai (su paveikslėliais)
Video: «Феномен исцеления» — Документальный фильм — Часть 1 2024, Liepa
Anonim
Užduočių tvarkyklė - namų ūkio darbų valdymo sistema
Užduočių tvarkyklė - namų ūkio darbų valdymo sistema
Užduočių tvarkyklė - namų ūkio darbų valdymo sistema
Užduočių tvarkyklė - namų ūkio darbų valdymo sistema

Norėjau pabandyti išspręsti realią problemą, su kuria susidūrėme mūsų (ir, manau, daugelio kitų skaitytojų) buityje, tai yra, kaip skirti, motyvuoti ir apdovanoti savo vaikus už pagalbą atliekant namų ruošos darbus.

Iki šiol prie šaldytuvo šono laikėme laminuotą A4 formato popieriaus lapą. Jame yra atspausdintas užduočių tinklas ir susijusios kišenpinigių sumos, kurias būtų galima uždirbti už šios užduoties atlikimą. Idėja yra ta, kad kiekvieną kartą, kai vienas iš mūsų vaikų padeda atlikti tam tikrus darbus, jie pažymi tą langelį ir kiekvienos savaitės pabaigoje susumuojame uždirbtus pinigus, nušluostome lentą ir pradedame iš naujo. Tačiau užduočių sąrašas yra pasenęs ir jį sunku pakeisti, kartais nepamirštame kiekvieną savaitę nuvalyti lentos, o kai kurias užduotis reikia atlikti skirtingu dažnumu-kai kurios būtų idealiai atliekamos kasdien, o kiti gali būti tik kartą per mėnesį. Taigi aš nusprendžiau sukurti „Arduino“pagrįstą įrenginį, kad išspręstų šias problemas - norėjau sukurti tai, kas leistų lengvai pridėti/pašalinti/atnaujinti užduotis, supaprastintą mechanizmą, kaip įrašyti, kai užduotis buvo atlikta, ir paskirstyti tinkamas asmuo ir būdas sekti skirtingus tvarkaraščius ir dažnumą, kuriais reikia atlikti skirtingas užduotis, ir pabrėžti pavėluotas užduotis. Ir ši pamoka parodys, kaip atsirado „Task Manager“įrenginys.

1 žingsnis: Aparatūra

Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga

Projekte naudojami keli gerai naudojami ir dokumentuoti aparatūros komponentai:

  • „Arduino UNO/Nano“- tai sistemos „smegenys“. Borto EEPROM atmintis bus naudojama išsaugoti užduočių būseną, net kai sistema yra išjungta. Kad būtų lengviau prijungti laidus, aš sumontavau „Nano“ant varžtų skydo, tačiau, jei norite, galite lituoti arba naudoti gofruotas jungtis prie GPIO kaiščių.
  • „Real -Time Clock“(RTC) modulis - naudojamas įrašyti laiko žymę, kuria buvo atliktos užduotys, ir, palyginus paskutinį laiką su dabartiniu laiku, nustatyti, kurios užduotys vėluoja. Atkreipkite dėmesį, kad gautas įrenginys buvo skirtas naudoti su įkraunama LiPo baterija (LIR2032). Tačiau aš naudoju neįkraunamą CR2032 bateriją, todėl turėjau atlikti keletą pakeitimų, kad išjungčiau įkrovimo grandinę (nenorite bandyti įkrauti neįkraunamos baterijos, kitaip galite sprogti …).). Tiksliau, aš pašalinau rezistorius R4, R5 ir R6, o diodas pažymėtas D1. Tada aš sukūriau lydmetalį, kuris buvo trumpas per R6. Šie pakeitimai iliustruoti žemiau esančioje nuotraukoje.
  • ISO14443 RFID skaitytuvas + viena etiketė kiekvienam vartotojui- kaip sistemos „žaidimo“būdas, kiekvienas mano vaikas turi savo unikalią RFID žymę. Pasirinkus užduotį ir tada perbraukus žymę per skaitytuvą, bus naudojamas būdas pažymėti užduotį kaip atliktą
  • 16x2 LCD ekranas - naudojamas sistemos vartotojo sąsajai teikti. Naudojant plokštę su integruota kuprine PCF8574A, plokštę galima prijungti per „I2C“sąsają prie „Arduino“, o tai žymiai supaprastina laidus.
  • Rotacinis kodavimo įrenginys - bus pagrindinė valdymo rankenėlė, kurią vartotojai pasuks, kad pasirinktų įvairias galimas užduotis
  • „Wago“jungtys - šios uždaromos jungtys yra patogus būdas sujungti komponentus arba sukurti paprastas kelių magistralių magistrales, kurioms reikalingas bendras įžeminimas arba 5 V maitinimas.

2 žingsnis: laidų prijungimas

Laidai
Laidai

16x2 skystųjų kristalų ekranas ir DS1307 RTC naudoja I2C sąsają, kuri yra patogi, nes tai žymiai supaprastina laidus, todėl reikia tik poros laidų, einančių prie „Arduino“A4 (SDA) ir A5 (SCL) kaiščių

RFID skaitytuvas MFRC-522 naudoja SPI sąsają, kurioje naudojami fiksuoti aparatūros kaiščiai 11 (MOSI), 12 (MISO) ir 13 (SCK). Tam taip pat reikalinga vergo pasirinkimo ir atstatymo linija, kurią priskyriau atitinkamai 10 ir 9 kaiščiams

Sukamajam kodavimo įrenginiui reikia poros kaiščių. Kad būtų užtikrintas optimalus našumas, geriausia, jei šie kaiščiai gali susidoroti su išoriniais pertraukimais, todėl naudoju 2 ir 3 skaitmeninius kaiščius. Taip pat galite spustelėti koduotuvą kaip jungiklį, o aš jį prijungiau prie 4 kaiščio. šiuo metu naudojamas kode, jums gali būti naudinga pridėti papildomų funkcijų

Patogumui naudoju WAGO 222 serijos jungčių blokus. Tai snap-shut jungtys, kurios suteikia tvirtą ir paprastą būdą jungti bet kur nuo 2 iki 8 laidų ir yra labai patogios „Arduino“projektams, kuriems reikia kelių modulių bendrai naudoti antžeminę arba 5 V liniją, arba kai turite kelis įrenginius. tarkim, tą patį I2C arba SPI magistralę

Diagrama iliustruoja, kaip viskas sujungta.

3 žingsnis: statyba

Aš sukūriau labai paprastą 3D spausdintą dėklą, skirtą elektronikai laikyti. Aš įdėjau keletą magnetų ant nugaros, kad įrenginys galėtų būti pritvirtintas prie šaldytuvo šono, kaip ir ankstesnis spausdintas sąrašas. Aš taip pat palikau atvirą USB lizdą, nes tai būtų naudojama, jei prie sistemos reikia pridėti naujų užduočių arba prisijungti ir atsisiųsti duomenų rinkinį, rodantį atliktas užduotis ir pan.

Po spausdinimo neišsaugojau STL failų, tačiau yra daug panašių (ir, ko gero, geresnių!) Dėkliukų, esančių thingiverse.com. Arba galite pastatyti gražią medinę dėžę arba tiesiog naudoti seną kartoninę dėžę arba „tupperware“konteinerį elektronikai laikyti.

4 žingsnis: kodas

Kodas
Kodas

Visiškai komentuojamas kodas yra pridėtas kaip atsisiuntimas žemiau. Štai keletas svarbesnių punktų, į kuriuos reikia atkreipti dėmesį:

Sukūriau pasirinktinę struktūrą „užduotis“, kuri yra duomenų vienetas, apimantis visas užduoties savybes viename objekte. Užduotys susideda iš pavadinimo, kuris bus rodomas LCD ekrane (taigi tik 16 simbolių), dažnumo, kuriuo jas reikia atlikti, ir kada ir kas jas atliko paskutinį kartą

struktūros užduotis {

char taskName [16]; // Trumpas, „draugiškas“šios užduoties pavadinimas, kuris bus rodomas ekrane int RepeEachXDays; // Reguliarumas dienomis, su kuriomis ši užduotis kartojama. 1 = kasdien, 7 = kas savaitę ir tt unsigned long lastCompletedTime; // Laiko žyma, kada ši užduotis paskutinį kartą buvo atlikta int lastCompletedBy; // Paskutinį kartą šią užduotį atlikusio asmens ID};

Pagrindinė duomenų struktūra vadinama „taskList“, kuri yra tiesiog atskirų užduočių masyvas. Čia galite apibrėžti bet kokias norimas užduotis, kurios inicijuojamos su 0 reikšme tuo metu, kai jos paskutinį kartą buvo atliktos, ir -1 -paskutinio jas atlikusio vartotojo ID

užduotis taskList [numTasks] = {

Kodo viršuje esančioje konstantų skiltyje yra vieno baito vertė, vadinama „eepromSignature“. Ši vertė naudojama norint nustatyti, ar EEPROM saugomi duomenys yra teisingi. Jei pakeisite „taskList“elemento struktūrą, pridėdami arba pašalindami užduotis arba pridėdami papildomų laukų, tarkime, turėtumėte padidinti šią vertę. Galite tai galvoti kaip pagrindinę duomenų versijų numeravimo sistemą

const baitas eepromSignature = 1;

Paleidus programą, programa bandys įkelti EEPROM saugomus duomenis tik tuo atveju, jei jie atitinka kode nurodytų duomenų parašą.

void restoreFromEEPROM () {

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

LCD ekranas ir RTC modulis naudoja I2C sąsają, kad galėtų bendrauti su „Arduino“. Tam reikia, kad kiekvienas įrenginys turėtų unikalų I2C adresą. Aš išbandžiau keletą skirtingų 16x2 ekranų plokščių, o kai kurios, atrodo, naudoja adresą 0x27, o kitos iš pažiūros identiškos plokštės naudoja 0x3f. Jei pastebite, kad jūsų ekrane rodoma tik kvadratų serija ir nėra teksto, pabandykite pakeisti čia nurodytą kodo adresą:

LiquidCrystal_PCF8574 lcd (0x27);

Kai aptinkama RFID žyma, kodas nuskaito 4 baitų identifikatorių ir naudoja jį bandydamas ieškoti žinomo vartotojo lentelės atitinkamo vartotojo. Jei žyma neatpažįstama, 4 baitų identifikatorius bus išsiųstas į serijinio monitoriaus konsolę:

int GetUserFromRFIDTag (baitas RFID ) {

for (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {if (memcmp (userList .rfidUID, RFID, userList dydis .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Aptikta nežinoma RFID kortelė:")); for (baitas i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serijinis atspaudas (RFID , HEX); } grįžti -1; }

Norėdami priskirti vartotojui žymą, turite nukopijuoti rodomą ID ir įterpti 4 baitų reikšmę į vartotojų masyvą, esantį kodo viršuje, šalia atitinkamo vartotojo:

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

5 žingsnis: naudojimas

Naudojimas
Naudojimas
Naudojimas
Naudojimas

Jei tai padarėte taip toli, sistemos naudojimas turėtų būti gana numanomas iš kodo; bet kuriuo metu vartotojai gali pasukti sukamąją rankenėlę, kad peržiūrėtų galimų užduočių sąrašą. Uždelsti darbai po pavadinimo pažymėti žvaigždute.

Pasirinkę atlikti darbus, vartotojai gali nuskaityti savo unikalų RFID pultelį per skaitytuvą, kad pažymėtų užduotį kaip atliktą. Jų ID ir dabartinis laikas bus įrašyti ir išsaugoti „Arduino“EEPROM.

Norėdami pirmiausia nustatyti teisingas RFID žymes, turėtumėte paleisti eskizą su prijungtu „Arduino“serijiniu monitoriumi. Nuskaitykite kiekvieną žymą ir atkreipkite dėmesį į serijiniame monitoriuje rodomą 4 baitų šešiakampę UID reikšmę. Tada pakeiskite kodo viršuje deklaruotą naudotojų sąrašą, kad priskirtumėte šį žymos ID atitinkamam vartotojui.

Svarsčiau galimybę pridėti funkciją, kad būtų galima atspausdinti ataskaitą, kurioje būtų nurodytos visos naudotojo atliktos užduotys per paskutinę savaitę, kad kiekvieną savaitę būtų paskirstytas atitinkamas atlygis už kišenpinigius. Tačiau, kaip atsitinka, mano vaikai, atrodo, yra patenkinti sistemos naujoviškumu ir visiškai pamiršta apie kišenpinigių atlygį! Tačiau tai būtų gana paprastas priedas ir paliktas skaitytojui kaip pratimas:)

Rekomenduojamas: