Arduino-dan svetofor üçün proqram. Arduino-da işıqforun siqnalizasiyası. Sadə iki rəngli svetofor

Bu dərsdə ən sadəsini edəcəyik üç LED svetofor. Bu sxemə uyğun işləməlidir.

1. Yalnız qırmızı işıq yanır gələcək svetoforumuz.

2. Svetoforun qırmızı işığını söndürmədən, sarı işığı yandırın.

3. Söndürün qırmızı və sarı yaşıl olur.

4. Yaşıl işıqforu söndürün və sarı işığı yandırın.

Sonra qırmızı işıqfordan dövrü təkrarlayırıq.

Dərs üçün bizə lazım olacaq:

Üç LED-i lövhəyə birləşdirək Arduino UNO. Bu diaqramı alacağıq.

Sxematik diaqram.


Eskiz belə görünür

Int led_red = 2; // əlaqə pin 2 int led_yellow = 3; // qoşulma pin 3 int led_green = 4; // əlaqə pin 4 etibarsız quraşdırma() ( pinMode(led_qırmızı, OUTPUT); pinMode(led_sarı, OUTPUT); pinMode(led_yaşıl, OUTPUT); ) boş döngə() ( digitalWrite(led_qırmızı, HIGH); gecikmə(10000); / / DigitalWrite (led_sarı, YÜKSEK) gözləyir (2000); ; gecikmə(2000);

LEDləri idarə etmək üçün funksiyalardan istifadə edirik .

Əvəz edək standart funksiyalar Led() funksiyanıza.

Led Led (uint8_t pin, bayt statusu) ( digitalWrite(pin, status); )

Funksiya iki dəyişən pin qəbul edir - LED-in pinini və status - LED-in vəziyyətini və ya .

Nəticədə bu eskizi alırıq:

Int led_red = 2; // əlaqə pin 2 int led_yellow = 3; // qoşulma pin 3 int led_green = 4; // əlaqə pin 4 etibarsız quraşdırma() ( pinMode(led_qırmızı, OUTPUT); pinMode(led_sarı, OUTPUT); pinMode(led_yaşıl, OUTPUT); ) boş döngə() ( Led (led_qırmızı, HIGH); gecikmə (10000); / / Led-i gözləyirik (led_sarı, YÜKSƏN); ; gecikmə (2000); // Gözləmə Led (sarı_led, LOW) Led (uint8_t pin, bayt statusu) ( digitalWrite(pin, status); )

Eskizdən göründüyü kimi, kod daha böyük oldu və funksiyaları kodun həcmini azaltmaq və məntiqi sadələşdirmək üçün istifadə olunur. Amma bu sadə nümunədə biz funksiyanın nə olduğunu və dəyişənlərin funksiyalara necə ötürülməsinə baxdıq inkişaf mühiti.

Bunun nə olduğu anlayışı funksiyaları və onları necə bəyan edəcəyimiz növbəti dərsdə bizə faydalı olacaq.

Hər hansı bir sualınız varsa, Arduino-da işıqfor proqramını ətraflı təsvir etdiyim videoya baxın.

Beləliklə, siz “Dare” seriyasından (“Basic”, “Learning Arduino” və “Arduino” tikinti dəstlərindən birinin fəxr sahibisiniz. Ağıllı ev"), Artıq lövhəni bağladınız və Arduino IDE-də ilk nümunəni işə saldınız - Arduino üçün "Salam, Dünya" (daxili LED yanıb-sönür). Yaxşıdır, Arduino əsaslı layihələr üçün tərtibatçı-rəssam kimi ilk addımı atdınız. İndi birlikdə daha mürəkkəb və daha çox şeyə baxacağıq faydalı layihəyaradılması haqqında Arduino əsaslıdır iki svetofor yaratdığınız robotların hərəkət edə biləcəyi yolun kəsişməsi üçün.
Montaj üçün Arduino svetofor Arduino dəstlərinin hər birinə daxil olan aşağıdakı hissələrə ehtiyacınız olacaq:

  1. Arduino Uno;
  2. USB kabel;
  3. Prototipləmə lövhəsi;
  4. Kişi-kişi tellər - 7 ədəd;
  5. Rezistorlar 220 Ohm - 6 ədəd;
  6. qırmızı LED - 2 ədəd;
  7. Yaşıl LED - 2 ədəd;
  8. Sarı LED - 2 ədəd.

LED çevirən yarımkeçirici bir cihazdır elektrik cərəyanı birbaşa işıq radiasiyasına. LED-lərin rəng xüsusiyyətləri onda istifadə olunan yarımkeçiricinin kimyəvi tərkibindən asılıdır. LED spektrin dar bir hissəsində yayılır. Arduino svetoforu layihəmizdə svetoforun üç rənginə uyğun gələn üç rəngli LED (yaşıl, sarı, qırmızı) istifadə edəcəyik.
LED-lər qütbləşir, onları hansı istiqamətdə bağlamağınız vacibdir. LED-in müsbət qurğuşun (daha uzun) anod, mənfi qurğuşun isə katod adlanır. Bütün diodlar kimi, LEDlər də cərəyanın yalnız bir istiqamətdə - anoddan katoda axmasına imkan verir. Cərəyan müsbətdən mənfiyə axdığından, LED-in anoduna qoşulmaq lazımdır rəqəmsal siqnal 5V və katod yerə qoşulmalıdır.
Birinci svetoforun LED-lərini D7, D8, D9 rəqəmsal pinlərinə, ikinci işıqforun LEDlərini isə Arduino lövhəsinin D10, D11, D12 rəqəmsal sancaqlarına birləşdirəcəyik. LED-lər həmişə cərəyan məhdudlaşdırıcı rolunu oynayan bir rezistorla ardıcıl olaraq birləşdirilməlidir. Rezistorun dəyəri nə qədər yüksəkdirsə, cərəyanı bir o qədər məhdudlaşdırır. Bu təcrübədə biz 220 ohm rezistordan istifadə edirik.
Şəkil 1-də göstərilən sxemi yığırıq.

Şəkil 1. LED əlaqə diaqramı

İndi eskizi yazmağa başlayaq. Dərsin birinci hissəsində bir svetoforun işinin eskizini yazacağıq.
Biz bilirik ki, svetofor aşağıdakı kimi işləyir: yaşıl işıq (yaşıl LED) bir müddət “yanır”, sonra yaşıl “yanıq” olduqda sarı yanıb-sönür, sonra qırmızı yanır, sonra qırmızı “yanıq” olduqda sarı yanıb-sönür. və sonra bir dairədə. Yaşıl, sarı və qırmızı LED-lərin “yanma” vaxtı (millisaniyələrlə) və sarı LED-in yanıb-sönmə tezliyi sabitlərə daxil ediləcək

#TIME_GREEN 10000 müəyyən #ZAMAN_QIRMIZI 10000 #müəyyən #ZAMAN_SARI 3000 #müəyyən et

Sabitlərə və sancaqlara svetofor bağlantılarını əlavə edək (bu nümunədə bir svetoforu nəzərdən keçiririk)

#PIN_YAŞILI1 7 müəyyən et #PIN-i təyin et _QIRMIZI 9 #PIN_SARI 8-i təyin et

Gəlin, həmçinin sarı LED-in yanıb-sönməsini təşkil etmək üçün istifadə edəcəyimiz yanıb-sönən (boolean tipli) dəyişəni yaradaq (blinkyellow=true – LED “on”, blinkyellow=false – LED “off”). Artıq bildiyiniz kimi, Arduino-nun rəqəmsal pinləri həm giriş, həm də çıxış kimi işləyə bilər. Rəqəmsal çıxışın iş rejimi pinMode() əmri ilə təyin edilir. Setup() prosedurunda biz LED-lərin çıxış kimi qoşulduğu bütün Arduino pinlərini konfiqurasiya edəcəyik və onlara LOW dəyərini təyin edəcəyik (yəni, LED-ləri söndürün).

// Arduino pinlərini çıxış pinMode (PIN_GREEN1, OUTPUT) kimi konfiqurasiya edin;

pinMode(PIN_YELLOW1, OUTPUT);
pinMode(PIN_RED1, OUTPUT);

// və bütün LED-ləri söndürün digitalWrite(PIN_GREEN1, LOW);

digitalWrite(PIN_YELLOW1, LOW);
digitalWrite(PIN_RED1, LOW);

// LEDləri birləşdirmək üçün Arduino sancaqları #define PIN_GREEN1 7 #define PIN_YELLOW1 8 #define PIN_RED1 9 // LED yanma müddəti ms ilə // yaşıl #define TIME_GREEN 5000 // red #define TIME_RED 5000 TIME //_ sarı #define //0 //0 sarı yanıb-sönən #define TIME_BLINK 300 // sarı yanıb-sönən mantiq üçün yanıb-sönən dəyişən blinkyellow=true; void setup() ( // Arduino pinlərini çıxış kimi qurun pinMode(PIN_GREEN1, OUTPUT); pinMode(PIN_YELLOW1, OUTPUT); pinMode(PIN_RED1, OUTPUT); // və bütün LEDləri söndürün digitalWrite(PIN_GREEN1, LOW); (PIN_YELLOW1, LOW); // döngə funksiyası təkrar-təkrar işləmir. sarı - üçün yanıb-sönür(int i=0;i

Yüklədikdən sonra svetoforumuzun işini müşahidə edirik (bax Şəkil 2,3,4). TIME_GREEN , TIME_RED , TIME_YELLOW sabitlərinin dəyərlərini dəyişdirməklə biz hər bir LED-in “yanma” vaxtını TIME_BLINK sabiti ilə dəyişirik, biz sarı LED-in yanıb-sönmə müddətini tənzimləyirik.


Hər kəsə xeyirli günlər)) Bu yazıda necə edə biləcəyiniz haqqında mümkün qədər aydın danışmağa çalışacağam əsl svetoforun maketi. Əgər uşağınız avtomobillərlə məşğul olmağı sevirsə, onun oyun prosesinə reallıq əlavə etmək, həmçinin bu fəaliyyəti daha da həyəcanlı, əyləncəli və maraqlı etmək o qədər də çətin deyil! Beləliklə, svetofor yaradaq! Və beləliklə, gedək!

Hansı materiallara ehtiyacımız var:
Tolkushka (ixtiramız üçün əsas kimi istifadə edəcəyik!)


Akvarel üçün vərəqlər (karton və ya hər hansı digər qalın kağızdan istifadə edə bilərsiniz)


Folqa (mən adi şirli cheesecake paketlərindən istifadə etdim)


LEDlər (üç rəng: qırmızı, sarı, yaşıl)


Rezistorlar (müqavimət 220 Ohm)


Tellər


Arduino nəzarətçi


İstifadə edəcəyimiz alətlər bunlardır:
Əl qazma (nazik qazma uçları ilə)
Tornavida
Özünü vuran vintlər
Zımbalayıcı
Bıçaq


Lehimləmə dəmiri (lehim, flux)


Prinsipcə, budur, indi planımızı yığmaq prosesinə başlayaq. Gəlin hər şeyi 3 böyük addıma bölək...

Addım №1 "Vizatorların" yığılması
Başlamaq üçün kağızdan işıqforun üzlüklərini edəcəyik. Onu qələmlə çəkin və qayçı ilə kəsin (şəkildəki rəqəmlər santimetr uzunluğundadır).


Boşluğumuzu qatlayaraq üzlük alırıq..


Ancaq LED-lərin buraxdığı işığın mümkün qədər parlaq şəkildə əks olunması üçün daxili səthə folqa yapışdırılmalıdır.
Əvvəlcə onu visor ilə eyni formada kəsdik (bıçaqdan istifadə edərək) və sonra hər iki materialı adi bir zımba ilə bərkidin.


Fotoda (aşağıda) bağladığım yeri qara zolaqlarla göstərdim...


Bundan sonra iş parçamızı yuvarlayırıq və qalan yan hissələri bağlayırıq.



Bütün prosesi üç dəfə təkrarlayırıq, çünki üç visorumuz olmalıdır!

Addım № 2 "Vizatorların" bərkidilməsi
Bir qazma istifadə edərək, biz qırıcıda üzlüklərimiz üçün deliklər qazırıq.


Visorun arxa tərəfində iki deşik düzəldirik: daha kiçik bir özünü vurma vinti üçün, daha böyük bir LED üçün.


LEDləri arxadan keçirik və visorları itələyiciyə vida edirik. Hələlik biz yalnız LED-lərin ayaqlarını yanlara əyəcəyik.. Yenə də hər bir visor üçün hər şeyi təkrarlayırıq.


Addım № 3 "Elektronika"
LED-lərin katodlarını (onların əsaslarını) birlikdə lehimləyirik. Xatırladım ki, katod qısa bir ayaqdır)



Ümumi zəmini mikrokontrolörün GND-yə daxil edirik.
İndi digər üç teli götürək və onları rezistorlara lehimləyək.


Naqilləri Arduino-nun kontaktlarına bağlayacağıq (2, 3, 4 nömrəli sancaqlar götürdüm) və rezistorların uclarını LED-lərin anodlarına lehimləyəcəyik.




İndi yalnız növbətisini yükləmək qalır eskiz Arduino-da və öz sənətinizlə yaxınlarınızı sevindirin!
boolean k = 0; void quraşdırma() ( pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); ) boş döngə() ( digitalWrite(2,1); digitalWrite(3,0); digitalWrite(4, 0 gecikmə(3500) üçün(int i = 0; i<6; i++) { digitalWrite(2, k); k = !k; delay(800); } digitalWrite(2,0); digitalWrite(3,1); digitalWrite(4,0); delay(3500); for(int i = 0; i<6; i++) { digitalWrite(3, k); k = !k; delay(800); } digitalWrite(2,0); digitalWrite(3,0); digitalWrite(4,1); delay(3500); for(int i = 0; i<6; i++) { digitalWrite(4, k); k = !k; delay(800); } }
Eskizi redaktə edin və öz yanıb-sönən vaxtınızı və gecikmənizi təyin edin!

Dachzheldorun bütün tərəfdarlarına, həvəskarlarına, rəğbətinə və işığı görməyə gələnlərə can sağlığı!)))

Keçən ildən başladığımız kənd dəmir yolu nəqliyyatının işıqforun tənzimlənməsi mövzusu bu problemə yeni iştirakçılar və yeni baxışlar qazandıraraq yeni ilə rahat şəkildə daxil olur. Və bu gün Moskvadan olan Anatoli bu mövzuda bütöv bir araşdırmanı ictimaiyyətə təqdim edir. Daimi oxucular onu bizimlə Accelero ləqəbi ilə dərc etdiyi şərhlərdən tanıyırlar.

Düzünü desəm, biz - Sergey (nashpoezd) və sizin təvazökar qulluqçunuz - müəllifə dachzheldorun ehtiyacları, Sergeylə mənim yol istismarı baxımından təcrübəmiz və onların gələcək inkişafı ilə bağlı planlarımız haqqında bir az məsləhət verdik. .

Salam, əziz Dazzheldoritlər!

Mən özüm də bu hərəkata yenicə qoşuluram və öz dəmir yolum hələ də planlardadır, amma buna baxmayaraq, baharı gözləmədən həyata keçirə biləcəyimdən başlamaq qərarına gəldim. Seçim avtomatik işıqforlara düşdü. Mən radio həvəskarı olduğumdan və bu yaxınlarda kifayət qədər tanınmış arduino modullarından istifadə edərək müxtəlif cihazlar dizayn etdiyim üçün onlar əsas götürüldü. Seçim arduino nano-ya düşdü, çünki bizim məqsədlərimiz üçün ən uyğundur, quraşdırmaq asandır və bortda USB-TTL adapteri var (mən əsasən arduino pro mini istifadə edirəm, amma adapter yoxdur, bu çox rahat deyil, amma qiymət üçüncü dəfə aşağıdır).

Mənim sistemim hədd açarları şəklində və qamış açarları şəklində ola bilən və ya sadəcə trolleybus gövdəsi ilə bağlanan əlaqə sancaqları ola bilən iki kontaktı ardıcıl olaraq bağlayaraq yolun doldurulma vəziyyətini müəyyən edir. Təqdimatda sadəcə kliplərdən hazırlanmış kontaktlarım var. Bu məqalə yazılan zaman mən artıq qamış açarları ilə seçimi sınaqdan keçirdim - hər şey mükəmməl işləyir. Dəqiq iki əlaqə qrupundan istifadənin mahiyyəti, vaqonun hərəkət istiqamətini (bundan sonra - vaqon) müəyyən etməkdir, yəni. avtomobil kontaktları bağlayır), svetofor tələb olunan siqnalı göstərəcək. Məhz belə bir sistemin əsas üstünlüyü ondan ibarətdir ki, o, demək olar ki, hər hansı bir dəmir yolunda quraşdırıla bilər - oyuncaqdan sənayeyə qədər, relslərin təkər cütləri ilə bağlanması ilə klassik sistemdən fərqli olaraq, bir sıra məhdudiyyətlər qoyur.

Davam etməzdən əvvəl, bənzər bir şey qurmaq istəyənlərə Arduino haqqında oxumağı və/və ya onun nə olduğu, nə ilə istifadə edildiyi, kompüterə necə qoşulacağı, necə yandırılacağı, necə istifadə ediləcəyi haqqında bir video izləmələrini tövsiyə edirəm. Arduino IDE və s.

Materialın mətn variantı çox həcmli olacağı üçün işimi videolara böldüm. Proqramların bütün keçidləri (eskizlər), lazımi detallar və s. videonun altındakı təsvirlərdə var.

Beləliklə, ilk videoda ən sadə variant - bir iki rəngli svetofor haqqında danışacağıq. Aydındır ki, belə bir primitiv dövrə tək bir reledə həyata keçirilə bilər, lakin bu, proqramın məntiqini başa düşmək üçün lazımdır ki, gələcəkdə onu xüsusi ehtiyaclarınıza uyğun əlavə edə biləsiniz. Mən proqramçı deyiləm, ona görə də mənə çox təpik vurmayın - bacardığım qədər izah edəcəyəm =))

Sadə iki rəngli svetofor

Ümid edirəm ki, işin məntiqini çatdıra bildim)) Sonrakı “mürəkkəblər” sadəcə birinci proqrama əlavələrdir, ona görə də onu başa düşdükdən sonra onun işini öz sərt diskinizə uyğunlaşdıra bilərsiniz. İndi növbəti seçimə keçək. O, artıq iki svetofordan ibarətdir ki, onların da sarı siqnalı var, yəni səyahət istiqamətindəki ilk svetofor ikinci svetoforun dolu olduğunu göstərir.

İki üç rəngli svetofor

Gördüyünüz kimi, proqram artıq kifayət qədər mürəkkəbdir, lakin ilk baxışdan görünə bilər - onu özünüz redaktə etdiyiniz zaman hər şey daha sadədir. Yaxşı, "hadisələrin inkişafı" üçün üçüncü seçim açarlar və svetoforlardır. Burada hər şey daha əyləncəlidir, çünki yol ikiyə bölünür və hər ikisi üçün iş məntiqini əlaqələndirmək lazımdır. Üç gün ərzində beynimi bu işi ən azı bir qədər məqbul hala gətirmək barədə düşünmüşəm və sonunda bir fikir əldə etdim! Bəzi kobud kənarları olmadan deyil, amma yenə də!

Svetoforlar və açarlar

Gördüyünüz kimi, ilk svetoforu proqramlı olaraq ikiyə bölməli olduq (baxmayaraq ki, bu, fiziki olaraq edilməlidir), lakin buna baxmayaraq, sxem işləyir.

İlk videoda qeyd etdiyim kimi - kiçik bir LED-dən daha güclü bir şey dəyişdirmək üçün bizə rele və tranzistorlar kimi xarici modullar/hissələr lazımdır. Verilmiş nəzarətçinin səviyyələri ilə işləmək üçün hazırlanmış relay modullarından istifadə etmək yaxşıdır. Arduino nano və praktiki olaraq bütün xətt vəziyyətində 5 voltdur. Proqramlarımda idarəetmə üçün yüksək səviyyədən istifadə olunur (yəni çıxışlarda gərginlik görünür), buna görə də modullar müsbət idarəetmə ilə istifadə edilməlidir, lakin əlinizdə mənfi səviyyədə işləyən bir modulunuz olsa belə (məntiqi sıfır, çıxış yerdir/mənfidir) , onda bu da problem deyil - proqramı bir az redaktə etmək lazımdır. Relay modulları müxtəlif dizaynlarda satılır - bir rele, iki, dörd, səkkiz, on, on altı, hətta 32. İki rəngli svetoforu idarə etmək üçün bir rele kifayətdir. Üç rəngli svetofor vəziyyətində, yanıb-sönmənin həyata keçirilməsi üçün üç reledən istifadə etmək daha yaxşıdır, ancaq iki ilə əldə edə bilərsiniz, çünki relelərin üç kontaktı var - mərkəzi bir və iki çıxış, biri normal olaraq mərkəzi biri ilə qapalı olan, digəri normal olaraq açıqdır və bu, proqram təkmilləşdirmələri ilə yenidən nəzarətçi çıxışlarını saxlamaq üçün istifadə edilə bilər.

Arduino üçün hər zövqə və rəngə uyğun müxtəlif sensorlar, modullar, lehimlər və birləşdiricilər dəstləri olan çox sayda ad lövhələri (uzatma lövhələri) mövcuddur. Birbaşa lehimləyə bilərsiniz (buna üstünlük verilir, çünki pin kontaktları zamanla işləməyə başlayır) və ya sadəcə modulları və nəzarətçini kabel ilə birləşdirə bilərsiniz. Avtomatlaşdırma yalnız təxəyyül və proqramlaşdırma qabiliyyəti ilə məhdudlaşır (təəssüf ki, ikincisi mənim üçün çətindir) - siz maneələr və maneələr yarada bilərsiniz, hətta arabaları özləri sürməyə və svetoforlara tabe olmağa məcbur edə bilərsiniz, amma necə deyərlər, "bu, tamamilə fərqli bir şeydir. hekayə!”

Ümid edirəm bu material faydalı olacaq. Yeni nəsə çıxan kimi mövzuya əlavə edəcəm. Hər kəsə öz, hətta ən çılğın (qanun çərçivəsində =)) ideyalarını həyata keçirməkdə uğurlar!

Arduino. Başlayın

salamlar! Arduino dünyasında gənc döyüşçü üçün kursa başlayırıq.

Bu birinci səviyyədir. O, DIY elektronika dünyasına yenicə qədəm qoyan və dərsliklərə saatlarla baxmadan nəyin nə olduğunu anlamaq istəyənlər üçün nəzərdə tutulub. Təbii ki, biz nəzəriyyəsiz edə bilmərik, amma dərhal təcrübə ilə dəstəkləyəcəyik.

Necə başlamaq lazımdır

Kursa başlamaq üçün sizə lazımdır:

  1. Arduino inkişaf mühitini yükləyin.
  2. Özünüzə Arduino lövhəsi və ya onun ekvivalenti alın.
  3. Lövhəni kompüterə qoşmağı öyrənin.
  4. Özünüzə bir az toz alın. Bütün lazımi detallar təsvirdə olacaq.
  5. Səhv etməkdən qorxma. Səhvlər olmadan heç bir inkişaf olmayacaq.
  6. Əlbəttə ki, DIY Zen təcrübəsinə sahib olmaq arzusu var.

Əgər enerjiniz varsa, lazımi komponentlərə sahibsinizsə və elektronika dünyasını kəşf etməyə hazırsınızsa, xoş gəlmisiniz!

Kursumuzun aksiomaları

Bir şey səhv olarsa, elektrik kabelini ayırmaq daha yaxşıdır və yalnız bundan sonra dövrəni dəyişdirin.

Kodu özünüz yazmalısınız, nümunəni köçürməməlisiniz. Beləliklə, çox şey xatırlayacaqsınız, kopyalasanız, bir az.

Diaqramlarda olduğu kimi tel rənglərinə riayət etmək lazım deyil. Rəng hər hansı bir ola bilər, dövrənin funksionallığına təsir göstərmir.

Bütün təcrübələrimizdə (Səviyyə 1) biz ArduinoUNO və inkişaf lövhəsindən istifadə edəcəyik. Onlar dərsi keçirmək üçün lazım olan komponentlərdə təsvir olunmayacaq. Onları yalnız ilk dərsdə təsvir edəcəyəm.

Kursumuzda göstərilən bütün həllər yeganə düzgün olanlar deyil. Müəyyən bir problem üçün başqa, daha rasional həll tapsanız, səhv etdiyinizi düşünməyin. Unutmayın ki, mən Arduino ilə işləməyin əsaslarını və ümumi problemləri necə həll edəcəyimi göstərirəm. Və sonra kodu və ya diaqramları öz istəyinizlə çətinləşdirə/sadələşdirə bilərsiniz. İstədiyinizi edin (təbii ki, səbəb daxilində)

İlk cihaz

İlk kiçik layihəmiz yolda son dərəcə faydalı bir şey olacaq - işıqfor.

Svetoforun necə işlədiyini düşünən varmı? Mürəkkəb sxemlər və ya çox sayda elektronika yoxdur, sadəcə bir taymer və kiçik bir idarəetmə lövhəsi.

Kiçik bir svetofor hazırlamağa çalışacağıq. Bu, Arduino ilə başlamaq üçün mükəmməl başlanğıc olacaq.

Svetoforun iş alqoritmi

Hər bir layihə kağız üzərində başlayır. Və bizimkilər də istisna deyil. Svetoforun iş sxemini hərəkətlərin ardıcıllığı kimi təsəvvür edək.

Şəkil göstərir ki, bir hərəkət dövründən sonra biz onu təkrar-təkrar başlayırıq. Hərəkətlər ciddi qaydada aparılır və növbə gələnə qədər tamamlana bilməz. Beləliklə, proqramımızı ciddi şəkildə alqoritmə uyğun yazmalıyıq.

Beləliklə, alqoritmi tapdıq. İndi işıqforumuzu yığmalıyıq.

Svetofor hissələri

Qırmızı LED 1 ədəd

Sarı LED 1 ədəd

Yaşıl LED 1 ədəd

220 Ohm rezistor 3 ədəd

Birləşdirici naqillər "Kişi-Kişi" 7 ədəd

Məclis

Svetoforumuzu diaqrama uyğun yığırıq. Əsas odur ki, LED-lərin polaritesini qorumaqdır. Bir LED üçün anod artı, katod isə mənfidir. Uzun ayağı (anod) sancaqlara birləşdirin (İstədiyiniz kimi sancaq pin və ya kontaktdır.) Siz həmçinin LEDləri 13, 12 və 11-ci sancaqlara qoşmalısınız. Yaşıldan 13-ə, Sarıdan 12-yə, Qırmızıdan 11.

Kod

Əla. Mini işıqforumuz var. İndi biz bunu işlətməliyik.

Bunun üçün lövhəni proqramlaşdırmalıyıq. Qorxma, bu iş çətin deyil. Sadəcə bir az qayğıya ehtiyacınız var və hər şey işləyəcək. Əgər siz funksiyaların nə demək olduğunu və niyə bu şəkildə yazdığımızı öyrənmək istəyirsinizsə, arduino.ru saytına daxil ola bilərsiniz.

Koda baxaq:

//Daha sonra kodu daha yığcam və oxunaqlı hala gətirməyi öyrənəcəyik, lakin əvvəlcə bunu başa düşməliyik. void setup() ( pinMode(13, OUTPUT); // Bu bizim yaşıl LEDimizdir, biz onu çıxış kimi təyin etdik. pinMode(12,OUTPUT); // Bu sarı pinMode(11,OUTPUT); // Bu qırmızı ) // İndi kağız üzərində yazılmış alqoritmimizi proqrama çevirmək lazımdır. void loop() ( digitalWrite(11, HIGH); //Qırmızı LED gecikməsini yandırın(5000); //İşıqlanana qədər gözləyin. digitalWrite(12, HIGH); //Sarı olanı qırmızı ilə birlikdə yandırın gecikmə(1000) ; //bir az gözləyin digitalWrite(11, LOW); yaşıl digitalWrite(13, HIGH); digitalWrite(13, YÜKSEK); //Sarı gecikmə; dövr sonsuz sayda təkrarlanır.

İndi işıqforumuz işləyir.

Daha az kod

İndi gəlin kodumuzun oxunaqlılığını artıraq və onu daha yığcamlaşdırmağa çalışaq.

Gəlin kodumuza baxaq.

// Daha düzgün kod. // Daha yaxşı oxunaqlı olmaq üçün siz sözdə makro tərifləri verməlisiniz. // Makro tərif Word-ün Tap və Dəyişdirmə funksiyası ilə eyni şəkildə işləyir. #define GREEN 13 // Gəlin pin 13-ü Yaşıl kimi təyin edək. #define SARI 12 // 12 - Sarı kimi. #define RED 11 // 11 - qırmızı kimi. // Proqram parametrlərini təyin edərkən işi sadələşdirmək və daha yaxşı oxunaqlı olmaq üçün dəyişənlər yaratmalıyıq. int main_delay = 5000; // Qırmızı və yaşıl yanma vaxtı int mini_delay = 1000; // Sarı yanma vaxtı int blink_delay = 800; // Yaşıl yanıb-sönmə vaxtı etibarsız quraşdırma() ( pinMode(YAŞIL, ÇIXIŞ); pinMode(SARI, ÇIXIŞ); pinMode(QIRMIZI, ÇIXIŞ); ) boş döngə() ( digitalWrite(QIRMIZI, HIGH); gecikmə(əsas_gecikmə); digitalWrite (YELLOW, YÜKSEK gecikmə(mini_gecikmə)(SARİ, YÜKSƏK digitalWrite) for(int i =). 0 i< 3; i = i+1) { delay(blink_delay); digitalWrite(GREEN, HIGH); delay(blink_delay); digitalWrite(GREEN, LOW); } digitalWrite(YELLOW, HIGH); delay(mini_delay); digitalWrite(YELLOW, LOW); delay(mini_delay); } // Теперь наш код стал компактнее и читабельнее. // Но запомни, тебе следует давать осмысленные имена переменным и макроопределениям.Это улучшает читабельность. // Если ты через месяц откроешь свой код, ты поймешь о чем я говорю.

İzahatlar

üçün- Bu, əks döngə adlanan dövrdür. Təkrarlanma sayı mötərizədə göstərilir.

Ümumiyyətlə, aşağıdakı kimi yazmaq olar:

üçün(Dəyişən; Şərt; Dəyişiklik)

(Təkrar ediləcək kod)

Dəyişən- yalnız for döngüsü üçün yaradılmış dəyişən. Dövrü "başlamaq" üçün lazımdır. Yəni dəyişəni dövrə şərti ilə müqayisə edin.

Vəziyyət- şərt, əgər doğrudursa, buruq mötərizədə olan hərəkətlər yerinə yetiriləcək.

Dəyişmək- dəyişənin dəyişdiyi qayda. Dəyişiklik vəziyyəti yoxladıqdan sonra edilir. Bundan sonra dəyişdirilmiş dəyişən yoxlanılır.

Dərsin xülasəsi

İndi kod daha oxunaqlı və yığcamdır. Bu gün svetoforun necə qurulacağını öyrəndiniz. Bu hələ başlanğıcdır. İstirahət etməli və aldığınız məlumatları həzm etməlisiniz. Ancaq davam etmək istəsəniz, növbəti məqaləyə keçin.

Radioelementlərin siyahısı

Təyinat Növ Denominasiya Kəmiyyət QeydMağazaMənim bloknotum
Arduino lövhəsi

Arduino Uno

1 Notepad üçün
LED

AL307V

1 Notepad üçün
LED

AL102B

1
Parametrlər