Kirish 2 1-bob. Elektr, gidravlik yoki pnevmatik yuritmalar 5
Foydalanilgan adabiyotlar
Download 0.66 Mb.
|
71-20 Murtazayev Azizbek kurs ishi
Foydalanilgan adabiyotlar
Karimov X.G‘., Bobojanov M.K. Avtomatik boshqarish va rostlash nazariyasi asoslari. Ma’ruzalar matni/ - Т., 2000. Аллаев K.P., Мирзабоев А. Малые колебания электрических систем, под редакцией проф.В.К.Соколова. —Т.: Издательство «Fan va technologiya», 2011. Теория автоматического управления, под редакцией А.В.Нетушила. -М.: «Высшая школа», 1976. Е.И.Юрьевич. Теория автоматического управления, «Энергия», -Л., 1975 г. Бабаков Н.А., Воронов А.А. Теория автоматического управления. —М.: «Высшая школа», 1986. Шаталов А.С. Теория автоматического управления. -М .: «Высшая школа», 1977. 7. Куропаткин Н.В. «Теория автоматического управления». -М .: «Высшая школа», 1973. “Axborot tizimlari va texnologiyalari”: Oliy o‘quv yurtlari talabalari uchun darslik//Mualliflar jamoasi: C.S.Gʻulomov, R.X.Alimov, X.S.Lutfullayev va boshk./; S.S.Gʻulomovning umumiy taxriri ostida.-T.: «Sharq», 2000.- 592 b. Aripov M.M, Muxammadiyev J.U. “Informatika va informasion texnologiyalar”. O‘quv qullanma. Toshkent shaxri, 2005 yil. Закиров Ф.И др. “Информатикаcu информационные c технологии”, Ташкент 2007 г. https://en.wikipedia.org/wiki/Arduino “Axborot tizimlari va texnologiyalari”: Oliy o‘quv yurtlari talabalari uchun darslik//Mualliflar jamoasi: C.S.Gʻulomov, R.X.Alimov, X.S.Lutfullayev va boshk./; S.S.Gʻulomovning umumiy taxriri ostida.-T.: «Sharq», 2000.- 592 b. https://www.electronicsforu.com/electronics-projects/joystick-controlled-industrial-automation-system Ilova // Biz IR va servolar bilan ishlash uchun kutubxonalardan foydalanamiz #include #include // Ishlatilgan pinlar sonini aniqlang#define RECV_PIN 2 #define SERV_PIN 3 #define BUZZER_PIN 4 // "Harakat" turini aniqlangenum Command { CMD_NONE = 0, CMD_OPEN = 1, CMD_CLOSE = 2 }; // IR kutubxonasidan foydalanish uchun ob'ekt yaratingIRrecv irrecv(RECV_PIN); decode_results results; // Masofadan boshqarish pulti tugma kodlarini saqlaydigan o'zgaruvchilar yarating unsigned long codeOpen = 0; unsigned long codeClose = 0; // Qabul qilingan buyruq va uning qabul qilingan vaqtini saqlash uchun o'zgaruvchilarni aniqlang unsigned long cmdStartTime; unsigned char cmd; // Doimiy aylanish servosini boshqarish uchun ob'ekt yarating Servo srv; // Amalga oshirish xususiyatlari tufayli IRremote kutubxonasidan foydalanib bo'lmaydi // ovozli signal funksiyasi bilan birga (ular bir xil uzilishdan foydalanadi). Kimga // ushbu muammoni engish uchun biz uzilishlardan foydalanmasdan versiyamizni amalga oshirdik // funktsiyalari beep. void beeep(int pin, int freq, unsigned long duration) { unsigned long start; // PIN-kodni chiqishga tarjima qiladi pinMode(pin, OUTPUT); // Ijro boshlangan lahzani eslang start = millis(); // Davomiyligi millisekundlar uchun signal while (millis() - start < duration) { // Ovozli signal chastotasi pin holati o'zgarishi orasidagi pauzalar bilan aniqlanadi digitalWrite(pin, HIGH); delay(1000/freq/2); digitalWrite(pin, LOW); delay(1000/freq/2); } // Har ehtimolga qarshi pinni o'qish rejimiga qaytaradi pinMode(pin, INPUT_PULLUP); } // Qurilmani "o'rganish" funktsiyasi (ochish / yopish tugmalarining kodlarini yodlash) void learn(void) { // To'g'ri buyruqni kuting // (siklni tugatish sharti uning tanasida) while (true) { if (irrecv.decode(&results)) { // Kod bor. Keling, kutubxonaga tadbirni o'tkazganimizni aytaylik. irrecv.resume(); // 16 bitdan qisqa kodlarni o'tkazib yuborish (bizning masofadan boshqarish pultlarimiz 16 yoki 32 bit kodlarni berdi, // qolganlari xato deb hisoblanadi) if (results.bits >= 16) { // Qabul qilingan kodni ochish uchun kod sifatida saqlang codeOpen = results.value; // Tasdiqlash uchun tanlang beeep(BUZZER_PIN, 500, 100); break; } // Biz bir xil kodlar to'plamini tasodifiy qabul qilishni o'tkazib yuborish uchun 100 ms kutamiz delay(100); } } // Har holda, biz 200 ms kutamiz (foydalanuvchi tugmachalarda tezroq bo'lmasligi aniq. // bosing) delay(200); // Xuddi shu usuldan foydalanib, biz ikkinchi kodni olamiz (yopish uchun) while (true) { if (irrecv.decode(&results)) { irrecv.resume(); if (results.bits >= 16 && results.value != codeOpen) { codeClose = results.value; beeep(BUZZER_PIN, 500, 100); break; } delay(100); } } } // Qurilmani ishga tushirish funksiyasi void setup(void) { // Kutubxonani ishga tushiring IRRemote irrecv.enableIRIn(); // Buyruqni ishga tushiring (buyruq yo'q edi) cmd = CMD_NONE; // Foydalanuvchiga biz uch marta tanlash bilan boshlaganimizni ayting beeep(BUZZER_PIN, 500, 100); delay(100); beeep(BUZZER_PIN, 500, 100); delay(100); beeep(BUZZER_PIN, 500, 100); delay(100); // "trening" protsedurasini boshlang learn(); // Biz mashg'ulot jarayonining oxiriga imzo chekish uchun ovqatlanamiz beeep(BUZZER_PIN, 2000, 1000); } // Doimiy aylanish servosini ishga tushiringvoid start(void) { srv.attach(SERV_PIN); srv.write(cmd == CMD_OPEN ? 0 : 120); } // motorni to'xtatingvoid stop(void) { // Doimiy aylanadigan servoni to'xtatishning eng oson yo'li - ajratish // от неё srv.detach(); } // Dasturning ish aylanishi void loop(void) { unsigned long codeValue; int codeLen; // Buyruqni IR orqali skanerlashni boshlang if (irrecv.decode(&results)) { // Biz kutubxonaga uning ma'lumotlarini olganligimiz haqida xabar beramiz irrecv.resume(); // Kod va kod uzunligini oling codeValue = results.value; codeLen = results.bits; // Yomon kodlarni olib tashlang if (codeLen >= 16) { // Agar ochish uchun kod kelgan bo'lsa va haydovchi aylanmayapti // qarama-qarshi tomon, ochishni yoqish. if (codeValue == codeOpen && cmd != CMD_CLOSE) { cmd = CMD_OPEN; cmdStartTime = millis(); start(); } else if (codeValue == codeClose && cmd != CMD_OPEN) { // Agar yopish kodi kelgan bo'lsa va hozirda haydovchi aylanmayapti // qarama-qarshi tomon, ochishni yoqish. cmd = CMD_CLOSE; cmdStartTime = millis(); start(); } // Agar aylanish yo'nalishini keskin o'zgartirish uchun buyruq kelsa, biz saqlaymiz // bunday yomon buyruqni e'tiborsiz qoldirib, o'limdan xizmat qiling. } else if (codeLen == 0 && (cmd == CMD_OPEN || cmd == CMD_CLOSE)) { // Ba'zi masofadan boshqarish pultlari tugma bosilganda kod yuboradi // nol uzunlik. Biz buni buyruqning takrorlanishi deb hisoblaymiz. cmdStartTime = millis(); } delay(100); } // Bu erda biz oxirgi buyruq olinganidan keyin 500ms drayverni o'chirib qo'yamiz if (cmd == CMD_OPEN || cmd == CMD_CLOSE) { if (millis() - cmdStartTime > 500) { cmd = CMD_NONE; stop(); // Drayv to'liq to'xtaguncha kuting delay(1000); } } } Download 0.66 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling