Sisukord:

Tegumihaldur - majapidamistööde juhtimissüsteem: 5 sammu (piltidega)
Tegumihaldur - majapidamistööde juhtimissüsteem: 5 sammu (piltidega)

Video: Tegumihaldur - majapidamistööde juhtimissüsteem: 5 sammu (piltidega)

Video: Tegumihaldur - majapidamistööde juhtimissüsteem: 5 sammu (piltidega)
Video: Диспетчер задач движения - пусть ИИ спланирует наш день для вас! 2024, November
Anonim
Tegumihaldur - majapidamistööde juhtimissüsteem
Tegumihaldur - majapidamistööde juhtimissüsteem
Tegumihaldur - majapidamistööde juhtimissüsteem
Tegumihaldur - majapidamistööde juhtimissüsteem

Tahtsin proovida tegeleda meie majapidamises (ja ma kujutan ette, et paljude teiste lugejatega) esineva tõelise probleemiga, milleks on jaotada, motiveerida ja premeerida oma lapsi majapidamistöödes abistamise eest.

Siiani oleme hoidnud lamineeritud A4 -formaadis paberilehte külmiku külje küljes. Sellele on trükitud ülesannete võrk koos sellega seotud taskurahaga, mida saaks selle ülesande täitmiseks teenida. Idee on selles, et iga kord, kui üks meie lastest abivajajatega abiks on, saavad nad sellesse kasti linnukese ja iga nädala lõpus liidame teenitud raha kokku, pühime tahvli ja alustame uuesti. Ülesannete loend on aga aegunud ja seda on raske muuta, mõnikord ei tule me meelde, et tahvlit iga nädal puhtaks pühkida, ning mõned ülesanded tuleb täita erineva sagedusega-mõnda ideaalis tuleks teha iga päev, samas kui teised võivad olla ainult üks kord kuus. Niisiis, hakkasin nende probleemide lahendamiseks looma Arduino -põhise seadme - minu eesmärk oli luua midagi, mis võimaldaks hõlpsalt ülesandeid lisada/eemaldada/värskendada, sujuvamaks mehhanismiks ülesande täitmise salvestamiseks ja krediidi jagamiseks. sobivale isikule ja viis, kuidas jälgida erinevaid ajakavasid ja sagedust, millega tuleb erinevaid ülesandeid täita, ning tuua esile hilinenud ülesandeid. Ja see juhendab, kuidas tulemuseks olev "Task Manager" seade välja tuli.

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara

Projekt kasutab mitut hästi kasutatud ja dokumenteeritud riistvarakomponenti:

  • Arduino UNO/Nano - see on süsteemi "aju". Sisseehitatud EEPROM -mälu kasutatakse ülesannete oleku salvestamiseks isegi siis, kui süsteem on välja lülitatud. Juhtmestiku hõlbustamiseks olen paigaldanud Nano kruvikilbile, kuid soovi korral võite GPIO tihvtide külge jootma või kasutama pressitud ühendusi.
  • Reaalaja kella (RTC) moodul - kasutatakse ülesannete täitmise ajatempli salvestamiseks ja viimase aja ja praeguse aja võrdlemisel, millised ülesanded on hilinenud. Pange tähele, et minu saadud seade oli mõeldud kasutamiseks koos laetava LiPo akuga (LIR2032). Kuid ma kasutan mittelaetavat CR2032 akut, seega pidin laadimisahela väljalülitamiseks tegema mõned muudatused (te ei soovi proovida mittelaetavat akut laadida, vastasel juhul võite plahvatada).). Täpsemalt eemaldasin takistid R4, R5 ja R6 ning dioodi tähistusega D1. Seejärel lõin jootmissilla lühikeseks, kus R6 oli olnud. Neid muudatusi illustreerib allolev foto.
  • ISO14443 RFID-lugeja + üks silt kasutaja kohta- süsteemi "mängimise" viisina on igal mu lapsel oma unikaalne RFID-silt. Ülesande lõpuleviimiseks kasutatakse mehhanismiks ülesande valimist ja seejärel sildi libistamist üle lugeja
  • 16x2 LCD -ekraan - kasutatakse süsteemi kasutajaliidese pakkumiseks. Kasutades integreeritud PCF8574A seljakotiga tahvlit, saab tahvli I2C liidese kaudu ühendada Arduinoga, mis lihtsustab oluliselt juhtmestikku.
  • Pöördkooder - see on peamine juhtnupp, mida kasutajad erinevate saadaolevate ülesannete valimiseks keeravad
  • Wago -pistikud - need sulguvad pistikud on mugav viis komponentide ühendamiseks või lihtsate siinide loomiseks mitme mooduli jaoks, millest igaüks vajab ühist maandust või 5 V toiteallikat.

2. samm: juhtmestik

Juhtmestik
Juhtmestik

16x2 LCD -ekraan ja DS1307 RTC kasutavad mõlemad I2C -liidest, mis on mugav, kuna muudab juhtmestiku palju lihtsamaks, nõudes vaid paari juhtmeid, mis lähevad Arduino A4 (SDA) ja A5 (SCL) kontaktidele

RFID-lugeja MFRC-522 kasutab SPI-liidest, mis kasutab fikseeritud riistvarapinge 11 (MOSI), 12 (MISO) ja 13 (SCK). See nõuab ka alamvaliku ja lähtestamise rida, mille olen määranud vastavalt tihvtidele 10 ja 9

Pöörleva kodeerija jaoks on vaja paar tihvti. Optimaalse jõudluse tagamiseks on kõige parem, kui need tihvtid saavad hakkama väliste katkestustega, seega kasutan digitaalseid kontakte 2 ja 3. Samuti võite lülitina klõpsata kodeerijale ja ühendasin selle tihvtiga 4. Kuigi see pole nii praegu koodis kasutatud, võib see teile kasulikuks olla lisafunktsioonide lisamiseks

Mugavuse huvides kasutan WAGO 222-seeria pistikuplokke. Need on kiiresti sulguvad pistikud, mis pakuvad tugevat ja lihtsat võimalust ühendada kõikjal 2 kuni 8 juhtme vahel ning on väga mugavad Arduino projektide jaoks, mille jaoks on vaja mitut moodulit maapealse või 5 V liini jagamiseks või kui teil on mitu seadet. ütleme sama I2C või SPI siin

Diagramm näitab, kuidas kõik on ühendatud.

3. samm: ehitamine

Ma lõin elektroonika jaoks väga lihtsa 3D -trükitud ümbrise. Asetasin tagaküljele mõned magnetid, et seade saaks külmiku küljele kinnitada, nagu ka eelmine trükitud loend. Samuti jätsin USB -pistikupesa avatuks, kuna seda kasutatakse juhul, kui süsteemile on vaja lisada uusi ülesandeid või logida sisse ja alla laadida andmekogum, mis näitab lõpetatud ülesandeid jne.

Ma ei salvestanud pärast printimist STL -faile, kuid saidil thingiverse.com on saadaval palju sarnaseid (ja ilmselt paremaid!) Ümbriseid. Teise võimalusena võite ehitada kena puidust kasti või kasutada elektroonika paigutamiseks lihtsalt vana pappkasti või tupperware konteinerit.

4. samm: kood

Kood
Kood

Täielikult kommenteeritud kood on allalaadimiseks lisatud allpool. Siin on mõned olulisemad punktid, mida tuleb tähele panna:

Olen loonud kohandatud struktuuri "ülesanne", mis on andmeühik, mis sisaldab kõiki ülesande omadusi ühte olemisse. Ülesanded koosnevad nimest, mille järgi need LCD -ekraanil kuvatakse (ja seega ainult 16 tähemärki), nende täitmise sagedusest ning sellest, millal ja kelle poolt need viimati täideti

struktuuri ülesanne {

char taskName [16]; // Selle ülesande lühike "sõbralik" nimi, mis kuvatakse ekraanil int RepeEEXXDays; // Regulaarsus, päevades, millega seda ülesannet korratakse. 1 = iga päev, 7 = iganädalane jne allkirjastamata kaua lastCompletedTime; // Ajatempel, millal see ülesanne viimati täideti int lastCompletedBy; // selle ülesande viimati täitnud isiku ID};

Peamist andmestruktuuri nimetatakse "taskList", mis on lihtsalt hulk erinevaid ülesandeid. Siin saate määratleda soovitud ülesanded, mis initsialiseeritakse väärtusega 0 selle aja kohta, millal nad viimati lõpetasid, ja -1 selle kasutaja ID jaoks, kes neid viimati täitis

ülesanne taskList [numTasks] = {

Koodi ülaosas olevas konstantide jaotises on ühe baidi väärtus nimega "eepromSignature". Seda väärtust kasutatakse selleks, et teha kindlaks, kas EEPROM -i salvestatud andmed on kehtivad. Kui muudate elemendi taskList struktuuri ülesannete lisamise või eemaldamise või täiendavate väljade lisamisega, peaksite seda väärtust suurendama. Võite seda mõelda kui andmete versiooni nummerdamise põhisüsteemi

const bait eepromSignature = 1;

Käivitamisel proovib programm laadida EEPROM -i salvestatud andmeid ainult siis, kui see vastab koodis määratletud andmete allkirjale.

void restoreFromEEPROM () {

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

LCD -ekraan ja RTC -moodul kasutavad Arduinoga suhtlemiseks I2C -liidest. See eeldab, et igal seadmel peab olema ainulaadne I2C -aadress. Olen proovinud paari erinevat 16x2 ekraaniplaati ja mõned näivad kasutavat aadressi 0x27, teised näiliselt identsed tahvlid aga 0x3f. Kui leiate, et teie ekraanil on lihtsalt ruutude seeria ja teksti pole, proovige muuta koodis määratud aadressi väärtust siin:

LiquidCrystal_PCF8574 lcd (0x27);

RFID-märgendi tuvastamisel loeb kood 4-baidise identifikaatori ja kasutab seda teadaolevate kasutajate tabelist vastava kasutaja otsimiseks. Kui märgendit ei tuvastata, saadetakse 4 -baidine identifikaator jadamonitori konsoolile:

int GetUserFromRFIDTag (bait RFID ) {

jaoks (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {if (memcmp (kasutajaloend .rfidUID, RFID, kasutajaloendi suurus .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Tundmatu RFID -kaart tuvastatud:")); for (bait i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Jadatrükk (RFID , HEX); } tagasitulek -1; }

Kasutajale märgendi määramiseks kopeerige kuvatav ID ja sisestage 4-baidine väärtus kasutajate massiivi koodi ülaosas vastava kasutaja kõrval:

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. samm: kasutamine

Kasutamine
Kasutamine
Kasutamine
Kasutamine

Kui olete nii kaugele jõudnud, peaks süsteemi kasutamine olema koodist üsna kaudne; saadaval olevate ülesannete loendi sirvimiseks saavad kasutajad igal ajal pöördnuppu pöörata. Tähtaja ületanud tööd on pealkirja järel tähistatud tärniga.

Olles valinud tööülesanded, saavad kasutajad skaneerida oma unikaalse RFID -fobi lugeja kaudu, et märkida ülesanne lõpetatuks. Nende ID ja praegune aeg salvestatakse ja salvestatakse Arduino EEPROM -i.

Esmalt õigete RFID -siltide seadistamiseks peaksite visandi käivitama, kui Arduino jadamonitor on küljes. Skaneerige iga silt ja pange tähele jadamonitoril kuvatavat 4-baidist hex-UID väärtust. Seejärel muutke koodi ülaosas deklareeritud kasutajate loendit, et määrata see märgendi ID sobivale kasutajale.

Kaalusin funktsionaalsuse lisamist, et printida aruanne, mis näitab kõiki viimase nädala jooksul täidetud ülesandeid kasutaja poolt, et eraldada igal nädalal sobiv taskuraha. Kuid nagu juhtub, tundub, et mu lapsed on rahul süsteemi uudsusega, et unustasid taskuraha hüved täielikult! See oleks aga üsna lihtne lisand ja jääb lugejale harjutuseks:)

Soovitan: