RADYO ELEKTRONİK VE ELEKTRİK MÜHENDİSLİĞİ ANSİKLOPEDİSİ arduino. Dijital G/Ç işlemleri. Radyo elektroniği ve elektrik mühendisliği ansiklopedisi Radyo elektroniği ve elektrik mühendisliği ansiklopedisi / Radyo amatör tasarımcısı Arduino IDE geliştirme ortamını yükledikten sonra, açılan pencerede görüntülenen gelecekteki programın boşluğunda iki işlevin olduğunu görebilirsiniz: kurulum () ve döngü (). setup() işlevi herhangi bir programı başlatır. Karta güç verildikten hemen sonra bir kez ve ayrıca kart üzerindeki mikrodenetleyiciyi orijinal durumuna ayarlayan RESET düğmesine her bastıktan sonra gerçekleştirir. Bu işlevin içinde, portların çalışma modları ayarlanır, seri arabirim ve diğer çevresel aygıtlar, hem mikrodenetleyicinin içinde hem de ona bağlı harici aygıtlarda başlatılır. Bu fonksiyon boş da olsa programda bulunmalıdır. Loop() fonksiyonu, mikrodenetleyicinin güç kapatılıncaya kadar tekrar tekrar yürüttüğü sonsuz bir döngü içerir. Harici sensörleri sorgular, aktüatörlere komutlar gönderir, hesaplamaları ve diğer işlemleri gerçekleştirir. Örnek olarak, Arduino kartına yerleşik, üzerinde L harfi ile işaretlenmiş ve dijital pin D13'e bağlı LED'i bir saniyelik bir süre içinde yanan ve ardından söndüren basit bir programı ele alalım. Bu program, Arduino IDE ile sağlanan standart örneklerden biridir. Masada. 1, metnini eklendiği biçimde gösterir. Arduino jargonunda, programın kaynak koduna "skeç" - eskiz adı verildiğini unutmayın. Tablo 1 Bir bloğa ilişkin program parçaları, kaşlı ayraçlar { ve } ile sınırlandırılmıştır. Aşağıda, bunlara operatör parantezleri olarak değineceğiz. Programın metni, işin özünü ve nüanslarını açıklayan bir yorum içerebilir. Çok satırlı bir yorum, /* (başlangıçta) ve */ (sonda) karakter kombinasyonlarıyla sınırlıdır. // karakterleri aynı satırın sonunda biten bir yorum başlatır. Çeviri sırasında (bir programlama dilinde program metninin bir kişinin anlayabileceği şekilde mikrodenetleyici tarafından yürütülebilir makine koduna dönüştürülmesi), metnin bu kısmı tamamen göz ardı edilir. setup() işlevinin gövdesindeki tek yürütülebilir satır pinMode (13, ÇIKIŞ); Arduino kartının D13 pinini çıkış moduna ayarlar. loop() işlevi satırla başlar digitalwrite(13, YÜKSEK); D13 çıkışını yüksek mantık seviyesi olarak ayarlar. Arduino UNO'da, ortak kabloya göre besleme voltajına (+5 V) eşittir. Bu, LED'i açacaktır. Bunu çizgi takip ediyor gecikmesi (1000); Yürütülebilir programın milisaniye cinsinden parantez içinde belirtilen süre boyunca bir sonraki satıra atlamamasına neden olur. Bir duraklamadan sonra program, D13 çıkışını LED'i kapatan ortak kablonun potansiyeline karşılık gelen düşük bir mantık seviyesine ayarlar. Bu işlem satırla açıklanır dijitalyazma(13, DÜŞÜK); Ardından, program bir kez daha 1 sn'lik bir duraklamayı sürdürür ve ardından loop() işlevinin gövdesinde açıklanan tüm işlem sırasını baştan tekrarlar. Bu, mikrodenetleyici kapatılana kadar devam eder. delay() işlevi dikkatli kullanılmalıdır. İçinde belirtilen zaman aralığında herhangi bir önemli olay meydana gelirse (örneğin, kısa bir süre için bir sensör tetiklenir), program bu olaya yanıt vermez. Unutulmamalıdır ki çıkış olarak çalışan Arduino pininin verdiği maksimum akım 40 mA iken tüm çıkışların toplam akımı 300 mA'yı geçmemelidir. Bu, sıradan LED'lere güç sağlamak için yeterlidir, ayrıca bir cep telefonundan çıkışa doğrudan düşük voltajlı bir saz rölesi veya düşük güçlü bir titreşim motoru bağlayabilirsiniz. Amplifikatör olmadan daha güçlü hiçbir şeyi bağlayamazsınız ve bu tehlikelidir - mikrodenetleyiciyi mahvedebilirsiniz. Analog girişler A0-A5, gerekirse D0-D13 ile birlikte dijital girişler ve çıkışlar olarak kullanılabilir ve bunlara sırasıyla 14 ila 19 arası rakamlarla atıfta bulunulur. Şimdi programı biraz değiştirelim. Bu kadar basit bir algoritma için bu değişiklikler temel değildir ancak daha karmaşık durumlarda bu tür değişiklikler önemlidir. Öncelikle İngilizce yorumu Rusça ile değiştirelim. Örneğin LED'i açan satır şu şekilde yorumlanacaktır: "LED'i Aç". "D13 hattında yüksek seviye belirledik" yazmamalısınız, bu zaten programın metninden açıktır. Elbette her satıra ayrıntılı bir yorum yapmak genellikle gereksizdir, ancak bunu yazmak için tembel olmamak gerekir. Bir süre sonra programın detayları unutulacak, hatta yazarın kendisi bile, sadece bir yorum, onun özünü hızlı bir şekilde anlamanıza yardımcı olacaktır. Daha sonra programı, Arduino'nun D13 pinine değil D12 pinine bağlı LED yanıp sönecek şekilde değiştireceğiz. Kart üzerinde D12'ye bağlı bir LED bulunmadığından seri dirençli harici bir LED'e ihtiyaç duyulmaktadır. Şekil 1'de gösterilen şemaya göre bağlayın. 5. Ek direnç, akım kesme LED'i 10 ... 2 mA aralığında olacak şekilde seçilir. Bu, çoğu LED için oldukça parlak bir parlaklık sağlayacaktır. Harici bir LED'in bağlı olduğu Arduino UNO kartı şekil XNUMX'de gösterilmektedir. XNUMX.
Ek dirençli birkaç LED yapılması tavsiye edilir. Aydınlatma efektlerinin otomasyonunu yapmak için çok fazla yararlı olmayacaklar, ancak kartın çıkışlarındaki voltaj seviyelerini hızlı bir şekilde kontrol etmek ve hata ayıklanan programa göre değişikliklerini izlemek için yararlı olacaklar. D13'e değil D12'ye bağlı bir LED'i kontrol etmek için bu durumda program metnindeki 13'e 12'ye tüm sayıları düzeltmeniz yeterli olacaktır.Yorumlar dışında 13 sayısı program metninde sadece üç kez geçiyor, bu yüzden değiştirmek zor değil. Ancak programın hacmi arttıkça durum temelden değişiyor. Üç sayıyı değiştirmek başka bir şeydir, uzun bir programın farklı yerlerindeki onlarca aynı sayıyı değiştirmek başka bir şeydir. Ek olarak, bir yerde bu sayının tamamen farklı bir anlama geldiği ve onu değiştirmenize gerek olmadığı ortaya çıkabilir. Bu tür değişikliklerin yapılmasını kolaylaştırmak için, programın başında bir değişken bildiririz ve ona istenen çıktı sayısına karşılık gelen bir değer atarız: int LEDPIN = 12; Ayrıca 13 numaralı çıktının olduğu her yerde onu bu değişkenin adıyla değiştireceğiz. Şimdi LED'in bağlantısını tekrar değiştirmeniz gerekirse, LEDPIN değişkeninin açıklamasındaki yalnızca bir rakamı değiştirmeniz yeterli olacaktır. Değiştirilen program Tabloda gösterilmektedir. 2. Arduino kartının mikrodenetleyici hafızasına yüklenmelidir. Bunu yapmak için IDE'nin ana menüsünden "Dosya → Yükle" seçeneğini seçin. Düzenleme penceresine yazılan program önceden bir dosyaya kaydedilmemişse, IDE sizden onu kaydedeceği dosya adını belirtmenizi isteyecektir. Arduino IDE'nin programı mikrodenetleyicinin anlayabileceği makine kodlarına çevirmesi için gerekli olan bir süre sonra, "Rx" ve "Tx" LED'leri kart üzerinde yanıp sönmeye başlayacak ve seri arayüz üzerinden mesajların alındığını ve iletildiğini bildirecektir. mikrodenetleyici. Tablo 2 Her şey doğru yapıldıysa, program penceresinin altında doğru yükleme hakkında bir rapor görünecektir. Yüklenen programın kullanılabilir 32 KB'lik mikrodenetleyici program belleğinin ne kadarını kapladığı ve değişkenleri barındırmak için ne kadar RAM gerektiği hakkında bilgi görüntüler. D12 pinine bağlı olan LED 2 saniyelik bir süre ile yanıp sönmeye başlayacaktır. D8-D12 Arduino pinlerine (Şekil 3) beş LED'lik bir hat bağlarsanız ve Tabloda gösterilen programı yüklerseniz. 3, bu LED'lerin her biri ve karta takılı D500'e bağlı LED'in her biri için dönüşümlü olarak 13 ms yanacaktır. Bu program, sorun "alında" çözülürse, basitçe setup() işlev satırlarında farklı sayısal çıkış sayıları ile gerekli sayıda tekrarlanarak, çıktı için ayarlanarak ve loop() işlevi - onu duraklatan ve kapatan bir sonraki LED'i içeren bir dizi satır. For döngüsü ifadeleri, programın kısaltılmasına yardımcı oldu.
Tablo 3 for anahtar sözcüğünden sonraki parantezler döngü değişkeninin başlangıç değerini gösterir - LEDPIN=8, döngü gövdesini yürütme koşulu - LEDPIN<14 ve döngü değişkeni gövdesinin her yürütülmesinden sonra gerçekleştirilen işlem - LEDPIN++, yani değişkenin değeri bir artırılır. Gerekirse, for döngüsünün parametreleri kolayca değiştirilebilir. Operatör braketlerindeki döngü gövdesi koşulu takip eder. İlk durumda (set() işlevinde), 8'den 13'e kadar LEDPIN değerleri ile altı kez yürütülecek tek bir satırdan oluşur. İkinci durumda (loop() işlevinde), döngü ifadesi, değişkenin aynı değerleriyle altı kez yürütülecek üç satırlık bir diziyi belirtir. Herhangi bir sistemdeki harici cihazları kontrol etmenin yanı sıra çeşitli sensörlerden bilgi almak gerekir. Onlar olmadan, en karmaşık robot bile, dış koşullara bağlı olarak davranışını değiştiremeyen, saat mekanizmalı bir oyuncak olacaktır. 5 V'luk bir besleme voltajıyla ve Arduino UNO'da tam olarak budur, mikrodenetleyicinin dijital girişlerinin +3 V'tan daha yüksek mantıksal olarak yüksek (mantıksal bir birime karşılık gelen) voltaj olarak algılanması garanti edilir ve mantıksal olarak düşük (mantıksal sıfıra karşılık gelir) - +1,5 V'tan düşük bir voltaj Ara değerler (girişin herhangi bir yere bağlı olmadığı durumlar dahil), mikrodenetleyici örneğine, besleme voltajına bağlı olarak öngörülemeyen, kaotik olarak değişen bir sonuç verir, sıcaklık ve diğer faktörler. Bu nedenle dijital girişin her zaman bilinen yüksek veya düşük mantık seviyesinde bir gerilime sahip olması arzu edilir. En basit sensör, Şekil l'de gösterildiği gibi bağlanmış, sabitlenmemiş sıradan bir düğmedir. Arduino kartının dış pinlerinden birine, bu durumda D4'ye 7 devre. SB1 butonu bırakıldığında mikrodenetleyici girişindeki voltaj seviyesi düşük (R1 direnci bunu sağlayacaktır), basıldığında ise yüksek olacaktır. Düğmeyi ve direnci yer yer değiştirirseniz (Şek. 5), seviyeler de yer değiştirir. Şimdi direnç R1, düğme bırakıldığında yüksek bir seviye sağlayacak ve buna basmak düşük bir seviye ayarlayacaktır.
Direnç R1'in direnci çok küçük olmamalıdır, çünkü düğmeye basıldığında içinden geçen akım güç kaynağından tüketilir ve cihazın verimini düşürür. Bir masaüstü bilgisayardan veya bir ana güç kaynağından güç alınması durumunda, bu o kadar önemli değildir, ancak Arduino pil versiyonunda, direnç R1'in düşük direnci, cihazın olası pil ömrünü büyük ölçüde azaltacaktır. Lütfen mikrodenetleyicinin R1 direncinin işlevini yerine getirmek için dahili dirençlere sahip olduğunu unutmayın. Varsayılan olarak devre dışıdırlar. Bununla birlikte, D2 girişine dahili bir direnç bağlamak için, hattı kurulum () işlevine eklemek yeterlidir. pinMode(2, INPUT_PULLUP); Tabloda verilen örneği kullanarak dijital girişi düşünün. D4 pinine bağlı butona bastığınızda pin 13'e bağlı led'i söndüren 7 program. Koşullu işleci temel alır if (şart) { /*Koşul sağlandığında yapılacak işlemler*/ } başka { /*Koşul sağlanmadığında yapılacak işlemler*/ } Tablo 4 İçinde belirtilen koşulun karşılanıp karşılanmadığına bağlı olarak bir eylemin seçilmesine yarar. Koşul karşılanmazsa hiçbir şey yapılması gerekmiyorsa, else {...} parçası atlanabilir. Koşullu ifadelerin kullanılması programa esneklik kazandırır. Harici sensörlerin durumuna bağlı olarak programın sırasını ve mikro denetleyiciyle donatılmış cihazın davranışını değiştirirler. Aslında düğmenin durumunu kontrol etmek, mantıksal bir operatör tarafından gerçekleştirilir. digitalRead(BUT) = YÜKSEK Bu durumda butonun bağlı olduğu AMA pininin durumunu okuma fonksiyonunun döndürdüğü değeri HIGH mantıksal sabiti ile karşılaştırır ve eşitlerse TRUE (true), aksi takdirde - FALSE değerini alır. (YANLIŞ). Eşitlik testi işleminin arka arkaya iki eşit işaretle gösterildiğine dikkat edin. Ve bir eşittir işareti, bir değişkene bir değer atama işlemini gösterir. Bunları karıştırmayın, bu bulunması zor hatalara yol açar. Az önce ele alınan program örneğini kullanarak, gecikme () işlevinin yanlış kullanımının neye yol açtığını görmek kolaydır. Programın sondan bir önceki satırındaki delay( 10000) işlevinin "açıklamalarını kaldırırsanız" (önceki iki düz satırı kaldırırsanız), döngü() işlevinin gövdesinin her yürütülmesinden sonra, program devam etmeden önce 10 saniye bekleyecektir. iş. Doğal olarak bu süre zarfında tuşlara basılması dikkate alınmayacaktır. Arduino'nun kişisel bir bilgisayarla seri arayüz üzerinden iletişim kurma yeteneği çok kullanışlıdır. Sadece programı mikrodenetleyiciye indirmek için değil, yürütme sırasında iki yönlü bilgi alışverişi için de kullanılabilir. Bu arayüz aracılığıyla Arduino, toplanan bilgileri karmaşık işleme veya depolama için bilgisayara aktarabilir ve buradan komutları ve ilk verileri alabilir. İki mikrodenetleyici cihaz da bu şekilde etkileşim kurabilir. Mikrodenetleyicinin seri portu, D0 ve D1 kartının dijital pinlerini kullanır, bu nedenle seri port üzerinden iletişimi düzenlerken ve kullanırken başka hiçbir şey için kullanılamazlar. Örneğin, Tabloda gösterilen programı ele alalım. 5, bilgisayara D12 çıkışının durumu hakkında bilgi gönderir. Program, üzerindeki seviye yüksekse H sembol kodunu, düşükse L sembol kodunu bilgisayara gönderir. Bilgisayarın COM portu ile çalışabilen herhangi bir program bu bilgiyi alabilir. Arduino IDE, bilgisayarın Arduino kartından alınan metin mesajlarını görüntülemesine ve kullanıcı tarafından bilgisayarın klavyesinde yazılan mesajları göndermesine izin veren yerleşik bir seri bağlantı noktası monitörüne sahiptir. Tablo 5 setup() işlevindeki Serial.begin(9600) satırı, mikrodenetleyicinin seri bağlantı noktasını başlatır ve baud hızını 9600 baud'a ayarlar. Diğer standart baud hızlarını da ayarlayabilirsiniz: 1200, 2400, 4800, 9600, 19200, 38400, 57600 veya 115200 Baud. Bu durumda, mikrodenetleyicide ayarlanan hız, bilgisayarın veya diğer aygıtın COM bağlantı noktasının yapılandırıldığı ve bilgi alışverişinin yapılması gereken hız ile eşleşmelidir. Güvenilir bilgi alımının sağlandığı izin verilen hız, Arduino'yu bilgisayara bağlayan kablonun uzunluğuna bağlıdır. Örneğin, 1,8 m uzunluğunda standart bir USB kablosu kullanarak bilgisayar, Arduino'dan 115200 baud hızında bile bilgi alacaktır. Ve bu kabloya beş metrelik bir uzatma kablosu eklerseniz, izin verilen hız 4800 baud'a düşer. Seri-al.print() işlevi seri bağlantı noktasına bilgi gönderir, burada Gönder değeri gönderilecek değişkenin adı veya aktarılacak karakter dizisi parantez içinde belirtilir. Bir değişken adından ayırt etmek için, karakter dizisi tırnak işaretleri içine alınır. Bu Serial.println() işlevinde bir değişiklik var. Parantez içindeki bilgileri (varsa) ilettikten sonra, onu satırbaşı ve satır besleme karakterleriyle tamamlaması bakımından farklılık gösterir. Verilen dizide yeni bir satır ve karakter kombinasyonu başlatır. Yukarıdaki programı kullanarak, giriş olarak yapılandırılmış mikrodenetleyici çıkışına herhangi bir harici sinyal uygulanmadığında, durumunun herhangi biri olabileceğinden ve çalışma sırasında rastgele değişebileceğinden emin olmak kolaydır. Mikrodenetleyicinin düşük bir mantık seviyesi olarak algılamayı bırakıp yüksek bir seviye olarak algılamaya başladığı voltajın gerçek değerini de belirleyebilirsiniz. Daha sonra, seri bağlantı noktası aracılığıyla bilgisayardan alınan komutlara göre kart üzerindeki LED'i açıp kapatan bir programı (Tablo 6) ele alalım. Bilgilerin seri bağlantı noktası üzerinden bayt cinsinden iletildiği akılda tutulmalıdır. Mikrodenetleyicinin işlemcisinden bağımsız olarak çalışan seri port alıcısı bu baytları alır ve 64 baytlık arabelleğinde depolar. Tablo 6. Programın arabellekte alınan bayt olup olmadığını belirlemesi için, bunların numarasını döndüren bir Serial.available() işlevi vardır. Eğer öyleyse, Seri kullanan program. read() arabellekten bir bayt okur ve değerini (alınan karakter kodu) bir C karakter değişkenine atar. Daha sonra, koşullu ifadeler kodu kalıplarla karşılaştırır ve eşleşirlerse LED'i açar veya kapatır. Bilgi almak için kullanılan seri bağlantı noktası monitörünü kullanarak komutlar gönderebilirsiniz. Penceresinin üst kısmında (Şekil 6) iletilen karakterlerin girilmesi için bir satır bulunmaktadır. Klavyeden bir sembol veya sırasını girdikten sonra "Gönder" ekran tuşuna basın. Arduino kartında, mikrodenetleyicinin bilgi aldığını belirten "Rx" LED'i kısa süreliğine yanıp sönmelidir. Elbette kodların manuel olarak iletilmesi kolay bir yöntemdir ancak en iyi yönetim yöntemi olmaktan uzaktır. Genellikle bunun için özel bir bilgisayar kontrol programı yazılır.
Böylece, Arduino mikrodenetleyici kartını kullanarak, bir dizi basit elektronik cihazı nispeten kolay bir şekilde oluşturabilirsiniz. Kendimizi dijital giriş-çıkışla sınırlayacak olursak bunlar otomatik aydınlatma efektleri, en basit hırsız alarmı, dijital sensörlü çeşitli parametrelerin sayaçları olabilir. Ayrıca, cihazın bilgisayarla etkileşime girmesini sağlamak kolaydır. Doğal olarak, Arduino'nun yetenekleri bu makalede açıklananlarla sınırlı değildir. Bu kart, daha sonra tartışılacak olan analog sinyallerle de çalışabilir. Makalede bahsedilen Arduino programları ftp://ftp.radio.ru/pub/2016/08/diginout.zip adresinden indirilebilir. Yazar: D. Lekomtsev Diğer makalelere bakın bölüm Radyo amatör tasarımcısı. Oku ve yaz yararlı bu makaleye yapılan yorumlar. En son bilim ve teknoloji haberleri, yeni elektronikler: Sıcak biranın alkol içeriği
07.05.2024 Kumar bağımlılığı için başlıca risk faktörü
07.05.2024 Trafik gürültüsü civcivlerin büyümesini geciktiriyor
06.05.2024
Diğer ilginç haberler: ▪ Süper kararlı lazer, GPS'i daha doğru hale getirir ▪ Yapay ortak özçekimler oluşturmak için teknoloji ▪ Retina ekranlı Sony akıllı telefon Bilim ve teknolojinin haber akışı, yeni elektronik
Ücretsiz Teknik Kitaplığın ilginç malzemeleri: ▪ Amatör Radyo Teknolojileri sitesinin bölümü. Makale seçimi ▪ makale Leda'nın yumurtalarıyla başlayın. Popüler ifade ▪ Yaban arıları yuvalarını nelerden yaparlar? ayrıntılı cevap ▪ makale Sophora kalın meyveli. Efsaneler, yetiştirme, uygulama yöntemleri ▪ makale Biyoyakıt: Teori. Radyo elektroniği ve elektrik mühendisliği ansiklopedisi
Bu makaleye yorumunuzu bırakın: Bu sayfanın tüm dilleri Ana sayfa | Kütüphane | Makaleler | Site haritası | Site incelemeleri www.diagram.com.ua |