Innholdsfortegnelse:
Video: Oppgavebehandling - et husholdningsledelsessystem: 5 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
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
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
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
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
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:
Ta flotte bilder med en iPhone: 9 trinn (med bilder)
Ta flotte bilder med en iPhone: De fleste av oss har med oss en smarttelefon overalt i disse dager, så det er viktig å vite hvordan du bruker smarttelefonkameraet ditt til å ta flotte bilder! Jeg har bare hatt en smarttelefon i et par år, og jeg har elsket å ha et greit kamera for å dokumentere ting jeg
Slik gjør du det: Installere Raspberry PI 4 Headless (VNC) med Rpi-imager og bilder: 7 trinn (med bilder)
Howto: Installere Raspberry PI 4 Headless (VNC) Med Rpi-imager og bilder: Jeg planlegger å bruke denne Rapsberry PI i en haug med morsomme prosjekter tilbake i bloggen min. Sjekk det gjerne ut. Jeg ønsket å begynne å bruke Raspberry PI igjen, men jeg hadde ikke tastatur eller mus på min nye plassering. Det var en stund siden jeg konfigurerte en bringebær
Slik demonterer du en datamaskin med enkle trinn og bilder: 13 trinn (med bilder)
Slik demonterer du en datamaskin med enkle trinn og bilder: Dette er en instruksjon om hvordan du demonterer en PC. De fleste grunnkomponentene er modulære og fjernes lett. Det er imidlertid viktig at du er organisert om det. Dette vil bidra til å hindre deg i å miste deler, og også i å gjøre monteringen igjen
PCB -design med enkle og enkle trinn: 30 trinn (med bilder)
PCB -design med enkle og enkle trinn: HELLO VENNER Den veldig nyttige og enkle opplæringen for de som ønsker å lære PCB -design, kan komme i gang
Hvordan lage en delt skjermvideo med fire trinn: 4 trinn (med bilder)
Hvordan lage en delt skjermvideo med fire trinn: Vi ser ofte en samme person vise i en scene to ganger i et TV -spill. Og så vidt vi vet har ikke skuespilleren en tvillingbror. Vi har også sett at to sangvideoer blir satt på en skjerm for å sammenligne sangferdighetene sine. Dette er kraften til spl