Mündəricat:

Kapasitiv Touch Mood/Ambilight: 8 addım
Kapasitiv Touch Mood/Ambilight: 8 addım

Video: Kapasitiv Touch Mood/Ambilight: 8 addım

Video: Kapasitiv Touch Mood/Ambilight: 8 addım
Video: Very Easy! Capacitive touch Mood/Ambilight [Full Tutorial] 2024, Iyul
Anonim
Kapasitiv Touch Mood/Ambilight
Kapasitiv Touch Mood/Ambilight

Bu təlimat, çoxfunksiyalı bir əhval-ruhiyyə yaratmaq təcrübəmi qısa bir şəkildə yazmaqdır. Elektron sxemlər haqqında bəzi əsas biliklər gözlənilir. Layihə hələ bitməyib, bəzi funksiyalar əlavə etmək və düzəltmək lazımdır, ancaq artıq funksionaldır. Əgər uşaqlar bu təlimata heyran olsanız, onu yeniləyəcəyəm. Sistemin əsasını Arduino təşkil edir. USB və ya Kapasitif toxunma girişlərinin hər birinin girişini işləyəcək və RGB işığını idarə edəcək. Bu təlimat üç hissəyə bölünür:- Kapasitif toxunma bölməsi görünməz giriş düymələrini əhatə edir- moodlight bölməsi moodlight işığının idarə edilməsini əhatə edir- ambilight bölməsi işıqları idarə etmək üçün bir kompüter proqramı tərəfindən yaradılan RGB dəyərlərini işlədir. İmtina: Elektronika təhlükəli ola bilər, hər hansı bir ziyana görə özünüz cavabdehsiniz. Bəzi kod forumlardan toplanır və sahibinin adı ola bilməz. Zəhmət olmasa mənə bildirin və adınızı əlavə edim.

Addım 1: maddə siyahısı

Bu təlimat üçün aşağıdakı komponentlərə ehtiyac var:- Arduino+USB kabeli- Breadboard- Kompüterin enerji təchizatı- 3x RGB şeridi, dealextreme.com saytına baxın.- 3x TIP120 FETs, https://uk.farnell.com/stmicroelectronics/tip120 kimi /darlington-transistor-to-220/dp/9804005- Bir dəstə müqavimət (6 * 10 kiloOhm, 3 * 2 megaOhm)-Çox tel. - Alətlər Kapasitiv toxunuş- Zəmin lövhələri üçün metal üzüklər- Mis tel və ya lövhə- Qurmaq üçün bir şey (kitab rəfi kimi:)

Addım 2: Kapasitif Toxunma - Əsaslar və Dövrə

Kapasitif Toxunma - Əsaslar və Dövrə
Kapasitif Toxunma - Əsaslar və Dövrə
Kapasitif Toxunma - Əsaslar və Dövrə
Kapasitif Toxunma - Əsaslar və Dövrə
Kapasitif Toxunma - Əsaslar və Dövrə
Kapasitif Toxunma - Əsaslar və Dövrə

Kitab rəflərimi çəkdiyim üçün onları da "təkmilləşdirmək" üçün imkanım var idi. Görünməz toxunma vasitəsi ilə əhval -ruhiyyəni idarə etmək istədim. Əvvəlcə planım bunun üçün xüsusi bir IC istifadə etmək idi (Atmel QT240 kimi). Ancaq sonra Arduinonun bir proqramla kapasitif bir sensoru təqlid edə biləcəyini izah edən bir səhifəyə rast gəldim. Şəkildə elektron dövrə tapıla bilər, sensor spiralli mis teldir (sadəlik üçün yalnız biri göstərilib). Həssaslıq hər pindən əvvəl tapılan rezistorlar tərəfindən idarə olunur. Mütləq və ya yaxın təmasın lazım olub-olmamasından asılı olaraq 1 MegaOhm (mütləq toxunma) ilə 40 MegaOhm (12-24 düym aralığında) arasında dəyişə bilər (2M Ohm rezistorlardan istifadə etdim). Sensor istədiyiniz kimi davranana qədər dəyərləri sınayın. Hər bir spiralin arxasındakı sxemlərin zəminə bağlı olan bəzi keçirici səthi (nazik keçirici olmayan bir parça ilə ayrılmış) quraşdırmaq yaxşı bir fikirdir. Bu şəkildə sensorlar daha sabit olacaq və səs -küydən daha az təsirlənəcək. Sensorları kitab rəfinə quraşdırmaqla bağlı daha çox şəkil. Sonradan dövrə asanlıqla qoşulmaq üçün bir fiş də quraşdırılmışdır. Doldurucu hər şeyi gizlətmək üçün istifadə olunur və bundan sonra boyanmağa hazırdır.

Addım 3: Kapasitif Toxunuş - Kod və Test

Kapasitiv Toxunuş - Kod və Test
Kapasitiv Toxunuş - Kod və Test

Aşağıdakı mənbə kodu Arduino -da ayıklama üçün istifadə edilə bilər, arduino serial monitoru ilə dəyərləri yoxlayın. Altı dəyər yaradılır. Birincisi, sistemin performansını ölçməkdir. İkincidən altıncıya qədər hər pindəki hiss olunan dəyərlərdir. Barmağınıza yaxınlaşanda dəyərlər yüksəlməlidir. Əks təqdirdə, pis əlaqələr və müdaxilə olub olmadığını yoxlayın. Həssaslığı təyin etmək üçün müqavimət dəyərləri dəyişdirilə bilər. Müəyyən bir məntiqi tresholdda aktivləşdirilən if-then quruluşunu tətbiq edərək, bir keçid edilə bilər. Bu, son arduino kodunda istifadə ediləcək. Daha çox məlumatı oxumaq üçün tövsiyə olunur: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch Hata Ayıklama Kodu ---#boşluq quruluşunu daxil edir () {CapSense cs_2_3 = CapSense (2, 4); // 2 və 4 sancaqlar arasındakı 10M müqavimət, pin 4 sensor pinidir, tel əlavə edin, foilCapSense cs_2_4 = CapSense (2, 7); // 2 və 7 sancaqlar arasındakı 10M müqavimət, pin 7 sensor pimi, tel əlavə edin, foilCapSense cs_2_5 = CapSense (2, 8); // 2 və 8 sancaqlar arasındakı 10M müqavimət, pin 8 sensor pinidir, tel əlavə edin, foilCapSense cs_2_6 = CapSense (2, 12); // 2 və 12 sancaqlar arasındakı 10M müqavimət, pin 12 sensor pinidir, tel əlavə edin, foilCapSense cs_2_7 = CapSense (2, 13); // 2 və 13 -cü pinlər arasındakı 10M müqavimət, pin 13 sensor pinidir, tel əlavə edin, foilvoid quraşdırma () {Serial.begin (9600);} void loop () {long start = millis (); uzun ümumi1 = cs_2_3.capSense (30); uzun total2 = cs_2_4.capSense (30); uzun total3 = cs_2_5.capSense (30); uzun total4 = cs_2_6.capSense (30); uzun total5 = cs_2_7.capSense (30); Serial.print (millis () - başlanğıc); // millisekundlarda Serial.print ("\ t") performansını yoxlayın; // külək aralığını düzəltmək üçün nişanə xarakteri Serial.print (cəmi1); // çap sensoru çıxışı 1 Serial.print ("\ t"); Serial. çap (cəmi2); // çap sensoru çıxışı 2 Serial.print ("\ t"); Serial. çap (cəmi 3); // çap sensoru çıxışı 3 Serial.print ("\ t"); Serial. çap (cəmi 4); // çap sensoru çıxışı 4 Serial.print ("\ t"); Serial.println (cəmi 5); // çap sensoru çıxışı 5 gecikmə (10); // məlumatları seriya portu ilə məhdudlaşdırmaq üçün ixtiyari gecikmə} --- END ---

Addım 4: Mood Light - Əsaslar və Dövrə

Mood Light - Əsaslar və Dövrə
Mood Light - Əsaslar və Dövrə
Mood Light - Əsaslar və Dövrə
Mood Light - Əsaslar və Dövrə
Mood Light - Əsaslar və Dövrə
Mood Light - Əsaslar və Dövrə

İndi sistemin çıxış hissəsini qurmağın vaxtıdır. Arduino PWM pinləri hər rəngi idarə etmək üçün istifadə olunacaq. PWM, bir pimi çox tez açaraq söndürməklə Pulse Width Modulation deməkdir, ledlər 0 -dan 255 -ə qədər qaralacaq. Hələlik sistemin hər rəng üçün yalnız bir kanalı var, yəni bütün RGB şeritləri bir anda idarə olunacaq və 3 PWM pininə ehtiyac var (hər rəng üçün bir). Gələcəkdə dörd RGB zolağımın hər birini idarə edə bilmək istəyirəm. Bu, 4*3 = 12 PWM sancağı (və ehtimal ki, Arduino Mega) deməkdir. Yaxşı, bəzi sxemlərin vaxtıdır! Bu (şəklə bax) dövrənin əsas nümayəndəsidir (tezliklə daha gözəl olacaq). Kapasitiv sensorlar da daxil edilmişdir (yaşıl hissə). Əsasən izah edilməli olan üç komponent var:- FETT, haqqında danışdığım gücləndiricidir. Bir Qapısı, Mənbəsi və Drenajı var. Darvazadakı kiçik bir cərəyanı gücləndirir (Arduino -ya bağlıdır) və 12 voltla idarə olunan RGB zolağına yol açır. Mənbə +12V olmalıdır, GND (Ground) üzərində boşaldın. Dəqiq pinout üçün FET -in spesifikasiyalar vərəqini yoxlayın. Hər bir RGB kanalı öz FET -dən əvvəl yerləşdirilməlidir. Bu mənada Arduino idarə olunan bir keçid kimi hərəkət edir.- RGB şeridi Bu 12 voltluq RGB şeridi ümumi anod (+) tiplidir. Ümumi telin +12V -ə qoşulması və cərəyanın ayrı rəng kanallarının hər birindən keçməsi mənası. Şeridin rezistorları var, buna görə narahat olmayın! Digər üçü, FET -in boşaltacağı maksimum cərəyanı məhdudlaşdıracaq. Ən yaxşı üç rezistor artıq RGB şeridindədir. Mən USB kabelləri RGB şeridlərinə lehimləyirəm ki, onları modul olaraq asanlıqla birləşdirə bilərəm. Çörək taxtamda köhnə bir mərkəzdən olan fişlər qoyulur. Şirəsi üçün köhnə bir kompüter enerji təchizatı, RGB şeridini gücləndirmək üçün 12V və USB kabel olmadan işləməsini istəyirsinizsə, nəticədə dövrə üçün 5V istifadə edin.

Addım 5: Mood Light - Kod və Nəzarət

Əhval işığı kapasitiv sensorlar tərəfindən idarə olunur. Hələlik yalnız rəng dəyişikliyi üçün 2 və 3 sensorları proqramlaşdırmışam. Digər sensorların hələlik heç bir funksiyası yoxdur. İşdə kod: --- Arduino Mood Control Code ---#const const boolean invert = true; const long timeout = 10000; // Capacitive sensor declarationCapSense In1 = CapSense (2, 4); // 4 və 2 sancaqlar arasındakı 2M müqavimət, pin 2 sensor pinidir, tel əlavə edin, foilCapSense In2 = CapSense (2, 7); // 4 və 6 sancaqlar arasındakı 2M müqavimət, pin 6 sensor pinidir, tel əlavə edin, foilCapSense In3 = CapSense (2, 8); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, foilCapSense In4 = CapSense (2, 12); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, foilCapSense In5 = CapSense (2, 13); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, folqa əlavə edin // PWM Pin elanları PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Digər dəyişənlər Color1 = 128; // qırmızı kimi rəngdən başlayın Parlaqlıq1 = 255; // tam parlaqlıqda başlayın RedValue1, GreenValue1, BlueValue1; // RGB komponentlərivoid setup () {// sensor vaxt aşımı dəyərlərini təyin edin In1.set_CS_AutocaL_Millis (zaman aşımı); In2.set_CS_AutocaL_Millis (zaman aşımı); In3.set_CS_AutocaL_Millis (zaman aşımı); In4.set_CS_AutocaL_Millis (zaman aşımı); In5.set_CS_AutocaL_Millis (zaman aşımı);} void loop () {long start = millis (); uzun total1 = In1.capSense (30); uzun total2 = In2.capSense (30); uzun total3 = In3.capSense (30); uzun total4 = In4.capSense (30); uzun total5 = In5.capSense (30); if (cəmi2> 150) {Rəng1 ++; // rəngi artırsanız (Color1> 255) {// Color1 = 0; }} başqa if (cəmi3> 200) {Rəng1--; // rəngi azaldırsa (Color1 <0) {// Color1 = 255; } // hue rgb hueToRGB -ə çevirin (Color1, Brightness1); // rəngləri PWM pinlərinə analogWrite (PinR1, RedValue1) yazmaq; analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // bir rəngi Qırmızı, Yaşıl və Mavi komponentlərinə çevirmək funksiyası. vue hueToRGB (int hue, int parlaqlıq) {unsigned int scaledHue = (hue * 6); işarəsiz int seqmenti = scaledHue / 256; // rəng çarxı ətrafında 0 -dan 5 -ə qədər seqment işarəsiz int segmentOffset = scaledHue - (seqment * 256); // işarəsiz seqment daxilində mövqe int kompliment = 0; işarəsiz int prev = (parlaqlıq * (255 - segmentOffset)) / 256; işarəsiz int next = (parlaqlıq * segmentOffset) / 256; if (invert) {parlaqlıq = 255-parlaqlıq; iltifat = 255; əvvəlki = 255-əvvəlki; next = 255-next; } keçid (seqment) {hal 0: // qırmızı RedValue1 = parlaqlıq; GreenValue1 = sonrakı; BlueValue1 = tərif; fasilə; hal 1: // sarı RedValue1 = əvvəlki; GreenValue1 = parlaqlıq; BlueValue1 = tərif; fasilə; hal 2: // yaşıl RedValue1 = tərif; GreenValue1 = parlaqlıq; BlueValue1 = sonrakı; fasilə; hal 3: // cyan RedValue1 = tərif; GreenValue1 = əvvəlki; BlueValue1 = parlaqlıq; fasilə; hal 4: // mavi RedValue1 = sonrakı; GreenValue1 = tərif; BlueValue1 = parlaqlıq; fasilə; hal 5: // magenta default: RedValue1 = parlaqlıq; GreenValue1 = tərif; BlueValue1 = əvvəlki; fasilə; }} --- SON ---

Addım 6: Ambi Light - Arduino Side

Əlbəttə ki, kompüterinizdəki əhval işığını idarə etmək çox yaxşı olardı. Məsələn, ambilight və ya səslə idarə olunan diskoteka yaratmaq. Bu bölmə ambilight hissəsinə diqqət yetirir, gələcəkdə daha çox funksiya əlavə edəcəyəm. Əlavə dövrələr yoxdur, çünki hamısı Arduinoda mövcuddur. İstifadə edəcəyimiz şey serial ünsiyyət imkanları və bəzi 'Processing 1.0' proqramdır. Arduino-nuzu USB kabeli ilə kompüterinizə bağlayın (eskizlər yükləyirdinizsə, artıq belədir). Arduino üçün serial ünsiyyət üçün əlavə kod əlavə etməlisiniz. Kod, kompüterdən RGB dəyərləri aldığı müddətdə kapasitiv sensörləri çevirərək dinləmə rejiminə keçəcək. Daha sonra RGB dəyərlərini PWM pinlərinə təyin edir. Bu mənim indiki son kodumdur, dəyişiklikləri özünüz yoxlayın: --- Arduino Ambilight Kodu ---#const boolean invert = true; const uzun zaman aşımı = 10000; long commStart = 0; char val; // Kapasitiv sensor bəyannaməsiCapSense In1 = CapSense (2, 4); // 4 və 2 sancaqlar arasındakı 2M müqavimət, pin 2 sensor pinidir, tel əlavə edin, foilCapSense In2 = CapSense (2, 7); // 4 və 6 sancaqlar arasındakı 2M müqavimət, pin 6 sensor pinidir, tel əlavə edin, foilCapSense In3 = CapSense (2, 8); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, foilCapSense In4 = CapSense (2, 12); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, foilCapSense In5 = CapSense (2, 13); // 4 və 8 sancaqlar arasındakı 2M müqavimət, pin 8 sensor pinidir, tel əlavə edin, folqa əlavə edin // PWM Pin elanları PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Digər dəyişənlər Color1 = 128; // qırmızı kimi rəngdən başlayın Parlaqlıq1 = 255; // tam parlaqlıqda başlayın RedValue1, GreenValue1, BlueValue1; // RGB componentsvoid setup () {Serial.begin (9600); // ardıcıl ünsiyyətə başlayın // sensor zaman aşımı dəyərlərini təyin edin In1.set_CS_AutocaL_Millis (zaman aşımı); In2.set_CS_AutocaL_Millis (zaman aşımı); In3.set_CS_AutocaL_Millis (zaman aşımı); In4.set_CS_AutocaL_Millis (zaman aşımı); In5.set_CS_AutocaL_Millis (zaman aşımı);} void loop () {long start = millis (); uzun total1 = In1.capSense (30); uzun total2 = In2.capSense (30); uzun total3 = In3.capSense (30); uzun total4 = In4.capSense (30); uzun total5 = In5.capSense (30); if (Serial.available ()) {// Məlumatların oxunması mümkündürsə, val = Serial.read (); // oxuyun və saxla val commStart = millis (); if (val == 'S') {// Start char alınarsa, (! Serial.available ()) {} // Növbəti dəyərə qədər gözləyin. RedValue1 = Serial.read (); // Mövcud olduqdan sonra təyin edin. while (! Serial.available ()) {} // Yuxarıdakı kimidir. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serial. çap (GreenValue1); Serial.println (BlueValue1); } else if ((millis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // rəngi artırsanız (Color1> 255) {// Color1 = 0; }} başqa if (cəmi3> 200) {Rəng1--; // rəngi azaldırsa (Color1 <0) {// Color1 = 255; }} hueToRGB (Rəng1, Parlaqlıq1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // bir rəngi Qırmızı, Yaşıl və Mavi komponentlərinə çevirmək funksiyası. vue hueToRGB (int hue, int parlaqlıq) {unsigned int scaledHue = (hue * 6); işarəsiz int seqmenti = scaledHue / 256; // rəng çarxı ətrafında 0 -dan 5 -ə qədər seqment işarəsiz int segmentOffset = scaledHue - (seqment * 256); // işarəsiz int komplimenti seqmentdəki mövqe = 0; işarəsiz int prev = (parlaqlıq * (255 - segmentOffset)) / 256; işarəsiz int next = (parlaqlıq * segmentOffset) / 256; if (invert) {parlaqlıq = 255-parlaqlıq; iltifat = 255; əvvəlki = 255-əvvəlki; next = 255-next; } keçid (seqment) {hal 0: // qırmızı RedValue1 = parlaqlıq; GreenValue1 = sonrakı; BlueValue1 = tərif; fasilə; hal 1: // sarı RedValue1 = əvvəlki; GreenValue1 = parlaqlıq; BlueValue1 = tərif; fasilə; hal 2: // yaşıl RedValue1 = tərif; GreenValue1 = parlaqlıq; BlueValue1 = sonrakı; fasilə; hal 3: // cyan RedValue1 = tərif; GreenValue1 = əvvəlki; BlueValue1 = parlaqlıq; fasilə; hal 4: // mavi RedValue1 = sonrakı; GreenValue1 = tərif; BlueValue1 = parlaqlıq; fasilə; hal 5: // magenta default: RedValue1 = parlaqlıq; GreenValue1 = tərif; BlueValue1 = əvvəlki; fasilə; }} --- SON ---

Addım 7: Ambi Light - Kompüter tərəfi

Kompüterin yan tərəfində bir Processing 1.0 eskizi aparılır, processing.org saytına baxın. Bu kiçik (bir az qarışıq) proqram hər an orta ekran rəngini hesablayır və bunu serial portuna göndərir. Hələ indiyə qədər çox sadədir və bəzi tənzimləmələrdən istifadə edə bilər, amma çox yaxşı işləyir! Gələcəkdə bir neçə ayrı RGB şeridi və ekran bölməsi üçün yeniləyəcəyəm. Bunu özünüz də edə bilərsiniz, dil olduqca sadədir. İşdə kod: --- 1.0 Kodun İşlənməsi --- idxalın işlənməsi.serial.*; İdxal java.awt. AWTException; idxal java.awt. Robot; idxal java.awt. Rectangle;; PImage screenShot; Serial myPort; statik ictimai boşluq əsas (String args ) {PApplet.main (yeni String {"--present", "shooter"});} void setup () {size (100, 100); //size(ekran genişliyi, ekran hündürlüyü); // Hata ayıklama məqsədləri üçün serial portlarının siyahısını çap edin: println (Serial.list ()); // Mac -dakı seriya siyahısındakı ilk port // həmişə FTDI adapterim olduğunu bilirəm, buna görə Serial.list () [0] açıram. // Windows maşınlarında ümumiyyətlə COM1 açılır. // İstifadə etdiyiniz portu açın. String portName = Serial.list () [0]; myPort = yeni Serial (this, portName, 9600);} void draw () {// image (screenShot, 0, 0, width, height); ekran görüntüsü = getScreen (); rəng kleur = rəng (0, 0, 0); rəng = rəng (ekran görüntüsü); //myPort.write(int(red(kleur))+ ','+int (yaşıl (kleur))+','+int (mavi (kleur))+13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(mavi (rəng)))); //myPort.write(13); doldurmaq (kleur); düz (30, 20, 55, 55);} rəng rəngi (PImage img) {int cols = (img.width); int satırları (img.height); int ölçüsü = (img.width*img.height); int r = 0; int g = 0; int b = 0; img.loadPixels (); // (int i = 0; i <(ölçü/2); i ++) {r = r+((img.piksel >> 16) və 0xFF); g = g + ((img.piksel >> 8) & 0xFF); b = b + (img.pixels & 0xFF);} int ortalama_r = r/(ölçü/2); int ortalama_g = g/(ölçü/2); int orta_b = b/(ölçü/2); rəng orta_clr = rəng (orta_r, orta_g, ortalama_b); myPort.write ('S'); myPort.write (ortalama_r); myPort.write (ortalama_g); myPort.write (ortalama_b); qaytar (orta_clr);} PImage getScreen () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices (); DisplayMode rejimi = gs [0].getDisplayMode (); Dikdörtgənin sərhədləri = yeni Dikdörtgen (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage masa üstü = yeni BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); cəhd edin {masa üstü = yeni Robot (gs [0]). createScreenCapture (sərhədlər); } catch (AWTException e) {System.err.println ("Ekran çəkilişi uğursuz oldu."); } qayıt (yeni PImage (masa üstü));} --- SON ---

Addım 8: Nəticə

Nəticə
Nəticə
Nəticə
Nəticə

Və nəticə budur ki, əslində yatağımın altındadır. Hələ parça dəyişdirməliyəm, işığı daha çox yayacaq. Ümid edirəm ki, bu təlimatı bəyənəcəksiniz və öz yaradıcılığınızın əsasını təşkil edəcəyini ümid edirəm. Vaxt məhdudiyyətləri səbəbindən çox tez yazdım. Bunu başa düşmək üçün bir az arduino/elektronika biliyinə ehtiyacınız ola bilər, amma yaxşı alınarsa gələcəkdə yeniləməyi planlaşdırıram.

Tövsiyə: