İçindekiler:
Video: Görev Yöneticisi - Ev İşleri Yönetim Sistemi: 5 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
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
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
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:
Dış Mekan Ev İşleri için HUNIE-Robot Kasası: 6 Adım
Dış Mekan Ev İşleri için HUNIE-Robot Şasi: Yukarıda ilk robot yapımım var. Elektronik konusunda oldukça becerikliyim, otuz yıl önce biraz bilgisayar programcılığı yaptım ve RC Airplanes artık yaşam tarzıma uymadığından (sahaya çok uzak) yeni bir hobi arıyordum. inşa ediyorum
Entegre Envanter Yönetim Sistemi: 10 Adım (Resimlerle)
Entegre Envanter Yönetim Sistemi: Kilerimdeki her şeyi takip etmenin her zaman uygun fiyatlı bir yolunu istedim, bu yüzden birkaç ay önce tam da bunu yapacak bir proje üzerinde çalışmaya başladım. Amaç, kullanımı çok kolay olan basit, uygun fiyatlı bir sistem yapmaktı
Akıllı Çöp Yönetim Sistemi: 23 Adım
Akıllı Çöp Yönetim Sistemi: GİRİŞ.Bu proje ile ilgili Mevcut Sorun veya Sorun Mevcut toplumumuzun temel sorunu katı atık madde birikimidir. Toplumumuzun sağlığı ve çevre üzerinde daha büyük bir etkisi olacaktır. Algılama, monitör
İmkansız Görev Oyunu - Lazer Güvenliği: 6 Adım (Resimlerle)
Mission Impossible Game - Laser Security: Benim adım sun-woo, 6 yaşından itibaren yaklaşık 5 yıl maker hareketi ve adil deneyime sahip çocuk maker. 2014 yılında ilk maker fuarına ailemle yaptığım çalışmalarla katıldım. Şu anda 11 yaşındayım ve ilkokul 6. sınıf öğrencisiyim
Arduino Mega 2560 ve IoT Kullanarak Kaldırma Uygulaması için Motor Yönetim Sistemi: 8 Adım (Resimli)
Arduino Mega 2560 ve IoT Kullanan Kaldırma Uygulaması için Motor Yönetim Sistemi: Günümüzde IoT tabanlı mikrodenetleyiciler endüstriyel uygulamada yaygın olarak kullanılmaktadır. Ekonomik olarak bilgisayar yerine kullanılırlar. Projenin amacı, 3 fazlı asenkron motorun tamamen dijitalleştirilmiş kontrolü, veri kaydedicisi ve izlenmesidir