Sadržaj:

Upravitelj zadataka - sustav upravljanja kućanskim poslovima: 5 koraka (sa slikama)
Upravitelj zadataka - sustav upravljanja kućanskim poslovima: 5 koraka (sa slikama)

Video: Upravitelj zadataka - sustav upravljanja kućanskim poslovima: 5 koraka (sa slikama)

Video: Upravitelj zadataka - sustav upravljanja kućanskim poslovima: 5 koraka (sa slikama)
Video: 🚀 RUTUBE i POINT. RUTUBA razvoj u 5 sati *BEZ VODE* [Next / React / Nest / PostgreSQL / Redux] 2024, Srpanj
Anonim
Upravitelj zadataka - sustav upravljanja kućanskim poslovima
Upravitelj zadataka - sustav upravljanja kućanskim poslovima
Upravitelj zadataka - sustav upravljanja kućanskim poslovima
Upravitelj zadataka - sustav upravljanja kućanskim poslovima

Htio sam pokušati riješiti stvarni problem s kojim se susrećemo u našem kućanstvu (a, pretpostavljam, i mnogi drugi čitatelji), a to je kako rasporediti, motivirati i nagraditi svoju djecu za pomoć u kućanskim poslovima.

Do sada smo držali laminirani list A4 papira zalijepljen sa strane hladnjaka. Na njemu je ispisana mreža zadataka s pripadajućim iznosima džeparca koji bi se mogli zaraditi za izvršavanje tog zadatka. Ideja je da svaki put kada neko od naše djece pomogne oko kućanskih poslova, dobiju kvačicu u tom okviru i na kraju svakog tjedna zbrojimo zarađeni novac, obrišemo ploču i počnemo iznova. Međutim, popis zadataka zastario je i teško ga je promijeniti, ponekad se ne sjećamo da obrišemo ploču svaki tjedan, a neke je zadatke potrebno obavljati s različitim frekvencijama-neki bi se idealno obavljali svakodnevno, dok drugi mogu biti samo jednom mjesečno. Stoga sam krenuo s stvaranjem uređaja temeljenog na Arduinu za rješavanje ovih problema - namjera mi je bila stvoriti nešto što omogućuje jednostavno dodavanje/uklanjanje/ažuriranje zadataka, pojednostavljeni mehanizam za snimanje kada je zadatak obavljen i dodjeljivanje zasluga odgovarajuću osobu i način praćenja različitih rasporeda i učestalosti s kojima se trebaju obavljati različiti zadaci te istaknuti dospjele zadatke. Ova instrukcija će pokazati kako je nastali uređaj "Task Manager" nastao.

Korak 1: Hardver

Hardver
Hardver
Hardver
Hardver

Projekt koristi nekoliko dobro korištenih i dokumentiranih hardverskih komponenti:

  • Arduino UNO/Nano - ovo je "mozak" sustava. Ugrađena EEPROM memorija koristit će se za spremanje stanja zadataka čak i kad je sustav isključen. Radi lakšeg ožičenja, montirao sam Nano na šraf, ali umjesto toga možete lemiti ili koristiti spojene spojeve na GPIO pinove.
  • Modul sata u stvarnom vremenu (RTC) - koristi se za bilježenje vremenske oznake u kojoj su izvršavani zadaci te usporedbom posljednjeg vremena s trenutnim vremenom utvrđuje koji zadaci kasne. Imajte na umu da je jedinica koju sam dobio dizajnirana za upotrebu s punjivom LiPo baterijom (LIR2032). Međutim, koristim bateriju CR2032 koja se ne može puniti, pa sam morao napraviti nekoliko izmjena kako bih onemogućio krug punjenja (ne želite pokušati napuniti bateriju koja se ne može puniti ili biste se mogli suočiti s eksplozijom …).). Konkretno, uklonio sam otpornike R4, R5 i R6 i diodu s oznakom D1. Zatim sam napravio lemni most do mjesta gdje je bio R6. Ove promjene prikazane su na donjoj fotografiji.
  • ISO14443 RFID čitač + jedna oznaka po korisniku- kao način "igranja" sustava, svako moje dijete ima svoju jedinstvenu RFID oznaku. Odabir zadatka, a zatim prevlačenje njihove oznake po čitaču bit će mehanizam za označavanje zadatka kao dovršenog
  • 16x2 LCD zaslon - koristi se za pružanje korisničkog sučelja sustavu. Korištenjem ploče koja ima integrirani ruksak PCF8574A, ploča se može spojiti putem I2C sučelja na Arduino, što značajno pojednostavljuje ožičenje.
  • Rotacijski koder - bit će glavni upravljački gumb kojim će se korisnici okretati za odabir različitih dostupnih zadataka
  • Wago konektori - ovi zatvarači su prikladan način za povezivanje komponenti ili stvaranje jednostavnih sabirnica za nekoliko modula koji zahtijevaju zajedničko uzemljenje ili napajanje od 5 V.

Korak 2: Ožičenje

Ožičenje
Ožičenje

LCD zaslon veličine 16x2 i DS1307 RTC koriste I2C sučelje, što je zgodno jer znatno pojednostavljuje ožičenje, zahtijevajući samo par žica koje idu do A4 (SDA) i A5 (SCL) pinova Arduina

RFID čitač MFRC-522 koristi SPI sučelje koje koristi fiksne hardverske pinove 11 (MOSI), 12 (MISO) i 13 (SCK). Također zahtijeva liniju za odabir i resetiranje slave, koju sam dodijelio pinovima 10 i 9 respektivno

Okretni davač zahtijeva par pinova. Za optimalne performanse, najbolje je ako ove pinove mogu podnijeti vanjske prekide, pa koristim digitalne pinove 2 i 3. Također možete kliknuti koder kao prekidač, a ja sam ovo spojio na pin 4. Iako nije koji se trenutno koristi u kodu, moglo bi vam biti korisno za dodavanje dodatnih značajki

Radi praktičnosti, koristim priključne blokove serije WAGO 222. To su konektori koji se zatvaraju i pružaju robustan i jednostavan način povezivanja bilo gdje između 2 i 8 žica zajedno, a vrlo su prikladni za Arduino projekte koji zahtijevaju nekoliko modula za dijeljenje uzemljenja ili 5V linije ili gdje imate više uređaja na ista I2C ili SPI sabirnica, recimo

Dijagram prikazuje kako je sve povezano.

Korak 3: Izgradnja

Napravio sam vrlo osnovno 3D tiskano kućište za smještaj elektronike. Stavio sam neke magnete na stražnju stranu kako bi se jedinica mogla pričvrstiti sa strane hladnjaka, baš kao što je bio i prethodni ispisani popis. Također sam ostavio USB utičnicu izloženu, jer će se to koristiti ako je potrebno dodati nove zadatke u sustav, ili se prijaviti i preuzeti skup podataka koji prikazuju dovršene zadatke itd.

Nisam spremio STL datoteke nakon ispisa, ali postoji mnogo sličnih (i, vjerojatno bolje!) Slučajeva dostupnih na thingiverse.com. Alternativno, možete izgraditi lijepu drvenu kutiju ili jednostavno upotrijebiti staru kartonsku kutiju ili spremnik za tupperware za smještaj elektronike.

Korak 4: Kodirajte

Kodirati
Kodirati

Potpuno komentirani kôd nalazi se u nastavku za preuzimanje. Evo nekoliko važnijih točaka na koje treba obratiti pažnju:

Napravio sam prilagođenu strukturu, "zadatak", koja je jedinica podataka koja sažima sva svojstva zadatka u jednom entitetu. Zadaci se sastoje od naziva koji će se pojavljivati na LCD zaslonu (i stoga ograničen na 16 znakova), učestalosti s kojom ih je potrebno izvoditi te kada i od koga su zadnji put dovršeni

struct zadatak {

char taskName [16]; // Kratki, "prijateljski" naziv za ovaj zadatak koji će se pojaviti na zaslonu int repeatEachXDays; // Pravilnost, u danima, s kojima se ovaj zadatak ponavlja. 1 = dnevno, 7 = tjedno itd. Nepotpisano dugo lastCompletedTime; // Vremenska oznaka na kojoj je ovaj zadatak zadnji put završen int lastCompletedBy; // ID osobe koja je zadnji izvršila ovaj zadatak};

Glavna struktura podataka naziva se "taskList", što je jednostavno niz zasebnih zadataka. Ovdje možete definirati željene zadatke koji se inicijaliziraju s vrijednošću 0 za vrijeme posljednjeg dovršetka i -1 za ID korisnika koji ih je zadnji put izvršio

task taskList [numTasks] = {

U odjeljku konstanti na vrhu koda postoji vrijednost od jednog bajta koja se naziva "eepromSignature". Ova se vrijednost koristi za utvrđivanje jesu li podaci pohranjeni na EEPROM -u valjani. Ako promijenite strukturu stavke taskList, dodavanjem ili uklanjanjem zadataka ili dodavanjem dodatnih polja, recimo, trebali biste povećati ovu vrijednost. Možete to zamisliti kao osnovni sustav numeriranja verzija podataka

const byte eepromSignature = 1;

Prilikom pokretanja program će pokušati učitati podatke pohranjene u EEPROM -u samo ako odgovaraju potpisu podataka definiranih u kodu.

void restoreFromEEPROM () {

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

LCD zaslon i RTC modul koriste I2C sučelje za komunikaciju s Arduinom. To zahtijeva da svaki uređaj ima jedinstvenu I2C adresu. Probao sam nekoliko različitih 16x2 ploča za prikaz, a čini se da neke koriste adresu 0x27, dok druge naizgled identične ploče koriste 0x3f. Ako otkrijete da vaš zaslon prikazuje samo niz kvadrata, a nema teksta, pokušajte promijeniti vrijednost adrese definiranu u kodu ovdje:

LiquidCrystal_PCF8574 LCD (0x27);

Kad se detektira RFID oznaka, kôd čita 4-bajtni identifikator i koristi ga za pokušaj traženja odgovarajućeg korisnika iz tablice poznatih korisnika. Ako oznaka nije prepoznata, 4 -bajtni identifikator bit će poslan na konzolu serijskog monitora:

int GetUserFromRFIDTag (bajt 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 ("Otkrivena nepoznata RFID kartica:")); for (bajt i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serijski ispis (RFID , HEX); } return -1; }

Da biste korisniku dodijelili oznaku, morate kopirati prikazani ID i umetnuti vrijednost od 4 bajta u korisnički niz na vrhu koda, pored odgovarajućeg korisnika:

const user userList [numUsers] = {{1, "Ginny", {0x00, 0x00, 0x00, 0x00}}, {2, "Harry", {0x12, 0x34, 0x56, 0x78}}, {3, "Ron", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermiona", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

Korak 5: Upotreba

Upotreba
Upotreba
Upotreba
Upotreba

Ako ste ovoliko uspjeli, upotreba sustava trebala bi biti prilično implicitna iz koda; u svakom trenutku korisnici mogu okretati okretni gumb za pomicanje po popisu dostupnih zadataka. Poslovi koji kasne označeni su zvjezdicom nakon naslova.

Nakon što su odabrali zadatak koji će obaviti, korisnici tada mogu skenirati vlastiti jedinstveni RFID pribor preko čitača kako bi označili zadatak kao dovršen. Njihov ID i trenutno vrijeme bit će snimljeni i spremljeni u EEPROM Arduina.

Kako biste prvo postavili ispravne RFID oznake, trebali biste pokrenuti skicu s priključenim serijskim monitorom Arduino. Skenirajte svaku oznaku i zabilježite 4-bajtnu hex UID vrijednost prikazanu na serijskom monitoru. Zatim izmijenite popis korisnika deklariran na vrhu koda da biste dodijelili ovaj ID oznake odgovarajućem korisniku.

Razmišljao sam o dodavanju funkcionalnosti za ispis izvješća koji prikazuje sve zadatke koje je korisnik izvršio tijekom prošlog tjedna kako bih svaki tjedan dodijelio odgovarajuću nagradu za džeparac. No, kako se to događa, čini se da su moja djeca zadovoljna novitetom korištenja sustava jer su u potpunosti zaboravila na nagrade za džeparac! Ovo bi ipak bio prilično jednostavan dodatak i ostavljen je kao vježba za čitatelja:)

Preporučeni: