Мазмуну:

Тапшырмалар менеджери - үй жумуштарын башкаруу системасы: 5 кадам (сүрөттөр менен)
Тапшырмалар менеджери - үй жумуштарын башкаруу системасы: 5 кадам (сүрөттөр менен)

Video: Тапшырмалар менеджери - үй жумуштарын башкаруу системасы: 5 кадам (сүрөттөр менен)

Video: Тапшырмалар менеджери - үй жумуштарын башкаруу системасы: 5 кадам (сүрөттөр менен)
Video: Сиздин мээңиз кандай иштейт👀??? Логикалык суроолор🤪!!! 2024, Ноябрь
Anonim
Тапшырмалар менеджери - Үй чарбасын башкаруу системасы
Тапшырмалар менеджери - Үй чарбасын башкаруу системасы
Тапшырмалар менеджери - Үй чарбасын башкаруу системасы
Тапшырмалар менеджери - Үй чарбасын башкаруу системасы

Мен үй чарбабызда (жана башка көптөгөн окурмандардын көйгөйлөрүндө) чыныгы көйгөйдү чечүүгө аракет кылгым келди, бул - балдарымды үй иштерине жардам берүү үчүн бөлүштүрүү, мотивациялоо жана сыйлык берүү.

Азырынча А4 форматындагы кагаздын муздаткычынын капталына жабыштырып койдук. Бул тапшырманы аткаруу үчүн табууга мүмкүн болгон чөнтөк акчалардын суммалары менен басылган милдеттердин торчосу бар. Идея, биздин балдардын бири үй жумушуна жардам берген сайын, алар ошол кутуга кене коюшат жана ар бир жуманын аягында биз тапкан акчаны кошуп, досканы аарчып, кайра баштайбыз. Бирок, тапшырмалардын тизмеси эскирип калган жана өзгөртүү кыйын, кээде тактайды жума сайын тазалап турууну унутпайбыз, кээ бир тапшырмаларды ар кандай жыштыкта аткаруу керек-кээ бирлери идеалдуу түрдө күн сайын жасалат, ал эми башкалар айына бир жолу болушу мүмкүн. Ошентип, мен бул көйгөйлөрдү чечүү үчүн Arduinoго негизделген түзмөк түзүүнү чечтим - менин ниетим - тапшырмаларды оңой кошууга/алып салууга/жаңыртууга мүмкүндүк берген нерсени, тапшырманы аткарууну жазуу жана кредит бөлүштүрүү. ылайыктуу адам жана ар кандай тапшырмаларды аткаруу керек болгон графиктерди жана жыштыктарды көзөмөлдөөнүн жана кечиктирилген тапшырмаларды белгилөөнүн жолу. Жана бул инструктивдүү "Task Manager" түзмөгү кантип чыкканын көрсөтөт.

1 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык

Долбоор бир нече жакшы колдонулган жана документтелген аппараттык компоненттерди колдонот:

  • Arduino UNO/Nano - бул системанын "мээси". Борттогу EEPROM эс тутуму өчүрүлгөндө да милдеттердин абалын сактоо үчүн колдонулат. Электр өткөргүчтөрүнүн оңой болушу үчүн, мен нанону бурагычка орноттум, бирок сиз кааласаңыз, анын ордуна GPIO төөнөгүчтөрүнө ширетилген туташууларды колдонсоңуз болот.
  • Реалдуу убакыт сааты (RTC) модулу - тапшырмалар аткарылган убакыт белгисин жазуу үчүн колдонулат жана акыркы учурду учурдагы убакыт менен салыштырып, кайсы тапшырмалар кечиктирилгенин аныктайт. Белгилей кетчү нерсе, мен алган бирдик LiPo аккумулятордук батареясы (LIR2032) менен иштөө үчүн иштелип чыккан. Бирок, мен заряддалбай турган CR2032 батареясын колдонуп жатам, ошондуктан заряддоо схемасын өчүрүү үчүн бир нече өзгөртүүлөрдү киргизишим керек болчу (сиз кайра заряддалбай турган батареяны кайра заряддоого аракет кылгыңыз келбейт, болбосо жарылуу болушу мүмкүн …). Тактап айтканда, мен R4, R5 жана R6 резисторлорун алып салдым жана диод D1 деп белгиленди. Мен андан кийин R6 болгон жерге кыска өтүүчү көпүрөнү түздүм. Бул өзгөрүүлөр төмөндөгү сүрөттө көрсөтүлгөн.
  • ISO14443 RFID окурманы + бир колдонуучуга бир теги- системаны "ойноштуруу" ыкмасы катары, менин балдарымдын ар биринин уникалдуу RFID теги бар. Тапшырманы тандап, андан кийин окурмандын тегин сүрүү тапшырманы аткарылды деп белгилөө үчүн колдонулат
  • 16x2 ЖК дисплейи - системага колдонуучу интерфейсин камсыз кылуу үчүн колдонулат. PCF8574A ажырагыс рюкзагы бар тактаны колдонуу менен, такта I2C интерфейси аркылуу Arduino менен туташтырылышы мүмкүн, бул зымдарды бир топ жеңилдетет.
  • Rotary Encoder - колдонуучулар жеткиликтүү болгон тапшырмаларды тандоо үчүн бурула турган негизги башкаруу баскычы болот
  • Wago коннекторлору - бул жабык туташтыргычтар компоненттерди зым менен бириктирүүнүн же бир нече модулдар үчүн жөнөкөй автобустарды түзүүнүн ыңгайлуу жолу болуп саналат, алардын ар бири жалпы негизди же 5В камсыздоону талап кылат.

2 -кадам: Кабелдөө

Электр өткөргүчтөрү
Электр өткөргүчтөрү

16x2 ЖК дисплейи жана DS1307 RTC экөө тең I2C интерфейсин колдонушат, бул ыңгайлуу, анткени ал зымдарды бир топ жөнөкөй кылат, Arduino A4 (SDA) жана A5 (SCL) казыктарына баруучу жуптарды гана талап кылат

MFRC-522 RFID окурманы 11 (MOSI), 12 (MISO) жана 13 (SCK) түзмөктөрдүн түйүндөрүн колдонгон SPI интерфейсин колдонот. Ошондой эле кулду тандоо жана линияны баштапкы абалга келтирүү талап кылынат, мен тийиштүү түрдө 10 жана 9 -казыктарга дайындадым

Ротари коддогучка бир жуп казык керек. Оптималдуу иштөө үчүн, эгер бул казыктар тышкы үзгүлтүктөрдү башкара алса, анда мен 2 жана 3 санариптик казыктарды колдонуп жатам. Сиз дагы кодерди которгуч катары чыкылдатыңыз, мен муну 4 -пинге туташтырдым. учурда коддо колдонулган, бул кошумча функцияларды кошуу үчүн пайдалуу болушу мүмкүн

Ыңгайлуулук үчүн мен WAGO 222 сериядагы туташтыргыч блокторун колдонуп жатам. Бул 2 жана 8 зымдарды каалаган жерге туташтыруунун бекем жана оңой жолун камсыз кылган тез туташтыргычтар жана Arduino долбоорлору үчүн абдан ыңгайлуу, алар бир нече модулдарды жерге же 5В линиясына бөлүшүүнү талап кылат, же сизде бир нече түзмөктөр бар. Ошол эле I2C же SPI автобусу, айт

Диаграмма баары кантип бириктирилгенин көрсөтөт.

3 -кадам: Курулуш

Мен электрониканы жайгаштыруу үчүн эң жөнөкөй 3D принтерин жасадым. Мурунку басылган тизмедегидей эле, муздаткычтын капталына бекитилип турушу үчүн, артына магниттерди койдум. Мен дагы USB розеткасын ачык калтырдым, анткени бул системага жаңы тапшырмаларды кошуу керек болсо, же кирүү жана бүткөн тапшырмаларды көрсөтүүчү маалыматтардын топтомун жүктөө үчүн колдонулат.

Мен STL файлдарын басып чыгаргандан кийин сактаган жокмун, бирок окшош (жана, балким, жакшыраак!) Учурлар нерселердин бардыгында бар. Же болбосо, сиз жакшы жыгач кутучаны курсаңыз болот, же электрониканы жайгаштыруу үчүн эски картон кутуну же контейнерди колдонсоңуз болот.

4 -кадам: Код

Code
Code

Толук комментарийленген код төмөндө жүктөө катары тиркелет. Бул жерде белгилей кетүү керек болгон бир нече маанилүү пункттар бар:

Мен жеке бир структураны түздүм, "тапшырма", ал бир нерсенин бардык касиеттерин камтыган маалыматтардын бирдиги. Тапшырмалар аталыштан турат, алар ЖК дисплейде кантип пайда болот (демек, 16 символдор менен чектелет), аларды аткаруу керек болгон жыштыгы жана акыркы жолу качан жана ким тарабынан аткарылган

структуралык тапшырма {

char taskName [16]; // Бул тапшырманын кыска, "достук" аталышы int repeatEachXDays дисплейинде көрүнөт; // Бул тапшырма кайталанган регулярдуулук, күндөрдө. 1 = Күнүмдүк, 7 = Жумалык ж.б. кол коюлбаган long lastCompletedTime; // Бул тапшырма акыркы жолу аткарылган убакыт белгиси int lastCompletedBy; // Бул тапшырманы акыркы жолу аткарган адамдын идентификатору};

Негизги маалымат структурасы "taskList" деп аталат, бул жөн эле өзүнчө тапшырмалар жыйнагы. Бул жерде сиз каалаган тапшырмаларды аныктай аласыз, алар акыркы аяктаган убакыты үчүн 0, ал эми акыркы жолу аткарган колдонуучунун идентификатору менен -1

taskList [numTasks] = {

Коддун жогору жагындагы константалар бөлүмүндө "eepromSignature" деп аталган бир гана байт мааниси бар. Бул маани EEPROMдо сакталган маалыматтардын жарактуу экендигин аныктоо үчүн колдонулат. Эгерде сиз taskList пунктунун структурасын өзгөртсөңүз, милдеттерди кошуу же алып салуу же кошумча талааларды кошуу менен, айтсаңыз, бул маанини көбөйтүү керек. Сиз муну маалыматтын негизги версия номерлөө системасы деп ойлосоңуз болот

const байт eepromSignature = 1;

Ишке киргенде, программа EEPROMда сакталган маалыматтарды коддо аныкталган маалыматтардын колтамгасына дал келсе гана жүктөөгө аракет кылат.

жараксыз калыбына келтирүүFromEEPROM () {

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

ЖК дисплей жана RTC модулу Arduino менен байланышуу үчүн I2C интерфейсин колдонот. Бул ар бир түзмөктүн уникалдуу I2C дарегине ээ болушун талап кылат. Мен бир нече түрдүү 16x2 дисплей такталарын сынап көрдүм, кээ бирлери 0x27 дарегин колдонот окшойт, башка окшош такталар 0x3f колдонушат. Эгерде сиз дисплейиңизде бир гана квадраттар жана текст жок экенин көрсөңүз, бул жерде коддо аныкталган дарек маанисин өзгөртүп көрүңүз:

LiquidCrystal_PCF8574 lcd (0x27);

RFID теги табылганда, код 4 байттык идентификаторду окуйт жана аны белгилүү колдонуучулардын таблицасынан тиешелүү колдонуучуну издөөгө аракет кылат. Эгерде тег таанылбаса, 4 байт идентификатору сериялык монитордун консолуна жөнөтүлөт:

int GetUserFromRFIDTag (байт RFID ) {

for (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {if (memcmp (userList .rfidUID, RFID, sizeof userList .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("Белгисиз RFID картасы табылды:")); for (байт i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }

Колдонуучуга тег ыйгаруу үчүн, көрсөтүлгөн ID'ди көчүрүп, 4 байттык маанини тиешелүү колдонуучунун жанына, коддун жогору жагындагы колдонуучулар массивине киргизүү керек:

const user userList [numUsers] = {{1, "Жинни", {0x00, 0x00, 0x00, 0x00}}, {2, "Гарри", {0x12, 0x34, 0x56, 0x78}}, {3, "Рон", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Гермиона", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

5 -кадам: Колдонуу

Колдонуу
Колдонуу
Колдонуу
Колдонуу

Эгер сиз буга чейин жетишкен болсоңуз, анда системанын колдонулушу коддон кыйла ачык болушу керек; каалаган убакта колдонуучулар жеткиликтүү тапшырмалар тизмесин жылдыруу үчүн айлануучу баскычты бура алышат. Мөөнөтү өтүп кеткен иштер аталышынан кийин жылдызча менен белгиленет.

Тапшырманы аткарууну тандап алгандан кийин, колдонуучулар тапшырманы аткарылды деп белгилөө үчүн уникалдуу RFID фобун окурман аркылуу сканерлей алышат. Алардын IDси жана учурдагы убактысы жазылып, Arduino EEPROMуна сакталат.

Биринчи туура RFID тегдерин орнотуу үчүн, эскизди Arduino сериялык монитору тиркелип иштетишиңиз керек. Ар бир тегди сканерлеңиз жана сериялык монитордо көрсөтүлгөн 4 байттык он алтылык UID маанисине көңүл буруңуз. Андан кийин, коддун жогору жагында жарыяланган колдонуучулардын тизмесин өзгөртүп, тийиштүү колдонуучуга бул тег IDсин ыйгарыңыз.

Мен жума сайын тиешелүү чөнтөк акчалай сыйлык бөлүштүрүү үчүн, колдонуучу тарабынан аткарылган бардык тапшырмаларды көрсөткөн отчетту басып чыгаруу үчүн функционалды кошууну карадым. Бирок, болгондой эле, менин балдарым чөнтөк акчалай сыйлыктарды толугу менен унутуп калышкан системаны колдонуунун жаңылыгына канааттанган окшойт! Бул абдан жөнөкөй кошумча болмок жана окурман үчүн көнүгүү катары калтырылган:)

Сунушталууда: