- RS-485 protokol serijske komunikacije
- RS-485 u Arduinu
- Komponente potrebne
- Kružni dijagram
- Programiranje Arduino UNO i Arduino Nano za serijsku komunikaciju RS485
- Kontrola svjetline LED-a pomoću serijske komunikacije RS485
Odabir komunikacijskog protokola za komunikaciju između mikrokontrolera i perifernih uređaja važan je dio ugrađenog sustava. Važno je jer ukupna izvedba bilo koje ugrađene aplikacije ovisi o komunikacijskim sredstvima jer je povezana sa smanjenjem troškova, bržim prijenosom podataka, pokrivanjem na velike udaljenosti itd.
U prethodnim tutorijalima naučili smo o I2C komunikacijskom protokolu i SPI komunikacijskim protokolima u Arduinu. Sada postoji još jedan protokol serijske komunikacije koji se zove RS-485. Ovaj protokol koristi asinkronu serijsku komunikaciju. Glavna prednost RS-485 je prijenos podataka na velika udaljenost između dva uređaja. A najčešće se koriste u električno bučnom industrijskom okruženju.
U ovom uputstvu naučit ćemo o serijskoj komunikaciji RS-485 između dva Arduinosa, a zatim ćemo je demonstrirati upravljanjem svjetlinom LED-a spojenog na podređeni Arduino od Master Arduina slanjem ADC vrijednosti kroz RS-485 modul. Za promjenu vrijednosti ADC-a na Master Arduinu koristi se 10k potenciometar.
Krenimo od razumijevanja rada serijske komunikacije RS-485.
RS-485 protokol serijske komunikacije
RS-485 je asinkroni serijski komunikacijski protokol koji ne zahtijeva taktni impuls. Koristi tehniku koja se naziva diferencijalni signal za prijenos binarnih podataka s jednog uređaja na drugi.
Pa koja je to metoda diferencijalnog prijenosa signala ??
Metoda diferencijalnog signala djeluje stvaranjem diferencijalnog napona pomoću pozitivnih i negativnih 5V. Pruža Half-Duplex komunikaciju kada se koriste dvije žice, a Full-Duplex zahtijeva 4 četverožične žice.
Korištenjem ove metode
- RS-485 podržava veću brzinu prijenosa podataka od maksimalno 30 Mb / s.
- Također pruža maksimalnu udaljenost prijenosa podataka u usporedbi s RS-232 protokolom. Prenosi podatke do maksimalno 1200 metara.
- Glavna prednost RS-485 u odnosu na RS-232 je višestruki slave s jednim glavnim upravljačem, dok RS-232 podržava samo jednog slave.
- Može imati najviše 32 uređaja spojena na RS-485 protokol.
- Sljedeća je prednost RS-485 u tome što je imun na buku jer za prijenos koriste metodu diferencijalnog signala.
- RS-485 je brži u usporedbi s I2C protokolom.
RS-485 u Arduinu
Za upotrebu RS-485 u Arduinu potreban je modul nazvan 5V MAX485 TTL do RS485 koji se temelji na Maxim MAX485 IC jer omogućuje serijsku komunikaciju na velikim udaljenostima od 1200 metara i dvosmjeran je. U poludupleksnom načinu rada ima brzinu prijenosa podataka od 2,5 Mb / s.
Modul 5V MAX485 TTL na RS485 zahtijeva napon od 5V i koristi logičke razine od 5V tako da se može povezati s hardverskim serijskim priključcima mikrokontrolera poput Arduina.
Ima sljedeće značajke:
- Radni napon: 5V
- Ugrađeni čip MAX485
- Niska potrošnja energije za RS485 komunikaciju
- Primopredajnik s ograničenom brzinom porasta
- 2P terminal sa korakom 5,08 mm
- Prikladno RS-485 ožičenje za komunikaciju
- Svi dovedeni klinovi čipa mogu se kontrolirati putem mikrokontrolera
- Veličina ploče: 44 x 14mm
Pin-Out RS-485:

|
Naziv pribadače |
Koristiti |
|
VCC |
5V |
|
A |
Neinvertirajući ulaz prijamnika Neinvertirajući izlaz vozača |
|
B |
Invertiranje ulaza prijemnika Invertiranje izlaza vozača |
|
GND |
GND (0 V) |
|
R0 |
Prijemnik izlaz (RX pin) |
|
PONOVNO |
Izlaz prijamnika (LOW-Enable) |
|
DE |
Izlaz za vozača (HIGH-Enable) |
|
DI |
Ulaz za vozača (TX pin) |
Ovaj RS-485 modul može se lako povezati s Arduinom. Upotrijebimo hardverske serijske portove Arduino 0 (RX) i 1 (TX) (U UNO, NANO). Programiranje je također jednostavno, samo upotrijebite Serial.print () za pisanje na RS-485 i Serial.Read () za čitanje s RS-485.
Programski dio kasnije je detaljno objašnjen, ali prvo omogućuje provjeru potrebnih komponenata i shemu spojeva.
Komponente potrebne
- Arduino UNO ili Arduino NANO (2)
- Modul pretvarača MAX485 TTL u RS485 - (2)
- 10K potenciometar
- LCD zaslon od 16x2
- LED
- Breadboard
- Spajanje žica
U ovom se vodiču Arduino Uno koristi kao Master, a Arduino Nano kao Slave. Ovdje se koriste dvije ploče Arduino pa su potrebna dva RS-485 modula.
Kružni dijagram

Kružna veza između prvog RS-485 i Arduino UNO (Master):
|
RS-485 |
Arduino UNO |
|
DI |
1 (TX) |
|
DE PONOVNO |
8 |
|
R0 |
0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
Do A podređenog RS-485 |
|
B |
Do B Slave RS-485 |
Veza između drugog RS-485 i Arduino Nano (Slave):
|
RS-485 |
Arduino UNO |
|
DI |
D1 (TX) |
|
DE PONOVNO |
D8 |
|
R0 |
D0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
Do A magistra RS-485 |
|
B |
Do B Master RS-485 |
Kružna veza između LCD-a 16x2 i Arduino Nano:
|
LCD 16x2 |
Arduino Nano |
|
VSS |
GND |
|
VDD |
+ 5V |
|
V0 |
Na središnji pin potenciometra za kontrolu kontrasta LCD-a |
|
RS |
D2 |
|
RW |
GND |
|
E |
D3 |
|
D4 |
D4 |
|
D5 |
D5 |
|
D6 |
D6 |
|
D7 |
D7 |
|
A |
+ 5V |
|
K |
GND |
Potenciometar 10K povezan je na analogni pin A0 Arduino UNO-a za pružanje analognog ulaza, a LED dioda spojen je na pin D10 Arduino Nano-a.
Programiranje Arduino UNO i Arduino Nano za serijsku komunikaciju RS485
Za programiranje obje ploče koristi se Arduino IDE. Ali provjerite jeste li odabrali odgovarajući LUKA u Alati-> Ulaz i Ploča u Alati-> Ploča.
Kompletni kôd s demo videom dan je na kraju ovog vodiča. Ovdje objašnjavamo važan dio koda. U ovom vodiču postoje dva programa, jedan za Arduino UNO (Master) i drugi za Arduino Nano (Slave).
Objašnjenje koda za Master: Arduino UNO
Na glavnoj strani, jednostavno uzmite analogni ulaz na pin A0 mijenjanjem potenciometra, a zatim SerialWrite te vrijednosti na sabirnicu RS-485 kroz hardverske serijske priključke (0,1) Arduino UNO.
Za započinjanje serijske komunikacije na hardverskim serijskim pinovima (0,1) upotrijebite:
Serial.begin (9600);
Da biste očitali analognu vrijednost na pinu A0 Arduina UNO i pohranili ih u varijabilnu potvalnu upotrebu:
int potval = analogRead (pushval);
Prije upisivanja vrijednosti potvala u serijski priključak, pinovi DE & RE RS-485 trebaju biti VISOKI i povezani su na pin 8 Arduino UNO tako da pin 8 bude VISOK:
digitalWrite (enablePin, HIGH);
Dalje da biste te vrijednosti stavili u serijski priključak povezan s RS-485 modulom, upotrijebite sljedeću izjavu
Serial.println (potval);
Objašnjenje koda za slave: Arduino NANO
Na podređenoj strani prima se cjelobrojna vrijednost od glavnog RS-485 koji je dostupan na serijskom priključku hardvera Arduino Nano (pinovi -0,1). Jednostavno pročitajte tu vrijednost i spremite u varijablu. Vrijednosti su u obliku (0 -1023). Tako se pretvara u (0-255) jer se PWM tehnika koristi za kontrolu svjetline LED-a.
Zatim pretvorite vrijednost AnalogWrite u LED pin D10 (to je PWM pin). Dakle, ovisno o vrijednosti PWM-a, svjetlina LED-a se mijenja i također prikazuje te vrijednosti na 16x2 LCD zaslonu.
Da bi Slave Arduino RS-485 primio vrijednosti od Master-a, samo napravite igle DE & RE RS-485 LOW. Dakle, pin D8 (enablePin) Arduina NANO napravljen je NISKO.
digitalWrite (enablePin, LOW);
I za čitanje cjelobrojnih podataka dostupnih na serijskom priključku i pohranjivanje u promjenjivu upotrebu
int pwmval = Serial.parseInt ();
Sljedeće pretvorite vrijednost iz (0-1023 u 0-255) i pohranite ih u varijablu:
int convert = map (pwmval, 0,1023,0,255);
Dalje zapišite analognu vrijednost (PWM) na pin D10 gdje je spojena LED anoda:
analogWrite (ledpin, pretvori);
Za ispis te PWM vrijednosti na LCD zaslonu 16x2 koristite
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (pretvoriti);
Kontrola svjetline LED-a pomoću serijske komunikacije RS485
Kad je PWM vrijednost postavljena na 0 pomoću potenciometra, LED se isključuje.

A kada je PWM vrijednost postavljena na 251 pomoću potenciometra: LED se UKLJUČUJE s punom svjetlinom kao što je prikazano na donjoj slici:

Dakle, ovako se RS485 može koristiti za serijsku komunikaciju u Arduinu.
