Arduino Shields - arduino için genişletme kartları. Arduino Arduino'da analog girişlerin genişletilmesi Giriş çıkış portlarının genişletilmesi

  • 10.02.2022

Yeni Makaleler

● 5.4. MCP23017 yongası kullanılarak NodeMCU ESP8266 için dijital bağlantı noktalarının genişletilmesi

Nodemcu modülünü akıllı ev kumandası olarak kullanırken LED göstergesi ve sesli alarmı tanıtacağız. Nodemcu modülündeki pin sayısı Arduino Mega'dakinden çok daha azdır, bu yüzden MCP23017 giriş genişletici IC'ye ihtiyacımız var. MCP23017 yongası, hem giriş hem de çıkış için yapılandırılabilen 16 bağlantı noktası ekler (Şekil 5.7). Çip, popüler iki telli I2C veri yolunu kullanır.

Pirinç. 5.7. MCP23017 pin çıkışları

I2C protokolü için MCP23017 yongasının adresi, A0 - A2 (Şekil 5.8) dijital girişlerindeki sinyallerin bir kombinasyonu ile ayarlanabilir, bu da sırasıyla 8 MCP23017 yongasını mikrodenetleyiciye aynı anda bağlamanıza olanak tanır 16* 8=128 pin.

Pirinç. 5.8. MCP23017 yongasının adresini ayarlama

Çip, her biri giriş veya çıkış için yapılandırılabilen 2 A (GPA0-GPA7) ve B (GPB0-GPAB) bağlantı noktasına sahiptir.
Liste 5.3. A ve B çıktı bankalarının kurulmasına ilişkin bir örnek gösterir.

Liste 5.3

// Wire.h kitaplığının bağlanması #Dahil etmek bayt girişi=0 ; geçersiz kurulum()( Serial.begin(9600 ); Wire.begin(0 ,2 ); // I2C Wire.beginTransmission(0x20 ); // i2c - adres (A0-0,A1-0,A2-0) Wire.write(0x00); // IODIRA kaydı Wire.write(0x00 ); // PORT A'yı çıktı olarak ayarla Wire.endTransmission(); ) boşluk döngüsü(){ // PORT B'den veri oku Wire.beginTransmission(0x20 ); Wire.write(0x13 ); Wire.endTransmission(); Wire.requestFrom(0x20 , 1 ); girdi=Tel.read(); // alınan verileri PORT A'ya yaz Wire.beginTransmission(0x20 ); Wire.write(0x12 ); // adres PORT A Wire.write(input); // PORT A Wire.endTransmission(); gecikme(100); // Duraklat)

MCP23017 yongasının kullanılması, Nodemcu modülünün dijital kontaklarının sayısını 16'ya çıkaracak ve LED göstergesinin düzenlenmesine ve kritik sensör parametrelerinin sesli olarak bildirilmesine olanak tanıyacaktır.

Herkes ucuz Arduino kartlarını sever, ancak çoğu zaman bir projede kelimenin tam anlamıyla bir veya iki boş bağlantı noktası eksiktir! Ve bazen yeterli bağlantı noktası vardır, ancak yapının başka bir bölümüne bir demet kablo çekmek istemezsiniz. Cihazın ön paneline birkaç düğme ve LED yerleştirmeniz gerektiğini varsayalım. Bunları bir kablo veya kablo demeti ile değil, sadece iki veri yolu kablosuyla ana karta bağlamak daha güvenilir ve daha kolaydır, değil mi?

Bu gibi durumlar için Arduino portlarının çeşitli genişleticileri (genişleticileri) tasarlanmıştır.

Tipik olarak, mikrodenetleyici pimleri birkaç farklı işlevi yerine getirir, bu nedenle genişleticiler farklıdır:

  1. Standart GPIO Bağlantı Noktası Genişletici
  2. PWM çıkış genişletici
  3. Analog giriş genişleticiler - çoklayıcılar ve harici ADC'ler

