Sadržaj:

Upravitelj zadataka - sistem upravljanja poslovima u domaćinstvu: 5 koraka (sa slikama)
Upravitelj zadataka - sistem upravljanja poslovima u domaćinstvu: 5 koraka (sa slikama)

Video: Upravitelj zadataka - sistem upravljanja poslovima u domaćinstvu: 5 koraka (sa slikama)

Video: Upravitelj zadataka - sistem upravljanja poslovima u domaćinstvu: 5 koraka (sa slikama)
Video: Einbürgerungstest | Test Leben in Deutschland | Fragen 1-300 | mit Lösung | with subtitles مترجم 2024, Juli
Anonim
Task Manager - sistem za upravljanje poslovima u domaćinstvu
Task Manager - sistem za upravljanje poslovima u domaćinstvu
Task Manager - sistem za upravljanje poslovima u domaćinstvu
Task Manager - sistem za upravljanje poslovima u domaćinstvu

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

Do sada smo držali laminirani list A4 papira zalijepljen sa strane frižidera. Na njoj 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 kad neko od naše djece pomogne oko kućanskih poslova, oni dobiju kvačicu u toj kutiji i na kraju svake sedmice zbrojimo zarađeni novac, obrišemo ploču i počnemo iznova. Međutim, popis zadataka je zastario i teško se mijenja, ponekad se ne sjećamo da obrišemo ploču svake sedmice, a neke zadatke treba izvoditi 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 zasnovanog na Arduinu za rješavanje ovih problema - namjera mi je bila stvoriti nešto što omogućava jednostavno dodavanje/uklanjanje/ažuriranje zadataka, pojednostavljeni mehanizam za snimanje obavljenog zadatka i dodjeljivanje zasluga odgovarajuću osobu i način za praćenje različitih rasporeda i učestalosti s kojima se različiti zadaci trebaju obavljati, te istaknuti zakasnele zadatke. I ovo uputstvo ć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" sistema. Ugrađena EEPROM memorija će se koristiti za spremanje stanja zadataka čak i kada je sistem isključen. Radi lakšeg ožičenja, montirao sam Nano na šraf, ali umjesto toga možete lemiti ili koristiti spojene veze na GPIO pinove.
  • Modul sata u realnom vremenu (RTC) - koristi se za bilježenje vremenske oznake u kojoj su izvršavani zadaci i, 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šavati 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 most za lemljenje do mjesta gdje je bio R6. Ove promjene prikazane su na donjoj fotografiji.
  • ISO14443 RFID čitač + jedna oznaka po korisniku- kao način "igranja" sistema, svako moje dijete ima svoju jedinstvenu RFID oznaku. Odabir zadatka, a zatim prevlačenje njihove oznake preko čitača bit će mehanizam koji se koristi za označavanje zadatka kao dovršenog
  • 16x2 LCD ekran - koristi se za pružanje korisničkog interfejsa sistemu. 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 glavno kontrolno dugme koje će 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 ekran 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 interfejs, koji 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 ovi pinovi 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 funkcija

Radi praktičnosti, koristim priključne blokove serije WAGO 222. Ovo su konektori za zatvaranje koji 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 magistrala, recimo

Dijagram prikazuje kako je sve povezano.

Korak 3: Konstrukcija

Napravio sam vrlo osnovno 3D štampano kućište za smještaj elektronike. Stavio sam neke magnete na stražnju stranu kako bi se jedinica mogla pričvrstiti sa strane frižidera, baš kao što je to bio i prethodni odštampani popis. Ostavio sam i USB utičnicu izloženu, jer bi se to koristilo ako je potrebno dodati nove zadatke u sistem, ili se prijaviti i preuzeti skup podataka koji pokazuju završ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 posudu za tupperware za smještaj elektronike.

Korak 4: Kodirajte

Kod
Kod

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 imena, kako će se pojavljivati na LCD ekranu (i stoga ograničeno na 16 znakova), učestalosti s kojom ih je potrebno izvoditi, te kada i od koga su zadnji put završeni

struct task {

char taskName [16]; // Kratak, "prijateljski" naziv za ovaj zadatak koji će se pojaviti na ekranu int repeatEachXDays; // Pravilnost, u danima, sa kojima se ovaj zadatak ponavlja. 1 = dnevno, 7 = sedmično 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", koja je jednostavno niz zasebnih zadataka. Ovdje možete definirati željene zadatke, koji se inicijaliziraju s vrijednošću 0 za vrijeme posljednjeg završetka i -1 za ID korisnika koji ih je zadnji put izvršio

zadatak taskList [numTasks] = {

U odjeljku konstante na vrhu koda postoji vrijednost od jednog bajta koja se naziva "eepromSignature". Ova vrijednost se 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 sistem numeriranja verzija podataka

const bajt 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 ekran i RTC modul koriste I2C interfejs za komunikaciju sa Arduinom. Ovo zahtijeva da svaki uređaj ima jedinstvenu I2C adresu. Isprobao 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);

Kada 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.print (RFID , HEX); } return -1; }

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

const 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 sistema bi trebala biti prilično implicitna iz koda; u svakom trenutku korisnici mogu okrenuti okretni gumb za listanje 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.

Da biste prvo postavili ispravne RFID oznake, trebali biste pokrenuti skicu sa priključenim Arduino serijskim monitorom. Skenirajte svaku oznaku i zabilježite 4-bajtnu heksadecimalnu UID vrijednost prikazanu na serijskom monitoru. Zatim izmijenite listu korisnika deklariranu na vrhu koda kako biste dodijelili ovaj ID oznake odgovarajućem korisniku.

Razmišljao sam o dodavanju funkcionalnosti za ispis izvještaja koji prikazuje sve zadatke koje je korisnik izvršio tokom prošle sedmice kako bih svake sedmice dodijelio odgovarajuću nagradu za džeparac. Međutim, čini se da su moja djeca izgleda zadovoljna novitetom korištenja sistema jer su u potpunosti zaboravila nagrade za džeparac! Ovo bi ipak bio prilično jednostavan dodatak i ostavljen je kao vježba za čitatelja:)

Preporučuje se: