Innholdsfortegnelse:

Oppgavebehandling - et husholdningsledelsessystem: 5 trinn (med bilder)
Oppgavebehandling - et husholdningsledelsessystem: 5 trinn (med bilder)

Video: Oppgavebehandling - et husholdningsledelsessystem: 5 trinn (med bilder)

Video: Oppgavebehandling - et husholdningsledelsessystem: 5 trinn (med bilder)
Video: 🟡 POCO X5 PRO - MEST DETALJERET GENNEMGANG og TEST 2024, November
Anonim
Oppgavebehandling - et husholdningsledelsessystem
Oppgavebehandling - et husholdningsledelsessystem
Oppgavebehandling - et husholdningsledelsessystem
Oppgavebehandling - et husholdningsledelsessystem

Jeg ønsket å prøve å løse et reelt problem i husstanden vår (og jeg forestiller meg mange andre leseres), som er hvordan jeg skal fordele, motivere og belønne barna mine for å hjelpe til med husarbeid.

Hittil har vi holdt et laminert ark med A4 -papir fast på siden av kjøleskapet. Den har et rutenett med oppgaver trykt på den, med tilhørende mengder lommepenger som kan tjenes for å fullføre denne oppgaven. Tanken er at hver gang et av barna våre hjelper til med et ork, får de en hake i boksen, og på slutten av hver uke legger vi til de opptjente pengene, tørker brettet og starter på nytt. Listen over oppgaver er imidlertid utdatert og vanskelig å endre, noen ganger husker vi ikke å tørke tavlen ren hver uke, og noen oppgaver må utføres med forskjellige frekvenser-noen ville helst vært gjort daglig, mens andre kan bare være en gang i måneden. Så jeg begynte med å lage en Arduino -basert enhet for å løse disse problemene - min intensjon var å lage noe som muliggjorde enkelt tillegg/fjerning/oppdatering av oppgaver, en strømlinjeformet mekanisme for registrering av når en oppgave var utført og tildele kreditt til riktig person, og en måte å holde oversikt over forskjellige tidsplaner og frekvens som forskjellige oppgaver må utføres på, og markere forfalte oppgaver. Og denne instruksen vil vise hvordan den resulterende "Oppgavebehandling" -enheten kom ut.

Trinn 1: Maskinvare

Maskinvare
Maskinvare
Maskinvare
Maskinvare

Prosjektet bruker flere godt brukte og dokumenterte maskinvarekomponenter:

  • Arduino UNO/Nano - dette er "hjernen" til systemet. Det innebygde EEPROM -minnet vil bli brukt til å lagre tilstanden til oppgavene, selv når systemet er slått av. For enkel kabling har jeg montert Nano på et skrueskjerm, men du kan lodde eller bruke krympede tilkoblinger til GPIO -pinnene i stedet hvis du foretrekker det.
  • Sanntidsklokke (RTC) -modul - brukes til å registrere tidsstempelet hvor oppgavene ble utført, og ved å sammenligne siste gang med gjeldende tid bestemme hvilke oppgaver som er forsinket. Vær oppmerksom på at enheten jeg mottok var designet for å brukes med et oppladbart LiPo -batteri (LIR2032). Imidlertid bruker jeg et ikke-oppladbart CR2032-batteri, så jeg måtte gjøre noen modifikasjoner for å deaktivere ladekretsen (du vil ikke prøve å lade et ikke-oppladbart batteri, ellers kan du bli utsatt for en eksplosjon …). Spesielt fjernet jeg motstandene R4, R5 og R6, og dioden merket D1. Jeg opprettet deretter en loddebro for kort over der R6 hadde vært. Disse endringene er illustrert på bildet nedenfor.
  • ISO14443 RFID-leser + en tag per bruker- som en måte å "gamify" systemet på, har hvert av barna mine sin egen unike RFID-tag. Å velge en oppgave og deretter sveipe etiketten over leseren vil være mekanismen som brukes for å merke en oppgave som fullført
  • 16x2 LCD -skjerm - brukes til å gi brukergrensesnittet til systemet. Ved å bruke et kort som har en integrert PCF8574A -ryggsekk, kan brettet kobles via et I2C -grensesnitt til Arduino, noe som forenkler ledningene betydelig.
  • Rotary Encoder - vil være hovedkontrollknappen som brukerne vil dreie for å velge forskjellige tilgjengelige oppgaver
  • Wago -kontakter - disse snap -shut -kontaktene er en praktisk måte å koble komponenter sammen eller lage enkle busser for flere moduler som hver krever felles jord eller 5V forsyning.

Trinn 2: Kabling

Kabling
Kabling

16x2 LCD -skjermen og DS1307 RTC bruker begge et I2C -grensesnitt, noe som er praktisk, da det gjør ledningene mye enklere, og krever bare et par ledninger som går til pinnene A4 (SDA) og A5 (SCL) på Arduino

MFRC-522 RFID-leseren bruker et SPI-grensesnitt, som bruker faste maskinvarepinner 11 (MOSI), 12 (MISO) og 13 (SCK). Det krever også en slavevalg og tilbakestillingslinje, som jeg har tilordnet henholdsvis pinne 10 og 9

Den roterende koderen krever et par pinner. For optimal ytelse er det best hvis disse pinnene kan håndtere eksterne avbrudd, så jeg bruker digitale pinner 2 og 3. Du kan også klikke på koder som en bryter, og jeg har koblet dette til pinne 4. Selv om det ikke er det som for øyeblikket brukes i koden, kan du finne den nyttig for å legge til flere funksjoner

For enkelhets skyld bruker jeg WAGO 222-serie blokker. Dette er snap-shut-kontakter som gir en robust, enkel måte å koble hvor som helst mellom 2 og 8 ledninger sammen, og er veldig praktisk for Arduino-prosjekter som krever at flere moduler deler en bakkenett eller 5V-linje, eller hvor du har flere enheter på samme I2C- eller SPI -buss, si

Diagrammet illustrerer hvordan alt er koblet sammen.

Trinn 3: Konstruksjon

Jeg laget en helt grunnleggende 3D -trykt eske for å huse elektronikken. Jeg plasserte noen magneter på baksiden slik at enheten kunne festes på siden av kjøleskapet, akkurat som den forrige trykte listen var. Jeg lot også USB -kontakten være avslørt, siden denne ville bli brukt hvis nye oppgaver måtte legges til i systemet, eller for å logge på og laste ned et sett med data som viser fullførte oppgaver etc.

Jeg lagret ikke STL -filene etter utskrift, men det er mange lignende (og sannsynligvis bedre!) Saker tilgjengelig på thingiverse.com. Alternativt kan du bygge en fin trekasse, eller bare bruke en gammel pappeske eller tupperware -beholder for å huse elektronikken.

Trinn 4: Kode

Kode
Kode

Den fullkommenterte koden er vedlagt som nedlasting nedenfor. Her er noen av de mer viktige punktene å merke seg:

Jeg har laget en tilpasset struktur, "oppgave", som er en dataenhet som innkapsler alle egenskapene til en oppgave i en enkelt enhet. Oppgavene består av et navn, som vil være hvordan de vises på LCD -displayet (og dermed begrenset til 16 tegn), frekvensen de må utføres med, og når og av hvem de sist ble fullført

struct oppgave {

char taskName [16]; // Det korte, "vennlige" navnet på denne oppgaven som vil vises på displayet int repeatEachXDays; // Regularitet, i dager, som denne oppgaven gjentas med. 1 = Daglig, 7 = Ukentlig etc. usignert lang lastCompletedTime; // Tidsstempel der denne oppgaven sist ble fullført int lastCompletedBy; // ID for personen som sist fullførte denne oppgaven};

Hoveddatastrukturen kalles "taskList", som ganske enkelt er en rekke separate oppgaver. Du kan definere hvilke oppgaver du vil ha her, som initialiseres med verdien 0 for tidspunktet da de sist ble fullført, og -1 for ID -en til brukeren som sist utførte dem

task taskList [numTasks] = {

I konstantens seksjon øverst i koden er det en enkelt byteverdi kalt "eepromSignature". Denne verdien brukes til å avgjøre om dataene som er lagret på EEPROM er gyldige. Hvis du endrer strukturen til oppgavelisten, ved å legge til eller fjerne oppgaver eller legge til flere felt, si, bør du øke denne verdien. Du kan tenke på det som et grunnleggende versjonsnummereringssystem for dataene

const byte eepromSignature = 1;

Ved oppstart vil programmet bare prøve å laste data lagret i EEPROM hvis det samsvarer med signaturen til dataene som er definert i koden.

ugyldig gjenopprettingFromEEPROM () {

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

LCD -displayet og RTC -modulen bruker et I2C -grensesnitt for å kommunisere med Arduino. Dette krever at hver enhet har en unik I2C -adresse. Jeg har prøvd et par forskjellige 16x2 skjermkort, og noen ser ut til å bruke adressen 0x27, mens andre tilsynelatende identiske brett bruker 0x3f. Hvis du finner at skjermen bare viser en serie med firkanter og ingen tekst, kan du prøve å endre adressen som er definert i koden her:

LiquidCrystal_PCF8574 lcd (0x27);

Når en RFID-kode oppdages, leser koden 4-byte-identifikatoren, og bruker den til å prøve å finne den tilsvarende brukeren fra tabellen over kjente brukere. Hvis koden ikke gjenkjennes, blir 4 byte -identifikatoren sendt til den serielle skjermkonsollen:

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 ("Ukjent RFID -kort oppdaget:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }

For å tilordne en tag til en bruker, bør du kopiere ID-en som vises og sette inn 4-byte-verdien i brukermatrisen øverst i koden, ved siden av den tilsvarende brukeren:

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

Trinn 5: Bruk

Bruk
Bruk
Bruk
Bruk

Hvis du har kommet så langt, bør bruken av systemet være ganske implisitt fra koden; når som helst kan brukerne dreie på dreieknappen for å bla gjennom listen over tilgjengelige oppgaver. Arbeider som er forsinket, er markert med en stjerne etter tittelen.

Etter å ha valgt en oppgave å utføre, kan brukerne deretter skanne sin egen unike RFID -fob over leseren for å markere oppgaven som fullført. IDen deres og gjeldende tid vil bli registrert og lagret i EEPROM på Arduino.

For å sette opp de riktige RFID -taggene først, bør du kjøre skissen med Arduino seriell skjerm festet. Skann hver tag og noter deg den 4-byte hex-UID-verdien som vises på den serielle skjermen. Endre deretter brukerlisten som er deklarert øverst i koden for å tilordne denne tag -IDen til den riktige brukeren.

Jeg vurderte å legge til funksjonalitet for å skrive ut en rapport som viser alle oppgavene som er fullført av brukeren i løpet av den siste uken for å tildele passende lommepengebelønning hver uke. Imidlertid ser det ut til at barna mine er fornøyd med nyheten om å bruke systemet for å ha glemt lommepengebelønningene helt! Dette ville imidlertid være et ganske enkelt tillegg, og er igjen som en øvelse for leseren:)

Anbefalt: