Satura rādītājs:

Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma: 5 soļi (ar attēliem)
Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma: 5 soļi (ar attēliem)

Video: Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma: 5 soļi (ar attēliem)

Video: Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma: 5 soļi (ar attēliem)
Video: Kvalitātes vadības sistēma. ISO9001 - ievads 2024, Jūlijs
Anonim
Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma
Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma
Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma
Uzdevumu pārvaldnieks - mājsaimniecības darbu vadības sistēma

Es gribēju mēģināt risināt reālu problēmu, ar kuru saskaramies mūsu (un, manuprāt, daudzu citu lasītāju) mājsaimniecībā, proti, kā sadalīt, motivēt un apbalvot savus bērnus par palīdzību mājas darbos.

Līdz šim ledusskapja malā esam pielīmējuši laminētu A4 papīra lapu. Tajā ir uzdrukāts uzdevumu tīkls ar saistītām kabatas naudas summām, ko varētu nopelnīt, lai pabeigtu šo uzdevumu. Ideja ir tāda, ka katru reizi, kad kāds no mūsu bērniem palīdz darbos, viņi šajā lodziņā atzīmē ķeksīti, un katras nedēļas beigās mēs saskaitām nopelnīto naudu, noslaukām dēli un sākam no jauna. Tomēr uzdevumu saraksts ir novecojis un grūti maināms, dažreiz mēs neatceramies katru nedēļu tīru dēli, un daži uzdevumi ir jāveic ar atšķirīgu biežumu-daži ideāli būtu jāveic katru dienu, turpretī citi var būt tikai reizi mēnesī. Tāpēc es sāku izveidot uz Arduino balstītu ierīci, lai atrisinātu šīs problēmas - mans nodoms bija izveidot kaut ko tādu, kas ļautu viegli pievienot/noņemt/atjaunināt uzdevumus, racionalizētu mehānismu, kā ierakstīt, kad uzdevums ir paveikts, un piešķirt kredītu atbilstoša persona un veids, kā izsekot dažādiem grafikiem un biežumam, ar kādu jāveic dažādi uzdevumi, un izcelt nokavētos uzdevumus. Un šī pamācība parādīs, kā iznāca iegūtā "uzdevumu pārvaldnieka" ierīce.

1. darbība. Aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra

Projektā tiek izmantoti vairāki labi izmantoti un dokumentēti aparatūras komponenti:

  • Arduino UNO/Nano - tas ir sistēmas "smadzenes". Iebūvētā EEPROM atmiņa tiks izmantota, lai saglabātu uzdevumu stāvokli pat tad, ja sistēma ir izslēgta. Elektroinstalācijas atvieglošanai es esmu uzstādījis Nano uz skrūvju vairoga, bet, ja vēlaties, varat pielodēt vai izmantot gofrētus savienojumus ar GPIO tapām.
  • Reālā laika pulksteņa (RTC) modulis - izmanto, lai reģistrētu laika zīmogu, kurā tika veikti uzdevumi, un, salīdzinot pēdējo laiku ar pašreizējo laiku, noteiktu, kuri uzdevumi ir nokavēti. Ņemiet vērā, ka saņemtā iekārta ir paredzēta lietošanai ar atkārtoti uzlādējamu LiPo akumulatoru (LIR2032). Tomēr es izmantoju neuzlādējamu CR2032 akumulatoru, tāpēc man bija jāveic dažas izmaiņas, lai atspējotu uzlādes ķēdi (jūs nevēlaties mēģināt uzlādēt neuzlādējamu akumulatoru, pretējā gadījumā jūs varat saskarties ar sprādzienu …).). Konkrēti, es noņēmu rezistorus R4, R5 un R6, un diode apzīmēta ar D1. Pēc tam es izveidoju lodēšanas tiltu, kas bija īss pāri vietai, kur bija R6. Šīs izmaiņas ir parādītas zemāk esošajā fotoattēlā.
  • ISO14443 RFID lasītājs + viens tags katram lietotājam- kā veids, kā "spēlēt" sistēmu, katram no maniem bērniem ir savs unikāls RFID tags. Lai atzīmētu uzdevumu kā pabeigtu, tiks izvēlēts uzdevums un pēc tam pārvilkts tā tags pāri lasītājam
  • 16x2 LCD displejs - tiek izmantots, lai nodrošinātu sistēmas lietotāja interfeisu. Izmantojot plati, kurai ir integrēta PCF8574A mugursoma, to var savienot ar I2C saskarni ar Arduino, kas ievērojami vienkāršo elektroinstalāciju.
  • Rotējošais kodētājs - būs galvenā vadības poga, kuru lietotāji pagriezīs, lai atlasītu dažādus pieejamos uzdevumus
  • Wago savienotāji - šie aizvērtie savienotāji ir ērts veids, kā savienot komponentus kopā vai izveidot vienkāršas kopnes vairākiem moduļiem, kuriem katram ir nepieciešama kopēja zeme vai 5 V barošana.

2. solis: elektroinstalācija

Elektroinstalācija
Elektroinstalācija

Gan 16x2 LCD displejā, gan DS1307 RTC tiek izmantots I2C interfeiss, kas ir ērti, jo padara elektroinstalāciju daudz vienkāršāku, un ir nepieciešami tikai pāris vadi, kas iet uz Arduino A4 (SDA) un A5 (SCL) tapām

RFID lasītājs MFRC-522 izmanto SPI saskarni, kurā tiek izmantotas fiksētas aparatūras tapas 11 (MOSI), 12 (MISO) un 13 (SCK). Tam nepieciešama arī vergu atlases un atiestatīšanas līnija, kuru esmu piešķīris attiecīgi 10. un 9. tapai

Rotējošajam kodētājam nepieciešams pāris tapas. Lai sasniegtu optimālu veiktspēju, vislabāk ir, ja šīs tapas var tikt galā ar ārējiem pārtraukumiem, tāpēc es izmantoju 2. un 3. ciparu tapas. Varat arī noklikšķināt uz kodētāja kā slēdzi, un es to esmu pievienojis 4. tapai. Lai gan tas tā nav kas pašlaik tiek izmantots kodā, jums varētu noderēt papildu funkciju pievienošana

Ērtības labad es izmantoju WAGO 222 sērijas savienotāju blokus. Tie ir ātri aizverami savienotāji, kas nodrošina spēcīgu un vienkāršu veidu, kā savienot jebkur starp 2 līdz 8 vadiem, un ir ļoti ērti Arduino projektiem, kuriem nepieciešami vairāki moduļi, lai koplietotu zemējumu vai 5 V līniju, vai arī, ja jums ir vairākas ierīces. tā pati I2C vai SPI kopne, teiksim

Diagramma parāda, kā viss ir savienots kopā.

3. solis: būvniecība

Es izveidoju ļoti vienkāršu 3D drukātu korpusu, lai ievietotu elektroniku. Es novietoju dažus magnētus aizmugurē, lai ierīci varētu nostiprināt ledusskapja pusē, tāpat kā iepriekšējā drukātajā sarakstā. Es arī atstāju atvērtu USB ligzdu, jo tas tiktu izmantots, ja sistēmai būtu jāpievieno jauni uzdevumi vai lai pieteiktos un lejupielādētu datu kopu, kurā parādīti pabeigti uzdevumi utt.

Pēc drukāšanas es nesaglabāju STL failus, taču vietnē thingiverse.com ir pieejams daudz līdzīgu (un, iespējams, labāku!) Lietu. Alternatīvi, jūs varat izveidot jauku koka kasti vai vienkārši izmantot vecu kartona kastīti vai trauku trauku, lai ievietotu elektroniku.

4. solis: kods

Kods
Kods

Pilnībā komentētais kods ir pievienots kā lejupielāde zemāk. Šeit ir daži no svarīgākajiem punktiem, kas jāņem vērā:

Esmu izveidojis pielāgotu struktūru "uzdevums", kas ir datu vienība, kas apvieno visas uzdevuma īpašības vienā entītijā. Uzdevumi sastāv no nosaukuma, kā tie tiks parādīti LCD displejā (līdz ar to tikai 16 rakstzīmes), to izpildes biežumu un laiku, kad tie tika pabeigti

strukturēts uzdevums {

char uzdevumsNosaukums [16]; // Īss, "draudzīgs" šī uzdevuma nosaukums, kas parādīsies displejā int RepeEEXXDays; // Regularitāte, dienās, ar kuru šis uzdevums tiek atkārtots. 1 = katru dienu, 7 = katru nedēļu utt. Neparakstīts ilgi lastCompletedTime; // Laika zīmogs, kurā šis uzdevums pēdējo reizi tika izpildīts int lastCompletedBy; // tās personas ID, kura pēdējo reizi pabeidza šo uzdevumu};

Galveno datu struktūru sauc par "taskList", kas ir vienkārši atsevišķu uzdevumu kopums. Šeit varat definēt visus uzdevumus, kurus vēlaties inicializēt ar vērtību 0, kad tie pēdējo reizi tika pabeigti, un -1 -tā lietotāja ID, kurš tos pēdējo reizi izpildīja

uzdevums taskList [numTasks] = {

Konstantu sadaļā koda augšdaļā ir viena baita vērtība ar nosaukumu "eepromSignature". Šo vērtību izmanto, lai noteiktu, vai EEPROM saglabātie dati ir derīgi. Ja maināt elementa taskList struktūru, pievienojot vai noņemot uzdevumus vai pievienojot papildu laukus, piemēram, jums vajadzētu palielināt šo vērtību. To var uzskatīt par datu versiju numerācijas pamata sistēmu

const baits eepromSignature = 1;

Palaišanas laikā programma mēģinās ielādēt EEPROM saglabātos datus tikai tad, ja tie atbilst kodā definēto datu parakstam.

void restoreFromEEPROM () {

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

LCD displejs un RTC modulis izmanto I2C saskarni, lai sazinātos ar Arduino. Tas prasa, lai katrai ierīcei būtu unikāla I2C adrese. Esmu izmēģinājis pāris dažādus 16x2 displeja dēļus, un daži, šķiet, izmanto adresi 0x27, bet citi šķietami identiski dēļi izmanto 0x3f. Ja jūsu displejā ir redzama tikai kvadrātu sērija un nav teksta, mēģiniet mainīt šeit norādīto adreses vērtību:

LiquidCrystal_PCF8574 lcd (0x27);

Kad tiek atklāts RFID tags, kods nolasa 4 baitu identifikatoru un izmanto to, lai no zināmo lietotāju tabulas meklētu atbilstošo lietotāju. Ja tags netiek atpazīts, 4 baitu identifikators tiks nosūtīts uz seriālā monitora konsoli:

int GetUserFromRFIDTag (baits RFID ) {

for (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {ja (memcmp (userList .rfidUID, RFID, userList size .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Konstatēta nezināma RFID karte:")); par (baits i = 0; i <4; i ++) {Sērijas nospiedums (RFID <0x10? "0": ""); Sērijas nospiedums (RFID , HEX); } atgriešanās -1; }

Lai lietotājam piešķirtu tagu, jums vajadzētu nokopēt parādīto ID un ievietot 4 baitu vērtību lietotāju masīvā koda augšdaļā blakus attiecīgajam lietotājam:

const user userList [numUsers] = {{1, "Džinnija", {0x00, 0x00, 0x00, 0x00}}, {2, "Harijs", {0x12, 0x34, 0x56, 0x78}}, {3, "Rons", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermione", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

5. darbība: lietošana

Lietošana
Lietošana
Lietošana
Lietošana

Ja esat nonācis tik tālu, sistēmas lietojumam jābūt diezgan netiešam no koda; jebkurā laikā lietotāji var pagriezt grozāmo pogu, lai ritinātu pieejamo uzdevumu sarakstu. Kavētie darbi pēc nosaukuma ir atzīmēti ar zvaigznīti.

Izvēloties veicamos darbus, lietotāji var lasītājā skenēt savu unikālo RFID fob, lai atzīmētu uzdevumu kā pabeigtu. Viņu ID un pašreizējais laiks tiks ierakstīts un saglabāts Arduino EEPROM.

Lai vispirms iestatītu pareizos RFID tagus, jums jāizpilda skice ar pievienotu Arduino sērijas monitoru. Skenējiet katru tagu un ņemiet vērā sērijveida monitorā parādīto 4 baitu hex hex UID vērtību. Pēc tam mainiet koda augšdaļā deklarēto lietotāju sarakstu, lai piešķirtu šo taga ID atbilstošajam lietotājam.

Es apsvēru iespēju pievienot funkcionalitāti, lai izdrukātu pārskatu, kurā parādīti visi pēdējās nedēļas laikā paveiktie uzdevumi, lai katru nedēļu piešķirtu atbilstošu atlīdzību par kabatas naudu. Tomēr, kā tas notiek, šķiet, ka mani bērni ir apmierināti ar sistēmas izmantošanas novitāti, lai pilnībā aizmirstu par atlīdzību par kabatas naudu! Tomēr tas būtu diezgan vienkāršs papildinājums, un tas ir atstāts kā vingrinājums lasītājam:)

Ieteicams: