İçindekiler:

Görev Yöneticisi - Ev İşleri Yönetim Sistemi: 5 Adım (Resimlerle)
Görev Yöneticisi - Ev İşleri Yönetim Sistemi: 5 Adım (Resimlerle)

Video: Görev Yöneticisi - Ev İşleri Yönetim Sistemi: 5 Adım (Resimlerle)

Video: Görev Yöneticisi - Ev İşleri Yönetim Sistemi: 5 Adım (Resimlerle)
Video: İyi Bir Yöneticinin 10 Özelliği 2024, Temmuz
Anonim
Görev Yöneticisi - Ev İşi Yönetim Sistemi
Görev Yöneticisi - Ev İşi Yönetim Sistemi
Görev Yöneticisi - Ev İşi Yönetim Sistemi
Görev Yöneticisi - Ev İşi Yönetim Sistemi

Evimizde (ve sanırım diğer birçok okuyucuda) karşılaşılan gerçek bir sorunu ele almaya çalışmak istedim; bu, ev işlerine yardım ettikleri için çocuklarımı nasıl tahsis edeceğim, motive edeceğim ve ödüllendireceğim.

Şimdiye kadar, buzdolabının yanına yapıştırılmış bir lamine A4 kağıdı tuttuk. Üzerinde, bu görevi tamamlamak için kazanılabilecek ilgili cep harçlığı miktarlarıyla birlikte yazılı bir görev ızgarası vardır. Fikir şu ki, çocuklarımızdan biri bir angaryaya her yardım ettiğinde, o kutuda bir onay işareti alırlar ve her haftanın sonunda kazanılan parayı toplar, tahtayı siler ve yeniden başlarız. Ancak, görev listesi güncel değil ve değiştirilmesi zor, bazen her hafta tahtayı silmeyi hatırlamıyoruz ve bazı görevlerin farklı sıklıklarla gerçekleştirilmesi gerekiyor - bazıları ideal olarak günlük yapılırken diğerleri sadece ayda bir olabilir. Bu nedenle, bu sorunları çözmek için Arduino tabanlı bir cihaz oluşturmaya başladım - niyetim, görevlerin kolayca eklenmesine/kaldırılmasına/güncellenmesine izin veren bir şey, bir görev yapıldığında kayıt için aerodinamik bir mekanizma ve kredi tahsis etmekti. uygun kişi ve farklı görevlerin gerçekleştirilmesi gereken farklı programları ve sıklığı takip etmenin ve gecikmiş görevleri vurgulamanın bir yolu. Ve bu talimat, ortaya çıkan "Görev Yöneticisi" cihazının nasıl çıktığını gösterecektir.

Adım 1: Donanım

Donanım
Donanım
Donanım
Donanım

Proje, çok sayıda iyi kullanılmış ve belgelenmiş donanım bileşeninden yararlanmaktadır:

  • Arduino UNO/Nano - bu, sistemin "beyni" dir. Yerleşik EEPROM belleği, sistem kapatıldığında bile görevlerin durumunu kaydetmek için kullanılacaktır. Kablolama kolaylığı için Nano'yu bir vida siperi üzerine monte ettim, ancak isterseniz GPIO pinlerine lehimleyebilir veya kıvrımlı bağlantılar kullanabilirsiniz.
  • Gerçek Zamanlı Saat (RTC) modülü - görevlerin gerçekleştirildiği zaman damgasını kaydetmek ve son zamanı şimdiki zamanla karşılaştırarak hangi görevlerin geciktiğini belirlemek için kullanılır. Aldığım ünitenin şarj edilebilir bir LiPo pil (LIR2032) ile kullanılmak üzere tasarlandığını unutmayın. Ancak, şarj edilemeyen bir CR2032 pil kullanıyorum, bu nedenle şarj devresini devre dışı bırakmak için birkaç değişiklik yapmam gerekti (şarj edilemeyen bir pili yeniden şarj etmeye çalışmak istemezsiniz, aksi takdirde bir patlamayla karşılaşabilirsiniz….). Özellikle, R4, R5 ve R6 dirençlerini ve D1 ile işaretlenmiş diyotu kaldırdım. Daha sonra R6'nın olduğu yerde kısa devre yapmak için bir lehim köprüsü oluşturdum. Bu değişiklikler aşağıdaki fotoğrafta gösterilmiştir.
  • ISO14443 RFID okuyucu + kullanıcı başına bir etiket- sistemi "oyunlaştırmanın" bir yolu olarak, her çocuğumun kendine özgü RFID etiketi var. Bir görevi seçmek ve ardından etiketlerini okuyucuda kaydırmak, bir görevi tamamlandı olarak işaretlemek için kullanılan mekanizma olacaktır.
  • 16x2 LCD ekran - sisteme kullanıcı arayüzü sağlamak için kullanılır. Entegre bir PCF8574A sırt çantasına sahip bir kart kullanılarak kart, kablolamayı önemli ölçüde basitleştiren bir I2C arayüzü aracılığıyla Arduino'ya bağlanabilir.
  • Döner Kodlayıcı - kullanıcıların mevcut farklı görevleri seçmek için çevirecekleri ana kontrol düğmesi olacaktır.
  • Wago konektörler - bu geçmeli konektörler, bileşenleri birbirine bağlamanın veya her biri ortak topraklama veya 5V besleme gerektiren birkaç modül için basit veri yolları oluşturmanın uygun bir yoludur.

Adım 2: Kablolama

kablolama
kablolama

16x2 LCD ekran ve DS1307 RTC, kablolamayı çok daha basit hale getirdiği ve Arduino'nun A4 (SDA) ve A5 (SCL) pinlerine giden sadece bir çift kablo gerektirdiği için kullanışlı bir I2C arayüzü kullanır

MFRC-522 RFID okuyucu, sabit donanım pinleri 11 (MOSI), 12 (MISO) ve 13 (SCK) kullanan bir SPI arabirimi kullanır. Ayrıca, sırasıyla 10 ve 9 numaralı pinlere atadığım bir bağımlı seçim ve sıfırlama hattı gerektirir

Döner kodlayıcı bir çift pim gerektirir. Optimum performans için, bu pinlerin harici kesmeleri kaldırabilmesi en iyisidir, bu yüzden 2 ve 3 numaralı dijital pinleri kullanıyorum, ayrıca kodlayıcıyı bir anahtar olarak tıklayabilirsiniz ve bunu pin 4'e bağladım. Öyle olmasa bile. şu anda kodda kullanılıyorsa, ek özellikler eklemek için yararlı bulabilirsiniz

Kolaylık sağlamak için WAGO 222 serisi bağlantı bloklarını kullanıyorum. Bunlar, 2 ila 8 kablo arasında herhangi bir yeri birbirine bağlamak için sağlam ve kolay bir yol sağlayan geçmeli konektörlerdir ve bir toprak veya 5V hattı paylaşmak için birkaç modül gerektiren veya üzerinde birden fazla cihaz bulunan Arduino projeleri için çok uygundur. aynı I2C veya SPI veri yolu, diyelim

Diyagram, her şeyin nasıl birbirine bağlı olduğunu göstermektedir.

Adım 3: İnşaat

Elektronikleri barındırmak için çok basit bir 3D baskılı kasa oluşturdum. Bir önceki basılı listede olduğu gibi, ünitenin buzdolabının yanına sabitlenebilmesi için arka tarafa bazı mıknatıslar yerleştirdim. Ayrıca, sisteme yeni görevlerin eklenmesi gerektiğinde veya oturum açıp tamamlanmış görevleri gösteren bir dizi veriyi indirmek için kullanılacağından, USB soketini açıkta bıraktım.

STL dosyalarını yazdırdıktan sonra kaydetmedim, ancakthingiverse.com'da pek çok benzer (ve muhtemelen daha iyi!) durum var. Alternatif olarak, güzel bir tahta kutu yapabilir ya da elektronikleri yerleştirmek için eski bir karton kutu veya tupperware kabı kullanabilirsiniz.

4. Adım: Kod

kod
kod

Tam olarak yorumlanmış kod aşağıda bir indirme olarak eklenmiştir. İşte dikkat edilmesi gereken daha önemli noktalardan birkaçı:

Bir görevin tüm özelliklerini tek bir varlıkta kapsayan bir veri birimi olan "görev" adlı özel bir yapı oluşturdum. Görevler, LCD ekranda nasıl görünecekleri (dolayısıyla 16 karakterle sınırlı), gerçekleştirilmeleri gereken sıklık ve en son ne zaman ve kim tarafından tamamlandıkları bir addan oluşur

yapı görevi {

char görevAdı[16]; // Ekranda görüneceği gibi bu görevin kısa, "kolay" adı int RepeatEachXDays; // Bu görevin tekrarlandığı gün cinsinden düzenlilik. 1=Günlük, 7=Haftalık vb. unsigned long lastCompletedTime; // Bu görevin en son tamamlandığı zaman damgası int lastCompletedBy; // Bu görevi en son tamamlayan kişinin kimliği };

Ana veri yapısı, basitçe bir dizi ayrı görevden oluşan "görevListesi" olarak adlandırılır. En son tamamlandıkları zaman için 0, en son gerçekleştiren kullanıcının ID'si için -1 değeri ile başlatılan görevleri burada istediğiniz gibi tanımlayabilirsiniz

görev görevListesi[numTasks] = {

{ "Temiz araba", 7, 0, -1 }, { "Çarşafları değiştir", 14, 0, -1}, { "Çim biçme", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Yürüyen köpek", 1, 0, -1 }, { "Düzenli Yatak Odaları", 7, 0, -1 }, { "Su bitkileri", 2, 0, -1 }, { "Üst Kat tuvalet", 7, 0, -1}, { "D/merdiven tuvaleti", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Temiz duş", 7, 0, -1 }, };

Kodun üst kısmındaki sabitler bölümünde "eepromSignature" adında tek bir bayt değeri vardır. Bu değer, EEPROM'da saklanan verilerin geçerli olup olmadığını belirlemek için kullanılır. Görev Listesi öğesinin yapısını, görevler ekleyerek veya kaldırarak veya ek alanlar ekleyerek değiştirirseniz, bu değeri artırmanız gerekir. Bunu, veriler için temel bir sürüm numaralandırma sistemi gibi düşünebilirsiniz

const bayt eepromİmza = 1;

Başlangıçta, program yalnızca kodda tanımlanan verilerin imzasıyla eşleşiyorsa EEPROM'da depolanan verileri yüklemeye çalışır.

void restoreFromEEPROM() {

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

LCD ekran ve RTC modülü, Arduino ile iletişim kurmak için bir I2C arayüzü kullanır. Bu, her cihazın benzersiz bir I2C adresine sahip olmasını gerektirir. Birkaç farklı 16x2 ekran kartı denedim ve bazıları 0x27 adresini kullanırken, görünüşte aynı olan diğer kartlar 0x3f kullanıyor. Ekranınızın yalnızca bir dizi kare gösterdiğini ve metin olmadığını fark ederseniz, buradaki kodda tanımlanan adres değerini değiştirmeyi deneyin:

LiquidCrystal_PCF8574 lcd (0x27);

Bir RFID etiketi algılandığında, kod 4 baytlık tanımlayıcıyı okur ve bunu, ilgili kullanıcıyı bilinen kullanıcılar tablosundan aramaya çalışmak için kullanır. Etiket tanınmazsa, 4 baytlık tanımlayıcı seri monitör konsoluna gönderilir:

int GetUserFromRFIDTag(bayt RFID){

for(int i=0; i<numusers; {<numUsers; i++) { if(memcmp(userList.rfidUID, RFID, sizeof userList.rfidUID) == 0) { userList.userID döndür; } } Serial.print(F("Bilinmeyen RFID kartı algılandı: ")); for(byte i=0; i<4; i++) { Serial.print(RFID<0x10 ? " 0": " "); Serial.print(RFID, HEX); } -1 döndür; }

Bir kullanıcıya etiket atamak için, görüntülenen kimliği kopyalamanız ve 4 baytlık değeri, ilgili kullanıcının yanında, kodun üst kısmındaki users dizisine eklemeniz gerekir:

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

Adım 5: Kullanım

kullanım
kullanım
kullanım
kullanım

Buraya kadar geldiyseniz, sistemin kullanımı koddan oldukça örtük olmalıdır; Kullanıcılar istedikleri zaman döner düğmeyi çevirerek mevcut görevler listesinde gezinebilirler. Gecikmiş işler, başlıklarından sonra bir yıldızla işaretlenir.

Kullanıcılar, gerçekleştirecekleri bir görev seçtikten sonra, görevi tamamlandı olarak işaretlemek için okuyucuda kendi benzersiz RFID anahtarlıklarını tarayabilirler. Kimlikleri ve geçerli zaman kaydedilecek ve Arduino'nun EEPROM'una kaydedilecektir.

İlk önce doğru RFID etiketlerini kurmak için, taslağı Arduino seri monitör takılı olarak çalıştırmalısınız. Her etiketi tarayın ve seri monitörde görüntülenen 4 baytlık onaltılık UID değerini not alın. Ardından, bu etiket kimliğini uygun kullanıcıya atamak için kodun en üstünde belirtilen kullanıcı listesini değiştirin.

Her hafta uygun harçlık ödülünü tahsis etmek için geçen hafta boyunca kullanıcı tarafından tamamlanan tüm görevleri gösteren bir rapor yazdırma işlevi eklemeyi düşündüm. Ancak, olduğu gibi, çocuklarım harçlık ödüllerini tamamen unutmak için sistemi kullanmanın yeniliğinden memnun görünüyor! Ancak bu oldukça basit bir ekleme olacaktır ve okuyucu için bir alıştırma olarak bırakılmıştır:)

Önerilen: