Ang serial communication ay isa sa mga pinakakaraniwang paraan ng pagpapalitan ng data sa pagitan ng mga elektronikong device. Gayunpaman, kapag tumaas ang mga distansya o ang kapaligiran ay may electromagnetic interference, ang mga signal ng komunikasyon ay maaaring madaling magkamali. Doon papasok ang pamantayan ng komunikasyon ng RS485, na nag-aalok ng matatag at epektibong alternatibo. Ang Arduino, kasama ang versatility nito, ay nagpapahintulot sa amin na lubos na mapakinabangan ang protocol na ito sa medyo simpleng paraan.
Sa artikulong ito, makikita natin kung paano maipapatupad ang komunikasyon ng RS485 sa pagitan ng ilang Arduino gamit ang mga module batay sa pinagsamang MAX485, isang chip na nagko-convert ng mga signal ng TTL (mula sa Arduino) sa RS485 at kabaliktaran. Sa buong tutorial na ito, sasakupin namin ang parehong mga pangunahing konsepto at praktikal na mga halimbawa na magbibigay-daan sa iyong ipatupad ang simplex, half-duplex at full-duplex na komunikasyon sa pagitan ng mga Arduino microcontroller, at ipaliwanag kung paano mo mapapalawak ang sistema ng komunikasyon na ito upang mahawakan ang maraming device sa iisang RS485 bus.
Ano ang RS485?
Ang RS485 ay isang pamantayan sa komunikasyon na malawakang ginagamit sa industriya, na kilala sa mga ito katatagan at ang kakayahan nitong makatiis malayong distansiya transmission, kahit na sa maingay na pang-industriyang kapaligiran. Hindi tulad ng iba pang mga uri ng serial communication, gaya ng RS232, pinapayagan ng RS485 ang maraming device na ikonekta sa parehong bus, na ginagawa itong perpekto para sa industriyal na automation at mga control application.
Ang protocol na ito ay lumalaban sa electromagnetic na ingay salamat sa katotohanan na ito ay gumagamit ng a differential signaling system, na nangangahulugan na ang data ay ipinapadala sa dalawang wire, A at B, na magkasalungat na bersyon sa boltahe. Nagbibigay-daan ito sa anumang ingay na nakuha sa mga cable na madaling makansela, na tinitiyak ang integridad ng signal.
Ang isa sa mga pangunahing bentahe ng RS485 ay iyon sumusuporta sa mga distansya hanggang sa 1200 metro at nagpapabilis ng hanggang 35 Mbps sa mga maiikling distansya, na ginagawa itong perpektong protocol para sa mga pang-industriya at kontrol na mga aplikasyon sa mga kapaligiran kung saan kinakailangan ang mahabang paglalagay ng kable.
Mga mode ng komunikasyon ng RS485
Sa komunikasyon ng RS485, maaari naming i-configure ang system sa tatlong magkakaibang paraan: simplex, half-duplex at full-duplex. Ang bawat isa ay may kani-kaniyang partikularidad at ipinapatupad ayon sa mga pangangailangan ng proyekto.
Simplex na Komunikasyon
Sa simplex mode, ang komunikasyon ay napupunta lamang sa isang direksyon, iyon ay, isang device ang gumaganap bilang transmiter at isa pang katulad receptor. Ito ay kapaki-pakinabang sa mga sitwasyon kung saan gusto mo lang magpadala o tumanggap ng data nang hindi nangangailangan ng feedback.
Halimbawa, maaari tayong mag-set up ng isang system kung saan nagbabasa ang isang Arduino ng halaga ng sensor at ipinapadala ito sa isa pang device na tatanggap lang nito. Sa kasong ito, dahil mayroon lamang data na naglalakbay sa isang direksyon, ang ilang mga karagdagang elemento ng kontrol ay maaaring ibigay, na ginagawang mas simple at mas matipid ang system.
Half-Duplex na Komunikasyon
Karamihan sa mga RS485 na application sa Arduino ay ipinatupad sa half-duplex mode dahil kailangan lang nito dalawang wire, at nagbibigay-daan sa iyong parehong magpadala at tumanggap ng data, kahit na hindi sabay-sabay. Iyon ay, kung ang isang device ay nagpapadala ng data, ang iba pang mga device ay dapat nasa reception mode, at vice versa.
Upang lumipat sa pagitan ng mga mode ng pagpapadala at pagtanggap, gamitin karagdagang mga pin (RE/DE) sa MAX485 module, na iyong kontrolin mula sa code upang matukoy kung ang device ay dapat magpadala o tumanggap sa anumang oras.
Lalo na kapaki-pakinabang ang mode na ito kung marami kang device sa iisang bus na kailangang makipag-ugnayan sa isa't isa, ngunit hindi nang sabay-sabay.
Full-Duplex na Komunikasyon
Sa full-duplex mode, maaaring magpadala at tumanggap ng data ang mga device nang sabay. Gayunpaman, upang ipatupad ang full-duplex sa RS485, dalawang pares ng twisted wires, na nagpapataas ng gastos at pagiging kumplikado ng mga kable. Bukod pa rito, kakailanganin mo ng dalawang MAX485 na module para sa bawat device upang pamahalaan ang pagpapadala at pagtanggap ng mga channel nang hiwalay.
Kinakailangan ang mga bahagi para sa komunikasyon ng RS485 sa Arduino
Upang ipatupad ang isang RS485 na sistema ng komunikasyon sa Arduino, kakailanganin mo ang mga sumusunod na bahagi:
- Isa o higit pang mga Arduino: Ang anumang modelo ng Arduino ay gagawin, ngunit sa tutorial na ito ay gagamitin namin Arduino UNO at Arduino MEGA bilang mga halimbawa.
- MAX485 na mga module: Binibigyang-daan ka ng mga module na ito na i-convert ang mga TTL signal mula sa Arduino patungo sa RS485 at vice versa. Ang mga ito ay napakamura at madaling mahanap sa mga tindahan tulad ng AliExpress o eBay.
- Mga Resistor ng Pagwawakas: Ang isang risistor na nasa pagitan ng 120 ohms ay karaniwang inilalagay sa bawat dulo ng bus upang maiwasan ang mga pagmuni-muni sa signal. Sa maikling distansya, posible na gawin nang wala ang mga ito, ngunit sa mas mahabang pag-install ay mahalaga sila upang mapanatili ang integridad ng signal.
- Twisted pair na mga cable: Inirerekomenda na gumamit ng mga twisted pair na mga cable upang mabawasan ang electromagnetic interference, lalo na sa maingay na pang-industriyang kapaligiran.
Pangkalahatang diagram ng koneksyon
Ikonekta ang MAX485 modules sa isang Arduino ay medyo simple. Ang pinakamahalagang pin ay A at B, na tumutugma sa mga linya ng bus ng RS485. Dapat na nakakonekta ang mga pin na ito sa lahat ng device sa bus. Bukod pa rito, ang module ay may RE at DE pin na kumokontrol kung ang module ay nasa receiver o transmitter mode.
Sa pangkalahatan, ang pagkonekta sa mga module sa Arduino ay ginagawa tulad ng sumusunod:
- Ang VCC at GND ng module ay kumonekta sa VCC at GND sa Arduino.
- Ang DI (Data Input) ng module ay kumokonekta sa TX pin ng Arduino kung ang module ay kumilos bilang isang emitter.
- Ang RO (Receiver Output) ng module ay kumokonekta sa RX pin ng Arduino kung ang module ay gagana bilang isang receiver.
- Ang DE at RE ay dapat na kontrolado mula sa isang Arduino digital pin upang lumipat sa pagitan ng mga mode ng pagpapadala at pagtanggap.
Kung kailangan mo lang ang module upang gumana bilang isang nagpadala o tagatanggap, maaari mong direktang ikonekta ang RE at DE sa HIGH o LOW. Gayunpaman, para sa mas kumplikadong mga komunikasyon kung saan kailangang lumipat ang device sa pagitan ng pagpapadala at pagtanggap, pinakamahusay na kontrolin ang mga pin na ito mula sa software.
Mga halimbawa ng code para sa komunikasyong RS485
Nasa ibaba ang ilang mga halimbawa na sumasaklaw sa iba't ibang mga configuration ng komunikasyon sa RS485 sa Arduino.
Simplex na Komunikasyon
Code ng nagbigay
Para sa isang basic simplex system kung saan mayroon lang kaming isang nagpadala at isang receiver, maaaring ganito ang hitsura ng code para sa nagpadala:
void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }
Code ng tatanggap
Babasahin lang ng receiver ang data na dumarating sa serial port:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
Half-Duplex na Komunikasyon
Sa halimbawang ito, nagpapatupad kami ng half-duplex system kung saan nagpapalit-palit ang mga device sa pagpapadala at pagtanggap ng data.
Code ng guro
const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, HIGH); Serial.write('H'); delay(100); digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
Alipin code
const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); delay(100); digitalWrite(reDePin, HIGH); Serial.write(data + 1); } }
Full-Duplex na Komunikasyon
Para ipatupad ang full-duplex na komunikasyon, dalawang MAX485 modules bawat Arduino ang kakailanganin. Ang bawat pares ng mga module ay hahawak ng isang linya ng data: isa para sa pagpapadala at isa para sa pagtanggap.
Ang code ay magiging katulad ng mga nakaraang halimbawa, ngunit sa kasong ito ang parehong mga aparato ay palaging nagpapadala at tumatanggap ng sabay-sabay.
Pagpapalawak sa maraming device sa RS485
Ang RS485 ay may kakayahang kumonekta ng hanggang 32 na device sa isang bus, at sa mga espesyal na kaso, mas marami itong maaabot. Ginagawa nitong isang mahusay na pagpipilian para sa mga proyektong kinasasangkutan ng maraming microcontroller o device. Upang matukoy ang bawat isa sa kanila sa network, karaniwan nang magpatupad ng address o ID para sa bawat device.
Sa kasong ito, magpapadala ang master ng mensahe kasama ang address ng device kung saan nais nitong makipag-ugnayan, at ang device lang na iyon ang mamamahala sa pagproseso ng mensahe at pagbibigay ng tugon.
Idinagdag dito ang posibilidad ng paggamit mas kumplikadong mga protocol tulad ng MODBUS, na nagbibigay-daan sa paglikha ng lubos na mahusay at secure na mga network sa industriya.
Para sa mga proyekto sa bahay o hindi gaanong hinihingi na mga application, maaari kang magtalaga lamang ng isang identifier sa bawat Arduino at hayaan silang tumugon lamang sa mga mensaheng inilaan para sa kanila.