Ayrı olarak, dijitalden analoğa dönüştürücülerden (DAC'ler) ve I2C veri yolu adres alanının genişleticilerinden bahsetmeye değer. Bu cihazlar, bağlantı noktalarının işlevlerini doğrudan kopyalamaz, ancak mikro denetleyicilerin yeteneklerini genişletir.

Serinin ilk yazısında dijital I/O portları olarak çalışan en basit ve en kullanışlı genişleticilerden bahsedeceğiz. Bunlar mikro devreler ve. Düzenlenirler ve kesinlikle aynı şekilde çalışırlar ve yalnızca bağlantı noktası sayısında farklılık gösterirler.

Arduino için bir genişletici modül seçme

En popüler ve ucuz modül PCF8574 yongasında yapılmıştır (Şekil 1)

Pirinç. 1. Popüler PCF8574 bağlantı noktası genişletici modülü

Avantajlar:
  • Düşük fiyat.
  • Modüller, bir modülün fişlerini öncekinin soketlerine takarak bir zincire bağlanabilir. Farklı modül adreslerine jumper ayarlamayı unutmayınız!
Dezavantajları:
  • Doğrudan devre tahtasına yerleştirilemez (port konektörünü arka tarafa lehimlemenizi öneririm).
  • Bir modülde toplam sekiz bağlantı noktası.

Daha ciddi projeler havasındaysanız, Aliexpress'den PCF8575 için 16 bitlik bir modül sipariş edin. Şekilde gösterilen modülü şiddetle tavsiye ederim. 2.

Pirinç. 2. PCF8575 bağlantı noktası genişletme modülü

Avantajlar:
  • İki kat daha fazla bağlantı noktası.
  • Dahili 3.3V güç kaynağı, diğer modüllere güç sağlayabilirsiniz.
  • Farklı besleme voltajlarında I2C veriyolu için yerleşik mantık seviyesi eşleştirme.
  • Bir breadboard için uygun format.
Dezavantajları:
  • Fiyatın üstünde.

PCF8574/PCF8575 GPIO Bağlantı Noktası Genişletici Nasıl Çalışır?

Veri alışverişi I2C bus üzerinden gerçekleşir. Arduino kartına bağlanmak için güç dahil sadece dört kablo gereklidir. Genişletici adresi, A0…A2 girişlerinde üç jumper tarafından ayarlanır, böylece sekiz özdeş yonga aynı anda veriyoluna bağlanabilir ve PCF8574 ile maksimum 8*8=64 ek bağlantı noktası veya PCF8575 ile 8*16=128 ek bağlantı noktası elde edilebilir. yonga.

Bağlantı noktasına veri çıkışı yapmak için, I2C veriyolundaki modülün adresine bir veri baytı yazın. Bir bağlantı noktasından veri okumak için aynı adreste bir bayt okuyun. Bir bayt her zaman bir bütün olarak yazılır ve okunur, bireysel rakamlarla çalışma programlı olarak yapılır.

Mikro devrenin çıkışları aynı anda girişlerdir ve çıkışın amacını belirleyen bir hizmet kaydı yoktur. Yalnızca çıktı baytının yazıldığı bir mandal vardır. Bu nasıl mümkün olabilir?

Bağlantı noktaları açık kollektör şeklinde çalışır ve dahili çekme dirençlerine sahiptir. Çıkışa mantıksal bir sıfır yazılırsa, çıkışı zorla “toprağa” çeken çıkış transistörü açılır. Böyle bir bağlantı noktasından okumak her zaman sıfır döndürür.

Düşük seviyeli bir pime doğrudan besleme voltajı uygularken veya akım aşılırsa dikkatli olun. 50 mAçipi mahvedeceksin!

Bir bağlantı noktasını giriş olarak kullanmak için ona bir tane yazın. Bu durumda, dahili transistör kapatılacak ve okumanın sonucu, pime uygulanan harici bir mantık seviyesi tarafından belirlenecektir. Serbest çıkış, yerleşik bir direnç tarafından güce çekilir.

Bazı portları aynı anda giriş ve bazılarını çıkış olarak kullanmak için, genişleticiye her veri baytı yazılmadan önce, “mantıksal VEYA” işlemini kullanarak girişlere karşılık gelen bu bitlere bir birim maskesi uygulamak gerekir. . Bu kadar)))

kesinti oluşturma

PCF857* Bağlantı Noktası Genişleticiler Kesinti Darbesi Üretiyor düşük seviye INT çıkışında, mikro devrenin herhangi bir girişindeki giriş sinyalinde herhangi bir değişiklik olduğunda. Genişletici bir tuş takımına hizmet ediyorsa bu uygundur. Ancak kesme işleyicisinde hangi düğmeye basıldığını veya serbest bırakıldığını belirlemelisiniz. Kesinti üreteci, bir gevezelik bastırma filtresi ile donatılmıştır.

Örnek 1: PCF8574 modülünü kullanma

Dört LED, bir PCF8574 modülü ve bir Arduino kartından oluşan basit bir devre oluşturalım (Şekil 3 ve 4). Bu anahtarlama şeması ile LED'ler için söndürme dirençlerine bile ihtiyacımız yok. Akım, LED'den ve güç rayına bağlı yerleşik dirençten akar.

Pirinç. 3. PCF8574 modülünün bağlantı şeması

Pirinç. 4. PCF8574 modülü ile devre düzeni

Çizim 1'i kopyalayıp Arduino panosuna yapıştırın:

// Veri yolundaki modül adresi (A0, A1, A2 = 0) int adres = 0x38; // uint8_t dataReceive modülünden okunan veriler; // Modüle yazılacak veriler uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Tüm PCF8574 portlarından yüksek dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // dataReceive modülünden bir bayt oku = pcf8574_read (); // Monitöre ikili formatta çıktı Serial.println(dataReceive, BIN); // Bitleri bir nibble tarafından sola kaydır dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Başlangıçta mikro devrenin tüm portlarına yüksek bir seviye yazılır, böylece P0 ... P3 portları giriş olarak çalışabilir.

Port pinlerindeki seviyeler her 500 ms'de bir okunur ve okuma sonucu monitörde görüntülenir. P0…P3 girişlerinden birini ortak bir kabloya bağlarsanız, bitinde sıfır görünür. Daha sonra okunan değer dört bit sola kaydırılır, sonuç porta gönderilir ve LED'lerden biri söner. Örneğin P0 pininde sıfır okunursa P4 pinine bağlı led sönecektir.

Genişleticiye her yazma işleminden önce, girdi olması gereken tüm bitlere birlerden oluşan bir bit maskesi uygulamamız gerektiğine dikkat edin: dataSend |= B00001111;

I2C veri yolu ile çalışmak için alt programlar son derece basitleştirilmiştir, hiçbir hata işlenmez.

Tavsiye: I2C veriyolundaki modül adresini bulmak ve kontrol etmek için . Bus talebine yanıt veren tüm cihazların adreslerini terminale gönderir.

Örnek 2: PCF8575 modülünü kullanma

PCF8575 modülünün özelliği, 16 bağlantı noktasına sahip olmasıdır. her zaman iki bayt yaz ve iki bayt oku. İkinci bayta ihtiyaç duyulmasa bile bu kurala uyulmalıdır.

Şemayı biraz değiştirelim. LED'leri P10 ... P13 portlarına bağlayacağız ve P00 ... P03 portlarını bir jumper ile ortak kabloya bağlayacağız (Şekil 5 ve 6).

Pirinç. 5. PCF8575 modülünün bağlantı şeması

Pirinç. 6. PCF8575 modülü ile devre düzeni

Sketch 2 önce tüm bağlantı noktalarına bir tane yazar, ardından her 500 ms'de bir durumlarını okur. Okuma prosedürü, baytlara bölünmüş 16 bitlik bir sözcük döndürür. Düşük baytın içeriği (P00…P07 pinleri) yüksek bayta kopyalanır ve modüle geri yüklenir. P00…P03 çıkışlarından biri ortak bir kabloya bağlanırsa, P10…P13'e bağlı LED'lerden biri söner.

// I2C ile çalışmak için kitaplık #include // Varsayılan olarak veri yolundaki modül adresi int adresi = 0x20; // uint8_t modülünden okunan veriler merhaba, lo; uint16_t dataReceive; uint8_tdataHighByte; // Yüksek bayt (P10...P17) uint8_t dataLowByte; // Düşük bayt (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // Tüm PCF8575 bağlantı noktalarına yüksek seviye dataHighByte = B111111111; dataLowByte = B111111111; pcf8575_write(dataLowByte, dataHighByte ); ) void loop() ( // dataReceive modülünden bir bayt okuyun = pcf8575_read(); // Monitöre ikili biçimde Serial.println(dataReceive, BIN); // Uzun kelimeden düşük baytı ayıklayın dataLowByte = lowByte(dataReceive ); // Düşük baytı yüksek bayta kopyalayın dataHighByte = dataLowByte; // Düşük baytlı dataLowByte |= B111111; // Modüle yeni veri yaz, iki bayt pcf8575_write(dataLowByte, dataHighByte); delay(500); ) // Modüle bayt yazma prosedürü void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Düşük bayt yaz (P00... P07) Wire.write(dth); / / Yüksek bayt yaz (P10...P17) Wire.endTransmission(); ) // Modülden bir bayt okuma prosedürü int16_t pcf8575_read( ) ( Wire.beginTransmission(adres); Wire.endTransmission(); Wire.requestFrom(adres, 2); lo = Tel.read(); // Düşük baytı oku (P00...P07) hi = Wire.read(); // Yüksek bayt oku (P10...P17) return (word(hi, lo)); // Uzun kelime döndür )

PCF8574/PCF8575 için Arduino Kütüphanesi

Kütüphane GitHub'dan indirilebilir. Ancak, gördüğünüz gibi, port genişleticilerle çalışmak çok basittir ve özel bir kütüphane olmadan kolayca yapabilirsiniz.

Arduino platformunun en önemli avantajlarından biri popülaritesidir. Popüler platform, elektronik cihaz üreticileri tarafından aktif olarak desteklenir ve denetleyicinin temel işlevselliğini genişleten çeşitli kartların özel sürümlerini yayınlar. Oldukça mantıklı bir şekilde genişleme kartları (başka bir isim: arduino kalkanı, kalkan) olarak adlandırılan bu tür panolar, çok çeşitli görevleri yerine getirmeye hizmet eder ve bir arduinli'nin ömrünü büyük ölçüde basitleştirebilir. Bu makalede, Arduino genişletme kartının ne olduğunu ve çeşitli Arduino cihazlarıyla çalışmak için nasıl kullanılabileceğini öğreneceğiz: motorlar (motor sürücü korumaları), LCD ekranlar (LCD ekranları), SD kartlar (veri kaydedici), sensörler (sensör kalkanı) ve diğerleri.

Önce terimleri anlayalım. Arduino genişletme kartı, belirli işlevleri gerçekleştirmek için tasarlanmış eksiksiz bir cihazdır ve standart konektörler kullanılarak ana denetleyiciye bağlanır. Genişletme kartı için bir başka popüler isim, İngilizce Arduino kalkanı veya basitçe kalkandır. Gerekli tüm elektronik bileşenler genişleme kartı üzerine kuruludur ve mikrodenetleyici ve ana kartın diğer elemanları ile etkileşim standart arduino pinleri aracılığıyla gerçekleşir. Çoğu durumda, kalkan aynı zamanda ana arduino kartından güç alır, ancak çoğu durumda diğer kaynaklardan güç sağlamak mümkündür. Herhangi bir kalkanda, diğer bileşenleri bunlara bağlayarak kendi takdirinize bağlı olarak kullanabileceğiniz birkaç serbest pin vardır.

İngilizce Shield kelimesi kalkan, perde, perde olarak çevrilir. Bizim bağlamımızda, cihazın ek bir katmanını oluşturan denetleyici kartını, arkasında çeşitli öğelerin gizlendiği bir ekranı kapsayan bir şey olarak anlaşılmalıdır.

Arduino kalkanlarına neden ihtiyaç duyulur?

Her şey çok basit: 1) zamandan tasarruf etmemiz için ve 2) birisi bundan para kazanabilir. Halihazırda bir araya getirip hemen kullanmaya başlayabileceğiniz bir şeyi tasarlamak, yerleştirmek, lehimlemek ve hata ayıklamak için neden zaman harcayasınız? İyi tasarlanmış ve yüksek kaliteli donanıma monte edilmiş genişletme kartları genellikle daha güvenilirdir ve son cihazda daha az yer kaplar. Bu, kendi kendine montajı tamamen bırakmanız ve belirli elemanların çalışma prensibini anlamanız gerekmediği anlamına gelmez. Sonuçta, gerçek bir mühendis her zaman kullandığı şeyin nasıl çalıştığını anlamaya çalışır. Ancak her seferinde tekerleği yeniden icat etmezsek, dikkatimizi bizden önce çok az kişinin çözdüğü şeylere odaklarsak daha karmaşık cihazlar yapabileceğiz.

Doğal olarak, fırsatlar için ödeme yapmanız gerekir. Neredeyse her zaman, nihai kalkanın maliyeti, bireysel bileşenlerin fiyatından daha yüksek olacaktır, benzer bir seçeneği her zaman daha ucuza yapabilirsiniz. Ancak burada harcanan zamanın veya paranın sizin için ne kadar kritik olduğuna karar vermek size kalmış. Çin endüstrisinden olası tüm yardımlar göz önüne alındığında, panoların maliyeti sürekli olarak düşmektedir, bu nedenle çoğu zaman seçim hazır cihazların kullanılması lehine yapılır.

En popüler kalkan örnekleri, sensörler, motorlar, LCD ekranlar, SD kartlar, ağ ve GPS kalkanları ile çalışmak için genişletme kartları, yüke bağlanmak için yerleşik rölelere sahip kalkanlardır.

Arduino Kalkanlarını Bağlama

Kalkanı bağlamak için, ana karta dikkatlice "koymanız" yeterlidir. Genellikle, tarak tipi kalkanın (erkek) pinleri Arduino kartı konektörlerine kolayca takılır. Bazı durumlarda, kartın kendisi düzgün bir şekilde lehimlenmemişse, pimleri dikkatlice ayarlamak gerekir. Burada esas olan dikkatli davranmak ve aşırı güç uygulamamaktır.

Kural olarak, kalkan, denetleyicinin çok özel bir sürümü için tasarlanmıştır, ancak örneğin birçok Arduino Uno kalkanı, Arduino Mega kartlarıyla oldukça iyi çalışır. Mega üzerindeki pin çıkışı, ilk 14 dijital kontak ve kartın karşı tarafındaki kontaklar, UNO'daki kontakların konumu ile çakışacak şekilde yapılır, böylece arduino'dan kalkan kolayca olur.

Arduino Shield Programlama

Bir devreyi genişletme kartıyla programlamak, bir arduino'nun olağan programlanmasından farklı değildir, çünkü denetleyicinin bakış açısından, cihazlarımızı normal pinlerine basitçe bağladık. Çizimde, ekrandaki bağlı pinleri karttaki karşılık gelen pinlere belirtmeniz gerekir. Kural olarak, üretici, ekrandaki veya ayrı bir bağlantı kılavuzundaki pimlerin yazışmalarını belirtir. Kart üreticisinin önerdiği çizimleri indirirseniz, bunu yapmanıza bile gerek kalmaz.

Kalkan sinyallerinin okunması veya yazılması da olağan şekilde yapılır: işlevleri ve herhangi bir arduinistin aşina olduğu diğer komutları kullanarak. Bazı durumlarda, bu bağlantı şemasına alıştığınızda ve üretici farklı bir tane seçtiğinde çarpışmalar mümkündür (örneğin, düğmeyi yere ve kalkana - güç vermek için çektiniz). Burada sadece dikkatli olmanız gerekiyor.

Kural olarak, bu genişletme kartı arduino kitlerinde gelir ve bu nedenle arduino insanlarının en sık buluştuğu yer de bununla birlikte gelir. Kalkan oldukça basittir - asıl görevi Arduino kartına bağlanmak için daha uygun seçenekler sağlamaktır. Bu, analog ve dijital pinlerin her birine karta getirilen ek güç ve toprak konektörleri aracılığıyla yapılır. Ayrıca kartta, harici bir güç kaynağı (anahtarlamak için jumper takmanız gerekir), bir LED ve bir yeniden başlatma düğmesi bağlamak için konektörler bulabilirsiniz. Kalkan seçenekleri ve kullanım örnekleri resimlerde mevcuttur.




Sensör genişletme kartının birkaç versiyonu vardır. Hepsi konektörlerin sayısı ve türü bakımından farklılık gösterir. Bugün en popüler sürümler Sensor Shield v4 ve v5'tir.

Bu arduino kalkanı robotik projelerde çok önemlidir. Arduino kartına aynı anda normal ve servo motorları bağlamanızı sağlar. Kalkanın ana görevi, normal bir arduino kartı için yeterince yüksek akım tüketen cihazların kontrolünü sağlamaktır. Kartın ek özellikleri, motor gücünü kontrol etme (PWM kullanarak) ve dönüş yönünü değiştirme işlevidir. Motor kalkan panolarının birçok çeşidi vardır. Hepsinde ortak olan, harici bir yükün bağlandığı güçlü bir transistörün, soğutucu elemanların (genellikle bir radyatör), harici gücü bağlamak için devrelerin, motorları bağlamak için konektörlerin ve bir arduinoya bağlanmak için pimlerin devresindeki varlığıdır.



Ağ ile çalışmanın organizasyonu, modern projelerdeki en önemli görevlerden biridir. Ethernet aracılığıyla bir yerel alan ağına bağlanmak için ilgili bir genişletme kartı vardır.




Prototip Genişletme Kartları

Bu kartlar oldukça basittir - montaj elemanları için temas pedleri vardır, bir sıfırlama düğmesi görüntülenir ve harici güç bağlamak mümkündür. Bu kalkanların amacı, gerekli tüm bileşenler ana kartın hemen üzerine yerleştirildiğinde cihazın kompaktlığını arttırmaktır.





Arduino LCD kalkanı ve tft kalkanı

Bu tip shield arduinoda LCD ekranlarla çalışmak için kullanılır. Bildiğiniz gibi, en basit 2 satırlı metin ekranını bağlamak bile önemsiz bir görevden uzaktır: güç kaynağını saymadan 6 ekran temasını aynı anda doğru şekilde bağlamanız gerekir. Bir arduino kartına hazır bir modül yerleştirmek ve uygun taslağı yüklemek çok daha kolaydır. Popüler LCD Keypad Shield'de, 4 ila 8 düğme hemen panoya bağlanır, bu da cihazın kullanıcısı için anında harici bir arayüz düzenlemenize olanak tanır. TFT Shield ayrıca yardımcı olur



Arduino Veri Kaydedici Kalkanı

Ürünlerinizde kendi başınıza gerçekleştirmesi oldukça zor olan bir diğer görev ise sensörlerden alınan verilerin zaman referanslı olarak saklanmasıdır. Hazır kalkan, yalnızca yerleşik saatten veri kaydetmeyi ve zaman almayı değil, aynı zamanda sensörleri lehimleme veya devre kartı üzerinde uygun bir şekilde bağlamayı da sağlar.




Kısa özet

Bu yazıda, arduino'nun işlevselliğini artıran çok çeşitli çeşitli cihazların yalnızca küçük bir bölümünü ele aldık. Genişletme kartları, en önemli şeye, yani programınızın mantığına odaklanmanızı sağlar. Doğru ve güvenilir kurulum için sağlanan kalkanların yaratıcıları, gerekli güç kaynağı. Size kalan tek şey, aziz İngilizce kelime kalkanını kullanarak ihtiyacınız olan tahtayı bulmak, onu arduinoya bağlamak ve taslağı yüklemek. Genellikle, bir kalkanın herhangi bir programlaması, halihazırda tamamlanmış bir programın dahili değişkenlerini yeniden adlandırmak için basit eylemler gerçekleştirmeyi içerir. Sonuç olarak, bitmiş cihazların veya prototiplerin montaj hızının yanı sıra kullanım ve bağlantı kolaylığı elde ediyoruz.

Genişletme kartlarını kullanmanın dezavantajı, yapıları gereği kalkanların çok yönlülüğü nedeniyle maliyetleri ve olası verimlilik kayıplarıdır. Özel uygulamanız veya uç cihazınız için, kalkanın tüm özelliklerine ihtiyaç duyulmayabilir. Bu durumda, kalkanı yalnızca prototipleme ve test aşamasında kullanmalısınız ve cihazınızın son sürümünü oluştururken, onu kendi şema ve düzen tipinizle bir tasarımla değiştirmeyi düşünün. Bu size kalmış, doğru seçim için tüm olanaklara sahipsiniz.

→ Arduino'nuzdaki analog giriş ve çıkışların sayısı nasıl artırılır?

Arduino'nuzdaki analog giriş ve çıkışların sayısı nasıl artırılır?

Bir çoklayıcı veya çoğullayıcı, Arduino'nuzdaki giriş ve çıkış sayısını artırmanıza izin verecektir.
4051, 8 kanallı bir analog çoklayıcı/çoğullayıcıdır, dolayısıyla:
* 4051'i çoklayıcı olarak kullanıyorsanız: 8 farklı girişten herhangi birini seçebilir ve durumunu kontrolöre okuyabilirsiniz.
* 4051'i demultiplexer olarak kullanıyorsanız 8 farklı çıkıştan istediğinizi seçip oraya istediğiniz değeri yazabilirsiniz.

Ayrıca 4051 analog değerleri işleyebilir, Arduino'nuzda 0-5V analog sinyalleri kullanabilir ve IC'yi Arduino'daki analog girişlere bağlayabilirsiniz.

İstenen mikro devre girişini ve ayrıca okuma veya yazma çalışma modlarını seçmek için üç kontrol sinyali (S0, S1 ve S2) kullanmalıyız. Bu pinlerin her biri Arduino'nun dijital çıkışlarından birine bağlanmalıdır. Her çıkışın bir numarası vardır (S0 = 1; S1 = 2; S2 = 4) ve bu çıkışlardan biri yüksek bir mantık seviyesine ayarlanırsa temsil edilen pin sayısı 4051 olacaktır.

Örneğin:
* Mikro devre S0 ve S1 girişlerinde log “1” ve S2'de log “0” ayarlarsanız, mikro devrenin y3 girişi seçilir, şöyle görünür (1 +2 +0 = 3).
* Mikro devre S0 ve S2 girişlerinde log "1" ve S1'de log "0" ayarlarsanız, mikro devrenin y5 girişi seçilir, şöyle görünür (1 +0 +4 = 5).

Aynı anda birden fazla 4051 pinine durum okumak veya yazmak mümkün değildir. Ancak çipin çıktısından durumu oldukça hızlı bir şekilde okuyabilir ve yazabilirsiniz. 4051 pinlerinin durumunun seçilmesi, okunması veya yazılması arasında gecikmeye gerek yoktur.

* Z----- ortak giriş veya çıkış sinyali (Arduino I/O ile bağlantılı)
* E ----- girişi etkinleştir (aktif kayıt "0") (toprağa bağlı (GND))
* Vee --- negatif besleme gerilimi (toprağa bağlı (GND ))
* GND --- toprak negatif (0 V)
* S0-S2 - girişleri seçin (üç Arduino dijital pinine bağlı)
* y0-Y7 - bağımsız girişler/çıkışlar
* Vcc --- pozitif besleme gerilimi (5V)



Yukarıdaki soldaki resim, yalnızca bir Arduino analog girişi ile 64 analog girişi okumak için 9 çoklayıcının nasıl kullanılacağına bir örnektir.
Yukarıdaki sağdaki resim, Arduino'daki yalnızca bir dijital girişten (ikinci kurulumdan) 64 düğmeyi veya diğer dijital girişleri test etmek için 8x8 matriste iki 4051'in (biri çoğullayıcı olarak yapılandırılmış ve diğeri çoklayıcı olarak yapılandırılmış) nasıl kullanılacağına bir örnektir. aynı anda sadece iki tuşa sahip olabilirsiniz), aksi takdirde ilk (sol) ayarı kullanmanız gerekir).

Kod örneği:

// 4051 analog multiplexer/demultiplexer kullanımına örnek
// davut c.

int led = 13 ; // 13. ayaktaki LED'i kurun
int r0 = 0 ; // seçim çıktısını 4051'e (S0) değer
int r1 = 0 ; // çıktıyı 4051 (S1) olarak seç
int r2 = 0 ; // seçim çıktısını 4051 (S2) olarak seç
int satır = 0 ; // bin kodunu sakla
int sayı = 0 ; // fırçalamak
int bin = ( 000, 1, 10, 11, 100, 101, 110, 111); // 1'den 8'e kadar 4051 yongasının seçilen giriş/çıkış sayısını tanımlayan ikili sayılar dizisi.
geçersiz kurulum () ( // BAŞLAT
pinMode (2 , ÇIKIŞ) ; // s0 çıkışı
pinMode (3 , ÇIKIŞ) ; // s1 çıkışı
pinMode (4 , ÇIKIŞ) ; // s2 çıkışı
digitalWrite (led , YÜKSEK); //LED'i yak
startSerial(9600) ; // UART döviz kuru
}

boşluk döngüsü()(
for (sayım = 0 ; sayım ≤ 7 ; sayım ++) ( // 1'den 8'e kadar dizi öğeleri arasında geçiş yap
satır = bin [sayı];
r0 = satır & 0x01 ;
r1 = (satır >> 1) & 0x01 ; //
r2 = (satır >> 2) & 0x01 ; //
digitalWrite(2, r0) ;
digitalWrite(3, r1) ;
digitalWrite(4, r2) ;
Seri.println(bin);
gecikme(1000) ;

SPI veya I2C ADC yongaları bir dizi çözünürlükte, örnekleme hızında ve kanal sayısında kolayca bulunur. Herhangi bir Arduino'ya eklemek oldukça kolaydır.

Örneğin, MCP3208, SPI başına 8 kanal 12 bit çözünürlük verir, bu da 3 pin (MOSI/MISO/SCK) + çip (SS) başına 1 anlamına gelir. Yani 1 çip 4 pim, 2 çip 5 pim, 3 çip 6 pim vb.

Ancak SPI veri yoluna çok sayıda IC eklemek, tüm bu girişlerin artan kapasitansı ile başlı başına bir sıkıntı olabilir, bu da mesajlaşma hızını biraz yavaşlatmanız veya veri yolunu daha yoğun sürmek için ekstra arabelleğe alma eklemeniz gerektiği anlamına gelir.

I2C veriyolunda yalnızca sınırlı sayıda adres olduğundan I2C yongalarına sahip olmak daha zor olabilir - ayrıca birçok Arduino'da I2C ayrıca feda etmek istemeyebileceğiniz iki analog pindir.

İkinci seçenek, farklı kaynakları mevcut analog girişlere geçirmek için analog çoklayıcıların (örn. 4051) kullanılmasını içerir.

Muhtemelen göz önünde bulundurmadığınız üçüncü seçenek, birden fazla arduinoya (veya diğer ucuz mikrodenetleyicilere) sahip olmaktır, her biri biraz alır ve ardından aralarında (veya tek bir ana bilgisayarla) bir iletişim yöntemi uygular. Bu, aynı anda birden fazla kanalı örnekleyebilme avantajına sahiptir (mikrodenetleyici başına bir tane), bu da işinizi biraz hızlandırır.

Mazhenko'nun yanıtını genişleterek, bir analog bağlantı noktasını 8'e dönüştürmek için 74HC4051 gibi bir analog çoklayıcı kullanabilirsiniz.

Kuzeni 74HC4067, 16 bağlantı noktasını çoğaltacak. Artık Arduino Uno'daki 6 analog giriş ile 6 x 16 giriş = 96'ya sahip olabilirsiniz. A/B/C kontrol sinyalleri paralel olabilir.

Bu, 6 ekstra çip ve oldukça basit kod ile 96 girişi işlemenize izin verecektir. 74HC4051 mux/demux sayfamda kod örnekleri var.

8 giriş kodu için:

// 74HC4051 çoklayıcı/demultiplexer kullanımına örnek // Yazar: Nick Gammon // Tarih: 14 Mart 2013 const bayt sensörü = A0; //çoklayıcı giriş/çıkış bağlantı noktasının bağlı olduğu yerde // çoklayıcı adres satırları seç (A/B/C) sabit bayt adresiA = 6;//düşük sıralı bit sabit bayt adresiB = 5; const bayt addressC = 4; //high-order bit void setup()( Serial.begin(115200); Serial.println("Çoğullayıcı testi başlatılıyor..."); pinMode(addressA, OUTPUT); pinMode(addressB, OUTPUT ); pinMode (addressC, OUTPUT); ) //kurulum sonu int readSensor (const byte olan) ( //doğru MUX kanalını seçin digitalWrite (addressA, (hangisi & 1)? YÜKSEK: DÜŞÜK); //düşük değerli bit digitalWrite (adresB, (hangisi & 2) ? YÜKSEK: DÜŞÜK); digitalWrite (adresC, (hangi & 4) ? YÜKSEK: DÜŞÜK); //yüksek dereceli bit //şimdi sensör dönüşünü oku analogRead (sensör); ) / /readSensor void döngüsünün sonu () ( //(byte i = 0; i) için 8 sensör okumasının tümünü göster< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Tam olarak aynı sorunla çalıştım. 100 termistör okuyan bir programa ihtiyacım var... Neden? peki, ihtiyacın olursa.

Onu çoktan bitirdim.

74HC4051 çoklayıcı/çoğullayıcıyı denedim. Ama nedense istediğim sonucu alamadım.

Bulacağınız ilk şey... POWER, harici bir güç kaynağına ihtiyacınız olacak, benim durumumda sadece bir voltaj bölücü yaptım ve termistörü bu güce bağladım ve sonra okumak için sadece analog portu kullandım ...

I2C protokolü, 8 arduino Mega 7 slave ve bir master kullanıyorum. ve Integer gönderdikten sonra, float ve falan filan benim için işe yaramadı. I2C üzerinden bir analog okuma gönderebilir ve master gerekli tüm dönüştürmeleri yapar.

Hala ilgileniyorsanız, size master ve slave için kaynak kodunu gönderebilirim. Bu şablonla, 50 adede kadar arduino bağlayabilirsiniz ve master, ağa bağlı her arduinoyu arayacak ve veri isteyecektir.