- RS-485 Seri Haberleşme Protokolü
- Arduino'da RS-485
- Gerekli Bileşenler
- Devre şeması
- RS485 Seri Haberleşme için Arduino UNO & Arduino Nano Programlama
- Seri İletişim RS485 ile LED Parlaklığını Kontrol Etme
Mikrodenetleyiciler ve çevresel cihazlar arasındaki iletişim için bir iletişim protokolü seçmek, gömülü sistemin önemli bir parçasıdır. Bu önemlidir, çünkü herhangi bir gömülü uygulamanın genel performansı, maliyet azaltma, daha hızlı veri aktarımı, uzun mesafeli kapsama vb. İle ilgili olduğu için iletişim araçlarına bağlıdır.
Önceki eğitimlerde, Arduino'daki I2C iletişim protokolü ve SPI İletişim protokolleri hakkında bilgi edindik. Şimdi RS-485 adında başka bir seri iletişim protokolü var Bu Protokol, asenkron bir seri iletişim kullanır. RS-485'in temel avantajı, iki cihaz arasında uzun mesafeli veri aktarımıdır. Ve en çok elektriksel olarak gürültülü endüstriyel ortamda kullanılırlar.
Bu eğitici yazıda, iki Arduino arasındaki RS-485 Seri iletişimini öğrenecek ve ardından RS-485 Modülü üzerinden ADC değerleri göndererek Master Arduino'dan bir Slave Arduino'ya bağlı LED'in parlaklığını kontrol ederek göstereceğiz. Master Arduino'da ADC değerlerini değiştirmek için 10k potansiyometre kullanılır.
RS-485 Seri iletişimin çalışmasını anlayarak başlayalım.
RS-485 Seri Haberleşme Protokolü
RS-485, saat darbesi gerektirmeyen bir asenkron seri iletişim protokolüdür. İkili verileri bir cihazdan diğerine aktarmak için diferansiyel sinyal adı verilen bir teknik kullanır.
Peki bu diferansiyel sinyal transfer yöntemi nedir?
Diferansiyel sinyal yöntemi, pozitif ve negatif 5V kullanarak diferansiyel voltaj oluşturarak çalışır. Bu içerir Yarı-Dubleks kullanıldığında iletişim iki kabloyu ve Tam-çift yönlü gerektirir 4 ayak teller.
Bu yöntemi kullanarak
- RS-485, maksimum 30 Mbps'lik daha yüksek veri aktarım hızını destekler.
- Ayrıca RS-232 protokolüne kıyasla maksimum veri aktarım mesafesi sağlar. Verileri maksimum 1200 metreye kadar aktarır.
- RS-485'in RS-232'ye göre ana avantajı, tek Master ile çoklu slave, RS-232 ise sadece tek slave'i destekler.
- RS-485 protokolüne bağlı maksimum 32 cihaza sahip olabilir.
- RS-485'in diğer bir avantajı, aktarım için diferansiyel sinyal yöntemini kullandıklarından gürültüden etkilenmemesidir.
- RS-485, I2C protokolüne göre daha hızlıdır.
Arduino'da RS-485
RS-485'i Arduino'da kullanmak için, 1200 metrelik uzun mesafelerde seri haberleşmeye izin verdiği ve çift yönlü olduğu için Maxim MAX485 IC'ye dayalı 5V MAX485 TTL - RS485 adlı bir modüle ihtiyaç vardır. Yarı çift yönlü modda, 2.5Mbps veri aktarım hızına sahiptir.
5V MAX485 TTL - RS485 modülü, 5V'luk bir voltaj gerektirir ve 5V mantık seviyeleri kullanır, böylece Arduino gibi mikrodenetleyicilerin donanım seri portları ile arayüzlenebilir.
Aşağıdaki özelliklere sahiptir:
- Çalışma gerilimi: 5V
- Yerleşik MAX485 yongası
- RS485 iletişimi için düşük güç tüketimi
- Dönüş hızı sınırlı alıcı-verici
- 5.08mm aralıklı 2P terminali
- Kullanışlı RS-485 iletişim kablosu
- Tüm çip pinleri, mikro denetleyici aracılığıyla kontrol edilebilir.
- Karton boyutu: 44 x 14 mm
RS-485'in Pin Çıkışı:
Pin Adı |
Kullanım |
VCC |
5V |
Bir |
Tersine Çevrilmeyen Alıcı Girişi Ters Çevirmeyen Sürücü Çıkışı |
B |
Alıcı Girişini Ters Çevirme Ters Sürücü Çıkışı |
GND |
GND (0V) |
R0 |
Alıcı Çıkışı (RX pin) |
YENİDEN |
Alıcı Çıkışı (LOW-Enable) |
DE |
Sürücü Çıkışı (YÜKSEK Etkin) |
DI |
Sürücü Girişi (TX pini) |
Bu RS-485 modülü, Arduino ile kolaylıkla arayüzlenebilir. Arduino 0 (RX) ve 1 (TX) (UNO, NANO'da) donanım seri portlarını kullanalım. Programlama da basittir , RS-485'e yazmak için Serial.print () ve RS-485'ten okumak için Serial.Read () kullanın.
Programlama kısmı daha sonra detaylı olarak açıklanacaktır ancak önce gerekli bileşenleri ve devre şemasını kontrol edelim.
Gerekli Bileşenler
- Arduino UNO veya Arduino NANO (2)
- MAX485 TTL - RS485 Dönüştürücü Modülü - (2)
- 10K Potansiyometre
- 16x2 LCD Ekran
- LED
- Breadboard
- Kabloların Bağlanması
Bu eğitimde Master olarak Arduino Uno, Slave olarak Arduino Nano kullanılmıştır. Burada iki Arduino Kartı kullanıldığından iki RS-485 Modülü gereklidir.
Devre şeması
İlk RS-485 ile Arduino UNO (Master) arasındaki Devre Bağlantısı:
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE YENİDEN |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
Bir |
Bağımlı RS-485 A'ya |
B |
Bağımlı RS-485'in B'sine |
İkinci RS-485 ile Arduino Nano (Slave) arasındaki bağlantı:
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE YENİDEN |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
Bir |
Master RS-485'in A'sına |
B |
Usta RS-485'in B'sine |
16x2 LCD ve Arduino Nano arasındaki Devre Bağlantısı:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
LCD'nin kontrast kontrolü için potansiyometre merkez pimine |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
Bir |
+ 5V |
K |
GND |
Analog giriş sağlamak için Arduino UNO'nun Analog Pin A0'ına 10K potansiyometre bağlanır ve Arduino Nano'nun D10 pinine bir LED bağlanır.
RS485 Seri Haberleşme için Arduino UNO & Arduino Nano Programlama
Her iki kartı programlamak için Arduino IDE kullanılır. Ancak Tools-> Port and Board'dan Tools-> Board'dan ilgili PORT'u seçtiğinizden emin olun.
Bu öğreticinin sonunda Demo Video ile eksiksiz kod verilmiştir. Burada kodun önemli bir bölümünü açıklıyoruz. Bu eğitimde biri Arduino UNO (Master) ve diğeri Arduino Nano (Slave) için olmak üzere iki program vardır.
Master için Kod Açıklaması: Arduino UNO
Master tarafında, potansiyometreyi değiştirerek sadece A0 pininde Analog girişi alın ve ardından bu değerleri Arduino UNO'nun Donanım Seri Portları (0,1) aracılığıyla RS-485 veriyoluna Seri Yazın .
Donanım Seri Pinlerinde (0,1) Seri İletişime Başlamak için şunu kullanın:
Serial.begin (9600);
Arduino UNO'nun A0 pinindeki Analog değeri okumak ve bunları değişken bir potvalda saklamak için:
int potval = analogRead (pushval);
Potval değerini seri porta yazmadan önce, RS-485'in DE ve RE pinleri, Arduino UNO'nun 8 numaralı pinine bağlı olan HIGH olmalıdır, böylece pin 8'i HIGH yapın:
digitalWrite (enablePin, HIGH);
Bu değerleri RS-485 modülüne bağlı Seri Bağlantı Noktasına koymak için aşağıdaki ifadeyi kullanın
Serial.println (potval);
Slave için Kod Açıklaması: Arduino NANO
Slave tarafında, Arduino Nano'nun Donanım Seri portunda bulunan Ana RS-485'ten bir tamsayı değeri alınır (Pimler -0,1). Basitçe bu değeri okuyun ve bir değişkende saklayın. Değerler (0 -1023) şeklindedir. Böylece LED parlaklığını kontrol etmek için PWM tekniği kullanıldığı için (0-255) 'e dönüştürülür.
Ardından, dönüştürülen değerleri LED pin D10'a yazın (Bu bir PWM pinidir). Dolayısıyla PWM değerine bağlı olarak LED'in parlaklığı değişir ve bu değerleri 16x2 LCD ekranda gösterir.
Slave Arduino'nun RS-485'inin Master'dan değerleri alması için, RS-485'in DE & RE pinlerini DÜŞÜK yapın. Böylece Arduino NANO'nun D8 (enablePin) pini DÜŞÜK yapılır.
digitalWrite (enablePin, LOW);
Ve Seri Port'ta bulunan tamsayı verilerini okumak ve bunları değişken kullanımda saklamak için
int pwmval = Serial.parseInt ();
Daha sonra değeri (0-1023'ten 0-255'e) dönüştürün ve bir değişkende saklayın:
int dönüştürmek = eşleme (pwmval, 0,1023,0,255);
Daha sonra analog değeri (PWM), LED anodunun bağlı olduğu D10 pinine yazın:
analogWrite (ledpin, dönüştür);
Bu PWM değerini 16x2 LCD ekranda yazdırmak için
lcd.setCursor (0,0); lcd.print ("MASTER'DAN PWM"); lcd.setCursor (0,1); lcd.print (dönüştür);
Seri İletişim RS485 ile LED Parlaklığını Kontrol Etme
Potansiyometre kullanılarak PWM değeri 0'a ayarlandığında LED KAPALI hale gelir.
Ve potansiyometre kullanılarak PWM değeri 251 olarak ayarlandığında: LED aşağıdaki resimde gösterildiği gibi tam parlaklık ile yanar:
Dolayısıyla RS485, Arduino'da seri iletişim için bu şekilde kullanılabilir.