Spisu treści:
Wideo: Menedżer zadań - system zarządzania obowiązkami domowymi: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
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
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
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
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:
Wbudowany menedżer okien: 10 kroków
Wbudowany menedżer okien: Ten projekt pokazuje, jak zaimplementować menedżera okien z ruchomymi nachodzącymi na siebie oknami na wbudowanym mikrokontrolerze z panelem LCD i ekranem dotykowym. Istnieją dostępne na rynku pakiety oprogramowania, które to umożliwiają, ale kosztują i są blisko
Steruj urządzeniami domowymi za pomocą Alexy za pomocą ESP8266 lub ESP32: 8 kroków
Kontroluj urządzenia domowe przez Alexę za pomocą ESP8266 lub ESP32: Hej, co słychać, chłopaki! Akarsh tutaj z CETech. Ten mój projekt pomoże ci stać się łatwym i poczujesz się jak król po kontrolowaniu urządzeń w swoim domu, po prostu wydając polecenie Alexa.Najważniejsze za tym p
Sterowanie urządzeniami domowymi za pomocą Node MCU i Asystenta Google - IOT - Blynk - IFTTT: 8 kroków
Steruj urządzeniami domowymi za pomocą Node MCU i Google Assistant | IOT | Blynk | IFTTT: Prosty projekt do sterowania urządzeniami za pomocą Asystenta Google: Ostrzeżenie: Obchodzenie się z energią elektryczną może być niebezpieczne. Obchodź się z najwyższą ostrożnością. Zatrudnij profesjonalnego elektryka podczas pracy z obwodami otwartymi. Nie wezmę odpowiedzialności za da
Jak sterować urządzeniami domowymi za pomocą pilota telewizora z funkcją timera: 7 kroków (ze zdjęciami)
Jak sterować urządzeniami domowymi za pomocą pilota do telewizora z funkcją timera: Nawet po 25 latach wprowadzenia na rynek konsumencki komunikacja w podczerwieni jest nadal bardzo aktualna w ostatnich dniach. Niezależnie od tego, czy jest to 55-calowy telewizor 4K, czy radio samochodowe, wszystko wymaga pilota na podczerwień, aby odpowiedzieć na nasze
Menedżer haseł, typer, makro, ładunek Wszystko w JEDNYM!: 11 kroków (ze zdjęciami)
Password Manager, Typer, Macro, Payload… Wszystko w JEDNYM!: UWAGA: Jeśli masz problem z wykonaniem tego urządzenia (pcb, lutowanie lub inne), wyślij mi prywatną wiadomość tutaj lub e-mail na adres [email protected]. Chętnie wyślę jeden z płytek drukowanych lub urządzeń, które już produkuję