- RS-485 Serial Communication Protocol
- RS-485 sa Arduino
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Programming Arduino UNO at Arduino Nano para sa RS485 Serial Communication
- Pagkontrol sa Liwanag ng LED sa Serial Communication RS485
Ang pagpili ng isang protocol ng komunikasyon para sa komunikasyon sa pagitan ng mga microcontroller at mga peripheral na aparato ay isang mahalagang bahagi ng naka-embed na system. Mahalaga ito sapagkat ang pangkalahatang pagganap ng anumang naka-embed na application ay nakasalalay sa mga paraan ng komunikasyon dahil nauugnay ito sa pagbawas ng gastos, mas mabilis na paglipat ng data, saklaw ng malayuan atbp.
Sa nakaraang mga tutorial natutunan namin ang tungkol sa I2C komunikasyon protocol at SPI Komunikasyon mga protokol sa Arduino. Ngayon ay may isa pang serial komunikasyon na proteksyon na tinatawag na RS-485. Ang Protocol na ito ay gumagamit ng isang asynchronous na serial na komunikasyon. Ang pangunahing bentahe ng RS-485 ay ang long distance data transfer sa pagitan ng dalawang mga aparato. At ang mga ito ay karaniwang ginagamit sa maingay na elektrikal na kapaligiran sa industriya.
Sa tutorial na ito, malalaman natin ang tungkol sa RS-485 Serial na komunikasyon sa pagitan ng dalawang Arduino at pagkatapos ay ipakita ito sa pamamagitan ng pagkontrol sa liwanag ng LED na konektado sa isang Alipin Arduino mula sa Master Arduino sa pamamagitan ng pagpapadala ng mga halaga ng ADC sa pamamagitan ng RS-485 Module. Ginagamit ang isang 10k potentiometer upang maiiba ang mga halaga ng ADC sa Master Arduino.
Magsimula tayo sa pamamagitan ng pag-unawa sa pagtatrabaho ng RS-485 Serial na komunikasyon.
RS-485 Serial Communication Protocol
Ang RS-485 ay isang asynchronous na serial na komunikasyon na proteksyon na hindi nangangailangan ng pulso ng orasan. Gumagamit ito ng diskarteng tinatawag na kaugalian signal upang ilipat ang binary data mula sa isang aparato patungo sa isa pa.
Kaya ano ang kaugalian na paraan ng paglipat ng signal na ito ??
Gumagawa ang pagkakaiba-iba na paraan ng signal sa pamamagitan ng paglikha ng isang boltahe ng kaugalian sa pamamagitan ng paggamit ng positibo at negatibong 5V. Nagbibigay ito ng isang komunikasyon na Half-Duplex kapag gumagamit ng dalawang wires at ang Full-Duplex ay nangangailangan ng 4 na apat na mga wire.
Sa pamamagitan ng paggamit ng pamamaraang ito
- Sinusuportahan ng RS-485 ang mas mataas na rate ng paglipat ng data na maximum na 30Mbps.
- Nagbibigay din ito ng maximum na distansya ng paglipat ng data kumpara sa RS-232 na protocol. Naglilipat ito ng data hanggang sa 1200 metro ang maximum.
- Ang pangunahing bentahe ng RS-485 kaysa sa RS-232 ay ang maraming alipin na may solong Master habang ang RS-232 ay sumusuporta lamang sa solong alipin.
- Maaari itong magkaroon ng maximum na 32 mga aparato na konektado sa RS-485 na protokol.
- Ang isa pang bentahe ng RS-485 ay naiiwas ito sa ingay habang gumagamit sila ng kaugalian na pamamaraan ng signal upang ilipat.
- Ang RS-485 ay mas mabilis kumpara sa I2C protocol.
RS-485 sa Arduino
Para sa paggamit ng RS-485 sa Arduino, kailangan ng isang module na tinatawag na 5V MAX485 TTL hanggang RS485 na batay sa Maxim MAX485 IC dahil pinapayagan nito ang serial na komunikasyon sa malayong distansya na 1200 metro at ito ay nagdidirekta. Sa kalahating duplex mode mayroon itong rate ng paglipat ng data na 2. 5Mbps.
Ang 5V MAX485 TTL hanggang RS485 module ay nangangailangan ng boltahe na 5V at gumagamit ng 5V antas ng lohika upang maaari itong ma-interfaced sa mga hardware serial port ng mga microcontroller tulad ng Arduino.
Mayroon itong mga sumusunod na tampok:
- Operating boltahe: 5V
- On-board MAX485 chip
- Isang mababang paggamit ng kuryente para sa komunikasyon ng RS485
- Limit-rate na limitadong transceiver
- 5.08mm pitch 2P terminal
- Maginhawa ang mga kable ng komunikasyon sa RS-485
- Ang lahat ng mga pin ng maliit na tilad ay pinangunahan na maaaring makontrol sa pamamagitan ng microcontroller
- Laki ng board: 44 x 14mm
Pin-Out ng RS-485:
Pangalan ng Pin |
Gamitin |
VCC |
5V |
A |
Hindi Inververt na Input ng Receiver Non-Inverting Driver Output |
B |
Inverting Receiver Input Pagbalik-tanaw ng Output ng Driver |
GND |
GND (0V) |
R0 |
Receiver Out (RX pin) |
RE |
Receiver Output (LOW-Enable) |
DE |
Output ng Driver (MATAAS-Paganahin) |
DI |
Input ng Driver (pin na TX) |
Ang module na RS-485 na ito ay maaaring madaling ma-interfaced sa Arduino. Gamitin natin ang mga serial serial port ng Arduino 0 (RX) at 1 (TX) (Sa UNO, NANO). Ang programa ay simple din gamitin lamang ang Serial.print () upang sumulat sa RS-485 at Serial. Basahin () upang mabasa mula sa RS-485.
Ang bahagi ng Programming ay ipinaliwanag mamaya sa detalye ngunit hinayaan muna suriin ang kinakailangang mga bahagi at circuit diagram.
Kinakailangan ang Mga Bahagi
- Arduino UNO o Arduino NANO (2)
- MAX485 TTL hanggang RS485 Converter Module - (2)
- 10K Potensyomiter
- 16x2 LCD Display
- LED
- Breadboard
- Mga Koneksyon sa Mga Wires
Sa tutorial na ito ang Arduino Uno ay ginagamit bilang Master at ang Arduino Nano ay ginagamit bilang Alipin. Dalawang Arduino Boards ang ginagamit dito kaya't dalawang RS-485 Module ang kinakailangan.
Diagram ng Circuit
Koneksyon sa Circuit sa pagitan ng unang RS-485 at Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Sa A ng Alipin RS-485 |
B |
Sa B ng Alipin RS-485 |
Koneksyon sa pagitan ng pangalawang RS-485 at Arduino Nano (Alipin):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Sa A ng Master RS-485 |
B |
Sa B ng Master RS-485 |
Koneksyon sa Circuit sa pagitan ng isang 16x2 LCD at Arduino Nano:
16x2 LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Upang potentiometer center pin para sa kontrol ng kaibahan ng LCD |
Ang RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Ang isang 10K potentiometer ay konektado sa Analog Pin A0 ng Arduino UNO para sa pagbibigay ng input ng Analog at isang LED ay konektado sa pin D10 ng Arduino Nano.
Programming Arduino UNO at Arduino Nano para sa RS485 Serial Communication
Para sa pagprogram sa parehong mga board Arduino IDE ay ginagamit. Ngunit tiyaking napili mo ang kaukulang PORT mula sa Tools-> Port at Board mula sa Tools-> Board.
Ang kumpletong code na may isang Demo Video ay ibinibigay sa pagtatapos ng tutorial na ito. Narito ipinapaliwanag namin ang mahalagang bahagi ng code. Mayroong dalawang mga programa sa tutorial na ito, isa para sa Arduino UNO (Master) at iba pa para sa Arduino Nano (Alipin).
Paliwanag sa Code para sa Master: Arduino UNO
Sa panig ng Master, kunin lamang ang input ng Analog sa pin A0 sa pamamagitan ng pag-iba ng potensyomiter at pagkatapos SerialWrite ang mga halagang iyon sa RS-485 bus sa pamamagitan ng Hardware Serial Ports (0,1) ng Arduino UNO.
Upang Simulan ang Serial Communication sa Hardware Serial Pins (0,1) na ginagamit:
Serial.begin (9600);
Upang basahin ang halaga ng Analog sa pin A0 ng Arduino UNO at iimbak ang mga ito sa isang variable na paggamit ng potval :
int potval = analogRead (pushval);
Bago sumulat ng potval halaga sa serial port, pin DE & RE ng RS-485 ay dapat na HIGH na ay konektado sa pin 8 ng Arduino UNO kaya upang Gumawa ng pin 8 HIGH:
digitalWrite (paganahin angPin, TAAS);
Susunod na ilagay ang mga halagang iyon sa Serial Port na konektado sa module na RS-485, gamitin ang sumusunod na pahayag
Serial.println (potval);
Paliwanag sa Code para sa Alipin: Arduino NANO
Sa panig ng Alipin ang isang halaga ng integer ay natanggap mula sa Master RS-485 na magagamit sa Hardware Serial port ng Arduino Nano (Pins -0,1). Basahin lamang ang halagang iyon at itabi sa isang variable. Ang mga halaga ay nasa anyo ng (0 -1023). Kaya't ito ay na-convert sa (0-255) tulad ng PWM na diskarte ay ginagamit upang makontrol ang LED brightness.
Pagkatapos AnalogWrite ang na -convert na halaga sa LED pin D10 (Ito ay isang PWM pin). Kaya depende sa halaga ng PWM ang liwanag ng mga pagbabago ng LED at ipakita din ang mga halagang iyon sa 16x2 LCD display.
Upang makatanggap ang RS-485 ng Slave Arduino ng mga halaga mula sa Master, gawin lamang ang mga pin na DE & RE ng RS-485 LOW. Kaya't ang pin D8 (enablePin) ng Arduino NANO ay ginawang Mababa.
digitalWrite (enablePin, LOW);
At upang mabasa ang magagamit na data ng integer sa Serial Port at iimbak ang mga ito sa isang variable na paggamit
int pwmval = Serial.parseInt ();
Susunod na halaga ng pag-convert mula sa (0-1023 hanggang 0-255) at iimbak ang mga ito sa isang variable:
int convert = mapa (pwmval, 0,1023,0,255);
Susunod na isulat ang halaga ng analog (PWM) upang i-pin ang D10 kung saan nakakonekta ang LED anode:
analogWrite (ledpin, convert);
Upang mai-print ang halagang PWM na iyon sa 16x2 LCD display na paggamit
lcd.setCursor (0,0); lcd.print ("PWM MULA SA MASTER"); lcd.setCursor (0,1); lcd.print (convert);
Pagkontrol sa Liwanag ng LED sa Serial Communication RS485
Kapag ang halaga ng PWM ay nakatakda sa 0 gamit ang potentiometer, ang LED ay naka-OFF.
At kapag ang halaga ng PWM ay nakatakda sa 251 gamit ang potentiometer: Ang LED ay naka-ON na may buong liwanag tulad ng ipinakita sa larawan sa ibaba:
Kaya't ito ay kung paano magagamit ang RS485 para sa serial na komunikasyon sa Arduino.