İçindekiler:

UChip - IR Üzerinden Seri!: 4 Adım
UChip - IR Üzerinden Seri!: 4 Adım

Video: UChip - IR Üzerinden Seri!: 4 Adım

Video: UChip - IR Üzerinden Seri!: 4 Adım
Video: Adım at para kazan hîlesi ( Arapların taktiği 😅 ) 2024, Kasım
Anonim
UChip - IR Üzerinden Seri!
UChip - IR Üzerinden Seri!
UChip - IR Üzerinden Seri!
UChip - IR Üzerinden Seri!

Kablosuz iletişim günümüzde projelerimizde önemli bir özellik haline geldi ve kablosuz denince ilk aklıma Wi-Fi veya BT geliyor ama Wi-Fi veya BT iletişim protokollerini yönetmek kolay bir iş değil ve çok fazla zaman harcıyor. MCU kaynakları, uygulamamı kodlamak için küçük bir alan bırakıyor. Bu nedenle, rolleri bölmek ve daha fazla özgürlük elde etmek için genellikle mikro denetleyiciye seri olarak bağlı harici bir Wi-Fi/BT modülünü tercih ederim.

Ancak, bazen Wi-Fi ve BT, düşük bit hızı ve kısa iletişim mesafesi gerektiren bazı uygulamalar için "fazladır". Ayrıca, Wi-Fi veya BT kullanmak, Akıllı Telefonunuzu veya cihazınızı uygun kimlik doğrulama ile bağlamanın gerekliliğini ima eder.

Sadece harici bir ışığı açmanız/kapatmanız veya lamba yoğunluğunu değiştirmeniz veya bir elektrik kapısı açmanız gerektiğini hayal edin. Wi-Fi veya BT kullanmaya değer mi?

Ortama ve uygulamalara bağlı olarak, IR (Kızılötesi) dalga boyu üzerinden kablosuz iletişim kullanışlı olabilir. Birkaç harici bileşen (3 ayrı bileşen!) ve uChip (çok küçük bir Arduino uyumlu kart) ile uygulanan bir IR üzerinden Seri, aradığınız çözüm olabilir!

Malzeme Listesi (bir Tx-Rx cihazı için):

1 x uÇip

1 x IR LED: 950nm'de emisyon zirvesine sahip

1 x TSOP-38238 (eşdeğeri)

1 x 1KOhm Direnç

Donanım

1 x breadboard/proto board

1 x Siyah Plastik Tüp: IR LED ile aynı boyutta iç çap, TSOP alıcısı ile çapraz konuşmayı önlemek için tüp gereklidir.

1 x Alüminyum Folyo (3cm x 3cm)

1 x Bant

İPUCU: Gereksiz RX/TX donanımını devreden çıkararak veya krokide ilgili kodu etkinleştirerek/devre dışı bırakarak tek yönlü bir iletişime ihtiyaç duymanız durumunda sadece TX veya sadece RX cihazı yapabilirsiniz.

Adım 1: Kablolama

kablolama
kablolama
kablolama
kablolama
kablolama
kablolama

Bileşenleri şemaya göre birbirine bağlayın.

Basit şema üzerine birkaç not. TSOP-38238, 2.5V ile 5V arasında bir güç kaynağına izin verdiği ve en fazla 0.45mA emdiği için (veri sayfasını BURADA bulabilirsiniz), alıcıya sırasıyla toprak ve güç kaynağı sağlayacak iki pin kullanarak güç vereceğim. Bu, isteğe bağlı olarak alıcının açılmasına/kapatılmasına ve çok basit bir donanım kablolama kurulumuna izin verir. Ayrıca, tek yönlü bir iletişime ihtiyaç duymanız durumunda, TSOP-38238'i basitçe devre dışı bırakarak/etkinleştirerek yalnızca (Tx/Rx) bir cihaz yapıp yapmamayı seçebilirsiniz.

Devre nasıl çalışır?

Oldukça basit. TSOP çıkış pini sensör 38KHz'de 6 pals veya daha fazla bir tren algıladığında alçağa çekilirken, böyle bir sinyal olmadığında ise yükseğe çekilir. Bu nedenle, seri verileri IR üzerinden iletmek için devrenin yaptığı şey, LED katodunu aşağı çeken TX seri sinyali ile modüle edilmiş 38KHz PWM ile LED anoduna güç vermektir.

Sonuç olarak, seri TX0'ın yüksek bir seviyesinde LED, ters yönde (darbesiz) polarize veya polarize olmaz ve TSOP çıkış pini yükseğe çekilir. Seride düşük bir seviye ileten LED'e güç verilir ve uygulanan PWM sinyaline göre IR darbeleri üretir; bu nedenle, TSOP çıkışı düşük çekilir.

İletim doğrudan (0->0 ve 1->1) olduğu için alıcı tarafında eviricilere veya başka bir mantığa gerek yoktur.

Uygulamaya göre PWM görev döngüsünü seçerek LED optik çıkış gücünü düzenliyorum. Görev döngüsü ne kadar yüksek olursa, optik çıkış gücü o kadar yüksek olur ve bu nedenle mesajınızı o kadar uzağa iletirsiniz.

Hala darbe üretmemiz gerektiğini unutmayın! Bu nedenle, %90 görev döngüsünün üzerine çıkmamalısınız, aksi takdirde TSOP sinyali darbe olarak algılamayacaktır.

Daha fazla güce mi ihtiyacınız var?

Akımı artırmak için 1kOhm direncinin değerini basitçe düşürebilir miyiz?

Belki, sadece çok talepkar olmayın! MCU'nun bir pininden alacağınız maksimum akım, SAMD21 veri sayfasında belirtildiği gibi port pinini normalden daha güçlü sürerken (PINCFG. DRVSTR = 1 ve VDD > 3V) 7mA ile sınırlıdır.

Ancak standart konfigürasyon (varsayılan olarak Arduino IDE kitaplıkları tarafından benimsenen) akımı 2mA ile sınırlar. Bu nedenle, 1kOhm kullanmak zaten varsayılan ayarlarla mevcut limiti verir!

Akımı artırmak sadece elektrik bileşenleri meselesi değildir. Kısaca:

  • Direnci değiştirin (minimum değeri yaklaşık 470Ohm -> VDD/470~7mA ile sınırlıdır);
  • İlgili PORT->PINCFG->DRVSTR'yi 1'e ayarlayın;

Gelecekteki bir güncellemede bu özelliği içeren kodu sağlayacağım.

Ancak unutmayın, MCU pinlerinden akımın limitlerine yakın bir şekilde batması ve boşaltılması o kadar da iyi bir yaklaşım değil. Gerçekten de, MCU'nun ömrünü ve güvenilirliğini düşürür. Bu nedenle, uzun süreli kullanım için normal tahrik gücünü korumanızı öneririm.

Adım 2: Programlama

“IRSerial.ino” taslağını uChip'e (veya kullandığınız Arduino uyumlu karta) yükleyin.

PWM'yi oluşturan pini değiştirmeniz gerekirse, TCC zamanlayıcısına bağlı bir pin kullandığınızdan emin olun, çünkü kodun bu versiyonu sadece TCC zamanlayıcıları ile çalışır (bu bilgi için panonuzun "variant.c" kısmına bakın).). Gelecekteki güncellemelerde TC zamanlayıcılarını da kullanmak için kodu ekleyeceğim.

Kod oldukça basittir. PIN_5 düşük (TSOP GND sağlar) ve PIN_6 yüksek (TSOP'ye güç sağlar) ayarladıktan sonra, MCU, zamanlayıcı periyodunu ayarlayarak ve yakalama karşılaştırmasını gerekli frekans modülasyonuna (benim durumumda 38KHz'dir) ve göreve göre ayarlayarak PIN_1 üzerinde PWM'yi başlatır. döngüsü (varsayılan olarak %12,5). Bu, PWM pinlerindeki standart analogWrite() işlevinden yararlanılarak ve yalnızca PER_REG (dönem kaydı) ve CC (yakalama karşılaştırması) kaydı değiştirilerek yapılır (yazılı kod, kablolama_analog kitaplığından bir kes ve yapıştırdır). Gerekli frekansı, PER_REG (zamanlayıcı sayacını sıfırlayan üst sınır olan) değiştirerek TSOP sensörüne göre ayarlayabilirsiniz, CC'yi ise istenen görev döngüsü yüzdesine periyot değeriyle orantılı olarak ayarlayabilirsiniz.

Ardından kod, 2400bps olan doğru baud hızını kullanarak Seri bağlantı noktasını ayarlar. Neden bu kadar düşük bir baud hızı?! Cevap, BURADA bulabileceğiniz TSOP veri sayfasındadır. TSOP, istenmeyen anahtarlamayı önlemek için yüksek gürültü reddetme filtrelerine sahip olduğundan, TSOP çıkış pinini aşağı çekmek için birden fazla darbe dizisi göndermek gerekir (darbe sayısı TSOP versiyonuna bağlıdır, 6 tipik değerdir). Benzer şekilde, TSOP çıkışı, 10 darbeye veya daha fazlasına eşdeğer minimum bir sürenin ardından yükseğe çekilir. Sonuç olarak, TSOP çıkışını modülasyonlu TX0 sinyali olarak ayarlamak için baud hızını aşağıdaki denklemi dikkate alarak ayarlamak gerekir:

Seri Baud < PWM_frequency/10

38KHz kullanıldığında bu, 3800bps'den daha düşük bir baud hızı ile sonuçlanır; bu, daha önce beklendiği gibi daha yüksek “standart” izin verilen baud hızının 2400pbs olduğu anlamına gelir.

Baud hızını artırmak istiyor musunuz? İki seçenek var.

En kolay seçenek, TSOP'yi daha yüksek frekanslı bir versiyona değiştirmektir (TSOP38256 gibi), bu da baud hızını (4800bps) iki katına çıkarmanıza izin verir.

Yeterli değil?! O zaman basit bir IR LED+fotodiyot ve amplifikasyon devresi kullanarak kendi optik bağlantınızı yapmanız gerekir. Ancak bu çözüm, iletilen verileri gürültünün etkilemesini önlemek için çok fazla kodlama ve elektronik uzmanlığı gerektirir ve bu nedenle uygulanması hiç de kolay değildir! Ancak, yeterince kendinize güveniyorsanız, kendi TSOP sisteminizi yapmayı deneyebilirsiniz!:)

Son olarak seri monitörde veri alıp göndermek için kullandığım SerialUSB portunu (2400bps) ayarladım.

loop() işlevi, verileri iki dizi üzerinden geçirmek için gerekli kodu içerir ve yalnızca dizi adlarını değiştirerek doğrudan örnek çizim SerialPassthrough'dan kopyalanır.

Adım 3: Koruyucu IR LED'i

Koruyucu IR LED
Koruyucu IR LED
Koruyucu IR LED
Koruyucu IR LED

“IRSerial.ino” kodunu yükledikten sonra yukarıdaki devreyi açarsanız, Arduino IDE'deki Seri Monitörü kontrol edin ve bir dize göndermeyi deneyin. Muhtemelen uChip'in ilettiğini tam olarak aldığını göreceksiniz! Aynı cihazın IR LED'i ile TSOP'si arasındaki optik iletişim nedeniyle devrede bir çapraz konuşma var!

İşte bu projenin zor kısmı geliyor, karşılıklı konuşmayı önlüyor! IR üzerinden çift yönlü Seri iletişim kurmak için döngünün kesilmesi gerekir.

Döngüyü nasıl kırarız?

İlk seçenek, PWM görev döngüsünü düşürür, böylece LED'in optik güç çıkışını düşürürsünüz. Ancak bu yaklaşım, güvenilir bir seri IR kanalı aldığınız mesafeyi de azaltır. İkinci seçenek, IR LED'i ekranlamak ve böylece yönlü bir IR "ışın" yapmaktır. Bu bir deneme yanılma meselesidir; Sonunda, alüminyum folyoya sarılmış bir parça siyah pnömatik hava hortumu ve (elektrik izolasyonu sağlayan) bant kullanarak paraziti kırmayı başardım. İletici IR LED'inin tüpün içine yerleştirilmesi, aynı cihazın TX ve RX'i arasındaki iletişimi engeller.

Çözümümü görmek için resme bakın, ancak başka yöntemler denemekten ve/veya kendinizinkini önermekten çekinmeyin! Bu sorunun mutlak bir çözümü yoktur (tek yönlü basit bir kanala ihtiyacınız yoksa) ve muhtemelen devre düzenini, PWM görev döngüsünü ve IR kalkanını ihtiyaçlarınıza göre ayarlamanız gerekir.

Çapraz konuşmayı kestiğinizde, IR dalga boyunun IR yansıtıcı yüzeylerdeki yansımasından yararlanan Tx-Rx cihazında bir döngü oluşturarak cihazınızın hala çalıştığını doğrulayabilirsiniz.

Adım 4: İletişim kurun

İletişim kurmak!
İletişim kurmak!
İletişim kurmak!
İletişim kurmak!

Hepsi bu

IR üzerinden seri cihazınız iletişim kurmaya hazır, bunları IR üzerinden veri göndermek, istediğiniz her şeyi açıp/kapatmak veya gizlice sakladığınız bir sensörün durumunu kontrol etmek için kullanın!

İletişimin güvenilir olduğu mesafe bir WiFi veya BT cihazı kadar değildir. Ancak, bazı uygulamalarda çok faydalı olabilecek yönlüdür (LED açıklığına ve uygulanan IR koruma sistemine bağlı olarak).

Yakında yaptığım uygulamalardan birkaç örnek görebileceğiniz bir video yükleyeceğim. Eğlence!

Önerilen: