İçindekiler:
Video: UChip - IR Üzerinden Seri!: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
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
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
“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
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:
Bluetooth Üzerinden HC-05 Seri Yapılandırma: 10 Adım
Bluetooth Üzerinden HC-05 Seri Yapılandırma: Bazı Arduino projeleri için Android cihazlar ve HC-05 Bluetooth SPP modülleri kullanırken, bir PC USB portuna bağlanmadan HC-05 baud hızlarını ve diğer parametreleri kontrol etmek ve değiştirmek istedim. Bu buna dönüştü.HC-05 modülleri seri ve Blu'ya bağlanır
Bluetooth Üzerinden Seri Monitörü Görüntüle: 4 Adım
Bluetooth Üzerinden Seri Monitörü Görüntüle: Bu proje, seri monitörü görüntülemek için kullanılan geleneksel kablolu bağlantıyı değiştirmek için bir HC-05 Bluetooth modülü kullanır.Malzemeler:Arduino - https://amzn.to/2DLjxR2 Breadboard - https://amzn.to /2RYqiSK Atlama telleri - https://amzn.to/2RYqiSK H
LED'lerin Doğru Seri Bağlanması - Seri Vs Paralel Bağlantı: 6 Adım
LED'leri Doğru Seri Vs Paralel Bağlantıya Bağlama: Bu talimatta, LED - Işık Yayan Diyotlardan ve birden fazla ünitemiz varsa bunları nasıl bağlayabileceğimizden bahsediyoruz. Bu, keşke en başından bilseydim dediğim bir ders çünkü elektronik devrelerle uğraşmaya başladığımda birkaç tane inşa ettim
Seri port üzerinden Arduino'ya PC RAM kullanımı: 7 Adım
Arduino'ya Seri Bağlantı Noktası Üzerinden PC RAM kullanımı: Bir arkadaşım küçük Arduino projesinden ilham aldı. Bu küçük proje, görsel stüdyoda yapılan bir C# programı tarafından bir seri porta (USB-port) gönderilen Arduino IDE'de yapılmış bir program tarafından veri okuyan Arduino UNO R3'ü içermektedir. Bunun gibi
3D Yazıcı Kullanarak Arduino Üzerinden Seri Kontrollü Step Servo Motorun Kapsüllenmesi - Pt4: 8 Adım
Step Servo Motoru Arduino Üzerinden Seri Kontrollü 3D Yazıcı Kullanarak Kapsülleme - Pt4: Motor Step serisinin bu dördüncü videosunda, daha önce öğrendiklerimizi seri iletişim ve gerçek kontrol ile step servo motor oluşturmak için kullanacağız. Arduino tarafından izlenen dirençli bir kodlayıcı kullanarak konum geri bildirimi. İçinde