Mündəricat:

Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi: 5 addım (şəkillərlə)
Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi: 5 addım (şəkillərlə)

Video: Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi: 5 addım (şəkillərlə)

Video: Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi: 5 addım (şəkillərlə)
Video: Ən çətin məntiq testi.😉 Kim tapsa 1-ci yer. Yalnız 1 nəfər.❗❗ 2024, Iyul
Anonim
Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi
Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi
Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi
Tapşırıq Meneceri - Ev İşlərinin İdarə Edilməsi Sistemi

Ev işlərində kömək etmək üçün uşaqlarımı necə bölüşdürmək, həvəsləndirmək və mükafatlandırmaq üçün evimizdə (və bir çox digər oxucularda olduğu kimi) qarşılaşdığımız əsl problemi həll etməyə çalışmaq istədim.

İndiyə qədər soyuducunun yan tərəfinə yapışmış A4 kağızdan bir təbəqə saxlamışıq. Üzərində bu işi başa çatdırmaq üçün əldə edilə biləcək cib pulu ilə birlikdə çap edilmiş vəzifələr şəbəkəsi var. Fikir budur ki, uşaqlarımızdan biri hər dəfə bir işdə kömək edəndə həmin qutuda bir gənə alır və hər həftənin sonunda qazanılan pulu toplayırıq, lövhəni silirik və yenidən başlayırıq. Bununla birlikdə, vəzifələrin siyahısı köhnəlmiş və dəyişdirmək çətindir, bəzən hər həftə lövhəni silməyi xatırlamırıq və bəzi vəzifələri fərqli tezliklərlə yerinə yetirmək lazımdır-bəziləri ideal olaraq hər gün edilməli idi. digərləri ayda bir dəfə ola bilər. Beləliklə, bu problemləri həll etmək üçün Arduino əsaslı bir cihaz yaratmağa başladım - niyyətim, tapşırıqların asan əlavə edilməsi/silinməsi/yenilənməsinə imkan verən bir şey yaratmaq idi. uyğun şəxs və fərqli tapşırıqların yerinə yetirilməsi lazım olan müxtəlif cədvəlləri və tezliyi izləmək və vaxtı keçmiş vəzifələri vurğulamaq üçün bir yol. Və bu təlimat, ortaya çıxan "Task Manager" cihazının necə çıxdığını göstərəcək.

Addım 1: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Layihə yaxşı istifadə olunan və sənədləşdirilmiş bir neçə hardware komponentindən istifadə edir:

  • Arduino UNO/Nano - bu sistemin "beyinləridir". Daxili EEPROM yaddaşı, sistem söndürüldükdə belə vəzifələrin vəziyyətini saxlamaq üçün istifadə ediləcək. Kablolama asanlığı üçün, Nano -nu bir tornavidaya quraşdırdım, amma istəsəniz GPIO sancaqlarına qıvrılmış bağlantıları lehimləyə və ya istifadə edə bilərsiniz.
  • Real -Time Clock (RTC) modulu - tapşırıqların yerinə yetirildiyi zaman damğasını qeyd etmək və sonuncu dəfə cari vaxtla müqayisə edərək hansı vəzifələrin gecikdiyini təyin etmək üçün istifadə olunur. Diqqət yetirin ki, aldığım cihaz yenidən doldurulan LiPo batareyası (LIR2032) ilə istifadə üçün nəzərdə tutulmuşdu. Bununla birlikdə, şarj olunmayan bir CR2032 batareyasından istifadə edirəm, buna görə şarj dövrəsini söndürmək üçün bir neçə dəyişiklik etməliydim (şarj olunmayan bir batareyanı doldurmağa çalışmaq istəmirsiniz, yoxsa bir partlayışla üzləşə bilərsiniz …). Xüsusilə, R4, R5 və R6 rezistorlarını çıxardım və D1 işarələnmiş diod. Daha sonra R6 -nın olduğu yerə qısa bir keçid üçün bir lehim körpüsü yaratdım. Bu dəyişikliklər aşağıdakı fotoda göstərilmişdir.
  • ISO14443 RFID oxuyucusu + istifadəçi başına bir etiket- sistemi "oyunallaşdırmaq" yolu ilə, uşaqlarımın hər birinin özünəməxsus RFID etiketi var. Bir vəzifəni seçmək və sonra etiketini oxucu arasında sürüşdürmək, tapşırığın tamamlandığını qeyd etmək üçün istifadə olunan mexanizm olacaqdır
  • 16x2 LCD displey - sistemin istifadəçi interfeysini təmin etmək üçün istifadə olunur. PCF8574A ayrılmaz bir sırt çantasına malik bir lövhədən istifadə edərək, lövhə I2C interfeysi vasitəsilə Arduino -ya qoşula bilər ki, bu da naqilləri əhəmiyyətli dərəcədə asanlaşdırır.
  • Rotary Encoder - istifadəçilərin müxtəlif mövcud vəzifələri seçmək üçün çevirəcəyi əsas idarəetmə düyməsi olacaq
  • Wago bağlayıcıları - bu bağlayıcı bağlayıcılar, komponentləri bir -birinə bağlamaq və ya hər biri ümumi bir yer və ya 5V təchizatı tələb edən bir neçə modul üçün sadə avtobuslar yaratmaq üçün əlverişli bir yoldur.

Addım 2: Kabel çəkmə

Kablolama
Kablolama

16x2 LCD displey və DS1307 RTC, hər ikisi də Arduinonun A4 (SDA) və A5 (SCL) sancaqlarına gedən bir cüt tel tələb etdiyi üçün naqilləri daha asanlaşdırdığı üçün rahat olan bir I2C interfeysi istifadə edir

MFRC-522 RFID oxuyucusu 11 (MOSI), 12 (MISO) və 13 (SCK) sabit sancaqlar istifadə edən bir SPI interfeysindən istifadə edir. Ayrıca, sırasıyla 10 və 9 pinlərə təyin etdiyim bir qul seçmək və sıfırlama xəttini tələb edir

Döner kodlayıcıya bir cüt sancaq lazımdır. Optimal performans üçün bu sancaqlar xarici fasilələri idarə edə bilsələr yaxşı olar, buna görə 2 və 3 rəqəmsal pinlərdən istifadə edirəm. Siz də kodlayıcıya keçid olaraq daxil ola bilərsiniz və mən bunu pin 4 -ə bağladım. Hal -hazırda kodda istifadə olunur, əlavə xüsusiyyətlər əlavə etmək üçün faydalı ola bilər

Rahatlıq üçün WAGO 222 seriyalı bağlayıcı bloklardan istifadə edirəm. Bunlar, hər yerdə 2 ilə 8 tel arasında birləşdirmək üçün möhkəm və asan bir yol təmin edən bağlayıcı bağlayıcılardır və bir neçə modulun bir torpaq və ya 5V xətti paylaşması və ya birdən çox cihazınızın olduğu Arduino layihələri üçün çox əlverişlidir. eyni I2C və ya SPI avtobusu, deyək

Diaqram hər şeyin bir -birinə necə bağlı olduğunu göstərir.

Addım 3: Tikinti

Elektronikanı yerləşdirmək üçün çox sadə 3D çap qutusu yaratdım. Arxa tərəfə bir az maqnit qoydum ki, vahid soyuducunun yan tərəfinə bərkidilsin, əvvəlki çap edilmiş siyahıda olduğu kimi. USB yuvasını da açıq buraxdım, çünki sistemə yeni vəzifələr əlavə edilməli və ya daxil olmuş və tamamlanmış vəzifələri göstərən bir sıra məlumatları daxil etmək və yükləmək lazım olanda istifadə ediləcəkdir.

Çap etdikdən sonra STL fayllarını saxlamadım, amma bir çox oxşar (və, ehtimal ki, daha yaxşı!) Halları thingiverse.com saytında mövcuddur. Alternativ olaraq, gözəl bir taxta qutu qura bilərsiniz və ya elektronikanı saxlamaq üçün köhnə bir karton qutudan və ya uşaq qabından istifadə edə bilərsiniz.

Addım 4: Kod

Kod
Kod

Tam şərh edilmiş kod aşağıda bir yükləmə olaraq əlavə edilmişdir. Burada qeyd edilməli olan daha vacib məqamlardan bir neçəsi:

Tək bir varlıqdakı bir vəzifənin bütün xüsusiyyətlərini əhatə edən bir məlumat vahidi olan "tapşırıq" adlı xüsusi bir quruluş yaratdım. Tapşırıqlar, LCD ekranda necə görünəcəkləri (və buna görə də 16 xarakterlə məhdudlaşacaq), yerinə yetirilmə tezliyi və sonuncu dəfə nə vaxt və kim tərəfindən tamamlandıqları bir addan ibarətdir

struktur vəzifəsi {

char taskName [16]; // ekranda göründüyü kimi bu tapşırıq üçün qısa "dostluq" adı int repeatEachXDays; // Bu vəzifənin təkrarlandığı günlərdə nizamlılıq. 1 = Gündəlik, 7 = Həftəlik və s. İmzasız uzun lastCompletedTime; // Bu vəzifənin sonuncu dəfə tamamlandığı zaman damgası int lastCompletedBy; // bu vəzifəni sonuncu dəfə yerinə yetirən şəxsin şəxsiyyət vəsiqəsi};

Əsas məlumat quruluşu "taskList" adlanır ki, bu da ayrı -ayrı tapşırıqlardan ibarətdir. İstədiyiniz vəzifələri, son tamamlandıqları vaxt üçün 0, sonuncu dəfə yerinə yetirmiş istifadəçinin kimliyi üçün -1 dəyərləri ilə təyin edə bilərsiniz

tapşırıq siyahısı [numTasks] = {

Kodun üstündəki sabitlər bölməsində "eepromSignature" adlı tək bir bayt dəyəri var. Bu dəyər, EEPROM -da saxlanılan məlumatların etibarlı olub olmadığını müəyyən etmək üçün istifadə olunur. Vəzifələr siyahısı elementinin quruluşunu dəyişdirsəniz, vəzifələri əlavə edərək və ya silməklə və ya əlavə sahələr əlavə etməklə deyək ki, bu dəyəri artırmalısınız. Məlumat üçün əsas versiya nömrələmə sistemi kimi düşünə bilərsiniz

const bayt eepromSignature = 1;

Başlanğıcda, proqram yalnız EEPROM -da saxlanılan məlumatları kodda göstərilən məlumatların imzasına uyğun gəldikdə yükləməyə çalışacaq.

boşluğu bərpaFromEEPROM () {

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

LCD ekran və RTC modulu Arduino ilə əlaqə qurmaq üçün I2C interfeysindən istifadə edir. Bu, hər bir cihazın özünəməxsus bir I2C ünvanına sahib olmasını tələb edir. Bir neçə fərqli 16x2 ekran lövhəsini sınadım və bəziləri 0x27 ünvanından istifadə edir, digərləri eyni görünən lövhələr 0x3f istifadə edir. Ekranınızda sadəcə bir sıra kvadratlar olduğunu və mətn olmadığını görürsünüzsə, kodda təyin olunan ünvan dəyərini dəyişdirməyə çalışın:

LiquidCrystal_PCF8574 lcd (0x27);

Bir RFID etiketi aşkar edildikdə, kod 4 baytlıq identifikatoru oxuyur və ondan istifadə edərək tanınmış istifadəçilər cədvəlindən müvafiq istifadəçini axtarmağa cəhd edir. Etiket tanınmırsa, 4 baytlıq identifikator serial monitor konsoluna göndəriləcək:

int GetUserFromRFIDTag (RFID baytı ) {

for (int i = 0; i <numusers; i ++) = "" {<sayı istifadəçiləri; i ++) {if (memcmp (userList .rfidUID, RFID, userList .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Naməlum RFID kartı aşkarlandı:")); for (bayt i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } qaytar -1; }

Bir istifadəçiyə etiket təyin etmək üçün göstərilən ID-ni kopyalamalı və kodun yuxarısındakı müvafiq istifadəçinin yanındakı istifadəçilər massivinə 4 baytlıq dəyər daxil etməlisiniz:

const user userList [numUsers] = {{1, "Cin", {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}},};

Addım 5: İstifadə

İstifadə
İstifadə
İstifadə
İstifadə

Bu günə qədər bunu etmisinizsə, sistemin istifadəsi koddan kifayət qədər gizli olmalıdır; İstənilən vaxt istifadəçilər fırlanan düyməni döndərərək mövcud vəzifələrin siyahısına keçə bilərlər. Gecikmiş işlər, başlıqlarından sonra ulduzla işarələnir.

İşi yerinə yetirmək üçün bir iş seçdikdən sonra, istifadəçilər tapşırığın tamamlandığını qeyd etmək üçün oxucu arasında özünəməxsus RFID fobunu skan edə bilərlər. Şəxsiyyət vəsiqəsi və cari vaxt Arduinonun EEPROM -da qeydə alınacaq.

Düzgün RFID etiketlərini əvvəlcə qurmaq üçün, Arduino seriyalı monitoru əlavə edərək eskizi işə salmalısınız. Hər bir etiketi tarayın və serial monitorda göstərilən 4 baytlıq onaltılıq UID dəyərinə diqqət yetirin. Sonra bu etiket ID -ni uyğun istifadəçiyə təyin etmək üçün kodun yuxarı hissəsində elan edilmiş istifadəçi siyahısını dəyişdirin.

Hər həftə uyğun cib pulu mükafatını ayırmaq üçün son bir həftə ərzində istifadəçi tərəfindən yerinə yetirilən bütün tapşırıqları göstərən bir hesabat çap etmək üçün funksionallıq əlavə etməyi düşündüm. Ancaq, olduğu kimi, uşaqlarım cib pulu mükafatlarını tamamilə unutduqları üçün sistemdən istifadə etmənin yeniliklərindən məmnun görünürlər! Bu olduqca sadə bir əlavə olardı və oxucu üçün bir məşq olaraq buraxıldı:)

Tövsiyə: