Misc

Ultimate Arduino Tutorial

Müəllif: Laura McKinney
Yaradılış Tarixi: 8 Aprel 2021
YeniləMə Tarixi: 16 BiləR 2024
Anonim
Arduino Course for Beginners - Open-Source Electronics Platform
Videonuz: Arduino Course for Beginners - Open-Source Electronics Platform

MəZmun

Chriscamaro idman oynamağı, avtomobillər dəyişdirməyi və video oyunlar oynamağı sevir.

Arduino nədir?

Arduino, elektro-mexaniki və mekatronik sistemlərlə əlaqəli çox spesifik tapşırıqların sürətli icrası üçün nəzərdə tutulmuş, kəsilmiş kompüter prosessorlarına bənzəyən, sadə mikro nəzarət panellərindən ibarət bir ailənin marka adıdır. Əsasən, bu şeyləri, çıxışların necə istehsal olunacağına dair girişlərə əsaslanaraq qərarlar vermək üçün sensorlar, mühərriklər, işıqlar, açarları və digər rəqəmsal elektronika ilə əlaqə yaratmaq üçün istifadə edirsiniz (məsələn, ətraf mühitin temperaturu 30 ° C-dən çoxdursa, soyutma fanı).

Bir çox üçüncü tərəf mikroelementlərə əsaslanan layihələri son dərəcə qənaətcil və istənilən iqtisadi demoqrafik insanlar arasında populyar edən, olduqca ucuz elektriklə eyni klonlar yaratdı.


Hansı seçimlər var?

Mikro nəzarətçinin xüsusiyyətlərinə çatmaq üçün çipin özü çipin bütün sancaqlarını əks etdirən lövhələrə lehimlənir. Arduino lövhələri, layihənizi mürəkkəb bir şəkildə yuxarı və ya aşağı böyütmək istəsəniz, forma faktoruna (ölçü / forma) və xüsusiyyət dəstinə görə dəyişir. Seçimlər çox olduğundan, UNM və NANO-da istifadə olunan ən populyar çipə, yəni ATMEGA328P-yə diqqət yetirəcəyəm. Bu, sadəcə "CPU" nun adıdır, ancaq UNO və NANO-ya xasdır. Beləliklə xüsusiyyətlər eynidir və bir çox xüsusiyyətləri tətbiq etmək üçün proqram əmrləri də eynidir.

NANO-nu çox sevirəm, çünki super kompakt və çörək bişirmə qabiliyyətlidir, ona görə lövhənin özünə müraciət edəndə NANO-ya müraciət edəcəyəm. Bununla birlikdə, pin nizamının BMT-də demək olar ki, eynidir, bu təlimatı hər ikisi üçün də istifadə edə bilərsiniz (və hətta istisna olmaqla, Leonardo kimi bəzi oxşar lövhələrdə).

Niyə Arduinonu bəyənirəm

Bir universitet tələbəsi olaraq bəzi sərin işlər görmək üçün daha yaşlı PIC mikro nəzarətçilərindən istifadə edirdik və o vaxtdan bəri həmişə mikro nəzarətçilərə və onlarla mümkün olan hər cür maraqlı layihələrə daxil olmaq istədiyimi bilirdim. Problem ondadır ki, həqiqətən hansı çipi alacağımı, aparatla necə əlaqə quracağımı, bəzi ekzotik montaj dilini öyrənməyimin lazım olub-olmadığını bilmirdim.


Arduinoya büdrəyəndə müqəddəs çınqıl kimi idi. Nəinki istədiyim bütün hardware xüsusiyyətlərinə sahib idi (və bəzilərini istədiyimi də bilmirdim), həm də əvvəlcədən bildiyim və çox yaygın olaraq öyrədilən C-yə əsaslanan bir kompilyatordan istifadə etdi. Kodun çipə yüklənməsi üçün USB kabeldən başqa bir şey tələb olunmur, buna görə də qəşəng bir aparata ehtiyac yoxdur. Heyət xaricində, bütün proqramlar pulsuz və açıq mənbəlidir və standart olaraq sizə təqdim olunan geniş nümunə proqramları ilə. Öyrənmə əyrisi olduqca aşağıdır - dediyim kimi, bu sehr kimi idi. Yalnız bir lövhə al və hər şeyə sıçray!

ATMEGA328P Xüsusiyyətləri və Xüsusiyyətləri

Dediyim kimi, sadəcə 328 adlandıracağım bu çip, ən populyar Arduino lövhəsinin ürəyidir. Taxtada görəcəyiniz hər şey yalnız dövrə və ya çipin bir çox sancağından gələn başlıqları dəstəkləyir, beləliklə onlara asanlıqla tellərlə qoşula bilərsiniz. 328 bütün işlərin yerinə yetirildiyi yerdir. Çipin nəyə qadir olduğunu bir baxışda görə bilmək üçün sadəcə xüsusiyyətləri və xüsusiyyətləri sadalamaqla başlayacağıq.


Xüsusiyyətlər

Aşağıdakı daha çox tanış olan rəqəmlərə həddindən artıq tənqidi yanaşmağa meylli ola bilərsiniz, amma inanın: Bu xüsusiyyətlərin nəyə görə olduğunu daha dərin səviyyədə başa düşdükdən sonra hamımızın sadəcə populyar rəqib məhsul olan Raspberry Pi kimi süper sürətli kompüterə bənzər lövhələrdən istifadə edin. Beləliklə, əlavə fikirləşmədən xüsusiyyətlər:

  • 16MHz Saat Hızı (16 MIPS iş qabiliyyəti)
  • 8 Bit Qenerasiya
  • 5V təchizatı (minimum 3.3V)
  • 40mA Maksimum Cari çəkiliş
  • 32KB Proqram Məkanı (kodunuz üçün)
  • 1KB EEPROM (iş vaxtında qalıcı olaraq əşyalara qənaət etmək üçün)
  • 2KB RAM (bütün iş vaxtı dəyişənləriniz və hesablamalarınız üçün)
  • 0.1 uA - 19mA Cari İstehlak Aralığı

Bu dəyərlərin tanış olduğunuz miqyasda təsirsiz olduğunu qeyd edəcəksiniz. Bir kompüteriniz varsa, GigaHertz və GigaBytes və 64 bitə alışmışsınız. Bu "acınacaqlı" rəqəmlərə həddindən artıq tənqidi yanaşmağı yatırmağa çalışın. Avtomobilinizin və kosmik gəminin eyni şəkildə "acınacaqlı" kompüterlərdə işlədiyini unutmayın. Niyə? Çünki bəzən aparat əlinizdə olan vəzifə üçün xüsusi hazırlanmışdırsa, az vaxt sərf etməklə bir işi daha yaxşı və daha sürətli edə bilərsiniz.

Super Nintendo Əyləncə Sistemini (SNES) xatırlayırsınız? Bu oyun konsolunu işləyən çip, Windows 3.1 işlədən 486 kompüterdən daha az güclü idi. Bununla birlikdə, bir Super Nintendo-nu 486 kompüterdə təqlid etməyə çalışarsanız, 486 bunun öhdəsindən gələ bilmir. Oynanmaz. Bu səbəbdən kompüterlər hər şeyə və hər şeyə faydalıdır, çünki onlar ixtisassızdır, lakin mikro nəzarətçi yalnız 1 şey üçün faydalıdır: Elektro-mexaniki sistemlərə nəzarət və bunu üstün sürət və yaddaşa sahib bir kompüterdən qat-qat daha təsirli edir. Bir Arduino lövhəsinin baş barmağınızın böyüklüyündə, bir saat batareyasının işləyə biləcəyini və heç bir əməliyyat sistemi tələb etmədiyini nəzərə alsanız, 16MHz və 2KB RAM ilə nə qədər edə biləcəyinizi anlamağa başlayırsınız.

328-də olan bir sabit diskə bənzər bir şey də diqqətəlayiqdir. 32KB proqram sahəsi yalnız əvvəlcədən bildiyiniz şeyləri yükləmək üçün istifadə edilə bilər: Kod, istinad cədvəlləri və s. Ancaq məlumat saxlamaq istəyirsinizsə, bilmirsiniz ... iş vaxtı yaranan məlumatlar, daha sonra Excel-də qrafik qurmağı planlaşdırdığınız sensor oxunuşları kimi, bu məlumatları 1KB EEPROM-a mini sabit disk kimi saxlaya və daha sonra oxuya bilərsiniz. Bu nə qədər sərin?

Bu kiçik yaddaş bloku olmasaydı, bir növ əlavə (ekrandakı ekran kimi) almadan cihazınızdan geri bildirim almağa imkanınız olmaz ... tək LED-i istifadə etmək istəməsəniz sizə morze kodunu qırpmaq üçün lövhə ... və bu əyləncəli ola bilər :)

Xüsusiyyətlər

İndi 328-in əsas xüsusiyyətlərinə əlavə olaraq, sahib olduğu bütün heyrətləndirici xüsusiyyətlərin siyahısı:

  • 3 Taymer (2 x 8 bit və 1 x 16 bit)
  • Kanal başına 10 bit Çözünürlüklü 8 ADC Kanalı
  • Seçilən Rəqəmsal Sancaqlardakı 6 PWM Kanalı
  • PWM vasitəsilə Analog Çıxış
  • Daxili temperatur sensoru (ADC multipleksorunda 9-cu kanal)
  • USART
  • SPI
  • I2C
  • Gözətçi Timer
  • 2 Hardware fasilələri
  • 6 Enerji qənaət rejimi
  • 22 Rəqəmsal I / O Sancaqları
  • Analoq müqayisəli

Zəhmət olmasa bunun tam bir siyahı olmadığını unutmayın. 328-in qolunu qaldıran bir neçə daha çox hiylə var, AMMA bunlar, heç qurulmadan, "qutudan kənarda" istifadə etməyə hazırdır. Digərləri bir az daha qaranlıqdır və bu məqalənin əhatə dairəsindən kənardadır.

328-in xüsusiyyətləri və üstünlüklərini izah etmək

İndi bir dəstə şifrəli xüsusiyyət və xüsusiyyət gördünüz, gəlin hər şeyin mənasını və necə istifadə edəcəyini nəzərdən keçirək. Hər bir xüsusiyyət üçün 3 sualı cavablandıracağam:

  • Bu nədir?
  • Ümumi bir nümunə nədir?
  • Onu necə istifadə edirəm?

Bu şəkildə sadəcə texnobl olmayacaq. Əslində bu təlimatı oxuyub başa vuracaqsınız və həmin gün real bir proyektdə məlumatdan istifadə edə biləcəksiniz! Bu nümunələri oxuduqda proseduru və izah olunan xüsusiyyətlərin mənasını başa düşəcəksiniz, ancaq bunu öz layihənizə uyğunlaşdırmaq üçün bir az iş görməli olduğunuzu unutmayın.

Tez-tez qeydləri dəyişdirəcəyik və burada mümkün olan hər bir ssenari üçün bütün bunları dərindən izah etmək çox qarışıqdır, buna görə 328-nin məlumat səhifəsinə harada baxacağınızı bilmək üçün nümunəni rəhbər kimi istifadə etmək lazımdır. Orada aşağıdakı nümunələrdə dəyişdirilmiş bütün qeydlərin xəritələrini tapa bilərsiniz. Sadəcə, hər bir müvafiq qeyd üçün cədvəlləri tapmalı və bitləri istədiyiniz rejim və dəyərlərə görə dəyişdirməlisiniz. Buna görə bu nümunələr düzgün istiqamətdə başlamağınız üçün nəzərdə tutulub, çünki onsuz da hansı qeydiyyatdan keçəcəyini və hansı masaları yoxlayacağınızı biləcəksiniz.

1KB EEPROM

EEPROM bir az qəribə bir şeydir, çünki həqiqətən bir xüsusiyyət deyil, RAM və ya CPU kimi məcburi deyil. Sadəcə orada oturur və istifadə edə və ya istifadə edə bilməzsən. EEPROM, Elektriklə silinə bilən, yalnız oxuna bilən yaddaş deməkdir. Əsasən dəyişkən olmayan bir yaddaşdır (RAM söndüyü zaman güc söndükdə nəyi qoyduğunuzu unutmur), beləliklə orada əşyaları saxlaya bilərsiniz və Arduino açıldıqdan sonra da davam edəcəklər. Bu onu mini sabit diskin ekvivalenti edir! Əlbətdə ki, 1KB çox sabit disk deyil, lakin Arduino layihələri üçün çox vaxt ehtiyacınız üçün kifayətdir.

Məsələn, proqramınız bir düşmə səbəbindən sürətlənməni təyin etmək üçün hazırlanmışsa, bir akselerometr istifadə edə və x, y və z sürətlənmə dəyərlərinə baxaraq bir düşmə imzasını analiz etməyə çalışa bilərsiniz. Düşmə çox keçici, qısa bir hadisə olduğundan və sensorun özü düşdüyündən, real vaxtda vizual yoxlamadan hər hansı bir faydalı məlumat toplaya bilməyəcəksiniz. Etməli olduğunuz şey sensör məlumatlarını bir yerə yazmaqdır. Yenə də, sensörünüz sərbəst bir düşmə vəziyyətində olduğundan, məlumatı serial, SPI, I2C və ya bu kimi vasitələrlə ötürmək üçün sensor və ya Arduino kartını bir şeylə əlaqələndirməyəcəksiniz. Həqiqətən də ən yaxşı seçim hər şeyi tamamilə portativ və təcrid olunmuş vəziyyətdə saxlamaq və məlumatları yerli olaraq EEPROM-da saxlamaqdır. Sadəcə məlumatları müəyyən bir tezlikdə götürün və EEPROM yaddaşına yazın. Daha sonra EEPROM üzərindəki bütün məlumatları serial terminalı vasitəsilə kompüterinizə ata və üstünə qrafika qoyub baxa bilərsiniz! EEPROM həqiqətən yaxşıdır.

Aşağıdakı kod bir sensoru oxuyur, hər bir dəyəri EEPROM-un növbəti mövcud baytında saxlayır və dolduqdan sonra proqram bütün dəyərləri sırayla oxuyur və serial terminalda yazdırır. Hər BYTE EEPROM-un yalnız 256-ya qədər bir sayda olduğunu (bir bayt 8 bitlik bir rəqəmdir) unutmayın, belə ki, nömrələri daha aşağıda saxlamalı və ya daha böyük bir nömrəni (və ya digərlərini) saxlamaq üçün 1 baytdan çox EEPROM istifadə etməlisiniz. məlumat növü). EEPROM yazma funksiyası əvvəlcə yaddaşda yazdığınız bayt sayını və sonra yazılan dəyəri göstərərək işləyir. Arduino-nun neçə bayt yaddaşa sahib olduğunu (ən son Uno / Nano 1024) və hansı bayta yazmaq istədiyinizi bildiyinizdən əmin olun. Həm də sizə lazım olacaq başqa bir hiylə ... Proqramınızı bir neçə saniyə gecikmə ilə başlayın. Niyə? Çünki məlumatları saxladıqdan sonra bir sonrakı iş onu oxumaqdır, ancaq əvvəlcə "oxu eskizini" yükləməlisən və bunun üçün USB kabelini qoşan kimi köhnə proqram məlumatların üstünə yazmağa başlayacaq son iclasdan. Başlamaq üçün bir gecikmə qoyarsanız, köhnə proqram məlumatlarınızı poza bilmədən əvvəl yükləmə düyməsini basmaq üçün bir neçə saniyəniz var.

#include EEPROM.h> int addr = 0; boş quraşdırma () {Serial.begin (9600); } void loop () {while (addr 1024) {int val = analogRead (0); EEPROM.write (addr, val); addr ++; gecikmə (100); } addr = 0; while (addr 1024) {Serial.println (EEPROM.read (addr)); addr ++; gecikmə (100); }}

3 Taymer

Bu nədir?

Taymer, sistem saatını hər saat işarəsi ilə sayma vasitəsi kimi istifadə edən bir cihazdır. Mikro nəzarətçi işini yerinə yetirdiyində, saatlar müstəqil olaraq hərəkət edir və istədiyiniz saya qədər sayacaq, qalan çip hesablamalarını yerinə yetirir.Bu səbəbdən 3 taymerin hər biri müstəqil olaraq saya bilər, baxmayaraq ki, onların sayma sürətləri sistemin saat sürətinə əsaslanır, belə ki saat sürəti 16MHz (olduğu kimi) olarsa, saat saniyədə 16 milyon dəfə gənə vurur və hər taymer potensial olaraq 16 saya bilər. saniyədə milyon nömrə, istəsəniz, lakin müstəqil olduqları üçün CPU məşğul və ya olmasın bunu edə bilərlər və istədiyiniz zaman başlaya / dayandıra bilərlər.

Taymerlər etdikləri hər şeyin sayılması kimi sadə bir şərtlə işləyirlər, ancaq bu xüsusiyyətdən bir ton fərqli şeylər etmək üçün istifadə edə bilərsiniz. Saydıqları sayını seçib bu saya çatdıqda nə edəcəklərini söyləyərək (dayan, əksini say, proqramı kəs, və s.) Vaxtı izah etməkdən, svetofor sürməkədək geniş bir sıra işlər görə bilərsiniz. enerji təchizatı. Arduino çipində mövcud olan 3 taymerdən 2-si 8 bitdir, yəni yalnız 256-ya, üçüncüsü isə 16 bitdir, yəni təxminən 65 minə qədər saya bilər.

Ümumi bir nümunə nədir?

Çiçəklərinizi həftədə bir dəfə suvarmaq üçün bir maşın proqramlaşdırmaq istədiyinizi söyləyin, ancaq bu müddətdə torpaq nəm səviyyələri və ətraf işıq səviyyələri haqqında məlumat toplamaq istəyirsiniz. Böyük bir həftəlik gecikmə ilə əsas proqramı kəsmədən suvarma cədvəlini izləmək üçün bir taymerə ehtiyacınız var.

Onu necə istifadə edirəm?

Bu proqram Timer1 (16 bit) istifadə edərək 1 saniyəlik fasilələri sayır və bu aralığında LED-i yandırıb söndürür. Bunu etmək üçün sayğac 1 saniyə çəkən müəyyən bir sayını hesablamalıdır. Saat 16MHz-də işlədiyindən və taymer yalnız 65000-ə qədər saya bilər (bu 16 bitlik rəqəmin ölçüsüdür), normalda CPU vaxtından 1 saniyədən əvvəl sona qədər yaxşı sayacaqdır. Bunu düzəltmək üçün 16 MHz-i aşağıya endirmək üçün bir prescalator faktorundan istifadə edirik ki, sayğac sistem saatından daha yavaş gələr. O zaman həqiqətən 1 saniyə saya bilərik.

Həqiqətən, loop funksiyasında bir şey yoxdur. Sadəcə taymeri quraraq işləməyə başlayır. Ediləcək ilk şey, TCCR1A və B 2 taymer qeydlərini konfiqurasiya etməkdir. Əvvəlcə hər ikisini də 0 olaraq təyin etdik ki, yalnız istədiyimiz parçaları təmin edə bilək. Sonra saymaq istədiyimiz rəqəmi təyin edən OCR1A-nı təyin etdik. Saatı 1024 ilə əvvəlcədən ölçsək, 16000000/1024 = 15625 əldə edirik. Bu, Taymerin saat sürəti olduğundan, 1 saniyə o qədər gənəni ehtiva edir və istənilən halda 1 saniyə istədiyimiz üçün bu rəqəmi saymaq üçün yuxarı həddi olaraq saxlamaq istəyirik. üçün. 2 saniyə istəsəydik, bu rəqəmi iki dəfə artırardıq. 0-dan saymağa başladığımız üçün bu vəziyyətdə həqiqi limit 15624-dür. Bu, OCR1A-ya daxil olur.

İndi WGM12 tərəfindən timer "rejimini" təyin etdik. Zamanlayıcı çox şey edə biləcəyi üçün, ancaq istədiyimiz maksimum saya qədər saymaq və kəsilməyə başlamaqdır. Buna CTC rejimi deyilir və WGM12 vasitəsilə seçilir. Sonra CS10 və CS12 prescaleri yuxarıda müzakirə edildiyi kimi 1024 olaraq təyin etdi. TIMSK1, fasilələrin aktivləşdirilməsi üçün yapılandırmamız lazım olan bir qeyddir və bununla da işimizi bitirdik. Taymer avtomatik olaraq saymağa başlayacaq və saniyədə bir dəfə OCR1A-dakı hədəf dəyərinə çatacaq, LED pinini kəsəcək və "açar" vəziyyətə gətirəcəkdir.

void setup () pinMode (13, OUTPUT); cli (); TCCR1A = 0; TCCR1B = 0; OCR1A = 15624; TCCR1B boşluq dövrəsi () {} ISR (TIMER1_COMPA_vect) {digitalWrite (13,! DigitalRead (13)); }

10 Bit Çözünürlüklü 8 ADC Kanalı

Bu nədir?

Bir ADC, Analoqdan Rəqəmsal Konvertora aiddir, bu da əsasən 0 ilə 5 volt arasında bir şey ola biləcək bir gərginlik şəklində dəyişkən məlumat alır və 0 ilə 1023 arasında rəqəmsal 10 bit sayına çevirir. saydan sonra oxunan siqnalın ölçüsünü təmsil edir, burada 1023 = 5V və 0 = 0V. Bu, hər cür sensoru oxumaq üçün son dərəcə faydalıdır. 0-5V-dan bir gərginliyi geri bildirərək hiss etdiklərini çatdıran bir ton sensor var. Bu gərginliyi oxuyub mikro-nəzarətçinin tam bir ədədi kimi riyazi olaraq başa düşə biləcəyi və idarə edə biləcəyi bir şeyə çevirə bilməklə, proqramınızın işini ətraf mühitin girişinə əsasən idarə edə bilərsiniz.

ADC multipleksoru ayrıca 1.1V-lik daxili bant boşluğu referans gərginliyinə malikdir. Bütün bunlar, 1.1V-dən yuxarı keçməyəcəyini bildiyiniz kiçik ölçmələr üçün daha yaxşı bir qətnamə əldə etmək üçün ölçmə aralığınızı istənilən vaxt 1.1V-ə dəyişdirmək üçün quraşdırılmış bir seçiminizin olmasıdır. Unutmayın ki, bu rejimə keçdikdən sonra gərginlik referansının 5V-dən əvvəl düşməsini gözləmək lazımdır və ya oxumalarınız səhv olacaq. Sadə bir gecikmə bunu edə bilər.

Ümumi bir nümunə nədir?

Tutaq ki, kökəlmə sürətinizi ölçmək istəyirsiniz. Gərginlik göstəriciləri olan bir kəmər taxa bilərsiniz (uzunluğun dəyişməsini aşkar edən sensorlar) və sensoru ADC sancaqlarınızdan birinə bağlayan bir gücləndiriciyə bağlaya bilərsiniz. Belinizə əlavə etdiyiniz hər qarış piy yağı ilə gərginlik göstəricisindəki gərginlik artacaq və güclənəcəkdir. Daha sonra ADC pimi artan gərginliyi aşkarlayacaq və artan bir ədədə çevirəcəkdir. Kodunuzun ADC-nin 10 bitlik diapazonunu aça biləcəyinə əmin olun!

Onu necə istifadə edirəm?

Bu həqiqətən asandır. Analoq sancaqlar hər zaman girişdir və quraşdırma zamanı konfiqurasiya edilməsinə ehtiyac yoxdur. Ancaq yalnız sayı ilə təyin olunan rəqəmsal sancaqlardan fərqli olaraq, analog sancaqların lövhədə yazılan tam adı ilə çağırılması lazımdır (məsələn, A3 deyil, yalnız 3). Analoq sancaqdakı gərginliyi ölçmək istədiyiniz zaman sadəcə aşağıdakı kodu istifadə edin və sonra "dəyər" də saxlanılan tam ədədi götürün, 255-ə bölün və 5-ə vurun. Bu, həmin dövrdəki pin üzərində analoq gərginliyi verəcəkdir. ölçüldü. Aşağıdakı nümunədə A0 pimi ölçülür. Yalnız bunun üçün, gərginliyi hesablayaq və serial terminalda da çap edək.

int dəyəri; ikiqat gərginlik; boş quraşdırma () {Serial.begin (9600); } boş halqa () {dəyər = analogRead (A0); gərginlik = dəyər / 255 * 5; Serial.println (gərginlik); }

6 PWM Kanalı

Bu nədir?

PWM Pulse Width Modulation deməkdir və əsasən sabit bir tezliyin alternativ kvadrat dalğasıdır. Kvadrat dalğanın yüksək və aşağı səviyyə var. Hər hansı bir dövr üçün (müddəti 1 dalğa), dalğanın az olduğu müddətə nisbətən dalğanın yüksək olduğu müddət, "vəzifə" və ya yüksək vaxtın az vaxt nisbətini təyin edir. Bu faydalıdır, çünki fərqli vəziyyətlər arasında keçid etməsi lazım olan hadisələrin vaxtını təyin etmək üçün bir vasitə təmin edir. Yüksək bir gərginlik alan və ondan bir çox aşağı gərginlik yaradan bir enerji təchizatı belə bir prinsip üzərində işləyir. PWM vəzifəsi, enerji mənbəyinə gərginliyin nə qədər düşəcəyini izah edir, çünki vəzifə nisbəti təmsil edir, buna görə 50% vəzifə, maksimum gərginliyin 50% -i istəyirəm deyənlə eynidir.

PWM haqqında bilmək istədiyiniz hər şey üçün səhifənin yuxarı hissəsindəki videonu yoxlayın.

Ümumi bir nümunə nədir?

Bir osiloskopun necə istifadə ediləcəyini öyrənmək istəyirsiniz, beləliklə ölçmək üçün bir test siqnalı təmin etmək üçün Arduino nanodan istifadə edirsiniz. PWM qabiliyyətli bir rəqəmsal pimi çıxış olaraq konfiqurasiya edirsiniz və analogWrite () əmrini fərqli vəzifə dəyərləri ilə verirsiniz, bu da dalğa şəklini əhatə dairəsi ekranında gözlənildiyi kimi dəyişdirir.

Onu necə istifadə edirəm?

Son dərəcə sadədir. PWM-ni (D3, D5, D6, D9, D10, D11) dəstəkləyən rəqəmsal bir pin aldıqdan sonra, pimi (bu halda D9) bir çıxış olaraq təyin etmək üçün aşağıdakı kodu istifadə edin və sonra PWM istehsal edin. "Vəzifə" parametri, "vaxtında" ümumi nəbz aralığına nisbət olaraq diktə edir. Beləliklə,% 25 vəzifə dövrü 63/255 olardı, beləliklə "vəzifə" 63 olardı. Aşağıya baxın:

int vəzifə = 0; boş quraşdırma () {pinMode (9, OUTPUT); } void loop () {duty = 63; analogWrite (9, vəzifə); }

Analoq çıxdı

Bu nədir?

Analog Out, Arduino mikro nəzarətçisi kimi bir rəqəmsal mənbənin analog gərginlik siqnallarından səs çıxaran qulaqlıq kimi xarici bir şey idarə etmək üçün analoq bir siqnal istehsal etməsidir. Bu son dərəcə dəyərlidir, çünki çox sayda elektro-mexaniki cihaz analoq siqnalların normal işləməsi üçün ehtiyac duyur. Yalnız rəqəmsal elektronika 0 və ya 5V kimi diskret gərginlik səviyyələrindən istifadə edərək işləyə bilər və üstünlük verir. Mühərriklərdən səsgücləndiricilərə və radio ötürücülərə qədər hər şey istədiyi kimi işləməsi üçün özbaşına bir gərginlik nümunəsi tələb olunur. Buna görə proqramınızdakı rəqəmsal məlumatlardan bu analog siqnalları yarada biləcək xüsusi bir dövrə olmalıdır.

Ümumi bir nümunə nədir?

Bir güc çevirici yaratmaq istədiyinizi düşünək. Bunun üçün 170V pik və 60 Hz tezlikli bir analog gərginlik olan bir sinus dalğası yaratmalısınız. Bu dalğanı rəqəmsal məntiqlə istehsal etməlisiniz, beləliklə sinus dalğasını təşkil edən analoq gərginliyi çıxarmaq üçün bir DAC (Rəqəmsaldan Analoqa çeviriciyə) ehtiyacınız var.

Onu necə istifadə edirəm?

Hər şeydən əvvəl, Arduino lövhəsində "analog out" yoxdur, amma səni və ya başqa bir şeyi aldatmağa çalışmıram. Donanım demək olar ki, hamısı var. Rəqəmsal sancaqlardan birinə sadə aşağı keçidli bir filtr əlavə etməli, PWM və bum - analog çıxış imkanları ilə idarə etməlisiniz. Bunu etmək üçün əvvəlcə rəqəmsal bir pin seçin, D9 deyin və pinə bir sıra müqavimət və paralel bir kondansatör bağlayın. Google-da dəyərləri seçməyinizə kömək edəcək bir çox vasitə var, amma mübahisələr üçün 10000 ohm və 10 uF deyək.

Bu 2 xarici elementi bağladıqdan sonra aşağıdakı kodu sınayın və sonra çıxış gərginliyini 0-dan 5V-ə qədər artırmaq və ya azaltmaq üçün "vəzifə" dəyərini dəyişdirin (aşağıdakı nümunə 2.5V verir). Aldığınız gərginlik belə olacaq: 5 x (vəzifə / 255), buna görə kodunuzdakı vəzifə dəyərini dəyişdirin.

int vəzifə = 0; boş quraşdırma () {pinMode (9, OUTPUT); } void loop () {duty = 127; analogWrite (9, vəzifə); }

Daxili temperatur sensoru

Bu nədir?

Arduino çipində çipin içərisindəki temperaturu ölçən daxili bir istilik sensoru var. Bu, taxtanıza bir qoruma qat əlavə etmək, ondan çox güc götürmək və ya nisbətən isti bir mühitdə yüksək gücdə işlətmək səbəbindən zərərdən xilas olmaq istədiyiniz zaman faydalıdır. Arduinonu bir neçə dəqiqə yuxuya qoysanız və sonra yuxudan oyananda dərhal temperaturu ölçsəniz, ətraf mühitin istiliyinin təxminən bir təxminini əldə etmək üçün də istifadə edə bilərsiniz.

Ümumi bir nümunə nədir?

Yaz aylarında Arizonada sürdüyünüz müxtəlif başlıqlı sensorları ölçmək üçün avtomobilinizdə Arduino lövhəsindən istifadə edirsiniz. Maşını açıq günəşin altında tərk etsəniz, avtomobilin içindəki temperatur tələsik üzünüzü əridə bilər. Daxili temp sensoru sürücüyə təhlükəli iş temperaturu barədə məlumat vermək üçün siqnalizasiya rolunu oynaya bilər və ya əlavə istilik istehsalının mikro nəzarətçiyə zərər verməsinin qarşısını almaq üçün çipi yuxu rejimlərindən birinə ata bilər.

Onu necə istifadə edirəm?

Bu kod bloku çip temperaturunu yoxlayacaq və serial monitoruna yazdıracaq. Bunu ətrafdakı istilik yoxlamaları üçün faydalı etmək üçün, lövhəniz maraq dairəsində bir neçə dəqiqə gücsüz oturduqdan dərhal sonra yerinə yetirməlisiniz. Taxta açılan kimi 328 qızacaq və ətrafdakı istilik dəyərini atacaq, buna görə dərhal yoxlayın.

boş quraşdırma () {Serial.begin (9600); } boş halqa () = _BV (ADSC); while (bit_is_set (ADCSRA, ADSC)); wADC = ADCW; t = (wADC - 324.31) / 1.22; Serial.println (t); gecikmə (1000);

Döngü funksiyasının ilk bir neçə sətri, ADC multiplekserini istilik sensörünün olduğu kanal 8-dən oxumaq üçün sazlayır. Daha yaxşı qətnamə təmin etmək üçün istinad gərginliyini 5V-dən 1.1V-ə endirir. Daha sonra temperatur 't' xam ölçmə wADC-ni bir ofset (324.31) və qazanc (1.22) ilə tənzimləyərək hesablanır. Bunlar standart dəyərlərdir və taxtanız üçün səhv ola bilər, beləliklə proqram çıxışı termometrə uyğun gələnə qədər ofseti yoxlamaq və tənzimləmək üçün bir termometr istifadə edin. Sonra dəyər tamamilə fərqli bir temperaturda hələ də bağlıdırsa, qazancı da tənzimləməlisiniz.

Sensor bütün temperaturlarda +/- 2 dərəcə oxuyana qədər bu dəyərlərlə oynayın. Ayrıca, kodu daha yığcam etmək istəsəniz və istiliyi serial monitoruna yazdırmağa ehtiyacınız yoxdursa, yalnız quraşdırma blokundakı hər şeyi kəsin və döngü blokundan Serial.println (t) -ni kəsin.

USART

Bu nədir?

USART, əsasən serial rabitədir ... USB cihazlarının kompüterlə danışması üçün tələb olunan növdür. Arduino lövhənizə bir proqram yüklədiyiniz zaman məlumatı kompüterdən çipə çatdırmaq üçün USART istifadə edir və əksinə çip çalıştırdığınız koddan məlumat vermək istədikdə, kodunuzu qurmaq şərti ilə. Bunu serial rabitə interfeysi kimi düşünün.

Ümumi bir nümunə nədir?

Siz sadəcə Yerin maqnit qütblərinə əsaslanaraq dərəcə ilə bir başlıq verən bir maqnitometr çipi satın aldınız. Sensorun düzgün işlədiyini və onu atan bir müdaxilənin olmamasını təmin etmək üçün canlı oxunuşları almaq istəyirsiniz. Bu səbəbdən Arduino kompilyatoruna inteqrasiya olunmuş serial terminalda maqnitometr oxunuşunu saniyədə iki dəfə göstərmək üçün kodunuzda yazdırma əmrləri verirsiniz. Bu, portativ bir ekran ekranı və ya oxşar çıxış cihazı əldə etmək və qurmaq əvəzinə.

Onu necə istifadə edirəm?

Arduino dili, məlumatlarınızı PC-yə göndərmək üçün çox asanlıqla serial rabitəsi qurmağa imkan verir. Seri terminaldan istifadəçi girişini də oxuya bilərsiniz. Yükləmə düyməsini basdıqda Arduino proqramı tərəfindən idarə olunduğundan çipə kod yükləmək üçün istifadə etmək istədiyiniz zaman heç bir quraşdırma yoxdur. Aşağıdakı kod, qrafik ekranları və ya digər çıxış cihazlarını bağlamağa ehtiyac olmadan kodunuzdan ən ilkin geribildirimi təmin etdiyi üçün HƏR layihə üçün ən əsas başlanğıc nöqtəsidir. Arduino lövhəsindən analoq ölçmə dəyəri əldə etmək üçün X hərfini yazmağınızı tələb etdiyi üçün əsas istifadəçi giriş imkanlarına da malikdir. Bu şəkildə USART sayəsində giriş və çıxış imkanlarına olan ən universal tələbatı ödəyir.

Bu kodu yüklədikdən sonra kompilyatorunuzdakı serial monitoru vurmalı, kodunuza uyğun gələn səs dərəcəsini seçməli olduğunuzu (bu halda 9600) və daha sonra monitörü bağlayıb açmanız lazım olduğunu unutmayın. Sonra yuxarıdakı çubuğa X yazmalı və nəticənin işlədiyini görmək üçün enter düyməsini vurmalısınız. Baud nisbətləri uyğun gəlmirsə, zibil çıxdığını görərsiniz.

boş quraşdırma () {Serial.begin (9600); } void loop () {byte input = Serial.read (); əgər (giriş == 'X') {int sensorValue = analogRead (A0); Serial.println (sensorValue); }}

SPI

Bu nədir?

Arduino cihazınızı istifadə edərək 1 və ya daha çox ətraf cihazı idarə etməyə imkan verən bir rabitə protokoludur. Bir çox sensor və ekran Arduino ilə məlumatları irəli və geri ötürmək üçün bu protokolu tələb edir. İcra baxımından sadə və sürətli, lakin 328 cihazınızda bir çox ayrı tel yeyir.

Ümumi bir nümunə nədir?

Batareyanın bütün parametrlərini daxil etməyə və şarj və ya boşaltma rejiminizi seçməyə imkan verən çox məqsədli bir batareya şarj cihazı üçün bir istifadəçi interfeysi ekranı yaratmaq istəyirsiniz. Eyni zamanda başqa bir ekranda real vaxt sensor məlumatlarını göstərmək istəyirsiniz. Hər birinin fərqli məlumatları eyni vaxtda göstərə bilməsi və eyni əlaqə nöqtələrinin çoxunu paylaşması üçün hər iki ekranı çip seçmə sancaqlarına görə əldə etmək üçün SPI protokolundan istifadə edə bilərsiniz.

Onu necə istifadə edirəm?

VCC, GND, MISO, MOSI, SS (və ya CS), SCK üçün ən azı Arduino ilə periferik cihazınız arasında uyğun tellər bağlamalısınız. Bəzən yalnız 1 cihaz idarə edirsinizsə, SS / CS pinini atlaya bilərsiniz və cihaz yalnız qul işləmə qabiliyyətinə malikdirsə, bəzən MISO pinini də atlaya bilərsiniz. Bu sancaqlar, eskiziniz vasitəsilə Arduino lövhənizdəki fərqli I / O sancaqlarına özbaşına təyin edilə bilər ki, bu da SPI-ni proqram rejimində işə salacaq və ya ICSP başlığındakı əvvəlcədən təyin edilmiş donanım sancaqlarını istifadə edə bilərsiniz ki, bu da SPI-i aparat rejimində işlədə bilər (daha sürətli) ). ICSP pinout sizə hansı pinin nə etdiyini izah edəcəkdir.

Eskizinizlə əlaqədar olaraq, SPI.h kitabxanasını və onunla interfeys üçün cihaza xas olan kitabxananı daxil etməlisiniz. Sonra cihazlarda dəyişən, ancaq proqramda işləyərkən yuxarıda göstərilən pin yerlərini təyin edən bir növ başlanğıc əmri verməlisiniz. Aşağıda bir SPI OLED ekranı idarə etmək üçün kəsilmiş aşağı nümunə eskizidir. Bu proqram daha sonra I2C bölməsində görünəcək, beləliklə onların necə fərqləndiyini yaxından nəzərdən keçirin.

#include SPI.h> #include Adafruit_GFX.h> # Adafruit_SSD1306.h> // software SPI istifadə edirsinizsə (standart vəziyyət): # OLED_MOSI 9-u təyin edin # OLED_CLK 10-u təyin edin # OLED_DC 11 #define OLED_CD # Adafruit_SSD1306 ekranı (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 void setup () {display.begin (SSD1306_SWITCHCAPVCC); display.display (); gecikmə (2000); display.clearDisplay (); display.drawPixel (10, 10, BEYAZ); display.display (); gecikmə (2000); display.clearDisplay (); } boş halqa () {}

I2C (I "Kvadrat" C)

Bu nədir?

SPI-yə oxşar başqa bir rabitə protokolu. Fərq budur ki, daha az telə ehtiyac var və eyni 2 simli paylaşaraq daha çox cihaz bağlaya bilərsiniz, SPI isə əlavə cihazlar üçün daha çox tel tələb edir. Ticarət I2C-nin SPI-dən daha yavaş olmasıdır. Bəzi cihazlar OLED ekranlar kimi həm SPI, həm də I2C tatlarında olur.

Ümumi bir nümunə nədir?

3 maqnitometr, 1 giroskop və 1 sürətləndirici olan 3 fərqli sensor çipi olan tək bir lövhə həlli olan bir IMU (Atalet Ölçmə Vahidi) sensoru alırsınız. Xaricdən 1 sensör kimi görünsə də, kodunuzla əlaqəli olaraq 3-dür. I2C protokolundan hər bir çipin spesifik donanım funksiyaları ilə əlaqə qurmaq üçün istifadə edərdiniz, çünki I2C eyni paylaşılan boru kəmərində eyni anda 1 cihazı ayırmaq və aktivləşdirmək üçün proqram ünvanını istifadə edərək eyni məlumat və saat xəttlərində birdən çox cihazı şəbəkəyə salmağa imkan verir.

Onu necə istifadə edirəm?

328 cihazınızdan hansı cihazı işlədirsinizsə, onun səthi etiketlənmiş olacaq (ümid edirəm). Yalnız 4 pin tapmaq lazımdır: VCC, GND, SDA, SCL. Bəzən VCC 5V və ya 3.3V deyəcək, amma nə qədər gərginlik tələb olunursa, onu təmin etmək üçün Arduino-da bir pin var, buna görə yalnız uyğun güc pimindən istifadə edin. GND həmişə eyni olacaq və buna ehtiyacınız var, SDA analog pin A4 və SCL analog pin A5. Həm Arduino lövhənizdəki, həm də cihazınızdakı bütün 4 sancağı uyğunlaşdırın.

İndi şifrə gəldikdə ... tamamilə hansı cihazı işlədəcəyinizdən asılıdır, buna görə universal cavab yoxdur. Bunun yeganə universal hissəsi, Wire.h kitabxanasına ehtiyacınız olacaq və cihazın kitabxanasında və ya sadə bir tel.begin () və ya hər hansı birində olsun, bir növ başlatma əmri verməlisiniz.

Kodunuzun hansı formada olacağını proqnozlaşdıra bilmirəm, çünki cihaza görə dəyişir, lakin aşağıdakı nümunəyə baxsanız, OLED ekranı idarə edən soyulmuş bir proqramdır. Tel kitabxanasına zəng etdiyinə, cihazı HEX ünvanı (0x3D) ilə tanıdığına və həmin OLED cihazına xas olan əmrlərdən istifadə edərək ekrana tək bir piksel yazdırdığına xüsusi diqqət yetirin. I2C-nin universal icrası olmaya bilər, ancaq çalıştırmağa çalışdığınız cihazı oxuduğunuzu anlamaq o qədər də çətin deyil.

#include Wire.h> # Include Adafruit_GFX.h> # Include Adafruit_SSD1306.h> # OLED_RESET 4 Adafruit_SSD1306 ekranını təyin edin (OLED_RESET); #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3D); display.display (); gecikmə (2000); display.clearDisplay (); display.drawPixel (10, 10, BEYAZ); display.display (); gecikmə (2000); display.clearDisplay (); } boş halqa () {}

Gözətçi Timer

Bu nədir?

CPU-nu izləyən və hər şeyin yaxşı olduğundan əmin olmaq üçün müntəzəm status yeniləmələrini axtaran xüsusi bir taymerdir. Kod nasaz işlədilirsə və CPU-nu asırsa və ya icraatda bənzər bir arızaya səbəb olan bir hardware çatışmazlığı varsa, gözətçi timer vaxtı bitəcək və Arduino kartını sıfırlaya bilər. Nəzarət iti CPU-dan asılı olmayaraq işlədildiyi üçün özünün ayrı bir osilatordur və yatarkən CPU-nu da oyandıra bilər.

Gözətçi it taymerləri, uzun müddət yuxu fasilələri ilə kod işlədəndə və ya qeyri-müəyyən bir proqram davranışının baş verə biləcəyini gözlədiyinizdə və bölmənin əbədi qalmasını istəmədiyiniz zaman çox faydalıdır. Kodunuz asılmadığında, lövhənizi sıfırlamaması üçün köpəyə "təpik vurması" lazımdır, bu da vaxtı keçməyəcəyi üçün köpəyə "OK" siqnalı göndərməyə bərabərdir.

Ümumi bir nümunə nədir?

Başqası ilə ünsiyyət qurmaq üçün 1 Arduino lövhəsindən istifadə etməyə çalışırsınız. İkinci lövhə müxtəlif hazırlıq vəziyyətində olan müxtəlif sensorlara qoşulur. Proqramın başlanğıcında, ikinci lövhəni və bütün sensorlarını yoxlamaq üçün kodunuza davam etmədən əvvəl məlumat ötürməyə hazır olduqlarını yoxlamaq istəyirsiniz. Sensor lazımi şəkildə işə salınmadığı və işə salınmadığı təqdirdə, hər bir yoxlama potensial olaraq proqramınızı asa bilər.

Əsas proqramınızın cavab verməyən bir sensorda əbədi qalmamasını, əksinə müəyyən bir müddətdən sonra özünü sıfırlamasını təmin etmək istəyirsiniz. Nəzarətçi taymeri proqramlaşdırırsınız, buna görə bütün sensorların hazır hesabat verməsini yalnız bu qədər gözləyin. Sorğu keçirilərkən onlardan biri asılıbsa, gözətçi vaxtı keçib əsas proqramı yenidən yoxlayacaq şəkildə yenidən quracaq. Yoxlamalar hamısı uğurlu olarsa, nəzarətçi bir proqramın yenidən qurulmasının qarşısını almaq üçün "təpiklənəcək" və əsas proqram planlaşdırıldığı kimi davam edə bilər.

Onu necə istifadə edirəm?

Aşağıdakı kod, gözətçi timerini kəsmək və sonra 328-i sonsuz bir döngü səbəbindən sıfırlamaq üçün istifadə etmək üçün əsas bir nümunədir (bu, proqramı əbədi olaraq asa bilər).

Əvvəlcə sıfırlama və sonra gözətçi taymerini konfiqurasiya etməklə işləyir. İkili dəyərlər verilən 2 qeydiyyatçı həm WDT qeyd bitlərini təyin edir ki, nəzarətçi 8 saniyə ərzində vaxtı bitəcək, fasilələri aktivləşdirəcək və sıfırlamağa imkan verəcəkdir. Döngü funksiyasında, daha sonra proqramın düzgün işlədiyini göstərən hər bir döngədən sonra wdt_reset () vasitəsilə köpəyin vurulduğu, "düzgün" proqramın icrasını simulyasiya edən bir döngəyə daxil oluruq. Bu, təxminən 5 saniyə davam edir. Bundan sonra proqram ikinci dövrəyə daxil olur, bu dəfə çıxış şərti yoxdur. Bu, sonsuz bir döngə ilə nəticələnən səhv icrasını simulyasiya edir.

Bu döngənin 8 saniyəsindən sonra it təpiklənmir, beləliklə LEDin LOW olaraq ayarlandığı ilə görünən sonsuz döngəni avtomatik olaraq kəsir. Nəhayət köpək 328-i sıfırlayır və kod yenidən başlayır. Bu, yalnız öz şəxsi tətbiqiniz üçün bir prototipdir, lakin həm düzgün, həm də səhv proqram icrasını və nəzarətçi taymerin düzgün qurulduqda necə işlədiyini nümayiş etdirir. Kodunuzu bu nümunə ətrafında qura bilərsiniz, sadəcə WDTCSR qeyd bitlərini 328 məlumat cədvəlinə uyğun olaraq dəyişdirərək istədiyiniz gözətçi itkisi və vaxt bitmə davranışını əldə edə bilərsiniz.

Qeyd: Bəzi Nano lövhələr (xüsusilə klonlar) WDT ilə işləmir. Nə olursa olsun, proqram cəriməni icra edəcək, WDT asıldıqda lövhənin cəriməsini kəsəcək və yenidən quracaq, lakin lövhə yenidən başlamayacaq. Bunun səbəbi, önyükləyicidəki heç vaxt düzəldilməyən bir qüsurdur. Bu problemin həlli, önyükləyicini Nano versiyasından Uno versiyasına dəyişdirməkdir, əslində Nano'nun bir Uno olduğunu düşündürməkdir.

Çox oxşar olduqları üçün bu halların 99.9% -ində bir məsələ deyil, ancaq dəyişiklik etmək üçün 2 lövhə, bir proqramçı kimi çıxış edən bir Uno və proqramlaşdırılan lövhə olmalıdır. Ayrıca, ICSP başlıq tellərini 2 lövhənin arasına bağlamalı və yeni açılış yükləyicisini yandıracaq xüsusi bir eskiz yükləməlisiniz.

#incil avr / wdt.h> void setup () = B00011000; WDTCSR = B01101001; sei (); void loop () {int i = 0; while (i 5) {gecikmə (1000); wdt_reset (); i ++; } while (1) gecikmə (50); } ISR (WDT_vect) {digitalWrite (13, LOW); }

2 Hardware fasilələri

Bu nədir?

Müdaxilə, harada olmasından asılı olmayaraq, kod icrasını dayandıra bilən və yerində başqa bir şey edilə bilən bir xüsusiyyətdir. Bu ən çox bir şeyin baş verəcəyini gözlədiyiniz zaman lazımdır, ancaq nə vaxt baş verəcəyini bilmirsiniz və bir döngə quruluşunda yoxlamaq üçün gözləyə bilməyəcəksiniz. Ümumiyyətlə aktiv olmayan bir sensoru izləyirsinizsə və vəziyyəti dəyişdikdə dərhal hərəkətə gəlmək istəyirsinizsə, bir fasiləyə ehtiyacınız var, belə ki, sensor düzgün siqnal verdikdə, etdiyiniz işi dayandırın və kiçik bir hissəni icra edin. sensorun oxunması ilə məşğul olmaq üçün kod və sonra qaldığınız yerə davam edin.

Hər hansı bir pin bir kəsmə kimi konfiqurasiya edilə bilər, lakin xüsusi sancaqlar üçün təyin edilmiş 2 xüsusi hardware fasiləsi var. Bunlar çipə sabit qoşulduqları və kəsilmə xüsusiyyətini təqlid etmək üçün proqrama etibar etmədikləri üçün daha sürətli olur.

Ümumi bir nümunə nədir?

Bir motorun RPM-ni oxa əlavə olunmuş optik kodlayıcıya əsaslanaraq ölçmək istəyirsiniz. Enkoderdən gələn nəbzlərin aralığı motor sürətinə görə dəyişir, buna görə nəbzləri müəyyən vaxt aralığında yoxlaya bilməzsiniz və ya onları qaçırmış ola bilərsiniz. Bu səbəbdən, kodlayıcı xəttini aparat kəsmə sancaqlarından birinə bağlayaraq proqramı gəldikdə söyləyən impulsları alırsınız. Pim bir nəbz algıladığında, proqramı dayandırmağa, vaxtı yoxlamağa və son nəbzdən bəri müddəti ölçmək üçün sürətli bir hesablama aparmağa sövq edir. Bu müddətin tərs hissəsi motorun sürətidir.

Onu necə istifadə edirəm?

Əvvəlcə müəyyən bir pimi bir kəsmə pimi olaraq təyin edəcək olan bir ara aralıq funksiyası var ki, bu da fasilə baş verdikdə işləməli və fasilənin necə tetikleneceği (məsələn, pin vəziyyəti dəyişdirdikdə) YÜKSƏK DÜŞÜK). İşlədiyiniz rutinə ISR deyilir. Seçdiyiniz bir ad verə bilərsiniz və sadəcə əlavəInterrupt sətirində istinad edə bilərsiniz.

ISR-in məzmunu olduqca qısa olmalıdır. Çünki kodunuzu kəsmək ISR bitənə qədər hər şeyi dayandırır. Əsas kod vaxta həssas bir şey edirdisə, bu kodu ən qısa müddətdə davam etdirmək istəyirsən, bu səbəbdən tez-tez ISR'lər bir boolean bayrağı dəyişdirir və əsas kodu bayrağı yoxlayaraq bir şey edərək növbəti dövrədə idarə etməsinə icazə verir. Aşağıdakı nümunədə bir bayraq dəyişdirilir və bu da əsas proqramın nano-nun LED-ini açmasını tələb edir.

Başqa bir şey budur ki, hər bir Arduino lövhəsində fərqli aparat kəsmə sancaqları və kimliklər var. Nano sancaqlar üzərində 2 və 3 sırasıyla INT.0 və INT.1 var. AttachInterrupt funksiyasında ikincisinə istinad etdiyinizə əmin olun (nümunədə 0). Pini giriş olaraq qurduğunuzda, normal pin identifikatorundan istifadə etməlisiniz (2 olan). Yalnız bundan ehtiyatlı olun. PIN qurulmasında INPUT_PULLUP adlı xüsusi bir giriş rejimindən istifadə etdiyimizi də unutmayın. Bu, INPUT kimidir, həqiqi bir siqnal onu başqa bir səviyyəyə sürməyincə pimi 5V-də saxlamağa məcbur etməsi istisna olmaqla.

Bu, müəyyən bir pin üzərində girişin keyfiyyətindən əmin olmadığınız zaman vacibdir. Bəzən bir siqnal yoxsa və ya zəifdirsə, pin havadakı statik və ya elektrik sahələri səbəbiylə ətrafda üzə bilər və təsadüfi bir dəyəri göstərə bilər. Bu, hər cür yalançı kəsilmələrə və digər cəlbedici davranışlara səbəb ola bilər, xüsusən də pin səviyyəsindəki dəyişiklikləri aşkarlamaq üçün qurulmuş fasilələrlə INPUT_PULLUP rejimindən istifadə etmək istəyirsiniz.

boolean turnon = false; boş quraşdırma () {pinMode (2, INPUT_PULLUP); attachInterrupt (0, interruptRoutine, CHANGE); } boş halqa () {if (turnon == true) {pinMode (13, OUTPUT); digitalWrite (13, HIGH); }} void interruptRoutine () {turnon =! turnon; }

Enerjiyə qənaət edən dövlətlər

Bu nədir?

Arduino çipindəki bütün xüsusiyyətlər əsasən işləmək üçün güc tələb edir. Nə qədər çox xüsusiyyət istifadə edirsinizsə, bir o qədər çox gücə ehtiyacınız var. Xüsusiyyətlərdən istifadə edilmədikdə belə, onların işə salınması, enerjini boş yerə sərf etmələri deməkdir. Çipi az gücə sahib müxtəlif vəziyyətlərdə qoyaraq CPU özü də daxil olmaqla müxtəlif xüsusiyyətləri söndürə bilərsiniz.

Aşağı güc rejimləri ilə gücün tamamilə kəsilməsi arasındakı əsas fərq, hər aşağı güc rejimində həmişə lövhəni oyatmağa və tam gücü bərpa etməyə qadir olan bir şey qalmasıdır. Bu minimal həyatda olan komponentlərin enerji istehlakı olduqca azdır və əks halda bir neçə saat ərzində öldükləri günlərdə / həftələrdə / aylarda portativ batareya mənbələrini qoruya bilər.

Ümumi bir nümunə nədir?

Günəş panellərini günəşə yönəldən bir servo mexanizmi idarə etmək üçün Arduino lövhəsindən istifadə edirsiniz. Aydındır ki, gecə saatlarında servonun idarə olunmasına ehtiyac yoxdur, beləliklə lövhənin az güc vəziyyətinə keçməsini istəyərsən, beləliklə daha uzun sürər və gücü boş yerə sərf etmir. Panelin gərginliyi müəyyən bir müddət üçün müəyyən bir dəyərdən aşağı qaldıqda, gecə olduğunu göstərərək enerji qənaət vəziyyətinə girmək üçün lövhəni proqramlaşdırırsınız. Gərginlik ertəsi səhər yüksəldikdə, bu gərginliyi bir MOSFET-in qapısına yönəldirsən, bu da bir cihazın kəsilmə pininə əsas verir. Bu pin normal olaraq 5V-ə qədər çəkildiyindən, tranzistor qapısının enerjili olmasına görə ani olaraq 0V-ə düşmə, kəsilmə sistemini işə salacaq və 328-i yuxudan çıxaracaqdır.

Onu necə istifadə edirəm?

Aşağıdakı kod Power Down adlı 6 fərqli yuxu rejimindən 1-i nümayiş etdirəcəkdir. Bu, yalnız çox istifadə olunan bir yuxu rejimidir, həm də lövhədəki hər şeyi bağlayaraq ən çox enerjiyə qənaət edir (WDT və 328-in 2 donanması istisna olmaqla). Beləliklə, WDT və kəsmə sancaqları bu yuxu rejimindən oyanmağın yeganə yoludur. Aşağıda kodun əvvəlcə pin 2-ni INPUT_PULLUP olaraq təyin etdiyini, gərginlik səviyyəsinin normal olaraq yüksək olduğu bir giriş olduğunu görürsünüz (5V). Pin2, xüsusi donanım kəsmə sancaqlarındandır. Daha ətraflı məlumat üçün həmin bölməyə baxın.

Bundan sonra, ümumiyyətlə yuxu rejimi imkanlarını işə salırıq, kəsmə pininin yüksək olduğundan əmin olub yoxlayırıq (beləliklə aşağı düşməsini yoxlamağa başlaya bilərik), kəsilməni aktiv olaraq izlənəcək şəkildə "əlavə edin" və sonra yuxu rejimini təyin edin Söndürmə rejiminə. O zaman 328-i həqiqətən yatdırmalıyıq. Növbəti sətrin yuxunu söndürdüyünü görə bilərsiniz, ancaq unutmayın ... 328 artıq bu nöqtədə yatır, buna görə proqramın icrası dayandırılır və siz oyanana qədər təlimat yerinə yetirilmir.

Bu anda hər şey dondurulur və 328-i oyatmaq üçün yalnız pin 2-ni gözləyirik. Etdikdə, yuxu rejimini aradan qaldıracaq və kəsilməni ayıracaq. Bu vacibdir, çünki əks halda pin 2 təməl qaldığı müddətdə prosessor bir döngədə ilişə bilər və 328-in kəsilmə sistemi yenidən oyanmağa hazır olana qədər yuxuya getməsi mümkündür. Zamanlama hər şeydir, buna görə şərtlər gözlədiyiniz kimi olmadıqda qəribə bir şeyin olmaması üçün uğursuz bir kod hazırlamalısınız. Bu eskizlə, LED söndükdən sonra qısa bir müddət üçün pin 2-ni yerə endirərək yuxu rejimini test edə bilərsiniz. LED 328-in uğurla oyandığını göstərərək yenidən yanmalıdır.

Bir şey daha: Mən etdiyimi etmə və kəsmə rejimində LED'ləri yandırın. Bunu nümayiş məqsədiylə etdim, amma ildırım sürətli olmayan bir ara vermə qaydasında bir şey etmək pis bir formadır. Gerçək həyatda, digər hadisələr (digər kəsilmələr və ya kritik şəkildə təyin olunmuş funksiyalar) kodun kəsildiyi zaman baş verməsini gözləyə bilər, beləliklə onu qısa və sürətli saxlamaq istəyirsən.

#include avr / interrupt.h> #include avr / sleep.h> byte pin2_interrupt_flag = 0; boş quraşdırma () {pinMode (2, INPUT_PULLUP); pinMode (13, ÇIXDI); digitalWrite (13, HIGH); } boş halqa () {gecikmə (5000); sleep_enable (); əgər (digitalRead (2)) pin2_interrupt_flag = 0; əgər (pin2_interrupt_flag == 0) attachInterrupt (0, pin2_isr, LOW); set_sleep_mode (SLEEP_MODE_PWR_DOWN); cli (); sleep_bod_disable (); sei (); digitalWrite (13, LOW); yuxu_cpu (); sleep_disable (); } void pin2_isr () {sleep_disable (); detachInterrupt (0); pin2_interrupt_flag = 1; digitalWrite (13, HIGH); }

22 Rəqəmsal I / O Sancaqları

Bu nədir?

Bu, hər hansı bir mikro nəzarətçinin ən əsas funksiyasıdır. Bu sancaqlar giriş və ya çıxış ola bilər və yalnız 2 vəziyyəti tanıyır: Yüksək və Aşağı. Yüksək, yüksək məntiqə uyğun olan gərginlikdir (bu vəziyyətdə 5V) və aşağı, aşağı gərginliyə (0V) uyğundur. Giriş olaraq, bu sancaqlar pin üzərində bir 0V və ya 5V siqnal aşkar edib-etmədiklərinə görə 0 və ya 1 qaytara bilirlər. Çıxışlar olaraq onları yüksək və ya aşağı tərifləyə bilərsiniz və onlar pin üzərində 5V və ya 0V gərginlik ifadə edəcəklər. Bu, açarları aktivləşdirmək və ya məntiq səviyyəli girişləri olan digər rəqəmsal cihazlarda vəziyyət dəyişikliyini göstərmək üçün olduqca faydalıdır.

Ümumi bir nümunə nədir?

Qaranlıqda işəmək və qıcolma keçirmək üçün LED ilə texnoloji rəngli bir tualet oturacağı dizayn edirsiniz. Eyni rəngdə olan hər bir LED-in bir-birinə bağlandığını düşünsək, bir elektrik mənbəyindən LED-lərə elektrik axınını idarə edən məntiqi səviyyəli bir transistora tək bir rəqəmsal YÜKSƏK siqnal göndərərək onları aktivləşdirə bilərsiniz. Hər bir rəng fərqli bir rəqəmsal I / O pimi ilə qapılan öz transistoruna sahib olardı. Arduino kodu sadəcə bir xoreoqrafiya işıq şousu yaratmaq üçün hansı rəqəm pininin YÜKSƏK və YAĞI, nə vaxt və nə qədər müddətə qoyulacağına qərar verəcəkdir.

Onu necə istifadə edirəm?

Setup () {} blokunda giriş və ya çıxış üçün verilmiş bir pini qura bilərsiniz və sonra bu pimi hansı tapşırıq verdiyinizə görə ya bu pinin məntiq səviyyəsinə əmr verə bilərsiniz, ya da məntiq səviyyəsinin bunun üzərində olduğunu oxuya bilərsiniz. pin. Məsələn, nanodakı D8 pin nömrəsini bir girişə, nano üzərindəki D9'u bir çıxışa təyin etmək və sonra D8 səviyyəsini oxumaq və D9 HIGH olaraq təyin etmək üçün bunu edin:

int pin8level; boş quraşdırma () {pinMode (8, INPUT); pinMode (9, ÇIXDI); } void loop () {digitalWrite (9, HIGH); pin8level = digitalRead (8); }

Analoq müqayisəli

Bu nədir?

Bir müqayisəçi, adından da göründüyü kimi, 2 gərginlikli girişləri bir-biri ilə müqayisə edir və girişlərdən daha çoxundan asılı olan rəqəmsal vəziyyəti (tez-tez məntiq səviyyəli gərginliklə təmsil olunur) çıxarır. Məsələn, birinci giriş ikinci ilə müqayisədə daha böyük bir gərginlikdədirsə, çıxış "YÜKSƏK" ola bilər və YÜKSƏK-in təmsil etdiyi gərginliyə qalır. Bu ilk giriş bir az sonra da ikincinin altına düşərsə, çıxış birdən hamar bir keçid olmadan bir addım şəklində (tez-tez 0V) təmsil edən hər hansı bir gərginliyə "LOW" kimi dönər. Müqayisələndiricilər tez-tez məntiq əməliyyatları üçün istifadə olunur, bu zaman HƏQİQƏTLİ və ya YALANLIQ 1 girişin başqasını aşan gücünü göstərmək istəyir. Bu cür funksiya üçün bir çox tətbiq var.

Ümumi bir nümunə nədir?

Batareya şarj cihazına bir düymə ilə idarə olunan enerji təchizatı gərginliyinin doldurulduğu və ya aşdığı zaman istifadəçiyə məlumat verəcək bir göstərici işığı əlavə edirsiniz. Batareya şarj cihazına qoşulduqdan sonra, D7 Arduino pininə, şarj cihazının çıxış gərginliyi D6-ya qoşulduqda, müsbət terminala qoşulmuş bir tel bağlanır. Beləliklə, istifadəçi kadranı çevirib şarj cihazının gərginliyini artırdıqda, D6-dakı gərginlik D7-dəki istinad gərginliyini aşana qədər artır. Yalnız o nöqtədə müqayisə edən şəxs YÜKSƏK bir nəticə verir və şarj cihazındakı göstərici işığını yandırmağa başlayır.

Onu necə istifadə edirəm?

Aşağıdakı kodu araşdırsanız, icrasının çox sadə olduğunu və əvvəllər işə saldığımız digər 328 xüsusiyyətlərdən çox fərqli olmadığını görəcəksiniz. Bu vəziyyətdə tək bir qeydiyyatı konfiqurasiya etmək və istədiyiniz davranışı təmin etmək üçün bitləri dəyişdirmək (328 məlumat vərəqəsinə görə) deməkdir. Bu vəziyyətdə, müqayisəni işə salmaq, kəsilmələri təmin etmək və onları "yüksələn bir kənarda" təmin etmək istəyirik. Bunun mənası budur ki, D6 gərginlik referansınız D7-ni aşdıqda, müqayisəçi YÜKSƏQ məntiq səviyyəsini qaytarır, yəni 0V xətti birdən yüksəlir və ya yüksək məntiq səviyyəsinə "qalxır". Bu yüksələn bir kənar. Düşən bir kənarda da kəsilmələri təmin edə bilərsiniz, ancaq bu nümunədə deyil.

Gözlədiyiniz kimi, yüksələn kənara çağırılan və bu vəziyyətdə LED-in yandırılmasına səbəb olan bir fasilə rutini var. Bu əsas kod şablonu, tətbiqetinizin istədiyi hər şeyi etmək üçün asanlıqla uyğunlaşdırıla bilər. Analog gərginlik girişlərini müqayisə etmək üçün D6 və D7-nin niyə istifadə edildiyi ilə qarışa bilərsiniz.

Sadəcə deyə biləcəyim odur ki, 328 əsrarəngiz şəkildə işləyir və daxili naqillər, bir binadakı bəzi mürəkkəb santexnika kimi, elektrik axını registrlərinin quraşdırılmasından asılı olaraq fərqli sancaqlara yönəldə bilən klapanlarla doludur. D6 və D7 xüsusilə müqayisə üçün + və - giriş kanalları kimi xidmət etmək üçün seçilmişdir. Hər halda, aşağıdakı kodu yüklədikdən sonra barmağınızla eyni vaxtda D6 və D7 sancaqlarına toxunmağa çalışın.

Barmağınızı irəli və irəli sürün və LED titrəməsinə baxın. Əslində etdiyiniz şey, sancaqları böyük bir müqavimətə (barmağınıza) bağlamaq və gərginliklərin demək olar ki, eyni olmasına səbəb olmaqdır. 328-i qarışdırır, çünki hansı gərginliyin daha böyük olduğunu və işığın titrəyəcəyini anlamağa çalışır, çünki müqayisə aparıcısı LOW and HIGH arasında irəli-geri fırlanır.

void setup () (1 ACI) void loop () {} ISR (ANALOG_COMP_vect) {digitalWrite (13,! digitalRead (13)); }

İdarə Heyəti Layihəsi

Arduino məhsul seriyasından Nano-nu bəyənirəm, çünki 328-in tam xüsusiyyətlərinə sahibdir, lakin çörək bişirmə dostu olan çox kiçik bir paketdə, eskizlərinizi yükləmək üçün yerli USB funksiyasına və daxili güc tənzimləyicisinə sahibsiniz lövhəni partlatmaqdan çox narahat olmayaraq kifayət qədər özbaşına bir gərginlik verə bilər.

Nano'da istifadəçilər üçün əlçatan olan bir çox pin var, bunlardan bəziləri güc, bəziləri rəqəmsal I / O, bəziləri analoq giriş və bəziləri rabitə ilə məşğul olur. Olduqca bir neçə sancağın proqramlaşdırılmasından asılı olaraq 1-dən çox funksiyası var. Məsələn, rəqəmsal və analoq sancaqların bir çoxu periferik cihazlarla əlaqə qurmaq üçün də istifadə olunur; mümkün olduqda, ancaq yüklədiyiniz kod kartın bu şəkildə istifadə olunacağını göstərmədikdə, sancaqlar yalnız əsas funksiyalarını yerinə yetirəcəkdir. O zaman da istifadə etmək istədiyiniz əksər sancaqlar həqiqətən aktivləşmədən əvvəl əvvəlcə quraşdırılmalıdır. Nanonun pinout-una daha yaxından baxaq.

Əvvəlcə güc sancaqlarınız var. VIN (Tənzimlənmiş + gərginlik təchizatı), 2 GND sancaq (Torpaq və ya 0V), 5V (lövhənin özünü təmin etmək üçün istifadə edilə bilən ümumi bir məntiq səviyyəsi YAĞID kartdan digər ətraf mühit təchizatı), 3V3 (3.3V və ya hər növ prosessorlar üçün ümumi bir gərginlikdir) və 2 RST sancağı (bu pimi quraşdırılmış bir düymə ilə topraklama proqramı sıfırlayacaq).

Sonra bütün rəqəmsal I / O.Bunlar D hərfi və sonra bir sıra ilə qeyd olunur. Nano, D2 ilə D13 arasındakı pinlərə sahibdir, lakin əslində bütün analog sancaqlar + TX və RX eyni zamanda cəmi 22-yə çatan rəqəmsal pin kimi davrana bilər (yuxarıdakı xüsusiyyətlərə görə).

Hərəkətdə yuxarıda göstərilən analoq giriş sancaqları var. Bunlar A hərfi ilə uyğun şəkildə əlavə olunur. Cəmi 8 A0-dan A7-yə qədər olanlar və bunların hamısı çox qatlanmışdır, buna görə hər dəfə yalnız 1-i yoxlanıla bilər.

TX və RX əsasən serial məlumatların ötürülməsi və qəbul edilməsi üçün istifadə olunan rəqəmsal I / O pinləridir. Bu sancaqlar 328 ilə əlaqə qurmaq üçün USB yuvası əvəzinə istifadə edilə bilər.

Sonra, ümumilikdə ISCP başlığı olaraq bilinən və ətraf mühit cihazları ilə SPI ünsiyyəti üçün ayrılmış bir avadanlıq xətti olan 6 pindən ibarət qeyri-adi bir qrupumuz var. Məsələn, bir OLED ekranını gücləndirmək lazım olduqda rahatdır, çünki sizə lazım olan bütün güc və siqnal xətləri təmin olunur.

Yalnız odball, AREF pinidir, bu da analoq giriş sancaqları üçün maksimum dəyər olmaq üçün seçdiyiniz bir gərginlik referansıdır. Beləliklə, analoq giriş pinlərinizin nədənsə 0 ilə 4V arasında ölçülməsini istəyirsinizsə, bu pin yuxarı gərginliyi təyin etdiyiniz yerdir.

Arduino Proqram Mühiti

Mikro nəzarət panelinizi istifadə etmək üçün ona "eskizlər" yükləməlisiniz, bu yalnız bir proqram üçün zərif bir addır. Proqramlaşdırma mühiti pulsuz və istifadəsi asandır. Çipin başa düşdüyü aşağı səviyyəli təlimatlar avtomatik olaraq proqramınızı yazmaq üçün istifadə edəcəyiniz yüksək səviyyəli və tanış C dilindən çevrilir. Buna görə 328-in montaj dili haqqında bir şey bilməyinizə ehtiyac yoxdur. C-dən əlavə, Java, C ++ və yerli Arduino funksiyalarından 328-in potensialının hamısından istifadə etməyə imkan verən bəzi digər parçalar var. Buna baxmayaraq sizi qorxutmasına icazə verməyin.

Arduino funksiyaları şəbəkədəki yardım səhifələrində yaxşı sənədləşdirilmişdir və sintaksislərində həqiqətən saxta bir şeydir. Dəyişənləri diktə etmək üçün yazacağınız bütün digər kodlar, məntiq və döngə quruluşları birbaşa C-dən sökülür.

Kiçik bir qəribədir ki, bütün Arduino proqramlarında bunlara 2 xüsusi hissə olmalıdır: Quraşdırma bloku və loop bloku. Kodunuzda fiziki olaraq orada olmalı olduqları bir yana, niyə orada olduqlarına görə narahat olmayın. Sadəcə bir rəsmiyyətdir. İstəsəniz, bütün proqramınızı boşluq () {} bloku daxilində yaza bilərsiniz. Bu blok başa çatdıqda döngə olacaq, belə ki, bunun olmasını istəmirsinizsə, kodunuzu bitməyəcək şəkildə dizayn edə bilərsiniz. Sadə bir müddət (1) {} bunu edəcəkdir. Ancaq tez-tez kodun dönməsini istəyirik, çünki ətraf mühiti daim nümunə götürmək və məsələn sensorlarla izləmək lazımdır. Beləliklə, loop funksiyası istifadə etmək üçün əlverişlidir və istifadəniz mümkündür.

Tərtib edib yükləyə bilən (yəni tam eskizdir) tamamilə boş bir eskiz necə görünəcək:

boş quraşdırma () {

}

boş halqa () {

}

Quraşdırma, giriş-çıxışları konfiqurasiya etdiyiniz, qeydləri sazladığınız və əsasən lövhə və çip funksiyalarını proqramın daha sonra diktə edəcəyi kimi işləməyə hazırladığınız yerdir. Döngü funksiyası kodunuzun əvvəlcədən qurulmuş sancaqlara nə vaxt və nə edəcəyini söylədiyi yer deməkdir. Bu fəlsəfəyə riayət etmək lazım deyil, amma yaxşı bir fikirdir. Quraşdırma həmişə ilk və yalnız bir dəfə işləyəcəkdir. Döngü, dizaynına görə, onu dayandırmaq üçün bir şey etmədiyiniz təqdirdə sonsuza qədər davam edəcəkdir.

Arduino SDK-nı yüklədikdən və quraşdırdıqdan sonra ilk proqramınıza keçməyin ən sürətli yolu BLINK kimi bir nümunə sənəd açmaqdır. Bunu menyudan tapa bilərsiniz (Fayl> Nümunələr> 01.Basics). Yalnız quraşdırma və loop bloklarının içərisindəki kodu silin və özünüzlə əvəz edin. Bütün lazımi kitabxanaları yuxarı hissəyə daxil etməyi və qlobal dəyişənlərinizi elan etməyi unutmayın. Hansı kitabxanalara ehtiyacınız ola biləcəyini bilmirsinizsə, yenə də nə etmək istədiyinizə dair nümunə eskizlərinə müraciət edin. Kitabxanalar orada yazılacaq.

Kitabxanalar mövzusunda, kodunuza düzgün olanları əlavə etsəniz də, əslində kompüterinizdə olmaya bilər. Bir kitabxananı google-da yükləmək və (tez-tez github-dan) yükləmək asandır. Bunu etdikdən sonra, sadəcə Arduino quraşdırmanızdakı qovluğu Arduino Kitabxanalar qovluğuna atın. Tərtibçini yenidən başladın və kitabxana və hər hansı bir nümunə eskizləri mövcud olacaq.

Eskizinizi yazmağı bitirdikdən sonra "Doğrula" (yuxarı sol tərəfdəki işarənin düyməsini) edə bilərsiniz və kodunuzu səhvlərə görə yoxlayacaq və sonra eskizi taxtanıza "Yükləyin" ("Doğrula" nın yanındakı ox düyməsini). Bunu etmədən əvvəl, əvvəlcə menyuda Alətlər bölməsinə gedin və İdarə Heyətinizi, İşləyicinizi və Limanınızı seçin. İdarə Heyətinin nümunəsi Arduino Nano ola bilər. İşlemci ATMEGA328 və port ola bilər ... yaxşı ki, USB kabelinizi hansı porta bağladığınızdan asılıdır. Doğru portu təyin etmək üçün kompüterinizin NƏZARƏT PANELİNƏ gedin, SİSTEMƏ, sonra HARDWARE, sonra CİHAZ MƏNƏLƏSİNƏ keçin və PORTS-ı görənə qədər aşağıya fırladın.

İndi sadəcə arduino lövhənizə istənilən USB portuna qoşun (və ya açın, sonra yenidən qoşun) və hansı yeni elementin göründüyünü görmək üçün siyahıya baxın. Yeni maddə ilə əlaqəli COM nömrəsi PORT nömrənizdir. Tərtibçiyə qayıdın və həmin nömrəni seçin, sonra yükləyin. AVR-DUDE təşəkkür edirəm (lol) deyənə qədər bir neçə saniyə gözləyin və işiniz bitdi! Kartı növbəti dəfə gücləndirdiyiniz zaman yüklədiyiniz proqram icra ediləcək.

Layihənizi Portativ etmək

Xüsusilə Uno və Nano üçün enerji təchizatı tənzimləyən bir dövrə var, beləliklə təchizatı gərginliyindən çox narahat olmayın. Layihənizi mobil hala gətirmək üçün, VIN və GND sancaqları (gərginliyi üstün tutan) USB yuvası (ümumiyyətlə telefonları doldurmaq üçün istifadə olunan enerji banklarından birinə ehtiyacınız olacaq) gücünü təmin edə bilərsiniz. 9-12V) və ya birbaşa 5V və GND sancaqları vasitəsilə (bu halda 4,5 ilə 5,5V arasında olmalıdır). VIN və ya USB seçimlərindən daha çox 5V seçimini seçsəniz, 5V-ə çox yaxın bir gərginlik təmin etməlisiniz və ya lövhə ya işləməyəcək, ya da 5V pin tənzimlənmədiyi üçün yanacaqdır.

Bir çox halda, onsuz da bir elektrik təchizatı olacaqsınız ... bəlkə də mühərrik və ya lazımi miqdarda gərginliyə ehtiyac duyan başqa bir şey üçün. 9-12V aralığındadırsa, onsuz da yaxşısan. Daha yüksəkdirsə, gərginlik bölücü və ya zener diodu ilə bir az kəsin. Birdən çox sensoru gücləndirirsinizsə, çox güman ki, 5V-da işləyirlər, beləliklə 5V pinində bütün elektronikalarınız üçün ortaq bir tədarük edə bilərsiniz.

İdarə heyətinizi birbaşa batareyadan təmin etməlisinizsə, 9-12V arasında bir paket gərginliyi olan bir konfiqurasiya seçməyə çalışın. Yeddi AA alkalini edəcək. Beləliklə ardıcıl olaraq 3 lityum ion batareyası olacaq. Bu baxımdan 12V qurğuşun turşusu da yaxşıdır, lakin ağır və böyükdür.

Bəzi Arduino lövhələrinin üzərində tənzimləmə dövriyyəsi yoxdur (yerdən qənaət etmək üçün), buna görə 5V-lə təchiz etməlisiniz. Bu vəziyyətdə yalnız 2 seçiminiz var. Gərginlik tənzimləyicisini özünüz qurun (gərginlik bölücü, tənzimləyici IC çipi və ya zener diodu) VƏ ya Ni-Cd və ya Ni-MH batareyalarından istifadə edə bilərsiniz, çünki gərginliklər yalnız iş üçün düzgün qatdır. Hər iki kimyanın dörd hüceyrəsi tam şarjda sizə 5V-dən biraz çox verəcək və demək olar ki, ölənə qədər 4.8V-də sabit qalacaqlar. Ni-MH daha böyük bir tutum üstünlüyünə malikdir. Ni-Cd, daha uzun ömür, davamlılıq və daha aşağı ömür maliyyəti üstünlüyünə malikdir.

Raspberry Pi yerinə Arduino niyə istifadə olunur?

Pi təsir edici bir hissədir, səhv etməyin. Bununla birlikdə, yalnız bir mühərriki boğmaq və ya kiçik bir şərab soyuducu üçün bir termostat etmək istədiyiniz vaxtlar var.

Pi kimi lövhələr bunlardır:

  • Daha baha
  • Bir əməliyyat sistemi tələb edin (Pi vəziyyətində Linux)
  • Daha çox güc və daha dəqiq güc idarəetməsi tələb edin
  • Sadə layihələr üçün dərhal faydalı etmək o qədər də sadə deyil
  • Sadə layihələr üçün mənbələri israf etmək (səmərəsiz)

Unutmayın Pi bir kompüterdir. Arduino lövhələri deyil. Video göstərmək və ya sizi internetə bağlamaq kimi yaxşı şeylər üçün kompüterlərdən istifadə edin. Anahtarı çevirmək üçün onlardan istifadə etmək yalnız həddini aşmaq deyil, həm də bu cür əsas funksionallığın işləməsi üçün çox problemdir. Bunu düşünün. Bir lampanı yandırmaq üçün evdə kompüterinizi istifadə etməyinizi desəydim, edə bilərsinizmi? Bacarmadım (heç olmasa eyni gündə). Bir Arduino ilə bunu təxminən 5 dəqiqə və ya daha az müddətdə edə bilərsən və yalnız 1 dollar dəyərində olan bir neçə dollar dəyərində hissələr edə bilərsən.

Arduino Funduino!

(Topal zarafatı bağışlayın.) Arduino lövhələri həqiqətən istehzalı bir şəkildə superdir. On illərdir güclü kompüterlərlə əhatə olunmuşuq və onlarla nə edirik? Şəkillərə baxın, internetdə gəzin, vergilərimizi idarə edin? Məhsuldarlığın belə acınacaqlı bir məhsuldarlığı üçün işləmə gücünün nə qədər itkisi!

Bir Arduino götürəndə ş * * işini bitirirsiniz! Termostatlar, motor nəzarətçiləri, pilotsuz idarəetmə sistemləri, güc çeviriciləri və hər cür çılğın zəhmli şeylər hazırlayırsınız. 16 GB RAM və 3B qrafika ilə masanızda oturan 50 funt dəyərində PC ilə heç vaxt meylli və ya edə bilməyəcək şeylər ... buna görə bunlardan birini götürüb Nobel mükafatı və ya bir şey qazan: D.

Viktorina vaxtı!

Hər sual üçün ən yaxşı cavabı seçin. Cavab açarı aşağıdadır.

  1. Təsadüfi bir zamanda baş verə biləcək bir hadisəni necə yoxlamaq olar?
    • Hadisəni tez-tez yoxlamaq üçün normal analogRead () ifadələrindən istifadə edin
    • Tədbirə nəzarət etmək üçün fasilələrdən istifadə edin
    • Hadisə baş verəndə prosessoru oyatmaq üçün WDT istifadə edin
    • Arduino buna qadir deyil
  2. Eyni zamanda 2 fərqli kod parçasını necə icra edirsiniz?
    • İlk kod parçasını taymerlərdən birinə, digəri isə CPU-ya atayın
    • Ayrı-ayrı funksiyalar yaradın və hər ikisini əsas döngü funksiyasından ardıcıl olaraq çağırın
    • Arduino buna qadir deyil
    • İlk kodu yükləyin, gücünü ayırın, sonra ikinci kodu yükləyin
  3. Arduino lövhəsindən təsadüfi bir DC siqnalı necə əldə edirsiniz?
    • PWM
    • DAC
    • MUX
    • ADC
  4. Bütün analog sancaqlar istifadə olunursa OLED ekran üçün hansı rabitə interfeysindən istifadə edərdiniz?
    • I2C
    • SPI
    • USART
    • Facebook

Cavab açarı

  1. Tədbirə nəzarət etmək üçün fasilələrdən istifadə edin
  2. Arduino buna qadir deyil
  3. PWM
  4. SPI

Hesabınızı şərh etmək

0 ilə 1 arasında düzgün cavabınız varsa: Windows 8 ilə qalın ...

2 düzgün cavabınız varsa: Bəlkə də bu zirzəmidəki işıq düyməsinə ümid var.

3 düzgün cavabınız varsa: Çox güman ki, dost ola bilərik.

4 düzgün cavab alsanız: Rəsmi olaraq hökumətdəki hər kəsdən daha ağıllısınız. Bəlkə elektrik enerjimizi idarə edə bilərsən?

Bu məqalə müəllifin bildiyi qədər dəqiq və doğrudur. Məzmun yalnız məlumat və ya əyləncə məqsədi daşıyır və iş, maliyyə, hüquqi və ya texniki məsələlərdə şəxsi məsləhət və ya peşəkar məsləhət əvəz etmir.

Maraqlı Yazılar

Tövsiyə Edirik

Excel 2007 və Excel 2010-da Form Nəzarətləri və ActiveX Nəzarətləri Sürüşmə Çubuqları Yaratmaq, Konfiqurasiya etmək və İstifadə qaydaları
Kompüter

Excel 2007 və Excel 2010-da Form Nəzarətləri və ActiveX Nəzarətləri Sürüşmə Çubuqları Yaratmaq, Konfiqurasiya etmək və İstifadə qaydaları

Robbie daha çox kyrim haqqında yazır, eyni zamanda bəzən Excel və Outlook kimi Micro oft tətbiqetmələrinin qəribəliklərinə işıq tutur.Bu gün Format Nəzarətləri və ActiveX Kaydırma Çubuq...
Uzaqdan Masaüstü Gateway istifadə etmək üçün Uzaqdan Masaüstü Müştərini necə konfiqurasiya etmək olar
Kompüter

Uzaqdan Masaüstü Gateway istifadə etmək üçün Uzaqdan Masaüstü Müştərini necə konfiqurasiya etmək olar

erver infra trukturlarını və məlumat mərkəzi əməliyyatlarını idarə edən 10+ illik təcrübəyə ahib i tem admini tratoru / mühəndi i.Bu təlimat Uzaq Ma aü tü Müştəriyinin Uzaq M...