Spisu treści:

Menedżer zadań - system zarządzania obowiązkami domowymi: 5 kroków (ze zdjęciami)
Menedżer zadań - system zarządzania obowiązkami domowymi: 5 kroków (ze zdjęciami)

Wideo: Menedżer zadań - system zarządzania obowiązkami domowymi: 5 kroków (ze zdjęciami)

Wideo: Menedżer zadań - system zarządzania obowiązkami domowymi: 5 kroków (ze zdjęciami)
Wideo: 8 ZASAD ZARZĄDZANIA CZASEM - GDYBYM TO WIEDZIAŁ WCZEŚNEJ #1 2024, Lipiec
Anonim
Task Manager - system zarządzania obowiązkami domowymi
Task Manager - system zarządzania obowiązkami domowymi
Task Manager - system zarządzania obowiązkami domowymi
Task Manager - system zarządzania obowiązkami domowymi

Chciałem spróbować rozwiązać prawdziwy problem, z jakim borykamy się w naszym gospodarstwie domowym (i, jak sądzę, wielu innych czytelników), czyli jak przydzielać, motywować i nagradzać moje dzieci za pomoc w pracach domowych.

Do tej pory trzymaliśmy laminowany arkusz papieru A4 przyklejony z boku lodówki. Ma wydrukowaną siatkę zadań wraz z powiązanymi kwotami kieszonkowego, które można zarobić za wykonanie tego zadania. Pomysł polega na tym, że za każdym razem, gdy któreś z naszych dzieci pomaga w pracach domowych, dostaje zaznaczenie w tym pudełku i pod koniec każdego tygodnia sumujemy zarobione pieniądze, wycieramy tablicę i zaczynamy od nowa. Lista zadań jest jednak nieaktualna i trudna do zmiany, czasami nie pamiętamy o czyszczeniu tablicy co tydzień, a niektóre zadania trzeba wykonywać z różną częstotliwością - niektóre najlepiej byłoby wykonywać codziennie, podczas gdy inne mogą być tylko raz w miesiącu. Zabrałem się więc do stworzenia urządzenia opartego na Arduino, aby rozwiązać te problemy - moim zamiarem było stworzenie czegoś, co pozwoliłoby na łatwe dodawanie/usuwanie/aktualizowanie zadań, usprawniony mechanizm rejestrowania, kiedy zadanie zostało wykonane i przypisywania zasług do odpowiednią osobę oraz sposób śledzenia różnych harmonogramów i częstotliwości, z jaką należy wykonywać różne zadania, a także wyróżniania zaległych zadań. Ta instrukcja pokaże, jak wyszło powstałe urządzenie „Menedżer zadań”.

Krok 1: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy

W projekcie wykorzystano kilka dobrze używanych i udokumentowanych komponentów sprzętowych:

  • Arduino UNO/Nano - to "mózg" systemu. Wbudowana pamięć EEPROM będzie używana do zapisywania stanu zadań, nawet gdy system jest wyłączony. Aby ułatwić okablowanie, zamontowałem Nano na osłonie śruby, ale możesz zamiast tego przylutować lub użyć zaciśniętych połączeń do pinów GPIO, jeśli wolisz.
  • Moduł Zegara Czasu Rzeczywistego (RTC) - służy do rejestrowania sygnatury czasowej wykonania zadań oraz, porównując ostatni czas z czasem bieżącym, określania, które zadania są zaległe. Zauważ, że urządzenie, które otrzymałem, zostało zaprojektowane do użytku z akumulatorem LiPo (LIR2032). Używam jednak baterii CR2032, której nie można ładować, więc musiałem dokonać kilku modyfikacji, aby wyłączyć obwód ładowania (nie chcesz próbować ładować baterii jednorazowej, bo grozi to wybuchem….). Konkretnie usunąłem rezystory R4, R5 i R6 oraz diodę oznaczoną D1. Następnie stworzyłem mostek lutowniczy, aby zwierać się w miejscu, w którym był R6. Zmiany te ilustruje poniższe zdjęcie.
  • Czytnik RFID ISO14443 + jeden tag na użytkownika – w ramach „gamifikacji” systemu każde z moich dzieci ma swój unikalny tag RFID. Wybranie zadania, a następnie przesunięcie jego tagu po czytniku będzie mechanizmem używanym do oznaczenia zadania jako ukończonego
  • Wyświetlacz LCD 16x2 - służy do zapewnienia interfejsu użytkownika do systemu. Dzięki zastosowaniu płytki ze zintegrowanym plecakiem PCF8574A, płytkę można podłączyć za pomocą interfejsu I2C do Arduino, co znacznie upraszcza okablowanie.
  • Rotary Encoder - będzie głównym pokrętłem sterującym, które użytkownicy będą obracać, aby wybrać różne dostępne zadania
  • Złącza Wago - te złącza zatrzaskowe są wygodnym sposobem łączenia ze sobą komponentów lub tworzenia prostych szyn dla kilku modułów, z których każdy wymaga wspólnego uziemienia lub zasilania 5V.

Krok 2: Okablowanie

Okablowanie
Okablowanie

Wyświetlacz LCD 16x2 i DS1307 RTC używają interfejsu I2C, co jest wygodne, ponieważ znacznie upraszcza okablowanie, wymagając tylko pary przewodów prowadzących do pinów A4 (SDA) i A5 (SCL) Arduino

Czytnik RFID MFRC-522 wykorzystuje interfejs SPI, który wykorzystuje stałe piny sprzętowe 11 (MOSI), 12 (MISO) i 13 (SCK). Wymaga również linii wyboru i resetowania urządzenia podrzędnego, które przypisałem odpowiednio do pinów 10 i 9

Enkoder obrotowy wymaga pary pinów. Aby uzyskać optymalną wydajność, najlepiej, jeśli te piny mogą obsługiwać zewnętrzne przerwania, więc używam cyfrowych pinów 2 i 3. Możesz także kliknąć enkoder jako przełącznik, a podłączyłem to do pinu 4. Nawet jeśli nie jest obecnie używany w kodzie, może okazać się przydatny do dodawania dodatkowych funkcji

Dla wygody używam złączy WAGO serii 222. Są to złącza zatrzaskowe, które zapewniają solidny, łatwy sposób łączenia od 2 do 8 przewodów razem i są bardzo wygodne w przypadku projektów Arduino, które wymagają kilku modułów do współdzielenia linii uziemiającej lub 5 V, lub gdy masz wiele urządzeń na ta sama magistrala I2C lub SPI, powiedzmy

Schemat ilustruje, jak wszystko jest ze sobą połączone.

Krok 3: Budowa

Stworzyłem bardzo prostą, wydrukowaną w 3D obudowę do przechowywania elektroniki. Umieściłem kilka magnesów z tyłu, aby można było przymocować urządzenie do boku lodówki, tak jak poprzednio wydrukowana lista. Pozostawiłem też odsłonięte gniazdo USB, ponieważ byłoby ono używane, gdyby trzeba było dodać nowe zadania do systemu lub zalogować się i pobrać zestaw danych pokazujących wykonane zadania itp.

Nie zapisałem plików STL po wydrukowaniu, ale istnieje wiele podobnych (i prawdopodobnie lepszych!) przypadków dostępnych na Thingiverse.com. Alternatywnie możesz skonstruować ładne drewniane pudełko lub po prostu użyć starego kartonowego pudełka lub pojemnika na tupperware do przechowywania elektroniki.

Krok 4: Kod

Kod
Kod

W pełni skomentowany kod jest dołączony do pobrania poniżej. Oto kilka ważniejszych punktów, na które należy zwrócić uwagę:

Stworzyłem niestandardową strukturę „zadanie”, która jest jednostką danych, która zawiera wszystkie właściwości zadania w jednej encji. Zadania składają się z nazwy, która będzie prezentować się na wyświetlaczu LCD (i tym samym ograniczone do 16 znaków), częstotliwości, z jaką mają być wykonywane oraz kiedy i przez kogo zostały ostatnio wykonane

zadanie struktury {

char NazwaZadania[16]; // Krótka, "przyjazna" nazwa tego zadania, jaka pojawi się na wyświetlaczu int repeatEachXDays; // Regularność w dniach, z jaką powtarza się to zadanie. 1=Codziennie, 7=Co tydzień itd. unsigned long lastCompletedTime; // Znacznik czasu ostatniego wykonania tego zadania int lastCompletedBy; // ID osoby, która ostatnio wykonała to zadanie };

Główna struktura danych nosi nazwę „taskList”, która jest po prostu tablicą oddzielnych zadań. Możesz tutaj zdefiniować dowolne zadania, które są inicjowane wartością 0 dla czasu, w którym zostały ostatnio wykonane, oraz -1 dla identyfikatora użytkownika, który je ostatnio wykonał

lista zadań[liczbaZadań] = {

{ "Czysty samochód", 7, 0, -1 }, { "Wymiana pościeli", 14, 0, -1}, { "Kosić trawnik", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Pies na spacer", 1, 0, -1 }, { "Schludne Sypialnie", 7, 0, -1 }, { "Rośliny wodne", 2, 0, -1 }, { "Na górze toaleta", 7, 0, -1}, { "D/toaleta na schodach", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Czysty prysznic", 7, 0, -1 }, };

W sekcji stałych na górze kodu znajduje się jednobajtowa wartość o nazwie „eepromSignature”. Ta wartość jest używana do określenia, czy dane przechowywane w EEPROM są prawidłowe. Jeśli zmienisz strukturę elementu taskList, dodając lub usuwając zadania lub dodając dodatkowe pola, powiedzmy, powinieneś zwiększyć tę wartość. Możesz myśleć o tym jak o podstawowym systemie numerowania wersji danych

const byte eepromSignature = 1;

Podczas uruchamiania program będzie próbował załadować dane zapisane w pamięci EEPROM tylko wtedy, gdy pasują one do sygnatury danych zdefiniowanych w kodzie.

void przywróćZEEPROM() {

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

Wyświetlacz LCD i moduł RTC wykorzystują interfejs I2C do komunikacji z Arduino. Wymaga to, aby każde urządzenie miało unikalny adres I2C. Wypróbowałem kilka różnych płyt z wyświetlaczem 16x2, niektóre z nich używają adresu 0x27, podczas gdy inne pozornie identyczne płyty używają adresu 0x3f. Jeśli zauważysz, że Twój wyświetlacz pokazuje tylko serię kwadratów i nie ma tekstu, spróbuj zmienić wartość adresu zdefiniowaną w kodzie tutaj:

LiquidCrystal_PCF8574 lcd (0x27);

Po wykryciu znacznika RFID kod odczytuje 4-bajtowy identyfikator i wykorzystuje go do próby wyszukania odpowiedniego użytkownika z tabeli znanych użytkowników. Jeśli tag nie zostanie rozpoznany, 4-bajtowy identyfikator zostanie wysłany do konsoli monitora szeregowego:

int GetUserFromRFIDTag(bajt RFID){

for(int i=0; i<liczbaużytkowników; {<liczbaużytkowników; i++) { if(memcmp(userList.rfidUID, RFID, sizeof userList.rfidUID) == 0) { return userList.userID; } } Serial.print(F("Wykryto nieznaną kartę RFID: ")); for(byte i=0; i<4; i++) { Serial.print(RFID<0x10 ? "0": ""); Serial.print(RFID, HEX); } return -1; }

Aby przypisać tag do użytkownika, należy skopiować wyświetlany identyfikator i wstawić 4-bajtową wartość do tablicy users na górze kodu, obok odpowiedniego użytkownika:

const użytkownik 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}}, };

Krok 5: Użycie

Stosowanie
Stosowanie
Stosowanie
Stosowanie

Jeśli dotarłeś tak daleko, użycie systemu powinno być dość ukryte z kodu; w dowolnym momencie użytkownicy mogą obracać pokrętłem, aby przewijać listę dostępnych zadań. Zaległe obowiązki są oznaczone gwiazdką po tytule.

Po wybraniu zadania do wykonania, użytkownicy mogą następnie zeskanować własną, unikalną brelok RFID przez czytnik, aby oznaczyć zadanie jako ukończone. Ich identyfikator oraz aktualny czas zostaną zapisane i zapisane w pamięci EEPROM Arduino.

Aby najpierw skonfigurować prawidłowe tagi RFID, należy uruchomić szkic z podłączonym monitorem szeregowym Arduino. Zeskanuj każdy znacznik i zanotuj 4-bajtową wartość UID w systemie szesnastkowym wyświetlaną na monitorze szeregowym. Następnie zmodyfikuj listę użytkowników zadeklarowaną w górnej części kodu, aby przypisać ten identyfikator tagu do odpowiedniego użytkownika.

Rozważałem dodanie funkcji drukowania raportu pokazującego wszystkie zadania wykonane przez użytkownika w ciągu ostatniego tygodnia, aby co tydzień przydzielać odpowiednią nagrodę kieszonkową. Jednak, jak to się dzieje, moje dzieci wydają się być zadowolone z nowości korzystania z systemu, aby całkowicie zapomnieć o kieszonkowych nagrodach! Byłby to jednak dość prosty dodatek i pozostawiono go jako ćwiczenie dla czytelnika:)

Zalecana: