Mundarija:

Sensorli kayfiyat/Ambilight: 8 qadam
Sensorli kayfiyat/Ambilight: 8 qadam

Video: Sensorli kayfiyat/Ambilight: 8 qadam

Video: Sensorli kayfiyat/Ambilight: 8 qadam
Video: SEHRLI va SENSORLI noutbuk! | Asus ROG Flow X13 2024, Noyabr
Anonim
Sensorli kayfiyat/Ambilight
Sensorli kayfiyat/Ambilight

Bu juda ko'p funktsiyali kayfiyatni yaratish tajribamni tez yozish. Elektron sxemalar haqida ba'zi asosiy bilimlar kutilmoqda. Loyiha hali tugallanmagan, ba'zi qo'shimcha funktsiyalar va sozlashlarni amalga oshirish kerak, lekin u allaqachon funksional. Agar siz bu ko'rsatmaga qiziqsangiz, men uni yangilayman, chunki tizimning markazida Arduino joylashgan. U USB yoki har bir Capacitive sensorli kirishni qayta ishlaydi va RGB nurini boshqaradi. Bu ko'rsatma uch qismga bo'lingan:- sig'imli sensorli bo'lim ko'rinmas kirish tugmachalarini qamrab oladi- kayfiyat yoritgichi kayfiyatni boshqarishni o'z ichiga oladi- ambilight bo'limi ketma-ket port orqali kirishni o'z ichiga oladi, kompyuter dasturlari yordamida chiroqlarni boshqaradi. Ogohlantirish: Elektronika xavfli bo'lishi mumkin, etkazilgan zarar uchun o'zingiz javobgarsiz. Ba'zi kodlar forumlardan yig'iladi va uning egasining ismi bo'lmasligi mumkin. Iltimos, menga xabar bering, men sizning ismingizni qo'shaman.

1 -qadam: elementlar ro'yxati

Bu ko'rsatma uchun quyidagi komponentlar kerak bo'ladi:- Arduino+USB kabeli- Breadboard- Kompyuter quvvat manbai- 3x RGB tasmasi, dealextreme.com saytiga qarang.- 3x TIP120 FETs, https://uk.farnell.com/stmicroelectronics/tip120 /darlington-tranzistor-to-220/dp/9804005- Bir qancha qarshilik (6 * 10 kiloOm, 3 * 2 megaOhm)-Ko'p simlar. - Asboblar Imkoniyatli teginish- Tuproq plitalari uchun metall halqalar- Mis sim yoki plastinka- O'rnatish uchun biror narsa (kitob javoni kabi:)

2 -qadam: Capacitive Touch - asoslari va davri

Kapasitiv sensor - asoslar va davr
Kapasitiv sensor - asoslar va davr
Kapasitiv sensor - asoslar va davr
Kapasitiv sensor - asoslar va davr
Kapasitiv sensor - asoslar va davr
Kapasitiv sensor - asoslar va davr

Kitob javonlarimni bo'yab yurganim uchun, ularni ham "yangilash" uchun imkoniyat bor edi. Men kayfiyatni ko'rinmas teginish orqali boshqarishni xohlardim. Avvaliga mening rejam buning uchun maxsus ICdan foydalanish edi (Atmel QT240 kabi). Lekin keyin men Arduino dasturiy ta'minot orqali sig'imli sensorni taqlid qilishi mumkinligini tushuntirgan sahifaga tushib qoldim, elektron sxemani rasmda topish mumkin, sensor - bu spiralli mis sim (soddaligi uchun faqat bittasi ko'rsatilgan). Sezuvchanlik har bir pin oldida topilgan rezistorlar tomonidan nazorat qilinadi. Ular mutlaq MegaOhm (mutlaq teginish) dan 40 MegaOhmgacha (12-24 dyuym masofada) o'zgarishi mumkin, bu mutlaq yoki yaqin teginish zarurligiga bog'liq (men 2M Ohmli rezistorlar yordamida tugatdim). Sensor kerakli tarzda ishlamaguncha, qiymatlar bilan tajriba o'tkazing. Har bir spiralning orqa qismidagi zanjirlar eriga ulangan o'tkazgich yuzasini (yupqa o'tkazmaydigan bo'lak bilan ajratilgan) o'rnatish yaxshi bo'ladi. Shunday qilib, sensorlar barqarorroq bo'ladi va shovqin ta'siridan kamroq bo'ladi. Datchiklarni kitob javoniga o'rnatish haqida ba'zi rasmlar. Keyinchalik, kontaktlarning zanglashiga oson ulanish uchun vilka ham o'rnatilgan. To'ldiruvchi hamma narsani yashirish uchun ishlatiladi va shundan so'ng ular bo'yashga tayyor bo'ladi.

3 -qadam: Capacitive Touch - kod va test

Kapasitiv sensor - kod va test
Kapasitiv sensor - kod va test

Arduino -da disk raskadrovka uchun quyidagi manba kodidan foydalanish mumkin, arduino seriyali monitor yordamida qiymatlarni tekshiring. Oltita qiymat hosil bo'ladi. Birinchisi, tizimning ishlash ko'rsatkichidir. Ikkinchidan oltinchigacha - har bir pimdagi sezilgan qiymatlar. Barmog'ingizga yaqinlashganda qiymatlar ko'tarilishi kerak. Agar yo'q bo'lsa, noto'g'ri ulanish va aralashuvni tekshiring. Sezuvchanlikni aniqlash uchun qarshilik qiymatlarini o'zgartirish mumkin. Ma'lum bir mantiqiy panelda faollashtirilgan if-then tuzilmasini amalga oshirish orqali kalitni almashtirish mumkin. Bu oxirgi arduino kodida ishlatiladi. Qo'shimcha ma'lumotni o'qish tavsiya etiladi: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch disk raskadrovka kodi ---#o'z ichiga void setup () {CapSense cs_2_3 = CapSense (2, 4); // 2 va 4 -pinlar orasidagi 10M rezistor, 4 -pin - sensorli pin, sim qo'shing, foilCapSense cs_2_4 = CapSense (2, 7); // 2 va 7 -pinlar orasidagi 10M rezistor, 7 -pin - sensorli pin, sim qo'shing, foilCapSense cs_2_5 = CapSense (2, 8); // 2 va 8 -pinlar orasidagi 10M rezistor, 8 -pin - sensorli pin, sim qo'shing, foilCapSense cs_2_6 = CapSense (2, 12); // 2 va 12 -pinlar orasidagi 10M rezistor, 12 -pin - sensorli pin, sim qo'shing, foilCapSense cs_2_7 = CapSense (2, 13); // 2 va 13 -pinlar orasidagi 10M rezistor, 13 -pin - sensorli pin, simni qo'shish, foilvoidni o'rnatish () {Serial.begin (9600);} void loop () {long start = millis (); uzoq jami1 = cs_2_3.capSense (30); uzoq jami2 = cs_2_4.capSense (30); uzoq jami3 = cs_2_5.capSense (30); uzoq jami4 = cs_2_6.capSense (30); uzoq jami5 = cs_2_7.capSense (30); Serial.print (millis () - boshlash); // ishlashni millisekundlarda tekshirish Serial.print ("\ t"); // shamol oralig'ini tuzatish uchun tab belgisi Serial.print (jami1); // bosim sensori chiqishi 1 Serial.print ("\ t"); Serial.print (jami 2); // bosib chiqarish sensori chiqishi 2 Serial.print ("\ t"); Serial.print (jami 3); // bosib chiqarish sensori chiqishi 3 Serial.print ("\ t"); Serial.print (jami 4); // bosim sensori chiqishi 4 Serial.print ("\ t"); Serial.println (jami 5); // bosim sensori chiqishi 5 kechikish (10); // ma'lumotlarni ketma-ket port bilan cheklash uchun o'zboshimchalik bilan kechikish} --- END ---

4 -qadam: Mood Light - asoslar va davr

Kayfiyat nuri - asoslar va davr
Kayfiyat nuri - asoslar va davr
Kayfiyat nuri - asoslar va davr
Kayfiyat nuri - asoslar va davr
Kayfiyat nuri - asoslar va davr
Kayfiyat nuri - asoslar va davr

Endi tizimning chiqish qismini qurish vaqti keldi. Arduino PWM pinlari har bir rangni boshqarish uchun ishlatiladi. PWM puls kengligi modulyatsiyasini bildiradi, pinni juda tez yoqish va o'chirish orqali LEDlar 0 dan 255 gacha xiralashadi. Har bir pin FET tomonidan kuchaytiriladi. Hozircha, tizimda bitta rang uchun bitta kanal bor, ya'ni barcha RGB chiziqlari bir vaqtning o'zida boshqariladi va 3 ta PWM pinlari kerak (har bir rang uchun bitta). Kelajakda men har to'rtta RGB tasmasini boshqarishni xohlayman. Bu degani, 4*3 = 12 ta PWM pinlari (va, ehtimol, Arduino Mega). Yaxshi, ba'zi sxemalar uchun vaqt! Bu (rasmga qarang) sxemaning asosiy ifodasidir (tez orada yanada chiroyli bo'ladi). Kapasitiv datchiklar ham kiritilgan (yashil qism). Asosan, uchta komponentni tushuntirish kerak:- FETBu men aytgan kuchaytirgich. Unda darvoza, manba va drenaj bor. Darvozadagi (Arduino -ga ulangan) kichik oqim sezgilarini kuchaytiradi va 12 voltli RGB tasmasiga yo'l ochadi. Manba +12V bo'lishi kerak, GND (Ground) drenajlanishi kerak. To'g'ridan -to'g'ri aniqlash uchun FET spetsifikatsiyasi varag'ini tekshiring. Har bir RGB kanali o'z FET oldidan joylashtirilishi kerak. Bu ma'noda, u Arduino boshqariladigan kalit kabi harakat qiladi.- RGB tasmasi Bu 12 voltli RGB tasmasi keng tarqalgan anod (+) turiga kiradi. Bu shuni anglatadiki, umumiy sim +12V ga ulanishi kerak va oqim har bir alohida rangli kanal orqali o'tadi. Ip rezistorlar bilan jihozlangan, shuning uchun bu haqda tashvishlanmang!- Uchta 10k rezistorlar FET yoqilmasligi kerak. Yana uchtasi FET to'kadigan maksimal oqimni cheklaydi. Eng yaxshi uchta rezistor allaqachon RGB tasmasida. Men USB kabellarni RGB tasmalariga lehimladim, shuning uchun ularni modulli tarzda oson ulashim mumkin. Mening taxtamga eski uyadan vilkalar qo'yilgan. Sharbat uchun eski kompyuter quvvat manbaidan foydalaning, RGB tasmasini quvvatlantirish uchun 12V va oxir -oqibat, agar siz USB kabelsiz ishlashini xohlasangiz, kontaktlarning zanglashiga 5V.

5 -qadam: Kayfiyat nuri - kod va nazorat

Kayfiyat nuri sig'imli sensorlar tomonidan boshqariladi. Hozircha men faqat rang o'zgartirish uchun sensorlar 2 va 3 ni dasturlashtirdim. Boshqa sensorlar hozircha ishlamaydi. Bu erda kod: --- Arduino Mood Control Code ---#o'z ichiga const boolean invert = true; const long timeout = 10000; // Capacitive sensor declarationCapSense In1 = CapSense (2, 4); // 4 va 2 -pinlar orasidagi 2M rezistor, 2 -pin - sensorli pin, sim qo'shing, foilCapSense In2 = CapSense (2, 7); // 4 va 6 -pinlar orasidagi 2M rezistor, 6 -pin - sensorli pin, sim qo'shing, foilCapSense In3 = CapSense (2, 8); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensorli pin, sim qo'shing, foilCapSense In4 = CapSense (2, 12); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensorli pin, sim qo'shing, foilCapSense In5 = CapSense (2, 13); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensorli pin, sim, folga qo'shing // PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Boshqa o'zgaruvchilar rang1 = 128; // qizil rangdan boshlang, rang rang Brightness1 = 255; // to'liq yorqinlikda boshlang RedValue1, GreenValue1, BlueValue1; // RGB komponentlarivoid setup () {// sensorning vaqt tugashi qiymatlarini belgilash In1.set_CS_AutocaL_Millis (vaqt tugashi); In2.set_CS_AutocaL_Millis (tanaffus); In3.set_CS_AutocaL_Millis (tanaffus); In4.set_CS_AutocaL_Millis (tanaffus); In5.set_CS_AutocaL_Millis (vaqt tugashi);} void loop () {long start = millis (); uzoq jami1 = In1.capSense (30); uzoq total2 = In2.capSense (30); uzoq total3 = In3.capSense (30); uzoq total4 = In4.capSense (30); uzoq jami5 = In5.capSense (30); if (jami2> 150) {Rang1 ++; // rangni oshiring, agar (Color1> 255) {// Color1 = 0; }} boshqa if (jami3> 200) {Rang1--; // rangni kamaytiring, agar (Color1 <0) {// Color1 = 255; } // tusni rgb hueToRGB ga o'zgartirish (Color1, Brightness1); // ranglarni PWM pinlariga analogWrite yozish (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // rangni qizil, yashil va ko'k komponentlariga aylantirish funktsiyasi. vue hueToRGB (int hue, int yorqinligi) {unsigned int scaledHue = (tue * 6); imzosiz int segment = scaledHue / 256; // rang g'ildiragi atrofida 0 dan 5 gacha segmentlar unsigned int segmentOffset = scaledHue - (segment * 256); // segment ichidagi pozitsiyasi unsigned int compliment = 0; unsigned int prev = (nashrida * (255 - segmentOffset)) / 256; unsigned int next = (nashrida * segmentOffset) / 256; if (teskari) {yorqinlik = 255-nashrida; iltifot = 255; oldingi = 255-oldingi; keyingi = 255-keyingi; } switch (segment) {case 0: // red RedValue1 = yorqinlik; GreenValue1 = keyingi; BlueValue1 = iltifot; tanaffus; 1 -holat: // sariq RedValue1 = oldingi; GreenValue1 = yorqinlik; BlueValue1 = iltifot; tanaffus; 2 -holat: // yashil RedValue1 = iltifot; GreenValue1 = yorqinlik; BlueValue1 = keyingi; tanaffus; 3 -holat: // ko'k RedValue1 = iltifot; GreenValue1 = oldingi; BlueValue1 = yorqinlik; tanaffus; 4 -holat: // ko'k RedValue1 = keyingi; GreenValue1 = iltifot; BlueValue1 = yorqinlik; tanaffus; 5 -holat: // magenta standarti: RedValue1 = nashrida; GreenValue1 = iltifot; BlueValue1 = oldingi; tanaffus; }}--- OXIRI ---

6 -qadam: Ambi Light - Arduino tomoni

Albatta, kompyuterdan kayfiyat nurini boshqarish juda yaxshi bo'lardi. Masalan, ambilight yoki ovoz bilan boshqariladigan diskotekani yaratish. Bu bo'lim ambilight qismiga qaratiladi, kelajakda men qo'shimcha funktsiyalarni qo'shaman. Xo'sh, qo'shimcha sxema yo'q, chunki u Arduino -da mavjud. Biz ketma -ket muloqot qilish imkoniyatlari va ba'zi "Processing 1.0" dasturidan foydalanmoqchimiz. USB kabel orqali arduino-ni kompyuterga ulang (agar siz unga eskizlarni yuklayotgan bo'lsangiz, u allaqachon shunday). Arduino uchun ketma -ket aloqa uchun qo'shimcha kod qo'shish kerak. Kod kompyuterdan RGB qiymatlarini qabul qilsa, sig'im sensori aylanadi va tinglash rejimiga o'tadi. Keyin RGB qiymatlarini PWM pinlariga o'rnatadi. Bu hozircha mening oxirgi kodim, o'zgarishlarni o'zingiz tekshiring: --- Arduino Ambilight kodi ---#const boolean invert = true ni o'z ichiga oladi; const long timeout = 10000; long commStart = 0; char val; // Kapasitiv sensori deklaratsiyasiCapSense In1 = CapSense (2, 4); // 4 va 2 -pinlar orasidagi 2M rezistor, 2 -pin - sensorli pin, sim qo'shing, foilCapSense In2 = CapSense (2, 7); // 4 va 6 -pinlar orasidagi 2M rezistor, 6 -pin - sensorli pin, sim qo'shing, foilCapSense In3 = CapSense (2, 8); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensorli pin, sim qo'shing, foilCapSense In4 = CapSense (2, 12); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensorli pin, sim qo'shing, foilCapSense In5 = CapSense (2, 13); // 4 va 8 -pinlar orasidagi 2M rezistor, 8 -pin - sensori pimi, sim, folga qo'shing // PWM Pin deklaratsiyalari PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Boshqa o'zgaruvchilar rang1 = 128; // qizil rangdan boshlang, rang rang Brightness1 = 255; // to'liq yorqinlikda boshlang RedValue1, GreenValue1, BlueValue1; // RGB komponentlarivoidni o'rnatish () {Serial.begin (9600); // ketma -ket muloqotni boshlash // sensorni kutish vaqtini belgilash In1.set_CS_AutocaL_Millis (tanaffus); In2.set_CS_AutocaL_Millis (tanaffus); In3.set_CS_AutocaL_Millis (tanaffus); In4.set_CS_AutocaL_Millis (tanaffus); In5.set_CS_AutocaL_Millis (vaqt tugashi);} void loop () {long start = millis (); uzoq jami1 = In1.capSense (30); uzoq total2 = In2.capSense (30); uzoq total3 = In3.capSense (30); uzoq total4 = In4.capSense (30); uzoq jami5 = In5.capSense (30); if (Serial.available ()) {// Agar ma'lumotlar o'qilishi mumkin bo'lsa, val = Serial.read (); // uni o'qing va saqlang val commStart = millis (); if (val == 'S') {// Agar start char qabul qilinsa, (! Serial.available ()) {} // Keyingi qiymatgacha kuting. RedValue1 = Serial.read (); // Mavjud bo'lganda, tayinlang. while (! Serial.available ()) {} // Yuqoridagi kabi. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serial.print (GreenValue1); Serial.println (BlueValue1); } if if ((millis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // rangni oshiring, agar (Color1> 255) {// Color1 = 0; }} boshqa if (jami3> 200) {Rang1--; // rangni kamaytiring, agar (Color1 <0) {// Color1 = 255; }} hueToRGB (Rang1, Yorqinlik1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funktsiyani rangni qizil, yashil va ko'k komponentlariga aylantirish. imzosiz int segment = scaledHue / 256; // rang g'ildiragi atrofida 0 dan 5 gacha segmentlar unsigned int segmentOffset = scaledHue - (segment * 256); // segment ichidagi pozitsiyasi unsigned int compliment = 0; unsigned int prev = (nashrida * (255 - segmentOffset)) / 256; unsigned int next = (nashrida * segmentOffset) / 256; if (teskari) {yorqinlik = 255-nashrida; iltifot = 255; oldingi = 255-oldingi; keyingi = 255-keyingi; } switch (segment) {0 holat: // qizil RedValue1 = yorqinlik; GreenValue1 = keyingi; BlueValue1 = iltifot; tanaffus; 1 -holat: // sariq RedValue1 = oldingi; GreenValue1 = yorqinlik; BlueValue1 = iltifot; tanaffus; 2 -holat: // yashil RedValue1 = iltifot; GreenValue1 = yorqinlik; BlueValue1 = keyingi; tanaffus; 3 -holat: // ko'k RedValue1 = iltifot; GreenValue1 = oldingi; BlueValue1 = yorqinlik; tanaffus; 4 -holat: // ko'k RedValue1 = keyingi; GreenValue1 = iltifot; BlueValue1 = yorqinlik; tanaffus; 5 -holat: // magenta standarti: RedValue1 = nashrida; GreenValue1 = iltifot; BlueValue1 = oldingi; tanaffus; }}--- OXIRI ---

7 -qadam: Ambi Light - kompyuter tomoni

Kompyuterning yon tomonida Processing 1.0 eskizi ishga tushiriladi, Process.org ga qarang. Bu kichik (biroz chalkash) dastur o'rtacha ekran rangini har lahzada hisoblab chiqadi va uni ketma -ket portga yuboradi. Bu hozircha juda oddiy va u biroz sozlashni ishlatishi mumkin, lekin u juda yaxshi ishlaydi! Men kelajakda uni bir nechta alohida RGB chiziqlar va ekran bo'limlari uchun yangilayman. Siz buni o'zingiz qilishingiz mumkin, til juda sodda. Bu erda kod: --- 1.0 kodni qayta ishlash --- import ishlov berish.serial.*; Import java.awt. AWTException; import java.awt. Robot; import java.awt. Rectangle;; PImage screenShot; Serial myPort; statik public void main (String args ) {PApplet.main (new String {"--present", "shooter"});} void setup () {size (100, 100)); //size(ekran kengligi, ekran balandligi); // Nosozliklarni tuzatish maqsadida ketma -ket portlar ro'yxatini chop eting: println (Serial.list ()); // Bilamanki, mening mac seriyali ro'yxatimdagi birinchi port // har doim mening FTDI adapterim, shuning uchun Serial.list () [0] ni ochaman. // Windows mashinalarida bu odatda COM1 -ni ochadi. // Siz foydalanadigan portni oching. String portName = Serial.list () [0]; myPort = yangi Serial (this, portName, 9600);} void draw () {// image (screenShot, 0, 0, width, height); ekran tasviri = getScreen (); rang kleur = rang (0, 0, 0); kleur = rang (ekran tasviri); //myPort.write(int(red(kleur))+ ','+int (yashil (kleur))+','+int (ko'k (kleur))+13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur)))); //myPort.write (','); //myPort.write(int(ko'k (rang)))); //myPort.write (13); to'ldirish (kleur); to'g'ri (30, 20, 55, 55);} rang rangi (PImage img) {int cols = (img.width); int satrlari = (img balandligi); int o'lchovi = (img. kenglik*img balandligi); int r = 0; int g = 0; int b = 0; img.loadPixels (); // (int i = 0; i <(o'lchov/2); i ++) {r = r+((img.pixels >> 16) uchun 0xFF); g = g + ((img.piksel >> 8) & 0xFF); b = b + (img.pixels & 0xFF);} int o'rtacha_r = r/(o'lchov/2); int o'rtacha_g = g/(o'lchov/2); int o'rtacha_b = b/(o'lchov/2); rang o'rtacha_clr = rang (o'rtacha_r, o'rtacha_g, o'rtacha_b); myPort.write ("S"); myPort.write (o'rtacha_r); myPort.write (o'rtacha_g); myPort.write (Mean_b); return (Mean_clr);} PImage getScreen () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices (); DisplayMode rejimi = gs [0].getDisplayMode (); To'rtburchak chegaralari = yangi to'rtburchaklar (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage ish stoli = yangi BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); {desktop = new Robot (gs [0]) ni sinab ko'ring. createScreenCapture (chegaralar); } catch (AWTException e) {System.err.println ("Ekran yozib olinmadi."); } qaytish (yangi PImage (ish stoli));} --- END ---

8 -qadam: Natija

Natija
Natija
Natija
Natija

Va bu natija, aslida mening karavotimning pastki tomonida. Men hali ham matoni almashtirishim kerak, u yorug'likni ko'proq tarqatadi. Tez orada bu haqda ko'proq rasmlar. Umid qilamanki, sizga bu ko'rsatma yoqadi va umid qilamanki, bu sizning ijodingiz uchun asos bo'ladi. Vaqt cheklovlari tufayli men uni juda tez yozdim. Buni tushunish uchun sizga arduino/elektronika haqida ba'zi asosiy bilimlar kerak bo'lishi mumkin, lekin agar yaxshi qabul qilinsa, kelajakda uni yangilashni rejalashtiryapman.

Tavsiya: