Mundarija:

Vazifa menejeri - uy ishlarini boshqarish tizimi: 5 qadam (rasmlar bilan)
Vazifa menejeri - uy ishlarini boshqarish tizimi: 5 qadam (rasmlar bilan)

Video: Vazifa menejeri - uy ishlarini boshqarish tizimi: 5 qadam (rasmlar bilan)

Video: Vazifa menejeri - uy ishlarini boshqarish tizimi: 5 qadam (rasmlar bilan)
Video: “Atom” innovatsion ta’lim markazida kimyoviy tajriba. “Qo’lda olov yoqish” 2024, Iyul
Anonim
Vazifa menejeri - uy ishlarini boshqarish tizimi
Vazifa menejeri - uy ishlarini boshqarish tizimi
Vazifa menejeri - uy ishlarini boshqarish tizimi
Vazifa menejeri - uy ishlarini boshqarish tizimi

Men o'z uyimdagi (va menimcha, boshqa ko'plab kitobxonlarning) muammolarini hal qilishga harakat qilmoqchi edim, bu - mening bolalarimni uy ishlarida yordam berishlari uchun qanday taqsimlash, rag'batlantirish va mukofotlash.

Hozirgacha biz muzlatgich yon tomoniga yopishtirilgan A4 qog'ozli varaqni saqlaganmiz. Unda vazifalarni bajarish uchun to'planishi mumkin bo'lgan cho'ntak pullari ko'rsatilgan vazifalar tarmog'i yozilgan. Bizning fikrimiz shuki, har safar bizning bolalarimiz uy ishlarida yordam berishganda, ular o'sha qutiga belgi qo'yishadi va har hafta oxirida biz topilgan pulni yig'amiz, taxtani artamiz va qaytadan boshlaymiz. Biroq, vazifalar ro'yxati eskirgan va o'zgartirish qiyin, ba'zida biz har hafta taxtani artib tashlashni eslay olmaymiz va ba'zi vazifalarni har xil chastotalarda bajarish kerak-ba'zilari har kuni bajarilishi mumkin. boshqalar oyiga bir marta bo'lishi mumkin. Shunday qilib, men ushbu muammolarni hal qilish uchun Arduino -ga asoslangan qurilmani yaratishga kirishdim - mening vazifam vazifalarni osonlik bilan qo'shish/o'chirish/yangilash imkonini beradigan, vazifa bajarilgan vaqtni qayd etish va unga kredit ajratish mexanizmini yaratish edi. tegishli shaxs va har xil vazifalar bajarilishi kerak bo'lgan turli jadvallar va chastotalarni kuzatib borish va kechiktirilgan vazifalarni ajratib ko'rsatish usuli. Va bu ko'rsatma, natijada "Vazifa menejeri" qurilmasi qanday paydo bo'lganligini ko'rsatadi.

1 -qadam: Uskuna

Uskuna
Uskuna
Uskuna
Uskuna

Loyiha yaxshi ishlatilgan va hujjatlashtirilgan bir nechta apparat komponentlaridan foydalanadi:

  • Arduino UNO/Nano - bu tizimning "miyasi". Bortdagi EEPROM xotirasi, tizim o'chirilgan bo'lsa ham, vazifalar holatini saqlash uchun ishlatiladi. Kabel o'tkazishni osonlashtirish uchun men Nano -ni vintlardek qistirgichga o'rnatdim, lekin siz xohlasangiz, uning o'rniga GPIO pinlariga lehimlashingiz yoki o'ralgan ulanishlardan foydalanishingiz mumkin.
  • Haqiqiy vaqtda soat (RTC) moduli - vazifalar bajarilgan vaqt tamg'asini yozib olish va oxirgi vaqtni hozirgi vaqt bilan taqqoslab, qaysi vazifalar kechikkanligini aniqlash uchun ishlatiladi. E'tibor bering, men olgan qurilma qayta zaryadlanuvchi LiPo batareyasi (LIR2032) bilan ishlash uchun mo'ljallangan. Ammo, men zaryadlanmaydigan CR2032 batareyasidan foydalanayapman, shuning uchun zaryad zanjirini o'chirish uchun bir nechta o'zgartirishlar kiritishim kerak edi (siz zaryadlanmaydigan batareyani zaryadlashni xohlamaysiz, aks holda portlash yuz berishi mumkin …). Xususan, men R4, R5 va R6 rezistorlarini olib tashladim va D1 deb belgilangan diod. Keyin men R6 bo'lgan joyni kesib o'tadigan qisqa ko'prik yaratdim. Ushbu o'zgarishlar quyidagi fotosuratda ko'rsatilgan.
  • ISO14443 RFID o'quvchi + har bir foydalanuvchiga bitta teg- tizimni "o'yinlash" usuli sifatida, mening har bir farzandim o'ziga xos RFID yorlig'iga ega. Vazifani tanlab, keyin uni o'quvchi bo'ylab tegib o'tish vazifani bajarilgan deb belgilashning mexanizmi bo'ladi
  • 16x2 LCD displey - tizimning foydalanuvchi interfeysini ta'minlash uchun ishlatiladi. PCF8574A ajralmas ryukzakka ega bo'lgan taxtadan foydalanib, taxtani I2C interfeysi orqali Arduino -ga ulash mumkin, bu simni sezilarli darajada soddalashtiradi.
  • Rotary Enkoder - bu foydalanuvchilar turli vazifalarni tanlash uchun aylanadigan asosiy boshqaruv tugmasi bo'ladi
  • Wago ulagichlari - bu birlashtiruvchi ulagichlar - bu komponentlarni bir -biriga ulash yoki bir nechta modullar uchun oddiy avtobuslar yaratish uchun qulay usuldir, ularning har biri umumiy yoki 5V quvvat manbasini talab qiladi.

2 -qadam: simlarni ulash

Ulanish
Ulanish

16x2 LCD displey va DS1307 RTC ikkalasi ham I2C interfeysidan foydalanadi, chunki bu simni ancha soddalashtiradi, buning uchun Arduino A4 (SDA) va A5 (SCL) pinlariga boradigan bir juft sim kerak bo'ladi

MFRC-522 RFID o'quvchi SPI interfeysidan foydalanadi, u 11 (MOSI), 12 (MISO) va 13 (SCK) qattiq apparat pinlarini ishlatadi. Bundan tashqari, men mos ravishda 10 va 9 -pinlarga tayinlangan qulni tanlash va qayta o'rnatish liniyasini talab qiladi

Aylanadigan kodlovchi bir juft pinni talab qiladi. Optimal ishlash uchun, agar bu pinlar tashqi uzilishlarni bajara oladigan bo'lsa, yaxshi bo'ladi, shuning uchun men 2 va 3 raqamli pimlardan foydalanmoqdaman. Bundan tashqari, siz kodlagichni kalit sifatida bosishingiz mumkin va men buni 4 -pinli simga ulaganman. hozirda kodda ishlatilgan bo'lsa, sizga qo'shimcha funktsiyalarni qo'shish foydali bo'lishi mumkin

Qulaylik uchun men WAGO 222 seriyali ulagich bloklaridan foydalanaman. Bu 2 dan 8 gacha simlarni bir-biriga ulashning mustahkam va oson usulini ta'minlaydigan tez ulanadigan konnektorlar va Arduino loyihalari uchun juda qulaydir, ular bir nechta modullarni erga yoki 5V tarmoqqa ulashni talab qiladi, yoki sizda bir nechta qurilmalar mavjud. bir xil I2C yoki SPI avtobusi, deylik

Diagramma hamma narsa qanday bog'langanligini ko'rsatadi.

3 -qadam: qurilish

Men elektronikani joylashtirish uchun juda oddiy 3D bosma sumkani yaratdim. Men jihozni muzlatgichning yon tomoniga mahkamlash uchun orqaga magnit qo'ydim, xuddi oldingi bosilgan ro'yxatdagidek. Men USB rozetkasini ochiq qoldirdim, chunki bu tizimga yangi vazifalar qo'shish yoki tizimga kirish va bajarilgan vazifalarni ko'rsatadigan ma'lumotlar to'plamini yuklab olish uchun kerak bo'lganda ishlatiladi.

Men STL fayllarini chop qilgandan so'ng saqlamadim, lekin shunga o'xshash holatlar ko'p (va, ehtimol, yaxshiroq!) Thingiverse.com saytida mavjud. Shu bilan bir qatorda, siz yog'ochdan yasalgan yaxshi qutini yasashingiz yoki elektronikani saqlash uchun eski karton quti yoki idishdan foydalanishingiz mumkin.

4 -qadam: kod

Kod
Kod

To'liq sharhlangan kod quyida yuklash sifatida biriktirilgan. Bu erda e'tiborga olish kerak bo'lgan bir nechta muhim fikrlar:

Men "vazifa" maxsus tuzilmasini yaratdim, bu bitta ob'ektdagi vazifaning barcha xususiyatlarini o'z ichiga olgan ma'lumotlar birligi. Vazifalar nomdan iborat bo'lib, ular LCD displeyda qanday paydo bo'ladi (va shuning uchun 16 ta belgi bilan chegaralanadi), ularni bajarish chastotasi va oxirgi marta qachon va kim tomonidan bajarilganligi

tuzilish vazifasi {

char taskName [16]; // Bu vazifaning qisqa, "do'stona" nomi int repeatEachXDays displeyida ko'rinadi; // Muntazamlik, bu vazifa takrorlanadigan kunlarda. 1 = Kundalik, 7 = Haftalik va h.k. imzolanmagan long lastCompletedTime; // Bu vazifa oxirgi bajarilgan vaqt tamg'asi int lastCompletedBy; // bu vazifani oxirgi marta bajargan shaxsning identifikatori};

Ma'lumotlarning asosiy tuzilishi "taskList" deb nomlanadi, bu shunchaki alohida vazifalar majmuasidir. Siz bu erda xohlagan vazifalarni belgilashingiz mumkin, ular oxirgi bajarilgan vaqt uchun 0 va oxirgi bajargan foydalanuvchining identifikatori uchun -1 bilan belgilanadi

vazifa ro'yxati [numTasks] = {

Kodning yuqori qismidagi doimiylar bo'limida "eepromSignature" deb nomlangan bitta baytli qiymat mavjud. Bu qiymat EEPROMda saqlangan ma'lumotlarning to'g'riligini aniqlash uchun ishlatiladi. Agar siz taskList elementining tuzilishini o'zgartirsangiz, vazifalarni qo'shish yoki o'chirish yoki qo'shimcha maydonlarni qo'shish orqali aytaylik, bu qiymatni oshirish kerak. Siz buni ma'lumotlar uchun asosiy versiya raqamlash tizimi deb o'ylashingiz mumkin

const bayt eepromSignature = 1;

Ishga tushganda, dastur faqat EEPROM -da saqlangan ma'lumotlarni kodda ko'rsatilgan ma'lumotlarning imzosiga mos kelganda yuklashga harakat qiladi.

bekor qilishFromEEPROM () {

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

LCD displey va RTC moduli Arduino bilan aloqa qilish uchun I2C interfeysidan foydalanadi. Bu har bir qurilmaning yagona I2C manziliga ega bo'lishini talab qiladi. Men bir nechta turli xil 16x2 displeyli taxtalarni sinab ko'rdim va ba'zilari 0x27 manzilidan foydalanganga o'xshaydi, boshqa bir xil ko'rinadigan taxtalar 0x3f dan foydalanadi. Agar siz displeyda faqat bir qator kvadratlar va matn yo'qligini ko'rsangiz, kodda ko'rsatilgan manzil qiymatini o'zgartirishga harakat qiling:

LiquidCrystal_PCF8574 lcd (0x27);

Agar RFID yorlig'i aniqlansa, kod 4 baytli identifikatorni o'qiydi va undan ma'lum foydalanuvchilar jadvalidan tegishli foydalanuvchini qidirishga harakat qiladi. Agar teg aniqlanmasa, 4 baytli identifikator ketma -ket monitor konsoliga yuboriladi:

int GetUserFromRFIDTag (RFID bayt ) {

uchun (int i = 0; i <raqamlar; i ++) = "" {<raqamli foydalanuvchilar; i ++) {if (memcmp (userList .rfidUID, RFID, userList sizeof .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Noma'lum RFID kartasi aniqlandi:")); uchun (bayt i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } qaytarish -1; }

Foydalanuvchiga teg tayinlash uchun siz ko'rsatilgan identifikatorni nusxalashingiz va tegishli baytning yonidagi kodning yuqori qismidagi foydalanuvchilar qatoriga 4 baytli qiymatni kiritishingiz kerak:

const userList [numUsers] = {{1, "Jin", {0x00, 0x00, 0x00, 0x00}}, {2, "Garri", {0x12, 0x34, 0x56, 0x78}}, {3, "Ron", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Germiona", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

5 -qadam: Foydalanish

Foydalanish
Foydalanish
Foydalanish
Foydalanish

Agar siz hozirgacha buni amalga oshirgan bo'lsangiz, tizimdan foydalanish koddan ancha aniq bo'lishi kerak; istalgan vaqtda foydalanuvchilar aylanadigan tugmachani burab, mavjud vazifalar ro'yxatiga o'tishlari mumkin. Kechiktirilgan ishlar sarlavhasidan keyin yulduzcha bilan belgilanadi.

Ishni tanlagandan so'ng, foydalanuvchilar o'quvchining o'ziga xos RFID fobini skanerdan o'tkazib, vazifani bajarilgan deb belgilashlari mumkin. Ularning identifikatori va joriy vaqti qayd qilinadi va Arduino EEPROM -da saqlanadi.

To'g'ri RFID teglarini o'rnatish uchun siz eskizni Arduino seriyali monitorini biriktirib ishga tushirishingiz kerak. Har bir tegni skanerlang va ketma-ket monitorda ko'rsatilgan 4 baytli olti burchakli UID qiymatiga e'tibor bering. Keyin ushbu teg identifikatorini tegishli foydalanuvchiga berish uchun kodning yuqori qismida e'lon qilingan foydalanuvchi ro'yxatini o'zgartiring.

Men har hafta tegishli cho'ntak pul mukofotini ajratish uchun oxirgi haftada foydalanuvchi tomonidan bajarilgan barcha vazifalarni ko'rsatadigan hisobotni chop etish uchun funktsiyalarni qo'shishni o'ylab qoldim. Ammo, shunday bo'lganda ham, mening bolalarim tizimdan foydalanishning yangiliklaridan qoniqish hosil qilishdi, chunki cho'ntak pul mukofotlari haqida unutishdi! Bu juda oddiy qo'shimcha bo'ladi va o'quvchi uchun mashq sifatida qoldiriladi:)

Tavsiya: