İki Arduino Kartı Arasında Seri / UART İletişimi
Bu eğitimde, Arduino IDE'nin UART yazılım kitaplığını kullanarak iki Arduino kartı arasında UART veya seri iletişim gerçekleştireceğiz . Arduino'yu bir USB bağlantı noktası kullanarak hata ayıklamak ve programlamak için Evrensel Asenkron Alıcı / Verici ( UART ) İletişimi olarak bilinen seri bağlantı noktası kullanılır. Çoğu sensör ve sistem için ana iletişim yöntemi UART olarak kabul edilir. İş yükü, bilgi paylaşımı ve farklı görevleri gerçekleştirmek için; bazen Arduino ile iletişim gereklidir.
Yazılım Seri kullanarak iki Arduino kartı arasında iletişim
Arduino IDE'de bulunan bir seri yazılım kitaplığı kullanacağız. Ancak Arduino Uno'nun D0 ve D1 pinlerinde bulunan bir UART portu varken neden Arduino'nun yazılım UART kütüphanesini kullanmak istediğimizi sorduğumuz sorular. Arduino'nun yalnızca bir UART portu olduğundan ve bazen gömülü projelerde, GSM , GPS, Bluetooth , Xbee , vb. Gibi farklı sensör ve modülleri arayüzlemek için birden fazla UART iletişim portuna ihtiyacımız var .
Uart yazılım kitaplığını kullanmanın diğer önemli nedeni, Arduino'nun UART portunun yerleşik USB bağlantısı tarafından kullanılmasıdır. Bu USB bağlantısı, verileri Rx ve Tx pinlerini kullanarak Arduino IDE seri monitöre aktarır.
Arduino Mega'nın dörde kadar seri iletişim portu olmasına rağmen. Ancak, maksimum Ardiuno uyumlu kartların birden fazla seri bağlantı noktası yoktur. Bu durumda, Arduino'nun diğer dijital giriş çıkış pinlerinde UART iletişim davranışını simüle etmek için özel olarak uygulanan bir yazılım kitaplığı kullanılır. Seri UART iletişimini simüle etmek çok kolaydır, ancak herhangi bir özel donanıma sahip olmadığı ve önceden verilen Arduino Board'un bellek ve yürütme süresi gibi kaynaklarını kullanacağı unutulmamalıdır. Bununla birlikte, genellikle donanım seri bağlantı noktalarında bulunan tüm işlevler, yazılım seri bağlantı noktaları kullanılarak simüle edilebilir ve kullanılabilir.
Arduino Yazılımı Seri Kitaplığı
Arduino IDE, diğer dijital giriş-çıkış pinlerini kullanarak seri iletişim gerçekleştirmeyi sağlayan yerleşik bir yazılım seri kitaplığına sahiptir. SoftwareSerial kitaplığını kullanarak, UART arayüzü üzerinden birden fazla cihaz veya sensörle iletişim kurabiliriz.
Bu kitaplığı kullanmak için, önce bu satırı kullanarak yazılım seri kitaplığının başlık dosyasını ekleyin:
#include <SoftwareSerial.h>
Bundan sonra, kendi seçtiğiniz bir adla yazılım seri kitaplığının bir anını veya nesnesini oluşturun. Örneğin, bu satır UART0 adında bir nesne oluşturur. Argüman olarak seri iletişim için kullanmak istediğimiz dijital pinlerin ismini veriyoruz. İlk argüman bir alıcı pimi (RX) ve ikinci argüman bir iletim pimidir (TX). Bu nedenle, bu çizgi pin2'yi bir Rx pini ve pin3'ü UART0 için bir Tx pini olarak ayarlar.
SoftwareSerial UART0(2, 3); // RX, TX
Seri Pimlerle İki Arduino Kartı Arasında Bağlantı Şeması
Aşağıdaki şekil, önceden oluşturulmuş bir kitaplık kullanarak bir UART iletişim bağlantı noktasını simüle etmek için dijital pinler kullanan iki Arduino kartı arasındaki bir bağlantı şemasını göstermektedir.
Her iki Arduino kartı için Tx ve Rx olarak dijital pin 11 ve pin 10 kullandığımızı düşünün.
- İlk Arduino kartının sanal pin Tx'ini ikinci Arduino kartının Rx pinine bağlayın.
- İlk Arduino kartının sanal pin Rx'ini ikinci Arduino kartının pin Tx'ine bağlayın.
- Arduino 1'in sanal Tx pini, alıcı Arduino 2'nin gerçek tamponuna veri iletir ve bu veriler, "Received Data" adlı sanal terminalde gösterilen alıcı Arduino 2'nin sanal Tx pinine yazılır.
- Verici ve alıcı Arduino'nun durumunu izlemek için sanal terminaller kullanılmıştır.
- Her iki Arduino kartının GND pinini birbirine bağlayın (gerçek Arduino Kartları kullanıyorsanız)
- Her iki Arduino'nun USB portu kullanılarak çalıştırılmaması durumunda, her iki Arduino'nun 5V pinlerini bağlamak ve USB portu ile bir Arduino'yu çalıştırmak gerekir. (gerçek Arduino Kartları kullanılıyorsa)
Seri İletişim Kodu
Bilgisayar Master Arduino'ya komutlar gönderir, master kodda tanımlandığı gibi soft seri pinler üzerine yazılır ve resim 1'de yapılan donanım bağlantıları ile ikinci Arduino'ya gider ve Slave Arduino ile haberleşir.
Master Arduino için Kod
#include <SoftwareSerial.h>
SoftwareSerial softSerial(10, 11);
void setup()
{
softSerial.begin(9600);
}
void loop()
{
softSerial.write("UART Communication");
delay (100);
}
Code for Master Arduino açıklaması
Şimdi yukarıdaki kodun nasıl çalıştığını görelim.
İlk olarak, #include dosyalarını kullanarak yazılım seri kitaplığını içerir. Bu satır, SoftwareSerial.h kitaplığını içerir.
#include <SoftwareSerial.h>
Burada "softSerial" olarak adlandırılan bir seri nesne bildirilmiştir. Pin 10 Rx pin olarak kullanılacak ve pin 11 Tx pin olacaktır. Bu "softSerial" nesnesini kullanarak, normal bir seri bağlantının tüm fonksiyonları okuma, yazma vb. Kullanılabilir.
SoftwareSerial softSerial (10, 11);
Burada, yukarıda tanımlanan softSerial nesnesi için 9600 baud hızı ayarlanmaktadır. Burada dikkat edilmesi gereken önemli bir nokta, master ve slave gibi her iki Arduino kartının da baud hızının aynı olması gerektiğidir.
softSerial.begin (9600);
Burada “UART İletişimi” ifadesi, diğer Arduino'ya iletmek için Arduino 1'in Tx pimi 11 üzerine 0.1 saniye gecikme ile tekrar tekrar yazılıyor.
softSerial.write("UART Communication");
Şimdi 100ms'lik bir gecikme ekleyin ve bu Arduino master her 100ms sonra gönderme pinine bir “UART İletişimi” dizisi göndermeye devam edecektir.
delay(100);
Slave Arduino için Kod
#include <SoftwareSerial.h>
SoftwareSerial softSerial(10, 11);
char ip;
void setup()
{
softSerial.begin(9600);
}
void loop()
{
if (softSerial.available())
{
ip=softSerial.read();
softSerial.print(ip);
}
}
Code for Slave Arduino açıklaması
Bu satır, SoftwareSerial.h kitaplığını içerir.
#include <SoftwareSerial.h>
SoftwareSerial softSerial () burada açıklanan "softSerial" adlı bir seri nesne oluşturur. Pin 10 Rx pin olarak kullanılacak ve pin 11 Tx pin olacaktır. Bu "softSerial" nesnesini kullanarak, normal bir seri bağlantının tüm fonksiyonları okuma, yazma vb. Kullanılabilir.
SoftwareSerial softSerial (10, 11);
Bundan sonra, bu hat, yumuşak seri ve seri iletişim için baud'u 9600'e ayarlar.
softSerial.begin(9600);
Daha sonra arabellekte verilerin varlığı kontrol edilir. bazı veriler mevcutsa, “ip” değişkeninde saklanır ve ardından Arduino'nun 11. pini olan yazılımsal iletim pinine yazılır.
ip=softSerial.read();
softSerial.print(ip);
Proteus Simülasyonu
Yukarıdaki şekil, bu iletişimi simüle etmek için devre şemasını göstermektedir.
Aşağıdaki şekil Ana cihaz tarafından Arduino 1'in Tx pimi 11 üzerinden gönderilen verileri göstermektedir.
Aşağıdaki şekil Ana cihaz tarafından gönderilen verileri ve Arduino 2'nin 11. pininde Slave cihazı tarafından alınan verileri göstermektedir.
Böylece veriler, Arduino'nun seri iletişim ve yumuşak seri kitaplığı kullanılarak başarıyla iletiliyor.
Simüle edilmiş seri iletişim gerçekleştirilirken en önemli üç nokta akılda tutulmalıdır.
- Bir Arduino kartının Tx pini diğer Arduino kartının Rx'ine bağlanmalıdır. Zıt bağlantılar yapılırsa Arduino kartı zarar görebilir.
- Her iki Arduino kartı, sup ile aynı toprak bağlantısını paylaşmalıdır.
- Ayrıca, her iki Arduino kartı aynı hızda çalışmalıdır, bu da her iki kartın baud hızının aynı olması gerektiği anlamına gelir.
Yazılım Seri Kitaplığının Sınırlamaları
Yazılım seri iletişimi kullanılırken, gerekli verilerin başarıyla iletilmesi ve alınması için aşağıdaki sınırlamalar akılda tutulmalıdır.
Arduino Board üzerindeki her pin bir Tx ve Rx pin olarak kullanılamaz. Tx için genel olarak mevcut dijital pinlerden herhangi biri kullanılabilir, ancak Rx için sadece interrupt etkinleştirilmiş pinler kullanılabilir.
- Arduino Micro ve Leonardo için pin 8, 9, 10, 11, 14, 15, 16 Tx ve Rx olarak kullanılabilir.
- Arduino Mega pinleri için ise 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 TX ve Rx olarak kullanılabilir.
Simüle edilmiş yazılım seri iletişimi, aynı donanımın kaynaklarını kullanır. Diğer bazı kütüphaneler tarafından kullanılan aynı zamanlayıcıyı kullanır. Bu nedenle, simüle edilmiş seri bağlantı noktası kullanılırsa diğer bazı işlevler etkilenebilir. Bilinen en iyi engel Servo Kitaplığı'dır.
Bu kitaplığı kullanarak, birden fazla yazılım simülasyonlu seri bağlantı noktasına sahip olabiliriz. Ancak bu durumda bir seferde yalnızca bir bağlantı noktası veri alabilir. Bu, veri kaybına neden olabilir. Ancak, bu sorunu çözen başka bir yazılım seri kitaplığı mevcuttur.
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.
Hiç yorum yok:
Yorum Gönder
Yorum yazdığınız ve üye olduğunuz için Size teşekkür ederim.Burada olduğunuza göre hepimizin ilgi alanı Elektronik ve Programlama sonsuz bir dünyadayız.Hepimize Başarılar...
Not: Yalnızca bu blogun üyesi yorum gönderebilir.